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

ADN Club => Civil 3D API => Тема начата: MikhailTAP от 28-12-2014, 12:18:00

Название: Изменить горизонтали внутри поверхности
Отправлено: MikhailTAP от 28-12-2014, 12:18:00
Недавно создал тему по поводу извлечения горизонталей из поверхности (http://adn-cis.org/forum/index.php?topic=1745.0). Однако появилась ещё одна задача: добавить Xdata для горизонталей внутри поверхности (под Civil 2012).
Поскольку IAeccSurface.ExtractContour "вырывает" из поверхности горизонтали, нужно получить контуры без отсоединения от поверхности. Попробовал воспользоваться свойством AeccTinSurface.Contours, однако получаю AeccTinSurfaceContour.Count = 0. Хотя если воспользоваться извлечением, то получаю их без проблем.
Можно ли таким способом получить горизонтали поверхности без её "расчленения"? И как в этом случае узнать какая горизонталь главная, а какая вспомогательная?
Спасибо.
Название: Re: Изменить горизонтали внутри поверхности
Отправлено: Александр Ривилис от 28-12-2014, 14:11:06
Поскольку IAeccSurface.ExtractContour "вырывает" из поверхности горизонтали
Это как??? Ты получаешь ObjectId для контуров, дальше открываешь их для записи и прописываешь Xdata. Или я чего-то не понял?
И как в этом случае узнать какая горизонталь главная, а какая вспомогательная?
Ты же можешь отфильтровать их в методе IAeccSurface.ExtractContour используя в качестве фильтра AeccSurfaceFilterType.aeccSFMajorContours или AeccSurfaceFilterType.aeccSFMinorContours
Название: Re: Изменить горизонтали внутри поверхности
Отправлено: Дмитрий Загорулькин от 28-12-2014, 17:09:09
Поскольку IAeccSurface.ExtractContour "вырывает" из поверхности горизонтали, нужно получить контуры без отсоединения от поверхности.
Те горизонтали, которые мы видим на поверхности (при соответствующей настройке стиля поверхности) - скорее всего, просто временная графика, создаваемая при отрисовке объекта поверхности и не являются полноценными объектами базы данных чертежа. Поэтому, вряд ли есть возможность к ним что-то прицепить. При перестроении поверхности, создаются новые объекты отрисовки. Поэтому, даже если представить, что вдруг удастся к ним как-то добраться и что-то прицепить, данные пропадут вместе с объектом при перерисовке поверхности.
Название: Re: Изменить горизонтали внутри поверхности
Отправлено: Дмитрий Загорулькин от 28-12-2014, 17:14:38
AeccTinSurface.Contours, однако получаю AeccTinSurfaceContour.Count = 0.
Скорее всего, это свойство для получения горизонталей, которые являются определением поверхности. То есть - исходными данными для построения поверхности. Попробуйте добавить горизонталь в поверхность и проверить, изменится ли счетчик.
Название: Re: Изменить горизонтали внутри поверхности
Отправлено: MikhailTAP от 28-12-2014, 17:24:09
Это как??? Ты получаешь ObjectId для контуров, дальше открываешь их для записи и прописываешь Xdata. Или я чего-то не понял?
Да, он возвращает эти линии, но после этого на чертеже линии исключаются из поверхности, т.е .в поверхности этих линий больше нет, а они лежат отдельно.
Дмитрий, Вы возможно правы. Но поверхность должна как-то хранить свои примитивы, может она создаёт какой-нибудь блок? Мне кажется едва ли поверхность является временной графикой. Т.к. если расчленить поверхность, мы получим вхождение блока, отредактировать просто так блок не получится, т.к. если выполним ADCENTER, то блока там не будет(хотя очевидно он существует).
Тем не менее попробую добавить горизонтали, посмотрю что получится. Но к сожалению в моём случае поверхность всегда строится по точкам. Я уж подумываю если Ваша гипотеза верна, то можно по крайней мере будет извлечь горизонтали, и добавить их заново в поверхность, но уже как линии.
Название: Re: Изменить горизонтали внутри поверхности
Отправлено: Дмитрий Загорулькин от 28-12-2014, 17:44:50
Но поверхность должна как-то хранить свои примитивы, может она создаёт какой-нибудь блок?
Где-то "внутри" может и есть какая-то коллекция для хранения объектов временной графики. Но явного доступа к ним я пока не встречал. Для меня Ваша задача - все равно что пытаться добавить данные к линиям, составляющим штриховку, тоже из того же разряда.
и добавить их заново в поверхность, но уже как линии.
Наверное, это единственный вариант решения. Но это если Вы уверены, что потом поверхность редактировать не будут. Иначе, будут ошибки.
Название: Re: Изменить горизонтали внутри поверхности
Отправлено: Александр Ривилис от 28-12-2014, 19:27:57
Может добавить Xdata к самой AeccTinSurface. И при этом сделать привязку отдельных частей Xdata к уровням (горизонталям)?