собственно говоря это и вопрос.
как сделать, что бы при перемещении/копировании программном объект двигался за мышью, как в автокаде.
здесь пробы пера так сказать, кривые наверняка.
public static void FuncBlockRef(ObjectId oId)
{
if (oId.IsNull) return;
Database bdb = oId.Database;
ed.WriteMessage("\nID Block : {0}", oId);
if (bdb != null)
{
using (Transaction bltr = bdb.TransactionManager.StartTransaction())
{
BlockTableRecord acBtr = (BlockTableRecord)bltr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
BlockReference br = bltr.GetObject(oId, OpenMode.ForRead) as BlockReference;
ed.WriteMessage("***{0}", br.GetType());
BlockTableRecord btr =
bltr.GetObject(br.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
try
{
//BlockTableRecord btr =
// bltr.GetObject(oId, OpenMode.ForRead) as BlockTableRecord;
ed.WriteMessage("\nType object btr : {0}", btr.GetType());
var brefs = btr.GetBlockReferenceIds(true, true);
ed.WriteMessage("\nCount Blocks : {0}", brefs.Count);
if (brefs != null && brefs.Count > 0)
{
foreach (ObjectId id in brefs)
{
if (oId.Equals(id))
{
BlockReference brid
= bltr.GetObject(id, OpenMode.ForWrite) as BlockReference;
ed.WriteMessage("\ncomplite to erase.");
Point3d pt = brid.Position;
brid.UpgradeOpen();
//brid.Erase(true);
BlockReference newblk = brid.Clone() as BlockReference;
acBtr.AppendEntity(newblk);
bltr.AddNewlyCreatedDBObject(newblk, true);
PromptPointOptions ppo = new PromptPointOptions("\nSelect point.");
ppo.UseBasePoint = true;
ppo.BasePoint = pt;
ppo.AllowNone = true;
PromptPointResult ppr = ed.GetPoint(ppo);
//newblk.Position = ppr.Value;
var acVector3d = pt.GetVectorTo(ppr.Value);
newblk.TransformBy(Matrix3d.Displacement(acVector3d));
}
}
}
}
catch
{
ed.WriteMessage("\nНичего не получилось.");
}
bltr.Commit();
}
}
}