スプラインを編集する(.NET)

開いたスプラインまたは閉じたスプラインのプロパティを編集でき、ポリラインに変換することさえできます。スプラインを開いたり閉じたり、制御点を変更したり、スプラインの方向を逆転したりするには、次のプロパティを使用します。

Degree

スプラインの多項表現を返します。

EndFitTangent

スプラインの端点の接線を方向ベクトルで返します。

FitTolerance

スプラインを新しい許容差で既存の点に再フィットします。

NumControlPoints

スプラインの制御点の数を返します。

NumFitPoints

スプラインのフィット点の数を返します。

StartFitTangent

スプラインの開始接線を返します。

また次のメソッドを使用して、スプラインを編集できます。

InsertFitPointAt

指定したインデックスで、単一フィット点をスプラインに追加します。

ElevateDegree

スプラインの次数を指定した次数に増やします。

GetControlPointAt

指定したインデックスで、スプラインの制御点を取得します(1 つの制御点だけを取得します)。NumControlPoints プロパティには、スプラインの制御点の数が含まれます。

GetFitPointAt

指定したインデックスで、スプラインのフィット点を取得します(1 つのフィット点だけを取得します。スプラインのすべてのフィット点をクエリーするには、FitData プロパティを使用した後、GetFitPoints メンバー関数で返される FitData オブジェクトをクエリーします)。NumFitPoints プロパティには、スプラインのフィット点の数が含まれます。

RemoveFitPointAt

指定されたインデックスで、スプラインのフィット点を削除します。

ReverseCurve

スプラインの方向を反転させます。

SetControlPointAt

指定したインデックスでスプラインの制御点を設定します。

SetFitPointAt

スプラインのフィット点を、指定したインデックスに設定します(1 つのフィット点だけを設定します。スプラインのすべてのフィット点を変更するには、FitPoints プロパティを使用します)。

SetWeightAt

制御点の重みを、指定したインデックスに設定します。

次の読み込み専用プロパティを使用すると、スプラインについての情報を取得することができます。

Area

スプラインの閉じた領域の面積を取得します。

Closed

スプラインが閉じているか開いているかを示します。

Degree

スプラインの多項表現の次数を取得します。

IsPeriodic

指定したスプラインが周期的かどうかを指定します。

IsPlanar

指定したスプラインが平面上にあるかどうかを指定します。

IsRational

指定したスプラインが有理かどうかを指定します。

NumControlPoints

スプラインの制御点の数を取得します。

NumfFitPoints

スプラインのフィット点の数を取得します。

スプラインの制御点を変更する

次の例は、スプラインを作成し、次に最初の制御点を変更します。

VB.NET

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
 
<CommandMethod("EditSpline")> _
Public Sub EditSpline()
    '' Get the current document and database
    Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
    Dim acCurDb As Database = acDoc.Database

    '' Start a transaction
    Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()

        '' Open the Block table for read
        Dim acBlkTbl As BlockTable
        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                     OpenMode.ForRead)

        '' Open the Block table record Model space for write
        Dim acBlkTblRec As BlockTableRecord
        acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                        OpenMode.ForWrite)

        '' Create a Point3d Collection
        Dim acPt3dColl As Point3dCollection = New Point3dCollection()
        acPt3dColl.Add(New Point3d(1, 1, 0))
        acPt3dColl.Add(New Point3d(5, 5, 0))
        acPt3dColl.Add(New Point3d(10, 0, 0))

        '' Set the start and end tangency
        Dim acStartTan As Vector3d = New Vector3d(0.5, 0.5, 0)
        Dim acEndTan As Vector3d = New Vector3d(0.5, 0.5, 0)

        '' Create a spline
        Using acSpline As Spline = New Spline(acPt3dColl, _
                                              acStartTan, _
                                              acEndTan, 4, 0)

            '' Set a control point
            acSpline.SetControlPointAt(0, New Point3d(0, 3, 0))

            '' Add the new object to the block table record and the transaction
            acBlkTblRec.AppendEntity(acSpline)
            acTrans.AddNewlyCreatedDBObject(acSpline, True)
        End Using

        '' Save the new objects to the database
        acTrans.Commit()
    End Using
End Sub

C#

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
 
[CommandMethod("EditSpline")]
public static void EditSpline()
{
    // Get the current document and database
    Document acDoc = Application.DocumentManager.MdiActiveDocument;
    Database acCurDb = acDoc.Database;

    // Start a transaction
    using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
    {
        // Open the Block table for read
        BlockTable acBlkTbl;
        acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
                                        OpenMode.ForRead) as BlockTable;

        // Open the Block table record Model space for write
        BlockTableRecord acBlkTblRec;
        acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                        OpenMode.ForWrite) as BlockTableRecord;
                
        // Create a Point3d Collection
        Point3dCollection acPt3dColl = new Point3dCollection();
        acPt3dColl.Add(new Point3d(1, 1, 0));
        acPt3dColl.Add(new Point3d(5, 5, 0));
        acPt3dColl.Add(new Point3d(10, 0, 0));

        // Set the start and end tangency
        Vector3d acStartTan = new Vector3d(0.5, 0.5, 0);
        Vector3d acEndTan = new Vector3d(0.5, 0.5, 0);

        // Create a spline
        using (Spline acSpline = new Spline(acPt3dColl,
                                        acStartTan,
                                        acEndTan, 4, 0))
        {

            // Set a control point
            acSpline.SetControlPointAt(0, new Point3d(0, 3, 0));

            // Add the new object to the block table record and the transaction
            acBlkTblRec.AppendEntity(acSpline);
            acTrans.AddNewlyCreatedDBObject(acSpline, true);
        }

        // Save the new objects to the database
        acTrans.Commit();
    }
}

VBA/ActiveX コード リファレンス

Sub EditSpline()
    ' Create the spline
    Dim splineObj As AcadSpline
    Dim startTan(0 To 2) As Double
    Dim endTan(0 To 2) As Double
    Dim fitPoints(0 To 8) As Double
 
    startTan(0) = 0.5: startTan(1) = 0.5: startTan(2) = 0
    endTan(0) = 0.5: endTan(1) = 0.5: endTan(2) = 0
    fitPoints(0) = 1: fitPoints(1) = 1: fitPoints(2) = 0
    fitPoints(3) = 5: fitPoints(4) = 5: fitPoints(5) = 0
    fitPoints(6) = 10: fitPoints(7) = 0: fitPoints(8) = 0
    Set splineObj = ThisDrawing.ModelSpace. _
                                  AddSpline(fitPoints, startTan, endTan)
    splineObj.Update
 
    ' Change the coordinate of the first fit point
    Dim controlPoint(0 To 2) As Double
    controlPoint(0) = 0
    controlPoint(1) = 3
    controlPoint(2) = 0
    splineObj.SetControlPoint 0, controlPoint
    splineObj.Update
End Sub