您的位置:首页 > 其它

03-04 创建和编辑AutoCAD实体(四) 编辑二维命名对象 (8)

2011-08-15 17:23 453 查看

10、Edit Splines编辑样条曲线

You can edit the properties of an open or closed spline, and even convert it to a polyline. Use the following properties to open or close a spline, change its control points, or reverse the direction of a spline:
我们可以编辑开放或闭合样条曲线的属性,甚至可以将其转换为多段线。下列属性用于开放或闭合样条曲线、修改控制点、转变样条曲线方向等:
Degree
Returns the polynomial representation of the spline. 返回样条曲线的多项表达式的阶数;
EndFitTangent
Returns the end tangent of the spline as a directional vector. 返回样条曲线结束端点的切向作为方向向量;
FitTolerance
Refits the spline to the existing points with new tolerance values. 使用新的拟合误差值将现有点重新拟合成样条曲线;
NumControlPoints
Returns the number of control points for the spline. 返回样条曲线的控制点的个数;
NumFitPoints
Returns the number of fit points for the spline. 返回样条曲线的拟合点的个数;
StartFitTangent
Returns the start tangent for the spline. 返回样条曲线的起始端点切向;

In addition, you can use the following methods to edit splines:
另外,还可以使用下列方法编辑样条曲线:
InsertFitPointAt
Adds a single fit point to the spline at a given index. 在给定索引位置添加一个拟合点;
ElevateDegree
Increases the degree of the spline to the given degree. 增加样条曲线的阶数;
GetControlPointAt
Gets the control point of the spline at a given index. (Gets one control point only.) The NumControlPoints property contains the number of control points of the spline.
获取样条曲线给定索引位置的控制点(只一个控制点)。NumControlPoints属性包含有样条曲线控制点的个数。
GetFitPointAt
Gets the fit point of the spline at a given index. (Gets one fit point only. To query all the fit points of the spline, use the FitData property and then query the FitData object returned with its GetFitPoints member function.) The NumFitPoints
property contains the number of fit points of the spline.
获取样条曲线给定索引位置的拟合点(只一个拟合点。要查询样条曲线的所有拟合点,应使用Spline对象的FitData属性,并查询FitData结构的成员函数GetFitPoints()返回的结果,即所有拟合点的集合。)。NumFitPoints属性包含有样条曲线拟合点的个数。
RemoveFitPointAt
Deletes the fit point of a spline at a given index. 删除样条曲线给定索引位置的拟合点;
ReverseCurve
Reverses the direction of a spline. 掉转样条曲线的方向;
SetControlPointAt
Sets the control point of the spline at a given index. 设置样条曲线给定索引位置的控制点
SetFitPointAt
Sets the fit point of the spline at a given index. (Sets one fit point only. To change all the fit points of the spline, use the FitPoints property.) 设置样条曲线给定索引位置的拟合点(只设置一个拟合点,若改变所有拟合点,使用FitPoints属性。);
SetWeightAt
Sets the weight of the control point at a given index. 设置样条曲线给定索引位置的权重;

Use the following read-only properties to query splines:
下列只读属性用于查询要条曲线:
Area
Gets the enclosed area of a spline. 获取样条曲线闭合区域的面积;
Closed
Indicates whether the spline is open or closed. 表示样条曲线是开放的还是闭合的;
Degree
Gets the degree of the spline's polynomial representation. 获取样条曲线多项表达式的阶数;
IsPeriodic
Specifies if the given spline is periodic. 表示样条曲线是否为周期性的;
IsPlanar
Specifies if the given spline is planar. 表示样条曲线是否为平面的(二维的);
IsRational
Specifies if the given spline is rational. 表示样条曲线是否为有理的;
NumControlPoints
Gets the number of control points of the spline. 获取样条曲线控制点的个数;
NumfFitPoints
Gets the number of fit points of the spline. 获取样条曲线拟合点的个数;
For more information about editing splines, see “Modify Splines” in theAutoCAD User's Guide.

更多关于编辑样条曲线的内容,见AutoCAD用户指南里“修改样条曲线”一节。

Change a control point on a spline 修改样条曲线的控制点

This example creates a spline and then changes the first control point for the spline.
本例创建一条样条曲线,然后修改它的第一个控制点。
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
Dim 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)

'' 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
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 Code Reference
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