Untitled
unknown
csharp
a year ago
4.1 kB
5
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