Мне не удалось найти прямого способа узнать у какой(-их) поверхности(-ей) характерная линия является структурной ни через .NET, ни через COM. Но самое печальное, что обратное действие - определить, какие характерные линии являются структурными для поверхности через .NET API тоже не удалось (видимо, разработчики API еще не добрались до этого):
// коллекция данных о структурных линиях
SurfaceDefinitionBreaklines bLinesDef = surf.BreaklinesDefinition;
// данные о группе структурных линий
SurfaceOperationAddBreakline bLineAddDef = bLinesDef[0];
// данные об отдельной структурной линии
SurfaceBreakline surfBLine = bLineAddDef[0];
// а вот все свойства, что там есть:
// Тип структурной линии: Standard, Wall, NonDestructive.
SurfaceBreaklineType type = surfBLine.BreaklineType;
// Описание
string desk = surfBLine.Description;
// Коллекция вершин
Point3dCollection pts = surfBLine.Vertices;
// и все!
Можно, конечно, сравнить полученный список вершин со списком вершин проверяемой характерной линии. Но как-то это слишком костыльно...
А вот через COM оказалось возможным получить эти характерные линии для поверхности. Проверял таким лиспом:
(setq ts (vlax-ename->vla-object (car (entsel))))
(vlax-for brln (vlax-get-property ts 'Breaklines)
(setq brlnents (vlax-safearray->list
(vlax-variant-value
(vlax-get-property brln 'BreaklineEntities)
)
)
)
(foreach brlnent brlnents
(if
(= (vla-get-ObjectName brlnent) "AeccDbFeatureLine")
(princ (strcat "\nFeatureLineName: "
(vlax-get-property brlnent 'Name)
)
)
)
)
)
(princ)
Выводит названия для характерных линий выбранной поверхности. Проверок на ошибки не добавлял, поэтому, не промахнитесь при выборе поверхности
Раз до характерок поверхности добраться можно, то возможен такой вариант: пройтись по всем поверхностям чертежа, и определить для каких из них нужная характерная линия является структурной.