5.2.5. Создание заполненных областей (Solid-Filled Areas)

Источник здесь.[перевод не проверен]; [переводчик: bandero]

    Вы можете создать треугольную и четырехугольную область заполненную цветом. При создании заполняемых областей, выключите системную переменную FILLMODE для увеличения производительности, а затем включите, после создания областей.

    Когда вы создаёте четырехугольную заполняемую область, последовательность третьей и четвёртой точек определяет её фигуру. Сравним следующие иллюстрации:

    Первые две точки определяют одну границу полигона. Третья точка определена по диагонали от второй точки. Если четвёртая точка равна третьей, то треугольник с заливкой создан. Дополнительную информацию о заполняемых областях, смотрите в разделе «Построение заполненных фигур» Руководства Пользователя AutoCADCreate Solid-Filled Areas» in AutoCAD User's Guide).

Создание объекта заполненной-фигуры (Solid-fill)

    В следующем примере создаётся четырёхугольная фигура (бабочка) в пространстве Модели с координатами (0,0,0), (5,0,0), (5,8,0) и (0,8,0). А так же, создаётся четырёхугольная область в прямоугольной фигуре с координатами (10,0,0), (15,0,0), (10,8,0) и (15,8,0).

Код VB.NET

   1:  Imports Autodesk.AutoCAD.Runtime
   2:  Imports Autodesk.AutoCAD.ApplicationServices
   3:  Imports Autodesk.AutoCAD.DatabaseServices
   4:  Imports Autodesk.AutoCAD.Geometry 
   5:   
   6:  <CommandMethod("Add2DSolid")> _
   7:  Public Sub Add2DSolid()
   8:    '' Получение текущего документа и базы данных
   9:    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  10:    Dim acCurDb As Database = acDoc.Database 
  11:   
  12:    '' Старт транзакции
  13:    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() 
  14:   
  15:        '' Открытие таблицы Блоков для чтения
  16:        Dim acBlkTbl As BlockTable
  17:        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) 
  18:   
  19:        '' Открытие записи таблицы Блоков для записи
  20:        Dim acBlkTblRec As BlockTableRecord
  21:        acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
  22:                                        OpenMode.ForWrite) 
  23:   
  24:        '' Создание четырёхугольной (бабочки) области в пространстве Модели
  25:        Dim ac2DSolidBow As Solid = New Solid(New Point3d(0, 0, 0), _
  26:                                              New Point3d(5, 0, 0), _
  27:                                              New Point3d(5, 8, 0), _
  28:                                              New Point3d(0, 8, 0))
  29:        ac2DSolidBow.SetDatabaseDefaults() 
  30:   
  31:        '' Добавление нового объекта в запись таблицы блоков и в транзакцию
  32:        acBlkTblRec.AppendEntity(ac2DSolidBow)
  33:        acTrans.AddNewlyCreatedDBObject(ac2DSolidBow, True) 
  34:   
  35:        '' Создание четырёхугольной (квадратной) области в пространстве Модели
  36:        Dim ac2DSolidSqr As Solid = New Solid(New Point3d(10, 0, 0), _
  37:                                              New Point3d(15, 0, 0), _
  38:                                              New Point3d(10, 8, 0), _
  39:                                              New Point3d(15, 8, 0))
  40:        ac2DSolidSqr.SetDatabaseDefaults() 
  41:   
  42:        '' Добавление нового объекта в запись таблицы блоков и в транзакцию
  43:        acBlkTblRec.AppendEntity(ac2DSolidSqr)
  44:        acTrans.AddNewlyCreatedDBObject(ac2DSolidSqr, True) 
  45:   
  46:        '' Сохранение нового объекта в базе данных
  47:        acTrans.Commit()
  48:    End Using
  49:  End Sub

