Сообщество программистов Autodesk в СНГ
ADN Club => ObjectARX => Тема начата: Dziubyna от 20-03-2017, 10:31:01
-
Вопрос о печати SubEntity.
Есть графический объект унаследованный от AcDbEntity. В нем реализовано множество SubEntity. Эти SubEntity наносятся на разные слои, со своими настройками. При рисовании в методе subWorldDraw (AcGiWorldDraw *mode) для разных элементов задаю слои mode->subEntityTraits().setLayer(LayerId).
Если изменять настройки слоя (видимость, цвет, вес линии, тип линии) все работает хорошо и меняется на чертеже.
Но если отключить печатаемость слоя то элементы которые наносятся на этот слой все равно идут на печать. Проверял в Civil3D с его SubEntity трассы все работает хорошо.
В чем может быть проблема?
Есть конечно флаг mode->context()->isPlotGeneration(). По которому видно что проходит рисование для печать, но что то не очень хочеться влазить в настройки слоя и смотреть идет ли он на печать и в соответствии рисовать или не рисовать SubEntity :-\
-
Вполне возможно, что это баг. Но чтобы воспроизвести его тебе придётся подготовить для меня тестовый проект, в котором это воспроизводится.
Скорее всего тебе таки придётся анализировать слой, но возможно Autodesk'овцы подскажут другое решение.
-
Добавляю тестовый проект.
Взял за основу пример по SubEntity с ObjectARX. Там реализовано графический объект AsdkSliderCrank с нескольких SubEntity.
При создании объекта добавил создание трех слоев для SubEntities (и добавил их сохранение в объект).
Непечатаемость программно уже не задавал, это через менеджер слоев можно сделать, там же попробовать отключить видимость и увидеть как исчезают элементы Entity и какой слой за какую часть отвечает.
Пример настроен под AutoCAD 2015.
Спасибо!
-
Я сделал аналогичный пример для AutoCAD 2017 (очевидно, что под предыдущие версии ничего править не будут). Отправлю его в Autodesk. Когда будет какая-нибудь информация от них - сообщу.
-
Смог у себя воспроизвести это поведение.
Отправил запрос в ADN DevHelp.
-
Получил ответ из Autodesk. Такое "поведение" известно и уже давно отправлен запрос на его изменение. Так что единственный обход путь - это анализировать AcGiContext::isPlotGeneration() и AcDbLayerTableRecord::isPlottable.