Доброго дня, подскажите пожалуйста, хочу программно найти пересечки и отобразить их на виде профиля.
Пересекаемые трубопроводы отобразить на виде профиля получается без проблем, а вот как им изменить стиль отображения, я не могу понять.
Смотрел в Developer's Guide и в примерах кода, там этой темы не касались, подскажите в какую сторону копать?
Как я понял, все переопределённые трубы попадают в ProfileView.PipeOverrides, но я не вижу у этой коллекции метода для добавления туда новых переопределений.
public static void Work(Document doc)
{
using (DocumentLock loc = doc.LockDocument())
{
ProfileView profileView = Helper.SelectPV(doc);
if (profileView == null) return;
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
Alignment alignment = tr.GetObject(profileView.AlignmentId, OpenMode.ForRead) as Alignment;
if (alignment == null) return;
Point3dCollection point3DCollection = new Point3dCollection();
point3DCollection.Add(alignment.StartPoint);
foreach (AlignmentCurve ent in alignment.Entities)
{
point3DCollection.Add(new Point3d(ent.EndPoint.X, ent.EndPoint.Y, 0));
}
TypedValue[] filter = { new TypedValue(0, "AECC_PIPE") };
SelectionFilter selectionFilter = new SelectionFilter(filter);
PromptSelectionResult res = doc.Editor.SelectFence(point3DCollection, selectionFilter);
profileView = tr.GetObject(profileView.Id, OpenMode.ForWrite) as ProfileView;
var styleId = CivilApplication.ActiveDocument.Styles.PipeStyles["Пересекаемая труба"];
if (res.Status == PromptStatus.OK && res.Value.Count > 0)
{
foreach (var selPipeid in res.Value.GetObjectIds())
{
Pipe pipe = tr.GetObject(selPipeid, OpenMode.ForWrite) as Pipe;
if (pipe == null) continue;
if (!pipe.GetProfileViewsDisplayingMe().Contains(profileView.Id))
{
pipe.AddToProfileView(profileView.Id);
var pvPartId = pipe.ProfileViewPartId;
ProfileViewPart profileViewPart = tr.GetObject(pvPartId, OpenMode.ForWrite) as ProfileViewPart;
profileViewPart.StyleId = styleId; // ??
}
}
}
tr.Commit();
}
}
}