5.2.3.3. Создание сплайна (Spline)

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

    В этом примере создаётся сплайн в пространстве Модели используя три точки (0,0,0), (5,5,0) и (10,0,0). Сплайн имеет начальную и конечную касательную в точке (0.5, 0.5, 0.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("AddSpline")> _
   7:  Public Sub AddSpline()
   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:        Dim ptColl As Point3dCollection = New Point3dCollection()
  25:        ptColl.Add(New Point3d(0, 0, 0))
  26:        ptColl.Add(New Point3d(5, 5, 0))
  27:        ptColl.Add(New Point3d(10, 0, 0)) 
  28:   
  29:        '' Получение 3D вектора по точке (0.5,0.5,0)
  30:        Dim vecTan As Vector3d = New Point3d(0.5, 0.5, 0).GetAsVector 
  31:   
  32:        '' Создание сплайна через точки (0, 0, 0), (5, 5, 0), и (10, 0, 0) с          
  33:        '' начальной и конечной касательной к точке (0.5, 0.5, 0.0)
  34:        Dim acSpline As Spline = New Spline(ptColl, vecTan, vecTan, 4, 0.0)
  35:        acSpline.SetDatabaseDefaults() 
  36:   
  37:        '' Добавление нового объекта в запись таблицы блоков и в транзакцию
  38:        acBlkTblRec.AppendEntity(acSpline)
  39:        acTrans.AddNewlyCreatedDBObject(acSpline, True) 
  40:   
  41:        '' Сохранение нового объекта в базе данных
  42:        acTrans.Commit()
  43:    End Using
  44:  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("AddSpline")]
   7:  public static void AddSpline()
   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:        BlockTableRecord acBlkTblRec;
  22:        acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  23:                                        OpenMode.ForWrite) as BlockTableRecord;
  24:        // Определение точек по которым пройдёт сплайн
  25:        Point3dCollection ptColl = new Point3dCollection();
  26:        ptColl.Add(new Point3d(0, 0, 0));
  27:        ptColl.Add(new Point3d(5, 5, 0));
  28:        ptColl.Add(new Point3d(10, 0, 0)); 
  29:   
  30:        // Получение 3D вектора по точке (0.5,0.5,0)
  31:        Vector3d vecTan = new Point3d(0.5, 0.5, 0).GetAsVector(); 
  32:   
  33:        // Создание сплайна через точки (0, 0, 0), (5, 5, 0), и (10, 0, 0) с
  34:        // начальной и конечной касательной к точке (0.5, 0.5, 0.0)
  35:        Spline acSpline = new Spline(ptColl, vecTan, vecTan, 4, 0.0);
  36:        acSpline.SetDatabaseDefaults(); 
  37:   
  38:        // Добавление нового объекта в запись таблицы блоков и в транзакцию
  39:        acBlkTblRec.AppendEntity(acSpline);
  40:        acTrans.AddNewlyCreatedDBObject(acSpline, true); 
  41:   
  42:        // Сохранение нового объекта в базе данных
  43:        acTrans.Commit();
  44:    }
  45:  }

Код VBA/ActiveX

   1:  Sub AddSpline()
   2:      ' В этом примере создаётся объект сплайна в пространстве Модели.
   3:      ' Объявление необходимых переменных
   4:      Dim splineObj As AcadSpline
   5:      Dim startTan(0 To 2) As Double
   6:      Dim endTan(0 To 2) As Double
   7:      Dim fitPoints(0 To 8) As Double 
   8:   
   9:      ' Определение переменных
  10:      startTan(0) = 0.5: startTan(1) = 0.5: startTan(2) = 0
  11:      endTan(0) = 0.5: endTan(1) = 0.5: endTan(2) = 0
  12:      fitPoints(0) = 1: fitPoints(1) = 1: fitPoints(2) = 0
  13:      fitPoints(3) = 5: fitPoints(4) = 5: fitPoints(5) = 0
  14:      fitPoints(6) = 10: fitPoints(7) = 0: fitPoints(8) = 0 
  15:   
  16:      ' Создание сплайна
  17:      Set splineObj = ThisDrawing.ModelSpace.AddSpline _
  18:                          (fitPoints, startTan, endTan)
  19:      ZoomAll
  20:  End Sub



Comments