25/04/2014
					Используем ActiveX API GetBoundingBox в .NET
Ниже код, показывающий как использовать ActiveX API GetBoundingBox в AutoCAD.NET. Так как GetBoundingBox возвращает точки, нам понадобится вызывать метод "InvokeMember" с параметром "ParameterModifier".
Код - C#: [Выделить]
- [CommandMethod("GetBoundingBox")]
 - static public void GetBoundingBox()
 - {
 - Document doc = Application.DocumentManager.MdiActiveDocument;
 - Database db = doc.Database;
 - Editor ed = doc.Editor;
 - PromptEntityOptions options =
 - new PromptEntityOptions("\nВыберите примитив ");
 - PromptEntityResult acSSPrompt = ed.GetEntity(options);
 - if (acSSPrompt.Status != PromptStatus.OK)
 - return;
 - // Получаем менеджер транзакций
 - using (Transaction Tx = db.TransactionManager.StartTransaction())
 - {
 - Entity text = Tx.GetObject(acSSPrompt.ObjectId,
 - OpenMode.ForRead) as Entity;
 - object oAcadObjpl1 = text.AcadObject;
 - object[] argspl1 = new object[2];
 - argspl1[0] = new VariantWrapper(0);
 - argspl1[1] = new VariantWrapper(0);
 - ParameterModifier pmpl1 = new ParameterModifier(2);
 - pmpl1[0] = true;
 - pmpl1[1] = true;
 - ParameterModifier[] modifierspl1 =
 - new ParameterModifier[] { pmpl1 };
 - oAcadObjpl1.GetType().InvokeMember("GetBoundingBox",
 - BindingFlags.InvokeMethod, null, oAcadObjpl1, argspl1,
 - modifierspl1, null, null);
 - Point3d pt1 =
 - new Point3d((double[])argspl1[0]);
 - Point3d pt2 =
 - new Point3d((double[])argspl1[1]);
 - ed.WriteMessage("\n");
 - ed.WriteMessage(pt1.X + "," + pt1.Y + "," + pt1.Z + "\n");
 - ed.WriteMessage(pt2.X + "," + pt2.Y + "," + pt2.Z + "\n");
 - Tx.Commit();
 - }
 - }
 
Источник: http://adndevblog.typepad.com/autocad/2012/07/using-activex-api-getboundingbox-in-net.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=700
Опубликовано 25.04.2014