Отсутствие базы чертежа при создании 3д-полилинии

Автор Тема: Отсутствие базы чертежа при создании 3д-полилинии  (Прочитано 2787 раз)

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!

При создании зд-полилинии получаю ошибку отсутствия базы чертежа. См. скриншот. База под отладчиком видна. В чем может быть проблема?

Метод где выскакивает ошибка
Код - C# [Выбрать]
  1.  public ObjectId Create(Point3d start, Point3d end)
  2.         {
  3.             Document doc = Application.DocumentManager.MdiActiveDocument;
  4.             Database db = doc.Database;
  5.             Transaction tr = db.TransactionManager.StartTransaction();
  6.             ObjectId edgeId = default;
  7.             using (tr)
  8.             {
  9.                 BlockTable bt = (BlockTable)db.BlockTableId.GetObject(OpenMode.ForRead);
  10.  
  11.                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  12.  
  13.                 Line edge = new Line();
  14.                 edge.StartPoint = start;
  15.                 edge.EndPoint = end;
  16.                 edge.Layer = "Edges";
  17.  
  18.                 Polyline3d plineCrosshair1 = new Polyline3d();
  19.                // plineCrosshair1.SetDatabaseDefaults();
  20.                
  21.                 plineCrosshair1.AppendVertex(new PolylineVertex3d(start));
  22.                 plineCrosshair1.AppendVertex(new PolylineVertex3d(edge.GetPointAtDist(0.25 * edge.Length)));
  23.                 plineCrosshair1.AppendVertex(new PolylineVertex3d(end));
  24.                
  25.                 plineCrosshair1.Layer = "Edges";
  26.                
  27.  
  28.                 btr.AppendEntity(plineCrosshair1);
  29.                 tr.AddNewlyCreatedDBObject(plineCrosshair1, true);              
  30.  
  31.                 edgeId = plineCrosshair1.ObjectId;
  32.                 tr.Commit();
  33.             }
  34.             return edgeId;
  35.         }

Отмечено как Решение Atomohod 29-11-2021, 13:16:16

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Сначала:
Код - C# [Выбрать]
  1. btr.AppendEntity(plineCrosshair1);
а затем уже
Код - C# [Выбрать]
  1. plineCrosshair1.AppendVertex(new PolylineVertex3d(start));
  2. plineCrosshair1.AppendVertex(new PolylineVertex3d(edge.GetPointAtDist(0.25 * edge.Length)));
  3. plineCrosshair1.AppendVertex(new PolylineVertex3d(end));
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Спасибо, работает.
Тогда есть такой вопрос- если не находится сама полилиния до добавления в базу, то почему ошибка про отсутствие самой базы?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Потому что становится непонятно в какую базу добавлять вершины, если сама полилиния не содержится в базе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение