Entities of specific layer
Posted: 03 Apr 2006, 13:52
Describe me, pls, the way to iterate all entities of specific layer.
Thank you for your help.
Thank you for your help.
CADSoftTools - AutoCAD DWG DXF HPGL (PLT) SVG CGM STEP IGES STL SAT viewers, converters and developer tools. Delphi and C# source code.
https://cadsofttools.com/forum/
Code: Select all
<b>procedure</b> TForm1.IterateLayer1Click(Sender: TObject);
<b>var</b>
I: Integer;
vImg: TsgDXFImage;
<b>begin
try</b>
// sgPaintBox: TsgImage
vImg := TsgDXFImage(sgPaintBox.Picture.Graphic);
<b>except</b>
// sgPaintBox.Picture.Graphic is not TsgDXFImage
Exit;
<b>end</b>;
<b>for</b> I := 0 <b>to</b> vImg.Converter.Counts[csLayers] - 1 <b>do
begin
if</b> (vImg.Converter.Layers[I].Name = 'Layer1') <b>then</b>
vImg.Converter.Layers[I].Frozen := False
<b>else</b>
vImg.Converter.Layers[I].Frozen := True;
<b>end</b>;
// iterate: vImg.CurrentLayout.Iterate(vImg.Converter, Proc);
// Proc - user defined procedure
sgPaintBox.Invalidate; // in Viewer demo allows to show "Layer1" only
<b>end</b>;
Code: Select all
TForm1 = <b>class</b>(TForm)
...
<b>private</b>
...
FCADParams: TsgCADIterate;
<b>public</b>
...
<b>procedure</b> ReadLayerEntities(Entity: TsgDXFEntity);
<b>var</b>
...
MyLayerName: <b>String</b>;
<b>procedure</b> TForm1.IterateLayer1Click(Sender: TObject);
<b>var</b>
vImg: TsgDXFImage;
<b>begin</b>
MyLayerName := 'Layer1';
<b>try</b>
// sgPaintBox: TsgImage
vImg := TsgDXFImage(sgPaintBox.Picture.Graphic);
<b>except</b>
// sgPaintBox.Picture.Graphic is not TsgDXFImage
Exit;
<b>end</b>;
vImg.CurrentLayout.Iterate(vImg.Converter, ReadLayerEntities);
<b>end</b>;
<b>procedure</b> TForm1.ReadLayerEntities(Entity: TsgDXFEntity);
<b>var</b>
S: <b>String</b>;
L: TsgDXFLayer;
<b>begin</b>
DoScale2D(FCADParams); // calculates 2d scale and rotation
L := EntLayer(Entity, FCADParams.Insert);
<b>if</b> L <> <b>nil then
if</b> L.Name = MyLayerName <b>then
begin</b>
S := Entity.EntName;
// example
// for instance:
// ShowMessage(S);
<b>end</b>;
<b>end</b>;