The IDLffDXF::GetEntity function method returns an array of data for the requested entity type.
Result = Obj->[IDLffDXF::]GetEntity(Type [, BLOCK=string] [, INDEX=value] [, LAYER=string])
Returns one of the named structure formats described in Structure Formats.
The integer DXF entity type from which to obtain the geometry information.
Set this keyword to a block name specifying the graphic block from which to obtain the entity geometry information. The default is all blocks. Setting this keyword to an empty string '' '' will cause this method to only return entities from the default DXF entity block.
Set this keyword to a scalar index or a long array of indices of entities of the given type to return. If not set, this method returns all entities for the given type.
Set this keyword to a string value containing the layer name to obtain the entities from. The default is all layers.
The name of the block this entity is in (these may be in the default block “”).
A color index value into the current object palette with 0=use block color and 256=use layer color.
The DXF extrusion vector (if any).
The name of the layer this entity is in (the default layer is '0').
Defined the same as the user linestyle for IDLgrPolyline::Init.
Note: IDL will always return a solid line regardless of the linestyle in DXF
In AutoCAD units.
Set to one of the values listed in IDLffDXF::GetContents.
Note: It is the user’s responsibility to free all the pointers returned in these structures when the entity is no longer needed.
Field |
Data Type |
PT0 |
Double [3] |
PT1_OFFSET |
Double [3] |
MIN_TO_MAJ_RATIO |
Double |
START_ANGLE |
Double |
END_ANGLE |
Double |
EXTRUSION |
Double [3] |
LINESTYLE |
Integer [2] |
THICKNESS |
Double |
COLOR |
Integer |
DXF_TYPE |
Integer |
BLOCK |
String |
LAYER |
String |
This object is centered at PT0 and has a radius defined by the vector PT1_OFFSET. This vector determines the length and orientation of the major axis of an ellipse as well.
The MIN_TO_MAJ_RATIO value specifies the length of the minor axis as a fraction of the major axis length. For a circle, this value is 1.0.
The START_ANGLE and END_ANGLE values select the portion of the curve to be drawn. If they are equal, the entire circle or ellipse is drawn.
Field |
Data Type |
VERTICES |
Pointer (to an array of 3-D points) |
CONNECTIVITY |
Pointer (to an array of integers) |
VERTEX_COLORS |
Pointer (to an array of integers) |
MESH_DIMS |
Integer [2] |
CLOSED |
Integer [2] |
COLOR |
Integer |
EXTRUSION |
Double [3] |
FIT_TYPE |
Integer |
CURVE_FIT |
Integer |
SPLINE_FIT |
Integer |
DXF_TYPE |
Integer |
BLOCK |
String |
LAYER |
String |
VERTICES is a pointer to an array of dimension [3, n] containing the points for this entity.
CONNECTIVITY is the array used to connect these points into polygons (see the POLYGONS keyword for IDLgrPolygon::Init). If this array is not present, the connectivity is implicit in (U, V) space defined by the values in MESH_DIMS; the vertices represent a quad mesh of dimensions (MESH_DIMS[0], MESH_DIMS[1]).
Note: If a connectivity array is not supplied and the MESH_DIMS are left at 0,0, then IDL will tessellate the vertex list and store the polygon with the resulting connectivity list. If tessellation fails, IDL will throw an error that should be detected and dealt with using the CATCH mechanism. An alternative to this is to pass the polygon to the IDLgrTessellator object, which returns a zero instead of throwing an error if tessellation fails. The results of a successful tessellation can be put into a DXF entity and passed to the IDLffDXF object, which will not attempt to tessellate the polygon as it has already been tessellated.
VERTEX_COLORS points to an array of color index values for each of the vertices. If a quad mesh is being returned, it can be closed in either dimension according to the CLOSED array.
FIT_TYPE, CURVE_FIT, and SPLINE_FIT return the type of curve fit (if any) this polygon assumes.
Field |
Data Type |
VERTICES |
Pointer (to an array of 3-D points) |
CONNECTIVITY |
Pointer (to an array of integers) |
VERTEX_COLORS |
Pointer (to an array of integers) |
COLOR |
Integer |
MESH_DIMS |
Integer [2] |
CLOSED |
Integer [2] |
THICKNESS |
Double |
LINESTYLE |
Integer [2] |
EXTRUSION |
Double [3] |
FIT_TYPE |
String |
CURVE_FIT |
Integer |
SPLINE_FIT |
Integer |
DXF_TYPE |
Integer |
BLOCK |
String |
LAYER |
String |
VERTICES is a pointer to an array of dimension [3, n] containing the points for this entity.
CONNECTIVITY is the array used to connect these points into polylines (see the POLYLINES keyword for IDLgrPolyline::Init). If this array is not present, the connectivity is implicit in (U, V) space defined by the values in MESH_DIMS; the vertices represent a quad mesh of dimensions (MESH_DIMS[0], MESH_DIMS[1]).
VERTEX_COLORS points to an array of color index values for each of the vertices. If a quad mesh is being returned, it can be closed in either dimension according to the CLOSED array.
FIT_TYPE, CURVE_FIT, and SPLINE_FIT return the type of curve fit (if any) this polyline assumes.
Field |
Data Type |
PT0 |
Double [3] |
UCSX_ANGLE |
Double |
THICKNESS |
Double |
COLOR |
Integer |
DXF_TYPE |
Integer |
BLOCK |
String |
LAYER |
String |
PT0 is the location of the point in space.
UCSX_ANGLE is an internal DXF orientation parameter used for symbol plotting.
Field |
Data Type |
CTR_PTS |
Pointer |
FIT_PTS |
Pointer |
KNOTS |
Pointer |
WEIGHTS |
Pointer |
COLOR |
Integer |
DEGREE |
Integer |
PERIODIC |
Integer |
RATIONAL |
Integer |
PLANAR |
Integer |
LINEAR |
Integer |
KNOT_TOLERANCE |
Double |
CTL_TOLERANCE |
Double |
FIT_TOLERANCE |
Double |
START_TANGENT |
Double [3] |
END_TANGENT |
Double [3] |
THICKNESS |
Double |
LINESTYLE |
Integer [2] |
EXTRUSION |
Double [3] |
DXF_TYPE |
Integer |
BLOCK |
String |
LAYER |
String |
This structure is returned verbatim from the DXF spline structure without interpretation. It is up to the user to interpret these values.
Field |
Data Type |
PT0 |
Double [3] |
TEXT_STR |
String |
COLOR |
Integer |
HEIGHT |
Double |
WIDTH_FACTOR |
Double |
BOX_WIDTH |
Double |
DIRECTION |
Double [3] |
ROT_ANGLE |
Double |
JUSTIFICATION |
Integer (0=left, 1=center, 2=right, 3=aligned, 4=middle, 5=fit) |
VERTICAL_ALIGN |
Integer (0=baseline, 1=bottom, 2=middle, 3=top) |
SHAPE_FILE |
String |
THICKNESS |
Double |
EXTRUSION |
Double [3] |
DXF_TYPE |
Integer |
BLOCK |
String |
LAYER |
String |
PT0 is the location of the text string.
TEXT_STR is the actual string.
HEIGHT specifies the overall scaling of the glyphs while WIDTH_FACTOR is a correction in the baseline direction (anisotropic scaling). For multi-line text, BOX_WIDTH determines where the line breaks should be placed (0.0 for single line text).
The text baseline is specified by DIRECTION and its rotation about the z-axis is specified by ROT_ANGLE. Justification is specified by JUSTIFICATION and VERTICAL_ALIGN. SHAPE_FILE is the name of the glyph file used to image this string. The shape file is NOT read by IDL.
Field |
Data Type |
PT0 |
Double [3] |
UNIT_VEC |
Double [3] |
COLOR |
Integer |
THICKNESS |
Double |
LINESTYLE |
Integer [2] |
EXTRUSION |
Double [3] |
DXF_TYPE |
Integer |
BLOCK |
String |
LAYER |
String |
PT0 is the start of a ray or a point on a infinite line in space in the case of an XLINE entity.
UNIT_VEC determines the direction of the line in space.
Field |
Data Type |
SCALE |
Double [3] |
PT0 |
Double [3] |
ROTATION |
Double |
INSTANCE_BLOCK |
String |
NUM_ROW_COL |
Integer [2] |
DISTANCE_BETWEEN |
Double [2] |
DXF_TYPE |
Integer |
BLOCK |
String |
COLOR |
Integer |
LAYER |
String |
The insert entity allows for the “instancing” of a block in a grid fashion.
INSTANCE_BLOCK is the name of a block to repeat.
The block is scaled by SCALE and rotated about the Z axis by ROTATION. The grid begins at PT0 and contains the number of rows and columns specified by NUM_ROW_COL (Note: 0 rows or columns will always give a single instance of the block).
The spacing of the grid is specified by DISTANCE_BETWEEN.
Field |
Data Type |
PT0 |
Double [3] |
COLOR |
Integer |
NAME |
String |
DXF_TYPE |
Integer |
This entity specifies a BLOCK. Blocks have a location in space (PT0) [objects in the block are interpreted relative to this point], a name, and a COLOR. They are not contained in layers or other blocks, so these fields are not present.
Field |
Data Type |
COLOR |
Integer |
NAME |
String |
DXF_TYPE |
Integer |
This entity specifies a LAYER. Layer is a NAME and a COLOR. They are not contained in layers or other blocks, so these fields are not present.
This example illustrates the difference between the GetEntity and GetContents methods within the IDLffDXF object method. The GetContents method gives a description of the content of the file read, listing the entity types and the number of occurrences. GetEntity accesses the values returned by GetContents and determines how the entities can be logically combined into common structures for drawing efficiency.
PRO view_heart
; Determine path to data file.
heartFile = FILEPATH(’heart.dxf’, $
SUBDIRECTORY = [’examples’, ’data’])
; Initialize DXF data access object.
oHeart = OBJ_NEW(’IDLffDXF’)
; Read data within DXF file into access object.
status = oHeart->Read(heartFile)
; Determine what type of entities (and how many of
; each entity) exist in the file.
heartTypes = oHeart->GetContents(COUNT = heartCounts)
PRINT, ’Entity Types: ’, heartTypes
PRINT, ’Count of Types: ’, heartCounts
; Initialize a model for displaying polygon and polyline
; objects.
oModel = OBJ_NEW(’IDLgrModel’)
; Obtain the tissue data. The tissue is accessed into
; IDL as a single polygon.
tissue = oHeart->GetEntity(heartTypes[1])
HELP, tissue
HELP, tissue, /STRUCTURE
; Initialize color parameter.
tissueColor = [255, 0, 0]
; Initialize polygon data.
vertices = tissue.vertices
connectivity = tissue.connectivity
; Initialize the polygon object.
oTissue = OBJ_NEW(’IDLgrPolygon’, $
*vertices, POLYGONS = *connectivity, $
COLOR = tissueColor)
; Add the polygon to the model.
oModel->Add, oTissue
; Clean-up all the related pointers.
PTR_FREE, tissue.vertices, tissue.connectivity, $
tissue.vertex_colors
PTR_FREE, vertices, connectivity
; Display the polylines and the polygon in the XOBJVIEW
; utility.
XOBJVIEW, oModel, /BLOCK, SCALE = 0.75
; Clean-up the object references.
OBJ_DESTROY, [oHeart, oModel]
END
An XOBJVIEW window with the mesh heart object appears when this program is compiled and run. The following lines are found in the workbench Output Log window.
IDL> view_heart
% Compiled module: VIEW_HEART.
% Compiled module: FILEPATH.
% Loaded DLM: DXF.
Entity Types: 7 10 18 20
Count of Types: 13 1624 1 2
The Entity Types (7, 10, 18, and 20) are the GetContents method return values corresponding to the occurrence of DXF ENTITY types found in the object: POLYLINES, FACE3D, BLOCK, and LAYER, respectively. Note there are a total of 1624 FACE3D entity types, but for efficiency and speed IDL logically combines all of the similar entities into a single structure that can be used in an IDLgrPolygon object. This is illustrated by the output resulting from the first Help command in the program as shown below.
TISSUE STRUCT =->IDL_DXF_POLYGON Array[1]
** Structure IDL_DXF_POLYGON, 13 tags, length=72:
EXTRUSION DOUBLE Array[3]
VERTICES POINTER <PtrHeapVar3>
CONNECTIVITY POINTER <PtrHeapVar4>
VERTEX_COLORS POINTER <PtrHeapVar5>
MESH_DIMS INT Array[2]
CLOSED INT Array[2]
COLOR INT 256
FIT_TYPE INT -1
CURVE_FIT INT 0
SPLINE_FIT INT 0
DXF_TYPE INT 10
BLOCK STRING ’’
LAYER STRING ’0----’
% Compiled module: XOBJVIEW.
% Compiled module: UNIQ.
% Compiled module: IDENTITY.
% Compiled module: XMANAGER.
Note that the tissue is represented as an array of polygons having 1 element. This is evident by the mesh representation of the heart object showing the 1624 individual polygons as a single object.
5.2 |
Introduced |