7.4.4. Создание твёрдых тел (Solids)

Источник здесь[перевод не проверен]; [Переводчик: Вадим Семёнов]

    Твердотельный объект (объект Solid3d) представляет собой весь объем объекта. Твердотельные тела (Solids) являются наиболее информационно описанными и наименее неопределенными из всех типов 3D-моделирования. Комплекс твердотельных форм также легче конструировать и редактировать, чем каркасные модели и сетки.

    Вы создаете основные твердотельные формы, такие как куб(box), сфера(sphere), и клин(wedge) среди прочих других с помощью членов методов и свойств объекта Solid3d. Вы также можете выдавливать объекты областей(region) вдоль направляющей или вращением 2D объектов вокруг оси.

    Как и сетки, твердые тела отображаются в виде каркасов, пока вы не скрываете (hide), затемняете (shade), или закрашиваете (render) их. Кроме этого, вы можете анализировать твердые тела по их массовым характеристикам (объем, моменты инерции, центр тяжести и т. д.). Для использования свойства MassProperties, вы можете запросить объект Solid3dMassProperties, связанный с объектом Solid3d. Solid3dMassProperties объект содержит следующие свойства которые позволяют вам анализировать твердые тела: MomentOfInertia, PrincipalAxess, PrincipalMoments, ProductOfInertia, RadiiOfGyration и Volume.

    Отображение твердых тел зависит от текущего визуального стиля, и системных переменных связанных с 3D-моделированием. Некоторыми системными переменными, которые влияют на отображение твердых тел являются ISOLINES и FACETRES. ISOLINES контролирует количество линий «шахматной» сетки, используемой для визуализации изогнутой части каркаса, в то время как, FACETRES регулирует гладкость затененных и скрытых линий объектов.

    Для получения дополнительной информации о создании твердых тел, см. раздел «Создание 3D-объектов" в Руководстве пользователя AutoCAD.

Создание Клиновидного (Wedge) Твердого тела(Solid) 

В следующем примере создается клиновидное твердое тело. Направление просмотра активного видового окна обновляется для отображения трехмерной природы клина.

Код 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("CreateWedge")> _
   7:  Public Sub CreateWedge()
   8:    '' Устанавливаем текущий документ и базу данных, начинаем транзакцию
   9:    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  10:    Dim acCurDb As Database = acDoc.Database
  11:   
  12:    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
  13:        '' Открываем таблицу Блока для чтения
  14:        Dim acBlkTbl As BlockTable
  15:        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
  16:                                     OpenMode.ForRead)
  17:   
  18:        '' Открываем запись таблицы Блока пространство Модели (Model space) для записи 
  19:        Dim acBlkTblRec As BlockTableRecord
  20:        acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
  21:                                        OpenMode.ForWrite)
  22:   
  23:        '' Создаем 3D Клиновидное тело
  24:        Dim acSol3D As Solid3d = New Solid3d()
  25:        acSol3D.SetDatabaseDefaults()
  26:        acSol3D.CreateWedge(10, 15, 20)
  27:   
  28:        '' Устанавливаем центр 3D тела в (5,5,0)
  29:        acSol3D.TransformBy(Matrix3d.Displacement(New Point3d(5, 5, 0) - _
  30:                                                  Point3d.Origin))
  31:   
  32:        ''Добавляем новый объект в запись таблицы Блока и передаем
  33:        acBlkTblRec.AppendEntity(acSol3D)
  34:        acTrans.AddNewlyCreatedDBObject(acSol3D, True)
  35:   
  36:        '' Открываем активное видовое окно
  37:        Dim acVportTblRec As ViewportTableRecord
  38:        acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId, _
  39:                                          OpenMode.ForWrite)
  40:   
  41:        ''Вращаем направление вида текущего видового экрана
  42:        acVportTblRec.ViewDirection = New Vector3d(-1, -1, 1)
  43:        acDoc.Editor.UpdateTiledViewportsFromDatabase()
  44:   
  45:        '' Сохраняем новый объект в базу данных 
  46:        acTrans.Commit()
  47:    End Using
  48:  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("CreateWedge")]
   7:  public static void CreateWedge()
   8:  {
   9:    // Устанавливаем текущий документ и базу данных, начинаем транзакцию
  10:    Document acDoc = Application.DocumentManager.MdiActiveDocument;
  11:    Database acCurDb = acDoc.Database;
  12:   
  13:    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  14:    {
  15:        // Открываем таблицу Блока для чтения
  16:        BlockTable acBlkTbl;
  17:        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  18:                                     OpenMode.ForRead) as BlockTable;
  19:   
  20:        //  Открываем запись таблицы Блока пространство Модели (Model space) для записи 
  21:        BlockTableRecord acBlkTblRec;
  22:        acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  23:                                        OpenMode.ForWrite) as BlockTableRecord;
  24:   
  25:        //  Создаем 3D Клиновидное тело
  26:        Solid3d acSol3D = new Solid3d();
  27:        acSol3D.SetDatabaseDefaults();
  28:        acSol3D.CreateWedge(10, 15, 20);
  29:   
  30:        //  Устанавливаем центр 3D тела в (5,5,0)
  31:        acSol3D.TransformBy(Matrix3d.Displacement(new Point3d(5, 5, 0) - 
  32:                                                  Point3d.Origin));
  33:   
  34:        // Добавляем новый объект в запись таблицы Блока и передаем
  35:        acBlkTblRec.AppendEntity(acSol3D);
  36:        acTrans.AddNewlyCreatedDBObject(acSol3D, true);
  37:   
  38:        // Открываем активное видовое окно
  39:        ViewportTableRecord acVportTblRec;
  40:        acVportTblRec = acTrans.GetObject(acDoc.Editor.ActiveViewportId,
  41:                                          OpenMode.ForWrite) as ViewportTableRecord;
  42:   
  43:        // Вращаем направление вида текущего видового экрана
  44:        acVportTblRec.ViewDirection = new Vector3d(-1, -1, 1);
  45:        acDoc.Editor.UpdateTiledViewportsFromDatabase();
  46:   
  47:        // Сохраняем новый объект в базу данных 
  48:        acTrans.Commit();
  49:    }
  50:  }

Код VBA/ActiveX 

   1:  Sub CreateWedge()
   2:      Dim wedgeObj As Acad3DSolid
   3:      Dim center(0 To 2) As Double
   4:      Dim length As Double
   5:      Dim width As Double
   6:      Dim height As Double
   7:   
   8:      ' Определяем клин
   9:      center(0) = 5#: center(1) = 5#: center(2) = 0
  10:      length = 10#: width = 15#: height = 20#
  11:   
  12:      ' Создаем клин в пространстве Модели
  13:      Set wedgeObj = ThisDrawing.ModelSpace. _
  14:                         AddWedge(center, length, width, height)
  15:   
  16:      ' Меняем направление вида видового окна
  17:      Dim NewDirection(0 To 2) As Double
  18:      NewDirection(0) = -1
  19:      NewDirection(1) = -1
  20:      NewDirection(2) = 1
  21:      ThisDrawing.ActiveViewport.direction = NewDirection
  22:      ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
  23:   
  24:      ZoomAll
  25:  End Sub
Comments