Untitled
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