ADN Open CIS
Сообщество программистов Autodesk в СНГ

04/11/2013

Удаление вершин 3D-полилинии

Следующий код показывает, как можно удалить указанную вершину у 3D-полилинии. Сначала программа проходит по всем вершинам полилинии и создаёт список вершин для удаления.

Код - C#: [Выделить]
  1. [CommandMethod("Remove3DVertex")]
  2. static public void RemoveVertex()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   Database db = doc.Database;
  6.   Editor ed = doc.Editor;
  7.  
  8.   using (Transaction oTr =
  9.                       db.TransactionManager.StartTransaction())
  10.   {
  11.       ObjectIdCollection ids = new ObjectIdCollection();
  12.  
  13.       PromptEntityOptions options =
  14.                  new PromptEntityOptions("\nУкажите 3D-полилинию:");
  15.       options.SetRejectMessage("Только 3D-полилиниия!" + "\n");
  16.       options.AddAllowedClass(typeof(Polyline3d), true);
  17.       PromptEntityResult result = ed.GetEntity(options);
  18.  
  19.       if (result.Status != PromptStatus.OK)
  20.           return;
  21.  
  22.       Polyline3d oEnt = oTr.GetObject(result.ObjectId,
  23.                                   OpenMode.ForRead) as Polyline3d;
  24.  
  25.  
  26.       foreach (ObjectId oVtId in  oEnt)
  27.       {
  28.           PolylineVertex3d oVt = oTr.GetObject(oVtId,
  29.                           OpenMode.ForRead) as PolylineVertex3d;
  30.           PromptKeywordOptions oPko =
  31.            new PromptKeywordOptions("\nХотите удалить вершину, расположенную: "
  32.                                + oVt.Position.ToString() + "?");
  33.  
  34.           oPko.AllowNone = false;
  35.           oPko.Keywords.Add("Да");
  36.           oPko.Keywords.Add("Нет");
  37.           oPko.Keywords.Default = "Нет";
  38.           PromptResult oPkr = ed.GetKeywords(oPko);
  39.  
  40.           if (oPkr.Status == PromptStatus.OK
  41.                               && oPkr.StringResult == "Да")
  42.           {
  43.               ids.Add(oVtId);
  44.           }
  45.       }
  46.  
  47.       foreach (ObjectId oVtId in ids)
  48.       {
  49.           PolylineVertex3d oVt = oTr.GetObject(oVtId,
  50.                       OpenMode.ForWrite) as PolylineVertex3d;
  51.           oVt.Erase();
  52.       }
  53.  
  54.       if (ids.Count != 0)
  55.       {
  56.           oEnt.UpgradeOpen();
  57.           oEnt.RecordGraphicsModified(true);
  58.       }
  59.  
  60.       oTr.Commit();
  61.   }
  62. }

 

Источник: 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