Did some digging and managed to come up with a workable solution.
namespace MinDist
{
public class Class1
{
[CommandMethod("MinDist")]
public void GetMinimumDistance()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
var options = new PromptEntityOptions("\nSelect first object: ");
options.SetRejectMessage("Must be a curve.");
options.AddAllowedClass(typeof(Curve), false);
var result = ed.GetEntity(options);
if (result.Status != PromptStatus.OK)
return;
var id1 = result.ObjectId;
options.Message = "\nSelect second object: ";
result = ed.GetEntity(options);
if (result.Status != PromptStatus.OK)
return;
var id2 = result.ObjectId;
using (var tr = db.TransactionManager.StartTransaction())
{
var curve1 = (Curve)tr.GetObject(id1, OpenMode.ForRead);
var curve2 = (Curve)tr.GetObject(id2, OpenMode.ForRead);
var distance = curve1.GetGeCurve().GetDistanceTo(curve2.GetGeCurve());
ed.WriteMessage("\nDistance = {0}", distance);
tr.Commit();
}
using (var tr = db.TransactionManager.StartTransaction())
{
var curve1 = (Curve)tr.GetObject(id1, OpenMode.ForRead);
var curve2 = (Curve)tr.GetObject(id2, OpenMode.ForRead);
var shortestpoints = curve1.GetGeCurve().GetClosestPointTo(curve2.GetGeCurve());
BlockTable bt;
bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord btr;
btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
Polyline pl = new Polyline();
pl.AddVertexAt(0, new Point2d(shortestpoints[0].Point.X, shortestpoints[0].Point.Y), 0, 0, 0);
pl.AddVertexAt(0, new Point2d(shortestpoints[1].Point.X, shortestpoints[1].Point.Y), 0, 0, 0);
btr.AppendEntity(pl);
tr.AddNewlyCreatedDBObject(pl, true);
tr.Commit();
}
}
}
}