[CommandMethod("Test")]
public void Test()
{
civApp.CivilDocument civil = civApp.CivilApplication.ActiveDocument;
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
var optPoly = new PromptEntityOptions("\nВыбери полилинию");
optPoly.SetRejectMessage("\nДолжна быть Polyline3d");
optPoly.AddAllowedClass(typeof(Polyline3d), true);
var res = ed.GetEntity(optPoly);
if (res.Status != PromptStatus.OK)
return;
ObjectId idPoly = res.ObjectId;
var optFL = new PromptEntityOptions("\nВыбери характерную линию");
optFL.SetRejectMessage("\nДолжна быть FeatureLine");
optFL.AddAllowedClass(typeof(civDb.FeatureLine), true);
res = ed.GetEntity(optFL);
if (res.Status != PromptStatus.OK)
return;
ObjectId idFL = res.ObjectId;
// привести вершини характерной линии в соответствии с полилинией
using (var t = db.TransactionManager.StartTransaction())
{
// изменение вершин характерной линии
var fl = t.GetObject(idFL, OpenMode.ForRead) as civDb.FeatureLine;
// COM
dynamic aecApp = ((dynamic)Application.AcadApplication).GetInterfaceObject("AeccXUiLand.AeccApplication.10.5"); // Civil 2016
dynamic style;
if (fl.StyleId.IsNull)
style = (t.GetObject(civil.Styles.FeatureLineStyles["Standard"], OpenMode.ForRead) as civDb.Styles.FeatureLineStyle).AcadObject;
else
style = (t.GetObject(fl.StyleId, OpenMode.ForRead) as civDb.Styles.FeatureLineStyle).AcadObject;
// создание характерной линии из полилинии
dynamic comFLs = aecApp.ActiveDocument.Sites[0].FeatureLines; // AeccLandFeatureLines
dynamic comFL = comFLs.AddFromPolyline((long)idPoly.OldIdPtr, style); // AeccLandFeatureLine
// подмена id старой характерной линии
ObjectId idNewFL = new ObjectId((IntPtr)comFL.ObjectID);
var newFL = t.GetObject(idNewFL, OpenMode.ForWrite) as civDb.FeatureLine;
newFL.SwapIdWith(idFL, true, true);
// удаление старой хар. линии
fl.UpgradeOpen();
fl.Erase();
t.Commit();
}
}