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

ADN Club => Civil 3D API => Тема начата: Вильдар от 30-11-2017, 15:18:33

Название: Отметки трубы
Отправлено: Вильдар от 30-11-2017, 15:18:33
Всем привет. Пытаюсь програмно изменить отметку трубы. Если средствами Civil 3D посмотреть свойства трубы, то там есть эти свойства и их можно изменить:
(https://s8.postimg.org/dfx5vwp75/image.png) (https://postimg.org/image/dfx5vwp75/)

Некоторые из этих свойств также есть и стандартной палитре свойств AutoCAD.
Но вот уже пол дня ползаю по свойствам класса Pipe, онлайн справке и окошку плагина Snoop Civil 3D и все никак не могу найти эти свойства.
Могу предположить, что они хранятся в других объектах базы и в Pipe имеется только ссылка. Но не могу понять – где?

Название: Re: Отметки трубы
Отправлено: Дмитрий Загорулькин от 30-11-2017, 15:31:05
Что касается положения трубы, то в базе хранится только начальная и конечная точка трубы. Остальные значения вычисляются из характеристик трубы.
P.S. Начальная и конечная точка на оси трубы, т.е. координаты Z этих точек - отметки оси трубы.
Название: Re: Отметки трубы
Отправлено: Вильдар от 01-12-2017, 11:18:50
Еще вопрос.
Как получить заглубление?

(https://s8.postimg.org/nrwy4s6i9/image.png) (https://postimg.org/image/nrwy4s6i9/)
Название: Re: Отметки трубы
Отправлено: Дмитрий Загорулькин от 01-12-2017, 11:23:06
Тоже вычисляются. Надо получить отметки поверхности в концах трубы и произвести арифметические действия с нужными отметками трубы
Название: Re: Отметки трубы
Отправлено: Дмитрий Загорулькин от 01-12-2017, 13:06:08
Update:
Заглубления можно вычислить, если у трубы задана ссылочная поверхность. Для её определения нужно смотреть свойство RefSurfaceId.
У трубы есть такие свойства: MaximumCover и MinimumCover. Они показывают соответственно максимальное и минимальное заглубление верха трубы по наружному диаметру (тут могу ошибаться, надо перепроверить) от ссылочной поверхности. Это может быть в любой точке трубы, не только в конце или в начале. Поэтому, большого практического смысла в этих значениях нет.
Теперь, что касается вычисления отметок поверхности.
У колодца есть свойство SurfaceElevationAtInsertionPoint, поэтому, можно просто брать это значение, если на конце трубы есть колодец (см. свойства StartStructureId, EndStructureId). Конечно же, если ссылочные поверхности трубы и колодца совпадают. Если же колодца нет, то надо открывать на чтение ссылочную поверхность и применять метод FindElevationAtXY. У него есть одна неприятная особенность - если точка окажется вне поверхности, то возникает исключение. Поэтому, надо либо отлавливать исключение, либо проверять попадание точки в границы поверхности.
Название: Re: Отметки трубы
Отправлено: Вильдар от 01-12-2017, 20:17:13
Ого!  :)
Спасибо.
Название: Re: Отметки трубы
Отправлено: Дмитрий Загорулькин от 01-12-2017, 20:25:20
Да пожалуйста :)
Я, кстати, не помню, что будет выдавать SurfaceElevationAtInsertionPoint, если ссылочная поверхность задана колодцу, но сам колодец вне этой поверхности. Этот момент тоже неплохо бы проверить...