ADN Open CIS
Сообщество программистов Autodesk в СНГ

25/04/2014

Используем ActiveX API GetBoundingBox в .NET

Ниже код, показывающий как использовать ActiveX API GetBoundingBox в AutoCAD.NET. Так как GetBoundingBox возвращает точки, нам понадобится вызывать метод "InvokeMember" с параметром "ParameterModifier".

Код - C#: [Выделить]
  1. [CommandMethod("GetBoundingBox")]
  2. static public void GetBoundingBox()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.  
  8.     PromptEntityOptions options =
  9.           new PromptEntityOptions("\nВыберите примитив ");
  10.  
  11.     PromptEntityResult acSSPrompt = ed.GetEntity(options);
  12.     if (acSSPrompt.Status != PromptStatus.OK)
  13.     return;
  14.     // Получаем менеджер транзакций
  15.     using (Transaction Tx = db.TransactionManager.StartTransaction())
  16.     {
  17.         Entity text = Tx.GetObject(acSSPrompt.ObjectId,
  18.                                          OpenMode.ForRead) as Entity;
  19.  
  20.         object oAcadObjpl1 = text.AcadObject;
  21.  
  22.         object[] argspl1 = new object[2];
  23.         argspl1[0] = new VariantWrapper(0);
  24.         argspl1[1] = new VariantWrapper(0);
  25.         ParameterModifier pmpl1 = new ParameterModifier(2);
  26.         pmpl1[0] = true;
  27.         pmpl1[1] = true;
  28.  
  29.         ParameterModifier[] modifierspl1 =
  30.             new ParameterModifier[] { pmpl1 };
  31.         oAcadObjpl1.GetType().InvokeMember("GetBoundingBox",
  32.                BindingFlags.InvokeMethod, null, oAcadObjpl1, argspl1,
  33.                modifierspl1, null, null);
  34.         Point3d pt1 =
  35.             new Point3d((double[])argspl1[0]);
  36.         Point3d pt2 =
  37.             new Point3d((double[])argspl1[1]);
  38.         ed.WriteMessage("\n");
  39.         ed.WriteMessage(pt1.X + "," + pt1.Y + "," + pt1.Z + "\n");
  40.         ed.WriteMessage(pt2.X + "," + pt2.Y + "," + pt2.Z + "\n");
  41.  
  42.         Tx.Commit();
  43.     }
  44. }

Источник: 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