eNotApplicable в Entity.JoinEntities(...)

Автор Тема: eNotApplicable в Entity.JoinEntities(...)  (Прочитано 4410 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Sergey MakarovАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
eNotApplicable в Entity.JoinEntities(...)
« : 11-05-2023, 12:05:16 »
Всем доброго дня!

Обнаружил проблему при использовании метода JoinEntities(...) при присоединении  массива полилиний к выбранной полилинии.
Написал простейшую функцию (ниже) и выяснил следующее: Если в массиве хотя бы одна из присоединяемых полилиний примыкает к объекту полилинии из которого вызывается метод JoinEntities(...), то всё происходит штатно, достаточно раскомментировать строку (в данный момент она закомментирована); Если же ни одна из массива полилиний не примыкает к целевой или примыкает внутренней точкой, то вызов JoinEntities(...) приводит к исключению:

Код - C# [Выбрать]
  1.         [CommandMethod("MyGroup", "MyPoly", "MyPolyLocal", CommandFlags.Modal)]
  2.         public void MyPoly()
  3.         {
  4.             Database db = Application.DocumentManager.MdiActiveDocument.Database;
  5.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  6.  
  7.             using (Transaction ts = db.TransactionManager.StartTransaction())
  8.             {
  9.                 BlockTableRecord btr = (BlockTableRecord)ts.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  10.                 List<Polyline> pls = new List<Polyline>();
  11.  
  12.                 Polyline polyline = new Polyline();
  13.                 polyline.AddVertexAt(0, new Point2d(0.0, 0.0), 0.0, 0.0, 0.0);
  14.                 polyline.AddVertexAt(0, new Point2d(1.0, 0.0), 0.0, 0.0, 0.0);
  15.  
  16.                 Polyline polyline1 = new Polyline();
  17.                 polyline1.AddVertexAt(0, new Point2d(3.0, 2.0), 0.0, 0.0, 0.0);
  18.                 polyline1.AddVertexAt(0, new Point2d(2.0, 1.0), 0.0, 0.0, 0.0);
  19.                 polyline1.AddVertexAt(0, new Point2d(1.5, 0.0), 0.0, 0.0, 0.0);
  20.                 //polyline1.AddVertexAt(0, new Point2d(1.0, 0.0), 0.0, 0.0, 0.0);
  21.                
  22.  
  23.                 pls.Add(polyline1);
  24.  
  25.                 try
  26.                 { polyline.JoinEntities(pls.ToArray()); }
  27.                 catch(Autodesk.AutoCAD.Runtime.Exception e) { ed.WriteMessage("\nExcaption message: " + e.Message); }
  28.  
  29.                 btr.AppendEntity(polyline);
  30.                 ts.AddNewlyCreatedDBObject(polyline, true);
  31.  
  32.                 ts.Commit();
  33.             }                
  34.         }
  35.  

Так и должно быть или это баг?
« Последнее редактирование: 11-05-2023, 13:55:35 от Sergey Makarov »

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 95
  • Карма: 11
Re: eNotApplicable в Entity.JoinEntities(...)
« Ответ #1 : 11-05-2023, 12:37:01 »
JoinEntities() это такая штука где гораздо проще получить исключение чем заставить ее сработать как надо, вроде бы как минимум должны быть объекты, которые образуют цепь, причем последовательность в массиве тоже играет роль, в общем без проблем она отработает если ты добавляешь массив полилиний где startpoint последующей совпадает с endpoint предыдущей, любое отхождение от этого у меня вызывало исключение.

Оффлайн Sergey MakarovАвтор темы

  • ADN OPEN
  • Сообщений: 36
  • Карма: 0
Re: eNotApplicable в Entity.JoinEntities(...)
« Ответ #2 : 11-05-2023, 13:55:23 »
Немного подправил код и дополнил сообщение, чтобы, раскомментировав строку, можно было увидеть корректный вызов Entity.JoinEntities(...).
Странная, конечно, реализация. Метод возвращает коллекцию IntegerCollection, куда можно было бы добавлять результат обработки присоединяемого объекта  в массиве, типа OK, Error и другие в целом выражении. А так, try{} catch{} решили проблему.