Редактирование сплайнов
Вы можете редактировать свойства замкнутых или незамкнутых сплайнов и даже преобразовать их в полилинии. Используйте следующие свойства и методы для редактирования сплайнов:
-
Degree : возвращает порядок (степень кривизны) сплайна;
-
EndFitTangent (StartFitTangent) : возвращает вектор касательной сплайна в последней (начальной) вершине;
-
FitTolerance : возвращает или задает точность аппроксимации кривой;
-
NumControlPoints : возвращает количество управляющих вершин у данного сплайна;
-
NumFitPoints : возвращает количество определяющих вершин у данного сплайна;
Методы для редактирования геометрии сплайна:
-
InsertFitPointAt : задает определяющую вершину по данному индексу;
-
ElevateDegree : задает новый порядок (степень кривизны) сплайна;
-
GetControlPointAt : возвращает координаты управляющей вершины для заданного индекса (число управляющих точек хранится в значении свойства NumControlPoints);
-
GetFitPointAt : возвращает координаты определяющей вершины для заданного индекса (число определяющих точек хранится в значении свойства NumFitPoints). Чтобы получить все определяющие вершины вызовите свойство FitData, а у него :: метод GetFitPoints;
-
RemoveFitPointAt : удаляет определяющую вершину в заданной точке;
-
ReverseCurve : обращает направление сплайна;
-
SetControlPointAt : задает координаты управляющей вершины в заданной точке;
-
SetFitPointAt : задает координаты определяющей вершины в заданной точке;
-
SetWeightAt : задает вес определяющей точки сплайна (как каждая точка влияет на его форму: =1 не влияет, > 1 сплайн "притягивается" к точке, < 1 сплайн "отталкивается" от точки);
Свойства "только для чтения":
-
Area : площадь области, образуемой, если бы сплайн был бы замкнут;
-
Closed : возвращает флаг, замкнут ли сплайн в контур;
-
IsPeriodic : возвращает признак, является ли данный сплайн периодическим (замкнутая сплайн:кривая, в которой кривая и ее производные являются непрерывными в начальной/конечной точках);
-
IsPlanar : возвращает признак, является ли данный сплайн плоским;
-
IsRational : возвращает признак, является ли данный сплайн рациональным (используются такие веса в определяющих точках сплайна, что позволяет ему представлять точные конические сечения (окружности, эллипсы, параболы, гиперболы) и другие сложные кривые, которые не могут быть представлены обычными нерациональными сплайнами);
Редактирование управляющей вершины сплайна
В примере далее создается новый сплайн и затем изменяются координаты его первой определяющей точки
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();
}
}