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

ADN Club => Civil 3D API => Тема начата: Алексей Терно от 26-05-2020, 17:48:26

Название: Как вставить нулевой колодец?
Отправлено: Алексей Терно от 26-05-2020, 17:48:26
Возникла проблема со вставкой в трубопроводную сеть нулевого колодца. Методом перебора получаю Id семейства и колодца, но сам метод AddStructure Method (ObjectId, ObjectId, Point3d, Double, ObjectId, Boolean) постоянно возвращает ошибку "Fail to add structure". Если вместо нулевого колодца я подставляю обычный, то все колодцы вставляются корректно. Может при вставке нулевых колодцев нужно учитывать какие-нибудь нюансы?
Название: Re: Как вставить нулевой колодец?
Отправлено: Вильдар от 26-05-2020, 18:28:20
А у меня работает!
Но чем это поможет)
Название: Re: Как вставить нулевой колодец?
Отправлено: Алексей Терно от 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 поменять "==" на "!=", то в чертеж будет вставлен первый попавшийся не нулевой колодец, т.е. сам по себе метод рабочий.
Название: Re: Как вставить нулевой колодец?
Отправлено: Вильдар от 26-05-2020, 20:31:27
Я не вырву из проекта.
Но увидел ошибку.
Сети нужно назначить набор элемнтов:
Код - C# [Выбрать]
  1. nw.PartsListId = listId;
Название: Re: Как вставить нулевой колодец?
Отправлено: Алексей Терно от 26-05-2020, 21:57:48
Сети нужно назначить набор элемнтов:
Точно! Спасибо! ))