Вставить AddScaledDXFEx в нужные координаты пространства модели
Вставить AddScaledDXFEx в нужные координаты пространства модели
Добрый день!
Вставляю новый чертеж в текущий с помощью функции AddScaledDXFEx
По документации понял что координаты блока считаются в своем пространстве блока.
Вопрос - как мне его вставить сразу в нужно мне место текущего пространства модели?
(Например в 0,0,0 координаты текущего пространства)
Вставляю новый чертеж в текущий с помощью функции AddScaledDXFEx
Code: Select all
vIns:=img.AddScaledDXFEx(vCADFile,'vIns_Name',MakeFPoint(0,0,0),MakeFPoint(1,1,1),0);
Вопрос - как мне его вставить сразу в нужно мне место текущего пространства модели?
(Например в 0,0,0 координаты текущего пространства)
Re: Вставить AddScaledDXFEx в нужные координаты пространства модели
Здравствуйте.
Фактически метод AddScaledDXFEx вставляет в текущий чертеж ссылку на другой (новый) чертеж, блок внешней ссылки не включает в себя объекты нового чертежа. Из вашего описания не совсем понятно, что подразумевается под "координатами блока" и что необходимо вставить в указанное место текущего пространства модели. Если необходимо вставить новый чертеж в точку с координатами (0,0,0) пространства модели, то ваш код это как раз и делает.
Михаил
Фактически метод AddScaledDXFEx вставляет в текущий чертеж ссылку на другой (новый) чертеж, блок внешней ссылки не включает в себя объекты нового чертежа. Из вашего описания не совсем понятно, что подразумевается под "координатами блока" и что необходимо вставить в указанное место текущего пространства модели. Если необходимо вставить новый чертеж в точку с координатами (0,0,0) пространства модели, то ваш код это как раз и делает.
Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support
Re: Вставить AddScaledDXFEx в нужные координаты пространства модели
Здравствуйте!
Скрин приложил. Вставляет по координатам пространство блока vIns.
Нарисовал линию и вставил новый чертеж в одни и те же координаты (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;
- Attachments
-
- 1.png (15.51 KiB) Viewed 11781 times
Re: Вставить AddScaledDXFEx в нужные координаты пространства модели
Здравствуйте.
Спасибо за пояснение.
Точка вставки, которая указывается в методе AddScaledDXFEx, обозначает точку вставки пространства нового чертежа в пространство текущего, а не объектов нового чертежа в пространство текущего. Фактически объекты нового чертежа не вставляются в текущий, вставляется лишь ссылка на новый чертеж. Если необходимо вставить пространство нового чертежа в пространство текущего таким образом, чтобы определенный объект нового чертежа попал в точку (0,0,0) пространства модели текущего, то координаты точки вставки должны быть смещены относительно точки (0,0,0).
Михаил
Спасибо за пояснение.
Точка вставки, которая указывается в методе AddScaledDXFEx, обозначает точку вставки пространства нового чертежа в пространство текущего, а не объектов нового чертежа в пространство текущего. Фактически объекты нового чертежа не вставляются в текущий, вставляется лишь ссылка на новый чертеж. Если необходимо вставить пространство нового чертежа в пространство текущего таким образом, чтобы определенный объект нового чертежа попал в точку (0,0,0) пространства модели текущего, то координаты точки вставки должны быть смещены относительно точки (0,0,0).
Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support
Re: Вставить AddScaledDXFEx в нужные координаты пространства модели
Здравствуйте. Спасибо за ответ.
Смысл понял.
Скопировал в новый блок на текущий чертеж, все равно координаты остаются внутри блока.
Как сделать чтобы координаты совпадали с пространством модели текущего чертежа?
Смысл понял.
Скопировал в новый блок на текущий чертеж, все равно координаты остаются внутри блока.
Как сделать чтобы координаты совпадали с пространством модели текущего чертежа?
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;
Re: Вставить AddScaledDXFEx в нужные координаты пространства модели
Добавьте объекты нового чертежа в пространство модели текущего, без создания блока.
Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support
Re: Вставить AddScaledDXFEx в нужные координаты пространства модели
Мне в дальнейшем нужно работать как с блоком, почему в новом блоке пространство чертежа добавляемых объектов?
Re: Вставить AddScaledDXFEx в нужные координаты пространства модели
На мой взгляд, это логично, ведь вы добавляете объекты в блок, не меняя их координат.
Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support
Re: Вставить AddScaledDXFEx в нужные координаты пространства модели
Добрый день!
Понял, можете тогда написать формулы расчета левого нижнего угла чертежа в блоке в текущей модели объектов с учетом произвольного угла поворота?
А то голова пухнет с этими координатами, мне нужно перемещать и крутить текущий блок из другого файла в текущих координатах пространства модели.
Есть функция FPointXMat -получить координаты точки в пространстве модели для объекта в блоке.
А мне получается нужна обратная. Получить координаты для блока в текущем пространстве модели. Что бы переместить его в нужно место.
Понял, можете тогда написать формулы расчета левого нижнего угла чертежа в блоке в текущей модели объектов с учетом произвольного угла поворота?
А то голова пухнет с этими координатами, мне нужно перемещать и крутить текущий блок из другого файла в текущих координатах пространства модели.
Есть функция FPointXMat -получить координаты точки в пространстве модели для объекта в блоке.
А мне получается нужна обратная. Получить координаты для блока в текущем пространстве модели. Что бы переместить его в нужно место.
Re: Вставить AddScaledDXFEx в нужные координаты пространства модели
В пространстве модели блок представлен объектом Вставка (TsgDXFInsert). Габариты вставки блока с учетом поворота определяются через свойство TsgDXFInsert.Box. Насколько я понимаю, вам необходимо определить координаты левого нижнего угла вставки блока в пространстве модели. Если так, то координата X левого нижнего угла определяется через свойство TsgDXFInsert.Box.Left, а координата Y - через TsgDXFInsert.Box.Bottom.
Михаил
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support