using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
[assembly: CommandClass(typeof(DivideSpline.Commands))]
namespace DivideSpline
{
public class Commands
{
[CommandMethod("DivSpline")]
static public void DivSpline()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Database db = doc.Database;
PromptDoubleResult rsDist = ed.GetDistance("\nУкажите шаг: ");
if (rsDist.Status != PromptStatus.OK || rsDist.Value < 1e-6)
return;
PromptEntityOptions prEnt = new PromptEntityOptions("\nВыберите сплайн: ");
prEnt.SetRejectMessage("Это не сплайн!");
prEnt.AddAllowedClass(typeof(Spline), false);
PromptEntityResult rsEnt = ed.GetEntity(prEnt);
if (rsEnt.Status == PromptStatus.OK) {
using (BlockTableRecord btr = db.CurrentSpaceId.Open(OpenMode.ForWrite) as BlockTableRecord)
using (Spline spline = rsEnt.ObjectId.Open(OpenMode.ForRead) as Spline) {
double dist1 = spline.GetDistanceAtParameter(spline.StartParam);
double dist2 = spline.GetDistanceAtParameter(spline.EndParam);
for (double l = dist1; l <= dist2; l += rsDist.Value) {
Point3d p = spline.GetPointAtDist(l);
using (DBPoint pt = new DBPoint(p)) {
btr.AppendEntity(pt);
}
}
}
}
}
}
}