Как переместит объекты HPGL

Discuss and ask questions about CAD VCL (Delphi and C++ Builder).

Moderators: SDS, support, admin

Post Reply
st0004
Posts: 1
Joined: 19 Feb 2007, 09:53
Location: Russia

Как переместит объекты HPGL

Post by st0004 » 19 Feb 2007, 10:03

Доброго дня! Помогите пожалуйста.
Стоит такая задача: повернуть изображение по часовой стрелке на 90 градусов.
Формат файла PLT. Я так понимаю все объекты HPGL имеют тип TsgFlatPoly. Работаю в C++Builder 5.0.
Отображаю на стандартный TImage. Вот код:

Hpgl2::TsgHPGLImage* mHPGL = dynamic_cast<Hpgl2::TsgHPGLImage*> (mImage->Picture->Graphic);
Dxfconv::TsgDXFConverter* mConv = mHPGL->Converter;
Dxfconv::TsgFlatPoly * mPoly;

int nHeight = mImage->Picture->Graphic->Height,
nWidth = mImage->Picture->Graphic->Width;

// Перебираем все объекты
for(int nEntNum = 0; nEntNum < mConv->Counts[csEntities]; nEntNum++)
{
// Если не TgsFlatPoly, значит ошибка
if (mConv->Entities[nEntNum]->ClassType() != __classid(TsgFlatPoly))
{
Application->MessageBox(AnsiString("Неизвестный тип векторного объекта: " +
mConv->Entities[nEntNum]->ClassName()).c_str(), "Предупреждение", MB_ICONINFORMATION | MB_OK);
continue;
}
mPoly = dynamic_cast<Dxfconv::TsgFlatPoly *> (mConv->Entities[nEntNum]);
// Изменяем все координаты объекта
for(int nPointNum = 0; nPointNum < mPoly->PCount(); nPointNum++)
mPoly->XY[nPointNum] = MakeFPoint(nHeight - mPoly->XY[nPointNum].Y, mPoly->XY[nPointNum].X, 0);
// Обновляем объект
mConv->Loads(mPoly);
mHPGL->GetExtents();
}

При выполнении кода изображение просто пропадает. Но где ошибка? Пробовал отображать на ваш TsgImage, но результат такой же.

support
Posts: 3272
Joined: 30 Mar 2005, 11:36
Contact:

Post by support » 19 Feb 2007, 13:49

Доброго дня суток!
<blockquote id="quote"><font size="2" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote">Стоит такая задача: повернуть изображение по часовой стрелке на 90 градусов.<hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote">
Всё значительно проще. Попробуйте следующую конструкцию:
<b>Unit1.h</b>:

Code: Select all

...
<font color="green">#include <SGImage.hpp>
#include <HPGL2.hpp></font id="green">
...
<b>class</b> TForm1 : <b>public</b> TForm
{
<b>__published</b>:     // IDE-managed Components
        ...
        TButton *btnOpen;        
        TsgImage *sgImage1;
...
<b>Unit1.cpp</b>:

Code: Select all

...
<b>void __fastcall</b> TForm1::btnRotateClick(TObject *Sender)
{
  TsgHPGLImage *sgDXFImage = NULL;
  sgDXFImage = <b>dynamic_cast</b><TsgHPGLImage *>(sgImage1->Picture->Graphic);
  sgDXFImage->Rotate(axisZ,90);
}
<blockquote id="quote"><font size="2" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote">Формат файла PLT. Я так понимаю все объекты HPGL имеют тип TsgFlatPoly.<hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote">
Это не совсем так. В связи с тем, что формат HPGL/HPGL2 несколько проще формата DWG/DXF, были введены классы TsgFlatHatch и TsgFlatPoly. Они позволили значительно уменьшить требования по занимаемой оперативной памяти (на многих файлах разница оказалась равной до 20 раз) при загруженном HPGL/HPGL2 файле.

<b>English</b>:
The speech goes about how to rotate loaded PLT file. Code above views how it can be done.

Sergey.

Please post questions to the forum or write to support@cadsofttools.com

Post Reply