how to get real coordinates for Insertion of a block

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

Moderators: SDS, support, admin

Post Reply
pavel.grigoryev
Posts: 4
Joined: 05 Jul 2019, 13:35

how to get real coordinates for Insertion of a block

Post by pavel.grigoryev » 05 Jul 2019, 13:48

There is a lot of insertions of one block in a CADImage. Block contains some set of lines.
How to calculate real coordinates for a specific insertion?
Didn't found example in Demos.

Thanks

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

Re: how to get real coordinates for Insertion of a block

Post by support » 05 Jul 2019, 20:55

Hello Pavel,

Real coordinates of block entities for a specific insertion (TsgDXFInsert object) are calculated relatively to the insertion point (TsgDXFInsert.Point). You need to add the insertion point coordinates and coordinates of TsgDXFLine (or any other entity) in the block using an AddFPoint function which is implemented in sgFunction.pas. For example:

Code: Select all

var
  vStartPoint, vEndPoint: TFPoint;
  vDXFInsert: TsgDXFInsert;
...

vStartPoint := AddFPoint(vDXFInsert.Point, TsgDXFLine(vDXFInsert.Block.Entities[I]).Point);
vEndPoint := AddFPoint(vDXFInsert.Point, TsgDXFLine(vDXFInsert.Block.Entities[I]).Point1);
Mikhail
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support

pavel.grigoryev
Posts: 4
Joined: 05 Jul 2019, 13:35

Re: how to get real coordinates for Insertion of a block

Post by pavel.grigoryev » 08 Jul 2019, 19:04

Thanks for reply.

I've looked in source of the AddFPoint function. There is nothing about such Insertion parameters as Scale and Angle. May be I need some function that use Matrix property?
Block object also has property Offset. Should it be involved in calculations too?

Code: Select all

Block #1 (24 lines): 
Offset: X=0,00 Y=0,00; Box: L=811330,54 T=717214,55 R=811363,28 B=717188,29

Insert:
Angle: 0,00;   Scale: X=-1,00 Y=1,00; Point: X=810463,56  Y:-716702,68
Angle: 7,49;   Scale: X=1,00 Y=1,00;  Point: X=-709634,02 Y:-816594,83
Angle: 101,27; Scale: X=1,00 Y=1,00;  Point: X=863204,19  Y:-655433,75

Block #2 (340 lines): 
Offset: X=0,00 Y=0,00; Box: L=-188,51 T=184,80 R=175,03 B=-150,13

Insert:
Angle: 0,00; Scale: X=0,49 Y=0,49; Point: X=-465,40 Y:533,48
Angle: 0,00; Scale: X=0,49 Y=0,49; Point: X=-789,31 Y:533,48

pavel.grigoryev
Posts: 4
Joined: 05 Jul 2019, 13:35

Re: how to get real coordinates for Insertion of a block

Post by pavel.grigoryev » 09 Jul 2019, 15:43

better solution - using FPointXMat function.

Code: Select all

var
  i: integer;
  aMatrix: TFMatrix;
  vStartPoint, vEndPoint: TFPoint;
  vDXFInsert: TsgDXFInsert;
...  
aMatrix := vDXFInsert.GetMatrix;
for i := 0  to vDXFInsert.Block.Count-1 do
begin
  vStartPoint := FPointXMat(TsgDXFLine(vDXFInsert.Block.Entities[i]).Point, aMatrix);
  vEndPoint := FPointXMat(TsgDXFLine(vDXFInsert.Block.Entities[i]).Point1, aMatrix);
...
end;

Post Reply