[CommandMethod("FINDNEARESTCURVE", CommandFlags.Redraw)]
public void FindNearestCurve()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
var ppr = ed.GetPoint("\nPick a point: ");
if (ppr.Status != PromptStatus.OK)
return;
var pt = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem);
var curveClass
= RXObject
.GetClass(typeof(Curve
)); ObjectId closestId = ObjectId.Null;
using (var tr
= new OpenCloseTransaction
()) {
var space = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
double dist = double.MaxValue;
foreach (ObjectId id in space)
{
if (id.ObjectClass.IsDerivedFrom(curveClass))
{
var curve = (Curve)tr.GetObject(id, OpenMode.ForRead);
double d = curve.GetClosestPointTo(pt, false).DistanceTo(pt);
if (d < dist)
{
closestId = id;
dist = d;
}
}
}
}
if (!closestId.IsNull)
{
ed
.SetImpliedSelection(new[] { closestId
}); }
}