📄 dgnlib.h
字号:
/****************************************************************************** * $Id: dgnlib.h,v 1.37 2003/11/25 15:47:56 warmerda Exp $ * * Project: Microstation DGN Access Library * Purpose: Definitions of public structures and API of DGN Library. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Avenza Systems Inc, http://www.avenza.com/ * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: dgnlib.h,v $ * Revision 1.37 2003/11/25 15:47:56 warmerda * Added surface type for complex headers: Marius * * Revision 1.36 2003/11/21 16:17:33 warmerda * fix missing handling of min/max Z in DGNCreateMultiPointElem() * * Revision 1.35 2003/11/19 05:26:19 warmerda * added DGNElemTypeHasDispHdr * * Revision 1.34 2003/11/07 13:59:45 warmerda * added DGNLoadTCB() * * Revision 1.33 2003/08/19 20:15:53 warmerda * Added support for Cone (23), 3D surface (18) and 3D solid (19) elements. * Added functions DGNQuaternionToMatrix() and DGNCreateConeElem(). * Marius Kintel * * Revision 1.32 2003/05/21 03:42:01 warmerda * Expanded tabs * * Revision 1.31 2003/05/15 14:47:24 warmerda * implement quaternion support on write * * Revision 1.30 2003/05/12 18:48:57 warmerda * added preliminary 3D write support * * Revision 1.29 2003/01/20 20:07:06 warmerda * added cell header writing api * * Revision 1.28 2002/11/13 21:28:23 warmerda * fix declaration order * * Revision 1.27 2002/11/13 21:26:32 warmerda * added more documentation * * Revision 1.26 2002/11/12 19:44:32 warmerda * added DGNViewInfo support * * Revision 1.25 2002/11/11 20:36:51 warmerda * fix justification list, added create related definitions * * Revision 1.24 2002/10/20 01:50:20 warmerda * added new write prototypes * * Revision 1.23 2002/10/07 13:14:18 warmerda * added association id support * * Revision 1.22 2002/10/07 12:56:04 warmerda * Added DGN_ASSOC_ID. * * Revision 1.21 2002/05/31 03:40:22 warmerda * added improved support for parsing attribute linkages * * Revision 1.20 2002/04/22 20:44:40 warmerda * added (partial) cell library support * * Revision 1.19 2002/03/14 21:38:52 warmerda * added DGNWriteElement, DGNResizeElement, make offset/size manditory * * Revision 1.18 2002/03/12 17:07:26 warmerda * added tagset and tag value element support * * Revision 1.17 2002/02/06 20:33:02 warmerda * preliminary addition of tagset support * * Revision 1.16 2002/01/21 20:50:12 warmerda * added SetSpatialFilter function * * Revision 1.15 2002/01/15 06:38:18 warmerda * added DGNGetShapeFillInfo * * Revision 1.14 2001/12/19 15:29:56 warmerda * added preliminary cell header support * * Revision 1.13 2001/08/21 03:01:39 warmerda * added raw_data support * * Revision 1.12 2001/06/25 15:07:51 warmerda * Added support for DGNElemComplexHeader * Don't include elements with the complex bit (such as shared cell definition * elements) in extents computation for fear they are in a different coord sys. * * Revision 1.11 2001/03/18 16:54:39 warmerda * added use of DGNTestOpen, remove extention test * * Revision 1.10 2001/03/07 19:29:46 warmerda * added support for stroking curves * * Revision 1.9 2001/03/07 13:56:44 warmerda * updated copyright to be held by Avenza Systems * * Revision 1.8 2001/03/07 13:48:59 warmerda * added DGNEIF_DELETED * * Revision 1.7 2001/02/02 22:20:15 warmerda * document DGNElemText, length/height_mult now double * * Revision 1.6 2001/01/16 21:17:28 warmerda * added justification enum * * Revision 1.5 2001/01/16 18:12:02 warmerda * added arc support, color lookup * * Revision 1.4 2001/01/10 16:11:33 warmerda * added lots of documentation, and extents api * * Revision 1.3 2000/12/28 21:28:43 warmerda * added element index support * * Revision 1.2 2000/12/14 17:10:57 warmerda * implemented TCB, Ellipse, TEXT * * Revision 1.1 2000/11/28 19:03:47 warmerda * New * */#ifndef _DGNLIB_H_INCLUDED#define _DGNLIB_H_INCLUDED#include "cpl_conv.h"CPL_C_START#define CPLE_DGN_ERROR_BASE#define CPLE_ElementTooBig CPLE_DGN_ERROR_BASE+1/** * \file dgnlib.h * * Definitions of public structures and API of DGN Library. *//** * DGN Point structure. * * Note that the DGNReadElement() function transforms points into "master" * coordinate system space when they are in the file in UOR (units of * resolution) coordinates. */typedef struct { double x; /*!< X (normally eastwards) coordinate. */ double y; /*!< y (normally northwards) coordinate. */ double z; /*!< z, up coordinate. Zero for 2D objects. */} DGNPoint;/** * Element summary information. * * Minimal information kept about each element if an element summary * index is built for a file by DGNGetElementIndex(). */typedef struct { unsigned char level; /*!< Element Level: 0-63 */ unsigned char type; /*!< Element type (DGNT_*) */ unsigned char stype; /*!< Structure type (DGNST_*) */ unsigned char flags; /*!< Other flags */ long offset; /*!< Offset within file (private) */} DGNElementInfo; /** * Core element structure. * * Core information kept about each element that can be read from a DGN * file. This structure is the first component of each specific element * structure (like DGNElemMultiPoint). Normally the DGNElemCore.stype * field would be used to decide what specific structure type to case the * DGNElemCore pointer to. * */typedef struct { int offset; int size; int element_id; /*!< Element number (zero based) */ int stype; /*!< Structure type: (DGNST_*) */ int level; /*!< Element Level: 0-63 */ int type; /*!< Element type (DGNT_) */ int complex; /*!< Is element complex? */ int deleted; /*!< Is element deleted? */ int graphic_group; /*!< Graphic group number */ int properties; /*!< Properties: ORing of DGNPF_ flags */ int color; /*!< Color index (0-255) */ int weight; /*!< Line Weight (0-31) */ int style; /*!< Line Style: One of DGNS_* values */ int attr_bytes; /*!< Bytes of attribute data, usually zero. */ unsigned char *attr_data; /*!< Raw attribute data */ int raw_bytes; /*!< Bytes of raw data, usually zero. */ unsigned char *raw_data; /*!< All raw element data including header. */} DGNElemCore;/** * Multipoint element * * The core.stype code is DGNST_MULTIPOINT. * * Used for: DGNT_LINE(3), DGNT_LINE_STRING(4), DGNT_SHAPE(6), DGNT_CURVE(11), * DGNT_BSPLINE(21) */typedef struct { DGNElemCore core; int num_vertices; /*!< Number of vertices in "vertices" */ DGNPoint vertices[2]; /*!< Array of two or more vertices */} DGNElemMultiPoint; /** * Ellipse element * * The core.stype code is DGNST_ARC. * * Used for: DGNT_ELLIPSE(15), DGNT_ARC(16) */typedef struct { DGNElemCore core; DGNPoint origin; /*!< Origin of ellipse */ double primary_axis; /*!< Primary axis length */ double secondary_axis; /*!< Secondary axis length */ double rotation; /*!< Counterclockwise rotation in degrees */ int quat[4]; double startang; /*!< Start angle (degrees counterclockwise of primary axis) */ double sweepang; /*!< Sweep angle (degrees) */} DGNElemArc;/** * Text element * * The core.stype code is DGNST_TEXT. * * NOTE: Currently we are not capturing the "editable fields" information. * * Used for: DGNT_TEXT(17). */typedef struct { DGNElemCore core; int font_id; /*!< Microstation font id, no list available*/ int justification; /*!< Justification, see DGNJ_* */ double length_mult; /*!< Char width in master (if square) */ double height_mult; /*!< Char height in master units */ double rotation; /*!< Counterclockwise rotation in degrees */ DGNPoint origin; /*!< Bottom left corner of text. */ char string[1]; /*!< Actual text (length varies, \0 terminated*/} DGNElemText;/** * Complex header element * * The core.stype code is DGNST_COMPLEX_HEADER. * * Used for: DGNT_COMPLEX_CHAIN_HEADER(12), DGNT_COMPLEX_SHAPE_HEADER(14), * DGNT_3DSURFACE_HEADER(18) and DGNT_3DSOLID_HEADER(19). */typedef struct { DGNElemCore core; int totlength; /*!< Total length of surface */ int numelems; /*!< # of elements in surface */ int surftype; /*!< surface/solid type (only used for 3D surface/solid). One of DGNSUT_* or DGNSOT_*. */} DGNElemComplexHeader;/** * Color table. * * The core.stype code is DGNST_COLORTABLE. * * Returned for DGNT_GROUP_DATA(5) elements, with a level number of * DGN_GDL_COLOR_TABLE(1). */typedef struct { DGNElemCore core; int screen_flag; GByte color_info[256][3]; /*!< Color table, 256 colors by red (0), green(1) and blue(2) component. */} DGNElemColorTable;typedef struct { int flags; unsigned char levels[8]; DGNPoint origin; DGNPoint delta; double transmatrx[9]; double conversion; unsigned long activez;} DGNViewInfo;/** * Terminal Control Block (header). * * The core.stype code is DGNST_TCB. * * Returned for DGNT_TCB(9). * * The first TCB in the file is used to determine the dimension (2D vs. 3D), * and transformation from UOR (units of resolution) to subunits, and subunits * to master units. This is handled transparently within DGNReadElement(), so * it is not normally necessary to handle this element type at the application * level, though it can be useful to get the sub_units, and master_units names. */typedef struct { DGNElemCore core; int dimension; /*!< Dimension (2 or 3) */ double origin_x; /*!< X origin of UOR space in master units(?)*/ double origin_y; /*!< Y origin of UOR space in master units(?)*/ double origin_z; /*!< Z origin of UOR space in master units(?)*/ long uor_per_subunit; /*!< UOR per subunit. */ char sub_units[3]; /*!< User name for subunits (2 chars)*/ long subunits_per_master; /*!< Subunits per master unit. */ char master_units[3]; /*!< User name for master units (2 chars)*/ DGNViewInfo views[8];} DGNElemTCB;/** * Cell Header. * * The core.stype code is DGNST_CELL_HEADER. * * Returned for DGNT_CELL_HEADER(2). */typedef struct { DGNElemCore core; int totlength; /*!< Total length of cell */ char name[7]; /*!< Cell name */ unsigned short cclass; /*!< Class bitmap */ unsigned short levels[4]; /*!< Levels used in cell */ DGNPoint rnglow; /*!< X/Y/Z minimums for cell */ DGNPoint rnghigh; /*!< X/Y/Z maximums for cell */ double trans[9]; /*!< 2D/3D Transformation Matrix */ DGNPoint origin; /*!< Cell Origin */ double xscale; double yscale; double rotation;} DGNElemCellHeader;/** * Cell Library. * * The core.stype code is DGNST_CELL_LIBRARY. * * Returned for DGNT_CELL_LIBRARY(1). */typedef struct { DGNElemCore core; short celltype; /*!< Cell type. */ short attindx; /*!< Attribute linkage. */ char name[7]; /*!< Cell name */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -