Вставить AddScaledDXFEx в нужные координаты пространства модели

Обсуждение вопросов импорта поддерживаемых форматов
Post Reply
Sifont
Posts: 8
Joined: 21 Dec 2017, 20:33

Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by Sifont » 17 Feb 2020, 13:58

Добрый день!
Вставляю новый чертеж в текущий с помощью функции AddScaledDXFEx

Code: Select all

vIns:=img.AddScaledDXFEx(vCADFile,'vIns_Name',MakeFPoint(0,0,0),MakeFPoint(1,1,1),0);
По документации понял что координаты блока считаются в своем пространстве блока.
Вопрос - как мне его вставить сразу в нужно мне место текущего пространства модели?

(Например в 0,0,0 координаты текущего пространства)

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

Re: Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by support » 18 Feb 2020, 22:30

Здравствуйте.

Фактически метод AddScaledDXFEx вставляет в текущий чертеж ссылку на другой (новый) чертеж, блок внешней ссылки не включает в себя объекты нового чертежа. Из вашего описания не совсем понятно, что подразумевается под "координатами блока" и что необходимо вставить в указанное место текущего пространства модели. Если необходимо вставить новый чертеж в точку с координатами (0,0,0) пространства модели, то ваш код это как раз и делает.

Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Sifont
Posts: 8
Joined: 21 Dec 2017, 20:33

Re: Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by Sifont » 19 Feb 2020, 14:59

Здравствуйте!
support wrote:
18 Feb 2020, 22:30
Если необходимо вставить новый чертеж в точку с координатами (0,0,0) пространства модели, то ваш код это как раз и делает.
Нарисовал линию и вставил новый чертеж в одни и те же координаты (0,0,0):

Code: Select all

vCADFile:= TsgCADDXFImage.Create;
vCADFile.IsWithoutBorder := True;
vCADFile.LoadFromFile(fn);
vCADFile.GetExtents;

vIns:=img.AddScaledDXFEx(vCADFile,'vInsss_'+IntToStr(Random(1000)),
MakeFPoint(0, 0, 0),MakeFPoint(1,1,1),0);

Line:=TsgDXFLine.Create;
Line.Point:=MakeFPoint(0,0,0);
Line.Point1:=MakeFPoint(0,100,0);
Line.LineWeight := 1; // 1 mm
Line.Color := clRed;
Img.Converter.Loads(Line);
Img.CurrentLayout.AddEntity(Line);
Img.GetExtents;
Скрин приложил. Вставляет по координатам пространство блока vIns.
Attachments
1.png
1.png (15.51 KiB) Viewed 11052 times

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

Re: Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by support » 19 Feb 2020, 16:41

Здравствуйте.

Спасибо за пояснение.

Точка вставки, которая указывается в методе AddScaledDXFEx, обозначает точку вставки пространства нового чертежа в пространство текущего, а не объектов нового чертежа в пространство текущего. Фактически объекты нового чертежа не вставляются в текущий, вставляется лишь ссылка на новый чертеж. Если необходимо вставить пространство нового чертежа в пространство текущего таким образом, чтобы определенный объект нового чертежа попал в точку (0,0,0) пространства модели текущего, то координаты точки вставки должны быть смещены относительно точки (0,0,0).

Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Sifont
Posts: 8
Joined: 21 Dec 2017, 20:33

Re: Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by Sifont » 20 Feb 2020, 13:25

Здравствуйте. Спасибо за ответ.
Смысл понял.

Скопировал в новый блок на текущий чертеж, все равно координаты остаются внутри блока.
Как сделать чтобы координаты совпадали с пространством модели текущего чертежа?

Code: Select all

var
block:TsgDXFBlock;
fn:String;
vCADFile:TsgCADDXFImage;
i:integer;
FObject:TsgDXFEntity;
insert:TsgDXFInsert;
begin

block := TsgDXFBlock.Create;
block.Name := 'my_block';

fn:='1.dxf';
vCADFile:= TsgCADDXFImage.Create;
vCADFile.IsWithoutBorder := True;
vCADFile.LoadFromFile(fn);

//загоняем все объекты в наш блок
for I := 0 to vCADFile.Converter.Sections[csEntities].Count - 1 do
begin
FObject:=vCADFile.Converter.Entities[i];
block.AddEntity(FObject);
end;

insert := TsgDXFInsert.Create;
insert.Block := block;

Img.Converter.Loads(insert);
Img.Converter.OnCreate(insert);
Img.CurrentLayout.AddEntity(insert);
Img.GetExtents;

//пытаюс переместить новый блок
insert.Point:=MakeFPoint(0,0,0);
Img.Converter.Loads(insert);
Img.GetExtents;

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

Re: Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by support » 20 Feb 2020, 16:25

Sifont wrote:
20 Feb 2020, 13:25
Как сделать чтобы координаты совпадали с пространством модели текущего чертежа?
Добавьте объекты нового чертежа в пространство модели текущего, без создания блока.

Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Sifont
Posts: 8
Joined: 21 Dec 2017, 20:33

Re: Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by Sifont » 21 Feb 2020, 06:55

Мне в дальнейшем нужно работать как с блоком, почему в новом блоке пространство чертежа добавляемых объектов?

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

Re: Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by support » 21 Feb 2020, 13:00

Sifont wrote:
21 Feb 2020, 06:55
Мне в дальнейшем нужно работать как с блоком, почему в новом блоке пространство чертежа добавляемых объектов?
На мой взгляд, это логично, ведь вы добавляете объекты в блок, не меняя их координат.

Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Sifont
Posts: 8
Joined: 21 Dec 2017, 20:33

Re: Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by Sifont » 22 Feb 2020, 18:00

Добрый день!
Понял, можете тогда написать формулы расчета левого нижнего угла чертежа в блоке в текущей модели объектов с учетом произвольного угла поворота?
А то голова пухнет с этими координатами, мне нужно перемещать и крутить текущий блок из другого файла в текущих координатах пространства модели.

Есть функция FPointXMat -получить координаты точки в пространстве модели для объекта в блоке.
А мне получается нужна обратная. Получить координаты для блока в текущем пространстве модели. Что бы переместить его в нужно место.

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

Re: Вставить AddScaledDXFEx в нужные координаты пространства модели

Post by support » 25 Feb 2020, 16:55

Sifont wrote:
22 Feb 2020, 18:00
Понял, можете тогда написать формулы расчета левого нижнего угла чертежа в блоке в текущей модели объектов с учетом произвольного угла поворота?
В пространстве модели блок представлен объектом Вставка (TsgDXFInsert). Габариты вставки блока с учетом поворота определяются через свойство TsgDXFInsert.Box. Насколько я понимаю, вам необходимо определить координаты левого нижнего угла вставки блока в пространстве модели. Если так, то координата X левого нижнего угла определяется через свойство TsgDXFInsert.Box.Left, а координата Y - через TsgDXFInsert.Box.Bottom.

Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

Post Reply