04/11/2013
Удаление вершин 3D-полилинии
Следующий код показывает, как можно удалить указанную вершину у 3D-полилинии. Сначала программа проходит по всем вершинам полилинии и создаёт список вершин для удаления.
Код - C#: [Выделить]
- [CommandMethod("Remove3DVertex")]
- static public void RemoveVertex()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- using (Transaction oTr =
- db.TransactionManager.StartTransaction())
- {
- ObjectIdCollection ids = new ObjectIdCollection();
- PromptEntityOptions options =
- new PromptEntityOptions("\nУкажите 3D-полилинию:");
- options.SetRejectMessage("Только 3D-полилиниия!" + "\n");
- options.AddAllowedClass(typeof(Polyline3d), true);
- PromptEntityResult result = ed.GetEntity(options);
- if (result.Status != PromptStatus.OK)
- return;
- Polyline3d oEnt = oTr.GetObject(result.ObjectId,
- OpenMode.ForRead) as Polyline3d;
- foreach (ObjectId oVtId in oEnt)
- {
- PolylineVertex3d oVt = oTr.GetObject(oVtId,
- OpenMode.ForRead) as PolylineVertex3d;
- PromptKeywordOptions oPko =
- new PromptKeywordOptions("\nХотите удалить вершину, расположенную: "
- + oVt.Position.ToString() + "?");
- oPko.AllowNone = false;
- oPko.Keywords.Add("Да");
- oPko.Keywords.Add("Нет");
- oPko.Keywords.Default = "Нет";
- PromptResult oPkr = ed.GetKeywords(oPko);
- if (oPkr.Status == PromptStatus.OK
- && oPkr.StringResult == "Да")
- {
- ids.Add(oVtId);
- }
- }
- foreach (ObjectId oVtId in ids)
- {
- PolylineVertex3d oVt = oTr.GetObject(oVtId,
- OpenMode.ForWrite) as PolylineVertex3d;
- oVt.Erase();
- }
- if (ids.Count != 0)
- {
- oEnt.UpgradeOpen();
- oEnt.RecordGraphicsModified(true);
- }
- oTr.Commit();
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2013/10/remove-vertexes-from-3d-polyline.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=304
Опубликовано 04.11.2013