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

05/06/2014

Создание мультиполигона в AutoCAD средствами .NET API

Мультиполигон (MPolygon) – это пользовательский объект созданный для AutoCAD Map 3D. Но он доступен и в чистом AutoCAD и с ним можно работать средствами ObjectARX. Чтобы работать с ним в .NET необходимо добавить добавить ссылку на AcMPolygonMGD.dllи кроме того требуется, чтобы файл AcMPolygonObjNN.dbx (где NN = 19 для AutoCAD 2013 и 2014 и NN = 20 для AutoCAD 2015) загружен в AutoCAD до вызова любого из методов MPolygon. Оба этих файла содержатся в корневом каталоге AutoCAD.

Код - VB.NET: [Выделить]
  1. Imports Autodesk.AutoCAD.Runtime
  2. Imports Autodesk.AutoCAD.DatabaseServices
  3. Imports Autodesk.AutoCAD.ApplicationServices
  4. Imports Autodesk.AutoCAD.Geometry
  5.  
  6. Public Class MPolygonCommandClass
  7.   Implements IExtensionApplication
  8.  
  9.   Public Sub Initialize() _
  10.     Implements IExtensionApplication.Initialize
  11.     ' Загрузим AcMPolygonObj19.dbx для уверенности, что с MPolygon
  12.     ' можно будет работать. 19 – номер версии для AutoCAD 2013 и 2014
  13.     Autodesk.AutoCAD.Runtime. _
  14.       SystemObjects.DynamicLinker.LoadModule( _
  15.         "AcMPolygonObj19.dbx", False, False)
  16.   End Sub
  17.  
  18.   Public Sub Terminate() _
  19.     Implements IExtensionApplication.Terminate
  20.   End Sub
  21.  
  22.   <CommandMethod("CreateMPolygon")> _
  23.   Public Sub CreateMPolygon()
  24.     Dim db As Database = Application. _
  25.       DocumentManager.MdiActiveDocument.Database
  26.     Using transaction As Transaction = _
  27.       db.TransactionManager.StartTransaction()
  28.       Try
  29.         ' Откроем таблицу блоков и пространство модели
  30.         Dim bt As BlockTable = transaction.GetObject( _
  31.           db.BlockTableId, OpenMode.ForRead)
  32.         Dim btr As BlockTableRecord = transaction.GetObject( _
  33.           bt(BlockTableRecord.ModelSpace), _
  34.           OpenMode.ForWrite)
  35.  
  36.         ' Начнем создавать мультиполигон с
  37.         ' создания его петли
  38.         Dim mPolygonLoop As MPolygonLoop
  39.         mPolygonLoop = New MPolygonLoop()
  40.         mPolygonLoop.Add(New BulgeVertex(New Point2d(2, 2), 0))
  41.         mPolygonLoop.Add(New BulgeVertex(New Point2d(2, 1), 0))
  42.         mPolygonLoop.Add(New BulgeVertex(New Point2d(1, 1), 0))
  43.         mPolygonLoop.Add(New BulgeVertex(New Point2d(1, 2), 0))
  44.         mPolygonLoop.Add(New BulgeVertex(New Point2d(2, 2), 0))
  45.  
  46.         ' Теперь создадим примитив и добавим его в пространство модели
  47.         Dim mPolygon As MPolygon = New MPolygon()
  48.         mPolygon.AppendMPolygonLoop(mPolygonLoop, False, 0)
  49.         btr.AppendEntity(mPolygon)
  50.         transaction.AddNewlyCreatedDBObject(mPolygon, True)
  51.         transaction.Commit()
  52.       Catch ex As Exception
  53.         Debug.WriteLine(ex.ErrorStatus)
  54.         Debug.WriteLine(ex.Message)
  55.       End Try
  56.     End Using
  57.   End Sub
  58. End Class

 

Источник: http://adndevblog.typepad.com/autocad/2012/08/create-a-mpolygon-in-autocad-using-net.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=788

Опубликовано 05.06.2014
Отредактировано 07.06.2014 в 01:22:15