Как вставить нулевой колодец?

Автор Тема: Как вставить нулевой колодец?  (Прочитано 3974 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Возникла проблема со вставкой в трубопроводную сеть нулевого колодца. Методом перебора получаю Id семейства и колодца, но сам метод AddStructure Method (ObjectId, ObjectId, Point3d, Double, ObjectId, Boolean) постоянно возвращает ошибку "Fail to add structure". Если вместо нулевого колодца я подставляю обычный, то все колодцы вставляются корректно. Может при вставке нулевых колодцев нужно учитывать какие-нибудь нюансы?

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Как вставить нулевой колодец?
« Ответ #1 : 26-05-2020, 18:28:20 »
А у меня работает!
Но чем это поможет)

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Как вставить нулевой колодец?
« Ответ #2 : 26-05-2020, 19:32:53 »
Предлагаю померятся кодом ))
Код - C# [Выбрать]
  1. [CommandMethod("Test_1")]
  2. public void Test_1()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     CivilDocument civilDoc = CivilApplication.ActiveDocument;
  7.  
  8.     using (Transaction trans = db.TransactionManager.StartTransaction())
  9.     {
  10.         string name = "new network";
  11.         ObjectId nwId = Network.Create(civilDoc, ref name);
  12.         Network nw = (Network)trans.GetObject(nwId, OpenMode.ForWrite);
  13.  
  14.         PartsListCollection partsListIds = civilDoc.Styles.PartsListSet;
  15.  
  16.         foreach (ObjectId listId in partsListIds)
  17.         {
  18.             PartsList partsList = (PartsList)trans.GetObject(listId, OpenMode.ForRead);
  19.             ObjectIdCollection ids = partsList.GetPartFamilyIdsByDomain(DomainType.Structure);
  20.  
  21.             foreach (ObjectId id in ids)
  22.             {
  23.                 PartFamily fam = (PartFamily)trans.GetObject(id, OpenMode.ForRead);
  24.  
  25.                 if (fam.PartType == PartType.StructNull)
  26.                 {
  27.                     if (fam.PartSizeCount == 1)
  28.                     {
  29.                         ObjectId strId = ObjectId.Null;
  30.                         nw.AddStructure(fam.Id, fam[0], new Point3d(0, 0, 0), 0.0, ref strId, false);
  31.                         break;
  32.                     }
  33.                 }
  34.             }
  35.         }
  36.  
  37.         trans.Commit();
  38.     }
  39. }
  40.  
Это простой тестовый метод, который должен вставлять нулевой колодец, но он возвращает ошибку. Если в сроке 25 поменять "==" на "!=", то в чертеж будет вставлен первый попавшийся не нулевой колодец, т.е. сам по себе метод рабочий.

Отмечено как Решение Алексей Терно 26-05-2020, 21:57:51

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Как вставить нулевой колодец?
« Ответ #3 : 26-05-2020, 20:31:27 »
Я не вырву из проекта.
Но увидел ошибку.
Сети нужно назначить набор элемнтов:
Код - C# [Выбрать]
  1. nw.PartsListId = listId;

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Как вставить нулевой колодец?
« Ответ #4 : 26-05-2020, 21:57:48 »
Сети нужно назначить набор элемнтов:
Точно! Спасибо! ))