// Разметить
private void Mark(double distance, ObjectId[] idArray)
{
var doc = AcApp.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
try
{
// Используем транзикцию
var tr = doc.TransactionManager.StartTransaction();
using (tr)
{
//var btr = (BlockTableRecord) tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite, false);
var ppo = new PromptPointOptions(string.Empty);
ppo.Keywords.Add("Примитив");
var kws = ppo.Keywords.GetDisplayString(true);
ppo.Message = "\nУкажите базовую точку или: " + kws;
ppo.AllowNone = true;
var ppr = ed.GetPoint(ppo);
if (ppr.Status == PromptStatus.Keyword)
{
if (ppr.StringResult.Equals("Примитив"))
{
MarkByObject(distance, idArray);
tr.Commit();
return;
}
}
if (ppr.Status != PromptStatus.OK)
{
return;
}
var jig = new MpMultiCopyMarkJig();
var rs = jig.StartJig(
ppr.Value,
distance,
idArray
);
if (rs.Status != PromptStatus.OK) return;
var pts = jig.PointCollection(); //Все точки
pts.RemoveAt(0); // удаляем самую первую точку
foreach (Point3d pt in pts)
{
foreach (var objId in idArray)
{
//var en = (Entity) objId.GetObject(OpenMode.ForWrite).Clone();
var coll = new ObjectIdCollection { objId };
var mapping = new IdMapping();
db.DeepCloneObjects(coll, db.CurrentSpaceId, mapping, false);
var pair = mapping[objId];
var en = tr.GetObject(pair.Value, OpenMode.ForWrite) as Entity;
var from = MpCadHelpers.UcsToWcs(ppr.Value);
var to = pt;
var vec = to - from;
var mat = Matrix3d.Displacement(vec);
en?.TransformBy(mat);
//btr.AppendEntity(en);
//tr.AddNewlyCreatedDBObject(en, true);
}
}
tr.Commit();
}
} // try
catch (System.Exception ex)
{
MpExWin.Show(ex);
}
}