Тема: Как программно осуществить штриховку в объекте AcDbEntity ?

Создан обьект от AcDbEntity. Как осуществить штриховку
в этом обьекте прямоугольных областей.

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

> CheVik
1) Что такое "обьект от AcDbEntity"?
2) Что такое "штриховка
в этом обьекте прямоугольных областей"?
Каков вопрос - таков и ответ...

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

Мой класс унаследован от AcDbEntity.
Как осуществить штриховку в этом классе.

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

> CheVik
Как минимум необходимо, чтобы был переопределен метод explode() и он возвращал стандартные примитивы AutoCAD, которые могут быть заштрихованы (например: AcDbPolyline, AcDbCircle, AcDbArc и т.д.)

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

explode() это то, что после разбивки, нужно чтобы был допустим заштрихованный прямоугольник и до разбивки

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

Наконец-то понял чего ты добиваешься.
Добавь в класс член:

AcDbHatch *m_hatch;

В конструкторе его инициализируй, когда нужно его модифицируй (например, в методе transformBy(...)). Не забудь сохранять/востанавливать его в методах dwgOutFields и dwgInFields и вызвать в методах worldDraw/viewportDraw класса m_hatch->worldDraw(...) и m_hatch->viewportDraw(...).

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

Да это сработало, только инициализация идет не в конструкторе, а в методе worldDraw:
m_hatch = new AcDbHatch();
m_hatch->setNormal(normal);
m_hatch->setElevation(0.0);
..............
m_hatch->appendLoop(.....);
m_hatch->worldDraw(mode);
delete m_hatch;

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

> CheVik
Делать инициализацию в worldDraw() я бы не советовал. Причина в том, что если контур достаточно сложный, или штриховка достаточно плотная, то операция штриховки может занимать приличное время и это будет плохо сказываться на производительности, а может вообще перестать работать.

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

А если модификация, тогда m_catch->appendLoop() нужно будет делать в transformBy(), moveGripPointsAt(), перед этим изменяя координаты контура шриховки. В чем разница? А если делать инициализацию в конструкторе то перед m_hatch->appendLoop() должны быть определены координаты контура, а они определяются в моей функции SetPoint(), которая вызывается из worldDraw(). Или я чего то не понимаю.

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

CheVik пишет:

А если модификация, тогда m_catch->appendLoop() нужно будет делать в transformBy(), moveGripPointsAt(), перед этим изменяя координаты контура шриховки.

Зачем? Напустишь на него transformBy() и все. Впрочем если у тебя все работает и так, то лучше не трогай...
P.S.: Так как ты не хранишь m_hatch и его "время жизни" - время работы метода worldDraw(), то в worldDraw() можешь его создавать в стеке, т.е.

//...........
AcDbHatch m_hatch;
m_hatch.setNormal(normal);
m_hatch.setElevation(0.0);
//..............
m_hatch.appendLoop(.....);
m_hatch.worldDraw(mode);
//............

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

> Александр Ривилис
Большое спасибо тебе Александр!!!

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

А я так делал:

acdbEntLast(izd);
CButton *checkbox;
checkbox= (CButton*)GetDlgItem(IDC_SHTRIH);
if(checkbox->GetCheck())
 acedCommand(RTSTR, "_.hatch", RTSTR, "line", RTSTR, "4", RTSTR, "45", RTENAME, izd, RTSTR, "", RTNONE);

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

> supremum
Использование acedCommand в ObjectARX вообще, а при открытом диалоге в частности, не может приветствоваться.

Re: Как программно осуществить штриховку в объекте AcDbEntity ?

> supremum
А главное ты не понял, что речь идет о custom entity внутри которого использовать acedCommand вообще нельзя.