CadImportVCL coordinates

Обсуждение вопросов импорта поддерживаемых форматов
Mikhail Zhilin
Posts: 39
Joined: 04 Aug 2011, 11:31
Location: Russia

Re: CadImportVCL coordinates

Post by Mikhail Zhilin » 11 Sep 2012, 14:47

Прямоугольник добавляется как замкнутая полилиния, пример добавления полилинии есть в демо Add new entities.

Чтобы получить мировые координаты точки чертежа по клику на TsgDrawingNavigator, необходимо описать следующий обработчик события:

Code: Select all

procedure TForm1.sgPaintBoxMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  vPt: TFPoint;
  vUnits: string;
begin
  vPt := DNavigator.GetDrawingCoords(X, Y, vUnits);
  Form1.Caption := Format('%.3f; %.3f; %.3f', [vPt.X, vPt.Y, vPt.Z]);
  if vUnits <> '' then
    Form1.Caption := Form1.Caption + ' (' + vUnits + ')';
end;
Данный обработчик необходимо повесить на событие OnMouseDown экземпляра объекта TsgDrawingNavigator (в Вашем коде это DNavigator):

Code: Select all

procedure TForm1.FormCreate(Sender: TObject);
begin
  ...
  DNavigator.OnMouseDown := sgPaintBoxMouseDown;
end;
Михаил

ivantambov
Posts: 15
Joined: 27 Aug 2012, 20:00

Загрузка блоков

Post by ivantambov » 09 Oct 2012, 08:16

Приведите пожалуйста пример вставки блока, в примерах не нашёл.
С Уважением Иван.

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

Re: CadImportVCL coordinates

Post by support » 09 Oct 2012, 18:01

Здравствуйте Иван.
Блок не является видимым примитивом чертежа, но содержит другие примитивы. На чертёж может быть добавлена ссылка на блок, например:

Code: Select all

var
  circle: TsgDXFCircle;
  block: TsgDXFBlock;
  insert: TsgDXFInsert;
begin
  circle := TsgDXFCircle.Create;
  circle.Point := MakeFPoint(100, 100, 0);
  circle.Radius := 50;
  circle.Color := clGreen;
  Img.Converter.Loads(circle);
  Img.Converter.OnCreate(circle);

  block := TsgDXFBlock.Create;
  block.Name := 'my_block';
  block.AddEntity(circle);
  Img.Converter.Loads(block);
  Img.Converter.OnCreate(block);
  Img.Converter.Sections[csBlocks].AddEntity(block);

  insert := TsgDXFInsert.Create;
  insert.Block := block;
  insert.Point := MakeFPoint(50, 50, 0);
  insert.Scale := MakeFPoint(1, 2, 0);
  Img.Converter.Loads(insert);
  Img.Converter.OnCreate(insert);
  Img.CurrentLayout.AddEntity(insert);

  Img.GetExtents;
Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

ivantambov
Posts: 15
Joined: 27 Aug 2012, 20:00

Re: CadImportVCL coordinates

Post by ivantambov » 14 Nov 2012, 12:44

В примере Viewer есть пример отображения слоёв, но реализовать не получается, что необходимо создать чтобы перечислить все слои в чертеже в ListBox или StrinGrid.
Приведите пример пожалуйста.
С Уважением Иван.

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

Re: CadImportVCL coordinates

Post by support » 14 Nov 2012, 19:17

Здравствуйте.
К сожалению ваш вопрос не очень понятен, пожалуйста уточните что именно не получается. Доступ к слоям чертежа может быть получен как TsgCADImage.Converter.Layers.

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

ivantambov
Posts: 15
Joined: 27 Aug 2012, 20:00

Re: CadImportVCL coordinates

Post by ivantambov » 16 Nov 2012, 10:58

Я имел ввиду информацию о слоях в текущем чертеже, имя, цвет.
И возможна ли загрузка формата svg, т.к. при загрузке файла Delphi выдаёт сообщение об ошибке: 'Uknown picture file extension (.png)' хотя файл формата svg.
С Уважением Иван.

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

Re: CadImportVCL coordinates

Post by support » 19 Nov 2012, 12:46

Здравствуйте Иван.
Свойства TsgDXFLayer.Name и TsgDXFLayer.Color содержат информацию об имени и цвете слоя. Вы можете получить эти значения для любого члена списка слоёв текущего чертежа. Формат SVG поддерживается библиотекой. Пожалуйста пришлите на почту support@cadsofttools.com или сохраните в этот топик любой SVG файл, демонстрирующий описываемую проблему.

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

ivantambov
Posts: 15
Joined: 27 Aug 2012, 20:00

Re: CadImportVCL coordinates

Post by ivantambov » 19 Nov 2012, 15:58

Вот сам файл: http://files.mail.ru/66HIKO
И ещё вопрос, нет ли такой возможности в компонентах как в автокаде, загрузка чертежа с растровым изображением,
то есть есть чертёж в автокаде, я подгружаю растр работаю с ним сохраняю, потом открываю через компонент и вместо чертежа с растром открывается только векторный чертёж.
И как правильно освобождать память при загрузке следующего чертежа, память расходует около 600 мб при размере svg 29 мб.
С Уважением Иван.

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

Re: CadImportVCL coordinates

Post by support » 26 Nov 2012, 13:25

Здравствуйте.
Ошибок 'Uknown picture file extension (.png)' либо других мы не получаем. файл открывается и отрисовывается.
svg.png
svg.png (32.01 KiB) Viewed 50827 times
Как вы сами пишите
память расходует около 600 мб при размере svg 29 мб
То есть файлы SVG формата открываются.
Не совсем понятно какую команду Автокада вы подразумеваете. Растровое изображение может быть добавлено как примитив Image. Но содержимое Image не редактируется и остаётся растром. Примитив Image поддерживается библиотекой CAD Import VCL. Если в вопросе подразумевался импорт метафайла, то прежде всего метафайл это не растр. Текущей версией библиотеки импорт структуры метафайлов не поддерживается, этот функционал находится в разработке.
Специальных методов для освобождения памяти вызывать не нужно. Метод LoadFromFile/LoadFromStream освобождает память, занимаемую предыдущим чертежом.

Александр.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Post Reply