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

30/05/2013

Текстовые примитивы в собственных примитивах не скрываются после команды СКРЫТЬ (HIDE)

Возьмем такой пример: Вы создали собственный примитив (Custom Entity) и среди других примитивов в методе worldDraw, вы рисуете текст (mode->geometry().text). После создания собственного примитива, когда выполнилась команда СКРЫТЬ (HIDE) в режиме 2D-каркас, текст в собственном примитиве оказывается не скрытым. Кроме того, когда текст рисуется как часть собственного примитива, некоторые другие примитивы могут быть скрыты неправильно. Такого не случается в собственных примитивах, не содержащих текстовые примитивы.

Возможно вы замечали, что и стандартные примитивы TEXT (экземпляры класса AcDbText) иногда не скрываются. Так в чем же проблема?

Для начала попробуйте установить системную переменную “HIDETEXT” в Вкл (если она была в состоянии Выкл). Если это не помогает, то попробуйте установить высоту (thickness) текста. Всё это потому, что текстовые объекты, созданные командами ТЕКСТ (TEXT), ДТЕКСТ(DTEXT) и МТЕКСТ(MTEXT) в некоторых случаях не влияют на команду СКРЫТЬ и необходимо установить ненулевую высоту, например, 0.0001

(Прим. переводчика: Не следует путать высоту текста, задаваемой методом setHeight() с высотой 3D, задаваемой методом setThickness())

Программный эквивалент этого действия такой:

Код - C++: [Выделить]
  1. double thickOld = mode->subEntityTraits().thickness();       
  2. mode->subEntityTraits().setThickness(0.001);  
  3. mode->geometry().text( ... );  
  4. mode->subEntityTraits().setThickness(thickOld);

Конечно для стандартных примитивов AcDbText и AcDbMText следует использовать функцию setThickness() непосредственно.

Источник: http://adndevblog.typepad.com/autocad/2012/12/text-primitives-in-custom-entities-not-hidden-after-using-hide-command.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=85.0

Опубликовано 30.05.2013
Отредактировано 08.06.2013 в 02:29:32