Код C#

   1:  using Autodesk.AutoCAD.Runtime;
   2:  using Autodesk.AutoCAD.ApplicationServices;
   3:  using Autodesk.AutoCAD.DatabaseServices;
   4:  using Autodesk.AutoCAD.Geometry; 
   5:   
   6:  [CommandMethod("Add2DSolid")]
   7:  public static void Add2DSolid()
   8:  {
   9:    // Получение текущего документа и базы данных
  10:    Document acDoc = Application.DocumentManager.MdiActiveDocument;
  11:    Database acCurDb = acDoc.Database; 
  12:   
  13:    // Старт транзакции
  14:    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  15:    {
  16:        // Открытие таблицы Блоков для чтения
  17:        BlockTable acBlkTbl;
  18:        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  19:                                     OpenMode.ForRead) as BlockTable;
  20:   
  21:        // Открытие записи таблицы Блоков для записи
  22:        BlockTableRecord acBlkTblRec;
  23:        acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  24:                                        OpenMode.ForWrite) as BlockTableRecord; 
  25:   
  26:        // Создание четырёхугольной (бабочки) области в пространстве Модели
  27:        Solid ac2DSolidBow = new Solid(new Point3d(0, 0, 0),
  28:                                       new Point3d(5, 0, 0),
  29:                                       new Point3d(5, 8, 0),
  30:                                       new Point3d(0, 8, 0));
  31:        ac2DSolidBow.SetDatabaseDefaults(); 
  32:   
  33:        // Добавление нового объекта в запись таблицы блоков и в транзакцию
  34:        acBlkTblRec.AppendEntity(ac2DSolidBow);
  35:        acTrans.AddNewlyCreatedDBObject(ac2DSolidBow, true); 
  36:   
  37:        // Создание четырёхугольной (квадратной) области в пространстве Модели
  38:        Solid ac2DSolidSqr = new Solid(new Point3d(10, 0, 0),
  39:                                       new Point3d(15, 0, 0),
  40:                                       new Point3d(10, 8, 0),
  41:                                       new Point3d(15, 8, 0));
  42:        ac2DSolidSqr.SetDatabaseDefaults(); 
  43:   
  44:        // Добавление нового объекта в запись таблицы блоков и в транзакцию
  45:        acBlkTblRec.AppendEntity(ac2DSolidSqr);
  46:        acTrans.AddNewlyCreatedDBObject(ac2DSolidSqr, true); 
  47:   
  48:        // Сохранение нового объекта в базе данных
  49:        acTrans.Commit();
  50:    }
  51:  }

Код VBA/ActiveX

   1:  Sub Add2DSolid()
   2:      Dim solidObj As AcadSolid
   3:      Dim point1(0 To 2) As Double
   4:      Dim point2(0 To 2) As Double
   5:      Dim point3(0 To 2) As Double
   6:      Dim point4(0 To 2) As Double 
   7:   
   8:      ' Определение области
   9:      point1(0) = 0#: point1(1) = 0#: point1(2) = 0#
  10:      point2(0) = 5#: point2(1) = 0#: point2(2) = 0#
  11:      point3(0) = 5#: point3(1) = 8#: point3(2) = 0#
  12:      point4(0) = 0#: point4(1) = 8#: point4(2) = 0#
  13:   
  14:      ' Создание области в пространстве Модели
  15:      Set solidObj = ThisDrawing.ModelSpace.AddSolid _
  16:                                      (point1, point2, point3, point4)
  17:      ' Определение области
  18:      point1(0) = 10#: point1(1) = 0#: point1(2) = 0#
  19:      point2(0) = 15#: point2(1) = 0#: point2(2) = 0#
  20:      point3(0) = 10#: point3(1) = 8#: point3(2) = 0#
  21:      point4(0) = 15#: point4(1) = 8#: point4(2) = 0#
  22:   
  23:      ' Создание области в пространстве Модели
  24:      Set solidObj = ThisDrawing.ModelSpace.AddSolid _
  25:                                      (point1, point2, point3, point4)
  26:      ZoomAll
  27:  End Sub



Comments