Untitled

mail@pastecode.io avatar
unknown
plain_text
17 days ago
4.5 kB
4
Indexable
Never
    {
        [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 = ObjectId.Null;

                                // 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();
                }
            }
        }
    }
}
Leave a Comment