How to know if a layer is from an xref

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

Moderators: SDS, support, admin

Post Reply
fabzouni
Posts: 10
Joined: 15 May 2006, 14:29
Location: France

How to know if a layer is from an xref

Post by fabzouni » 29 Jun 2006, 18:47

Hi,

When i get the list of an autocad file, I have all the layers of this file but also the ones that are defined into an external reference file.
These "external layers" name are like "external filename|layer name"

I would like to know if the layer if defined into an external file or not.

I've seen that the property TsgDXFLayer.Flags get the value
16 "if table entry is externally dependent on an xref", but it seems not to be exactly what i need.

Any Idea ??

Thanks
Fabzouni

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

Post by support » 30 Jun 2006, 12:36

Hello,

The following code allows to get layers in the XRef.

// Based on Viewer demo (..\cadimportvcl\Delphi\Demos\Viewer\.. folder)

Code: Select all

<b>procedure</b> TForm1.Button1Click(Sender: TObject);
  { DoXRefsLayers
  
    Example of access to XRefs Layers
    MAINimage - the file where Xrefs have been inserted. }
  <b>procedure</b> DoXRefsLayers(MAINimage: TsgDXFImage; <b>const</b> AYourXrefName: <b>string</b>);
  <b>var</b>
    I, J: Integer;
    vXRef: TsgDXFXRef;
    vImg: TsgDXFImage;
    vLayer: TsgDXFLayer;
  <b>begin</b>
    <b>for</b> I := 0 <b>to</b> MAINimage.Converter.XRefs.Count - 1 <b>do
    begin</b>
      vXRef := TsgDXFXRef(MAINimage.Converter.XRefs.Items[I]);
      // Code below is executed for your specified Xref
      <b>if</b> vXRef.Name = AYourXrefName <b>then
      begin</b>
        vImg := TsgDXFImage(vXRef.CADImage);
        <b>for</b> J := 0 <b>to</b> vImg.Converter.Counts[csLayers] - 1 <b>do
        begin</b>
          vLayer := TsgDXFLayer(vImg.Converter.Sections[csLayers].Entities[J]);
          // ... Do vLayer (your code) ... //
        <b>end</b>;
      <b>end</b>;
    <b>end</b>;
  <b>end</b>;
<b>begin</b>
  DoXRefsLayers(TsgDXFImage(sgPaintBox.Picture.Graphic), 'YOUR_XREF_NAME');
<b>end</b>;
The following line allows to get layers of the file itself:

Code: Select all

MAINimage.Converter.Sections[csLayers].Entities[J]

Sergey.



please post questions to the forum or write to support@cadsofttools.com

Post Reply