Untitled

 avatar
unknown
csharp
9 months ago
4.1 kB
2
Indexable
  [CommandMethod("AL_M")]

  public void AL_M()
  {
      Document DocCad = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
      Database DocData = DocCad.Database;
      Editor DocEditor = DocCad.Editor;

      // Solicita ao usuário para selecionar múltiplas polylines
      PromptSelectionOptions selOpts = new PromptSelectionOptions();
      selOpts.MessageForAdding = "\nSelecione as POLYLINES para criar alinhamentos";
      TypedValue[] filterList = { new TypedValue((int)DxfCode.Start, "LWPOLYLINE") };
      SelectionFilter filter = new SelectionFilter(filterList);
      PromptSelectionResult selRes = DocEditor.GetSelection(selOpts, filter);

      if (selRes.Status != PromptStatus.OK)
      {
          return;
      }

      // Inicia uma transação para criar os alinhamentos
      using (DocumentLock Dock = DocCad.LockDocument())
      {
          using (Transaction trans = DocData.TransactionManager.StartTransaction())
          {
              LayerTable layerTable = (LayerTable)trans.GetObject(DocData.LayerTableId, OpenMode.ForRead);
              CivilDocument civilDoc = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument;
              foreach (SelectedObject selObj in selRes.Value)
              {
                  if (selObj != null)
                  {
                      Polyline polyline = trans.GetObject(selObj.ObjectId, OpenMode.ForRead) as Polyline;
                      if (polyline != null)
                      {
                          // Recebe o nome do alinhamento para cada polyline
                          PromptStringOptions optsNomeAlinhamento = new PromptStringOptions($"\nEspecifique o NOME do alinhamento para a polyline {polyline.Handle}");
                          optsNomeAlinhamento.DefaultValue = "Rua -";
                          optsNomeAlinhamento.AllowSpaces = true;
                          PromptResult resultadoNome = DocEditor.GetString(optsNomeAlinhamento);
                          if (resultadoNome.Status != PromptStatus.OK)
                          {
                              continue;
                          }
                          // Cria as opções de criação das polylines
                          Autodesk.Civil.DatabaseServices.PolylineOptions opts = new Autodesk.Civil.DatabaseServices.PolylineOptions();
                          opts.AddCurvesBetweenTangents = true;
                          opts.EraseExistingEntities = true;
                          opts.PlineId = polyline.ObjectId;
                          // Recebe o nome digitado
                          string nomeAlinhamento = resultadoNome.StringResult;
                          // Define o ID do site, pode deixar nulo, o alinhamento é criado sem site
                          ObjectId idSite = ObjectId.Null;
                          // Recebe o ID do layer 0 do AutoCAD, o alinhamento vai ser criado nesse layer
                          ObjectId idLayer = layerTable["0"];
                          // Recebe o primeiro estilo de alinhamento do template
                          ObjectId idEstilo = civilDoc.Styles.AlignmentStyles[0];
                          // Recebe o primeiro estilo de labelset do template
                          ObjectId idLabelSet = civilDoc.Styles.LabelSetStyles.AlignmentLabelSetStyles[0];
                          // Cria o alinhamento e recebe o ID
                          ObjectId idAlinhamento = Autodesk.Civil.DatabaseServices.Alignment.Create(civilDoc, opts, nomeAlinhamento, idSite, idLayer, idEstilo, idLabelSet);
                          // Pega o alinhamento criado
                          Autodesk.Civil.DatabaseServices.Alignment alinhamentoCriado = (Autodesk.Civil.DatabaseServices.Alignment)trans.GetObject(idAlinhamento, OpenMode.ForRead);
                      }
                  }
              }

              // Comita a transação após criar todos os alinhamentos
              trans.Commit();
          }
      }
  }
    
Editor is loading...
Leave a Comment