[CommandMethod("Test", CommandFlags.Modal)]
public void Test()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null) return;
Database db = doc.Database;
Editor ed = doc.Editor;
// Запрос выбора полилинии, дополнительно возвращается указанная точка.
Point3d ptPicked;
ObjectId idPolyline = SelectPolyline(ed, out ptPicked);
if (idPolyline.IsNull) return;
// Текст для временной графики
DBText text = new DBText();
text.SetDatabaseDefaults(db);
text.Position = ptPicked;
text.TextString = "Test";
// Высота относительно текущего вида
text.Height = ed.GetCurrentView().Height * 0.025;
text.Color = Color.FromColor(System.Drawing.Color.Red);
text.Justify = AttachmentPoint.MiddleCenter;
text.AlignmentPoint = ptPicked;
text.AdjustAlignment(db);
// Добавление временной графики.
// То, что я не сохраняю нарисованный объект, пока не важно. Интересует только цвет. Он не меняется.
Autodesk.AutoCAD.GraphicsInterface.TransientManager tm = Autodesk.AutoCAD.GraphicsInterface.TransientManager.CurrentTransientManager;
tm.AddTransient(text, Autodesk.AutoCAD.GraphicsInterface.TransientDrawingMode.Main, 0, new IntegerCollection());
}
private ObjectId SelectPolyline(Editor ed, out Point3d ptPicked)
{
var prOpt = new PromptEntityOptions("\nВыберите полилинию");
prOpt.SetRejectMessage("\nМожно выбрать только полилинию");
prOpt.AddAllowedClass(typeof(Autodesk.AutoCAD.DatabaseServices.Polyline), true);
prOpt.AllowNone = false;
prOpt.AllowObjectOnLockedLayer = true;
var prRes = ed.GetEntity(prOpt);
if (prRes.Status == PromptStatus.OK)
{
ptPicked = prRes.PickedPoint;
return prRes.ObjectId;
}
ptPicked = Point3d.Origin;
return ObjectId.Null;
}