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

ADN Club => Civil 3D API => Тема начата: Nutson от 05-06-2022, 19:31:00

Название: Изменение стиля у ProfileViewPart
Отправлено: Nutson от 05-06-2022, 19:31:00
Доброго дня, подскажите пожалуйста,  хочу программно найти пересечки и отобразить их на виде профиля.
Пересекаемые трубопроводы отобразить на виде профиля получается без проблем, а вот как им изменить стиль отображения, я не могу понять.
Смотрел в Developer's Guide и в примерах кода, там этой темы не касались, подскажите в какую сторону копать?

Как я понял, все переопределённые трубы попадают в ProfileView.PipeOverrides, но я не вижу у этой коллекции метода для добавления туда новых переопределений.

Код - C# [Выбрать]
  1. public static void Work(Document doc)
  2.         {
  3.             using (DocumentLock loc = doc.LockDocument())
  4.             {
  5.                 ProfileView profileView = Helper.SelectPV(doc);
  6.                 if (profileView == null) return;
  7.  
  8.                 using (Transaction tr = doc.TransactionManager.StartTransaction())
  9.                 {
  10.                     Alignment alignment = tr.GetObject(profileView.AlignmentId, OpenMode.ForRead) as Alignment;
  11.                     if (alignment == null) return;
  12.                     Point3dCollection point3DCollection = new Point3dCollection();
  13.                     point3DCollection.Add(alignment.StartPoint);
  14.                     foreach (AlignmentCurve ent in alignment.Entities)
  15.                     {
  16.                         point3DCollection.Add(new Point3d(ent.EndPoint.X, ent.EndPoint.Y, 0));
  17.                     }
  18.                     TypedValue[] filter = { new TypedValue(0, "AECC_PIPE") };
  19.                     SelectionFilter selectionFilter = new SelectionFilter(filter);
  20.                     PromptSelectionResult res = doc.Editor.SelectFence(point3DCollection, selectionFilter);
  21.  
  22.                     profileView = tr.GetObject(profileView.Id, OpenMode.ForWrite) as ProfileView;
  23.                     var styleId = CivilApplication.ActiveDocument.Styles.PipeStyles["Пересекаемая труба"];
  24.  
  25.                     if (res.Status == PromptStatus.OK && res.Value.Count > 0)
  26.                     {
  27.                         foreach (var selPipeid in res.Value.GetObjectIds())
  28.                         {
  29.                             Pipe pipe = tr.GetObject(selPipeid, OpenMode.ForWrite) as Pipe;
  30.                             if (pipe == null) continue;
  31.                             if (!pipe.GetProfileViewsDisplayingMe().Contains(profileView.Id))
  32.                             {
  33.                                 pipe.AddToProfileView(profileView.Id);
  34.  
  35.                                 var pvPartId = pipe.ProfileViewPartId;
  36.                                 ProfileViewPart profileViewPart = tr.GetObject(pvPartId, OpenMode.ForWrite) as ProfileViewPart;
  37.                                 profileViewPart.StyleId = styleId; // ??
  38.                             }
  39.                         }
  40.                     }
  41.                     tr.Commit();
  42.                 }
  43.             }
  44.         }
  45.  
Название: Re: Изменение стиля у ProfileViewPart
Отправлено: Дмитрий Загорулькин от 10-06-2022, 15:30:17
Вот похожая тема: https://adn-cis.org/forum/index.php?topic=8702.0
Я надеялся, что у этих коллекций будут методы добавления...
Название: Re: Изменение стиля у ProfileViewPart
Отправлено: Nutson от 10-06-2022, 16:42:27
Я изучаю методом тыка и вот к чему пришел. При добавлении трубы на вид профиля, она автоматически залетает и в коллекцию PipeOverrides. Там ее можно подхватить и переопределить ей стиль.