уважаемые знатоки. назрел очередной вопрос. Как программно начертить полилинию как это делает автокад т.е.
начальная точка(мышью), резинка, вершина, отрисовка сегмента, резинка, указание мышью следующей вершины и т.д....
отключение esc, space, enter.
вот придумал малость, но явно костыль. Отключение только клавишей esc. в ПСК отключение глючит, но в остальном работает исправно, но осюсение нехорошее от кода все таки есть.
public static ObjectId LCPolyline()
{
//Point2dCollection pts = new Point2dCollection();
Point3d pt;
int numvertex = 0;
PromptPointResult ppr;
PromptPointOptions ppo = new PromptPointOptions("");
ppo.Message = "\nEnter start vertex :";
ppr = ed.GetPoint(ppo);
if (System.Convert.ToInt32(Application.GetSystemVariable("WORLDUCS")) == 1)
pt = ppr.Value;
else
pt = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem);
//pts.Add(new Point2d(pt.X, pt.Y));
Point2d pt0 = new Point2d(pt.X, pt.Y);
while (!pt.Equals(new Point3d(0, 0, 0)))
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite)
as BlockTableRecord;
numvertex = ++numvertex;
ppo = new PromptPointOptions("");
ppo.Message = "\nEnter next vertex :";
ppo.UseBasePoint = true;
ppo.BasePoint = ppr.Value;
ppr = ed.GetPoint(ppo);
if (System.Convert.ToInt32(Application.GetSystemVariable("WORLDUCS")) == 1)
pt = ppr.Value;
else
pt = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem);
if (!pt.Equals(new Point3d(0, 0, 0)))
{
if (numvertex == 1)
{
using (Polyline pl = new Polyline())
{
pl.AddVertexAt(0, pt0, 0, 0, 0);
pl.AddVertexAt(numvertex, new Point2d(pt.X, pt.Y), 0, 0, 0);
btr.AppendEntity(pl);
tr.AddNewlyCreatedDBObject(pl, true);
ObjId = pl.ObjectId;
}
}
else
{
Polyline pl = tr.GetObject(ObjId, OpenMode.ForWrite) as Polyline;
pl.AddVertexAt(numvertex, new Point2d(pt.X, pt.Y), 0, 0, 0);
}
}
tr.Commit();
}
}
return ObjId;
}