Проблемы с ShowRect()
Проблемы с ShowRect()
Добрый день.
Создаю новый объект TsgCADImage, добавляю несколько примитивов. Затем пытаюсь установить размеры области рисования методом PaintBox->ShowRect(). Для одних значений ShowRect() работает нормально, для других - нет. Заметил, что некорректности в работе появляются, если размеры области, передаваемой ShowRect() превышают размеры PaintBox по ширине или высоте. Это ошибка в функции, или я ее неправильно использую? Каким методом лучше всего сделать видимой нужную часть рисунка? ShowPoint() не совсем подходит, так как размер области указывается через высоту и ширину.
Создаю новый объект TsgCADImage, добавляю несколько примитивов. Затем пытаюсь установить размеры области рисования методом PaintBox->ShowRect(). Для одних значений ShowRect() работает нормально, для других - нет. Заметил, что некорректности в работе появляются, если размеры области, передаваемой ShowRect() превышают размеры PaintBox по ширине или высоте. Это ошибка в функции, или я ее неправильно использую? Каким методом лучше всего сделать видимой нужную часть рисунка? ShowPoint() не совсем подходит, так как размер области указывается через высоту и ширину.
Code: Select all
TsgDrawingNavigator *PaintBox;
TsgCADImage *CADImage;
void __fastcall TMainForm::BarBtn_FixViewClick(TObject *Sender)
{
TsgCADImage *newImage;
PaintBox = new TsgDrawingNavigator(this);
PaintBox->Parent = Panel1;
PaintBox->Align = alClient;
newImage = new TsgCADImage();
newImage->Converter->InitializeSections();
newImage->CurrentLayout = newImage->Layouts[0];
PaintBox->BeginUpdate();
PaintBox->Picture->Graphic = newImage;
CADImage = (TsgCADImage *)(PaintBox->Picture->Graphic);
CreateLine(MakeFPoint(0, 0, 0), MakeFPoint(50, 50, 0));
PaintBox->EndUpdate();
CADImage->GetExtents();
PaintBox->ShowRect(MakeFRect(-10, 100, 0, 100, -10, 0)); //нормально
PaintBox->ShowRect(MakeFRect(-10, 2000, 0, 2000, -10, 0)); //некорректно
delete newImage;
}
//---------------------------------------------------------------------------
TsgDXFLine *TMainForm::CreateLine(TFPoint StartPoint, TFPoint EndPoint)
{
TsgDXFLine *NewLine;
NewLine = new TsgDXFLine();
NewLine->Point = StartPoint;
NewLine->Point1 = EndPoint;
NewLine->Color = clBlack;
NewLine->LineWeight = 0.1;
AddEntity(CADImage->Converter, csEntities, NewLine);
return NewLine;
}
//---------------------------------------------------------------------------
void TMainForm::AddEntity(TsgDXFConverter *AConverter, TConvSection sect, TsgDXFEntity *AEntity)
{
AConverter->Sections[sect]->AddEntity(AEntity);
if (AConverter->OnCreate)
AConverter->OnCreate(AEntity);
AConverter->Loads(AEntity);
}
//---------------------------------------------------------------------------
Re: Проблемы с ShowRect()
Здравствуйте.
Аргументом функции ShowRect является прямоугольная область чертежа, но не объекта TsgDrawingNavigator. Текущая реализация функции позволяет вызывать ShowRect для отрисовки областей чертежа не превосходящих его размеры. Постараемся добавить в функцию возможность корректного выполнения для отрисовки больших областей.
Александр.
Аргументом функции ShowRect является прямоугольная область чертежа, но не объекта TsgDrawingNavigator. Текущая реализация функции позволяет вызывать ShowRect для отрисовки областей чертежа не превосходящих его размеры. Постараемся добавить в функцию возможность корректного выполнения для отрисовки больших областей.
Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support
Re: Проблемы с ShowRect()
Функция ShowPoint может быть также использована для отображения требуемой области чертежа. Для этого выполните отрисовку чертежа по размерам, после чего пересчитайте масштабный коэффициент для отрисовки требуемой ширины или высоты, например:Такой метод имеет небольшую погрешность, которая будет заметна при значении требуемой ширины (высоты) многократно большем соответствующего размера чертежа.
Александр.
Code: Select all
Img.IsWithoutBorder := true;
sgPaintBox.FitToSize();
point := MakeFPoint((Img.PureExtents.Right-Img.PureExtents.Left)/2 + Img.PureExtents.Left, (Img.PureExtents.Top - Img.PureExtents.Bottom)/2 + Img.PureExtents.Bottom, 0);
sgPaintBox.ShowPoint(point, sgPaintBox.Scale*(Img.PureExtents.Right - Img.PureExtents.Left)/требуемая_ширина);
Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support