00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _DGNLIB_H_INCLUDED
00031 #define _DGNLIB_H_INCLUDED
00032
00033 #include "cpl_conv.h"
00034
00035 CPL_C_START
00036
00037 #define CPLE_DGN_ERROR_BASE
00038 #define CPLE_ElementTooBig CPLE_DGN_ERROR_BASE+1
00039
00054 typedef struct {
00055 double x;
00056 double y;
00057 double z;
00058 } DGNPoint;
00059
00066 typedef struct {
00067 unsigned char level;
00068 unsigned char type;
00069 unsigned char stype;
00070 unsigned char flags;
00071 long offset;
00072 } DGNElementInfo;
00073
00085 typedef struct {
00086 int offset;
00087 int size;
00088
00089 int element_id;
00090 int stype;
00091 int level;
00092 int type;
00093 int complex;
00094 int deleted;
00096 int graphic_group;
00097 int properties;
00098 int color;
00099 int weight;
00100 int style;
00102 int attr_bytes;
00103 unsigned char *attr_data;
00105 int raw_bytes;
00106 unsigned char *raw_data;
00107 } DGNElemCore;
00108
00118 typedef struct {
00119 DGNElemCore core;
00120
00121 int num_vertices;
00122 DGNPoint vertices[2];
00124 } DGNElemMultiPoint;
00125
00134 typedef struct {
00135 DGNElemCore core;
00136
00137 DGNPoint origin;
00139 double primary_axis;
00140 double secondary_axis;
00142 double rotation;
00143 int quat[4];
00144
00145 double startang;
00146 double sweepang;
00148 } DGNElemArc;
00149
00160 typedef struct {
00161 DGNElemCore core;
00162
00163 int font_id;
00164 int justification;
00165 double length_mult;
00166 double height_mult;
00167 double rotation;
00168 DGNPoint origin;
00169 char string[1];
00170 } DGNElemText;
00171
00183 typedef struct {
00184 DGNElemCore core;
00185
00186 int totlength;
00189 int numelems;
00190 int surftype;
00193 int boundelms;
00195 } DGNElemComplexHeader;
00196
00206 typedef struct {
00207 DGNElemCore core;
00208
00209 int screen_flag;
00210 GByte color_info[256][3];
00211 } DGNElemColorTable;
00212
00213 typedef struct {
00214 int flags;
00215 unsigned char levels[8];
00216 DGNPoint origin;
00217 DGNPoint delta;
00218 double transmatrx[9];
00219 double conversion;
00220 unsigned long activez;
00221 } DGNViewInfo;
00222
00237 typedef struct {
00238 DGNElemCore core;
00239
00240 int dimension;
00242 double origin_x;
00243 double origin_y;
00244 double origin_z;
00246 long uor_per_subunit;
00247 char sub_units[3];
00248 long subunits_per_master;
00249 char master_units[3];
00251 DGNViewInfo views[8];
00252
00253 } DGNElemTCB;
00254
00263 typedef struct {
00264 DGNElemCore core;
00265
00266 int totlength;
00269 char name[7];
00270 unsigned short cclass;
00271 unsigned short levels[4];
00273 DGNPoint rnglow;
00274 DGNPoint rnghigh;
00276 double trans[9];
00277 DGNPoint origin;
00279 double xscale;
00280 double yscale;
00281 double rotation;
00282
00283 } DGNElemCellHeader;
00284
00293 typedef struct {
00294 DGNElemCore core;
00295
00296 short celltype;
00297 short attindx;
00298 char name[7];
00300 int numwords;
00302 short dispsymb;
00303 unsigned short cclass;
00304 unsigned short levels[4];
00306 char description[28];
00308 } DGNElemCellLibrary;
00309
00318 typedef struct {
00319 DGNElemCore core;
00320
00321 int totlength;
00324
00325
00326
00327 } DGNElemSharedCellDefn;
00328
00329 typedef union { char *string; GInt32 integer; double real; } tagValueUnion;
00330
00339 typedef struct {
00340 DGNElemCore core;
00341
00342 int tagType;
00343 int tagSet;
00344 int tagIndex;
00345 int tagLength;
00346 tagValueUnion tagValue;
00348 } DGNElemTagValue;
00349
00355 typedef struct _DGNTagDef {
00356 char *name;
00357 int id;
00358 char *prompt;
00359 int type;
00360 tagValueUnion defaultValue;
00361 } DGNTagDef;
00362
00363 #define DGNTT_STRING 1
00364 #define DGNTT_INTEGER 3
00365 #define DGNTT_FLOAT 4
00366
00375 typedef struct {
00376 DGNElemCore core;
00377
00378 int tagCount;
00379 int tagSet;
00380 int flags;
00381 char *tagSetName;
00383 DGNTagDef *tagList;
00385 } DGNElemTagSet;
00386
00394 typedef struct {
00395 DGNElemCore core;
00396
00397 short unknown;
00398 int quat[4];
00399 DGNPoint center_1;
00400 double radius_1;
00401 DGNPoint center_2;
00402 double radius_2;
00404 } DGNElemCone;
00405
00406
00417 typedef struct {
00418 DGNElemCore core;
00419
00420 int totlength;
00422 int numelems;
00423 int node_number;
00424 short max_length;
00425 short max_used;
00426 short font_id;
00427 short justification;
00428 long line_spacing;
00429 double length_mult;
00430 double height_mult;
00431 double rotation;
00432 DGNPoint origin;
00434 } DGNElemTextNode;
00435
00436
00444 typedef struct {
00445 DGNElemCore core;
00446
00447 long desc_words;
00450 unsigned char curve_type;
00451 unsigned char u_order;
00452 unsigned short u_properties;
00454 short num_poles_u;
00455 short num_knots_u;
00456 short rule_lines_u;
00458 unsigned char v_order;
00459 unsigned short v_properties;
00461 short num_poles_v;
00462 short num_knots_v;
00463 short rule_lines_v;
00465 short num_bounds;
00466 } DGNElemBSplineSurfaceHeader;
00467
00475 typedef struct {
00476 DGNElemCore core;
00477
00478 long desc_words;
00481 unsigned char order;
00482 unsigned char properties;
00483 unsigned char curve_type;
00484 short num_poles;
00485 short num_knots;
00486 } DGNElemBSplineCurveHeader;
00487
00495 typedef struct {
00496 DGNElemCore core;
00497
00498 short number;
00499 short numverts;
00500 DGNPoint vertices[1];
00502 } DGNElemBSplineSurfaceBoundary;
00503
00511 typedef struct {
00512 DGNElemCore core;
00513
00514 float array[1];
00517 } DGNElemKnotWeight;
00518
00519
00520
00521
00522
00523
00525 #define DGNST_CORE 1
00526
00528 #define DGNST_MULTIPOINT 2
00529
00531 #define DGNST_COLORTABLE 3
00532
00534 #define DGNST_TCB 4
00535
00537 #define DGNST_ARC 5
00538
00540 #define DGNST_TEXT 6
00541
00543 #define DGNST_COMPLEX_HEADER 7
00544
00546 #define DGNST_CELL_HEADER 8
00547
00549 #define DGNST_TAG_VALUE 9
00550
00552 #define DGNST_TAG_SET 10
00553
00555 #define DGNST_CELL_LIBRARY 11
00556
00558 #define DGNST_CONE 12
00559
00561 #define DGNST_TEXT_NODE 13
00562
00564 #define DGNST_BSPLINE_SURFACE_HEADER 14
00565
00567 #define DGNST_BSPLINE_CURVE_HEADER 15
00568
00570 #define DGNST_BSPLINE_SURFACE_BOUNDARY 16
00571
00573 #define DGNST_KNOT_WEIGHT 17
00574
00576 #define DGNST_SHARED_CELL_DEFN 18
00577
00578
00579
00580
00581
00582 #define DGNT_CELL_LIBRARY 1
00583 #define DGNT_CELL_HEADER 2
00584 #define DGNT_LINE 3
00585 #define DGNT_LINE_STRING 4
00586 #define DGNT_GROUP_DATA 5
00587 #define DGNT_SHAPE 6
00588 #define DGNT_TEXT_NODE 7
00589 #define DGNT_DIGITIZER_SETUP 8
00590 #define DGNT_TCB 9
00591 #define DGNT_LEVEL_SYMBOLOGY 10
00592 #define DGNT_CURVE 11
00593 #define DGNT_COMPLEX_CHAIN_HEADER 12
00594 #define DGNT_COMPLEX_SHAPE_HEADER 14
00595 #define DGNT_ELLIPSE 15
00596 #define DGNT_ARC 16
00597 #define DGNT_TEXT 17
00598 #define DGNT_3DSURFACE_HEADER 18
00599 #define DGNT_3DSOLID_HEADER 19
00600 #define DGNT_BSPLINE_POLE 21
00601 #define DGNT_POINT_STRING 22
00602 #define DGNT_BSPLINE_SURFACE_HEADER 24
00603 #define DGNT_BSPLINE_SURFACE_BOUNDARY 25
00604 #define DGNT_BSPLINE_KNOT 26
00605 #define DGNT_BSPLINE_CURVE_HEADER 27
00606 #define DGNT_BSPLINE_WEIGHT_FACTOR 28
00607 #define DGNT_CONE 23
00608 #define DGNT_SHARED_CELL_DEFN 34
00609 #define DGNT_SHARED_CELL_ELEM 35
00610 #define DGNT_TAG_VALUE 37
00611 #define DGNT_APPLICATION_ELEM 66
00612
00613
00614
00615
00616 #define DGNS_SOLID 0
00617 #define DGNS_DOTTED 1
00618 #define DGNS_MEDIUM_DASH 2
00619 #define DGNS_LONG_DASH 3
00620 #define DGNS_DOT_DASH 4
00621 #define DGNS_SHORT_DASH 5
00622 #define DGNS_DASH_DOUBLE_DOT 6
00623 #define DGNS_LONG_DASH_SHORT_DASH 7
00624
00625
00626
00627
00628 #define DGNSUT_SURFACE_OF_PROJECTION 0
00629 #define DGNSUT_BOUNDED_PLANE 1
00630 #define DGNSUT_BOUNDED_PLANE2 2
00631 #define DGNSUT_RIGHT_CIRCULAR_CYLINDER 3
00632 #define DGNSUT_RIGHT_CIRCULAR_CONE 4
00633 #define DGNSUT_TABULATED_CYLINDER 5
00634 #define DGNSUT_TABULATED_CONE 6
00635 #define DGNSUT_CONVOLUTE 7
00636 #define DGNSUT_SURFACE_OF_REVOLUTION 8
00637 #define DGNSUT_WARPED_SURFACE 9
00638
00639
00640
00641
00642 #define DGNSOT_VOLUME_OF_PROJECTION 0
00643 #define DGNSOT_VOLUME_OF_REVOLUTION 1
00644 #define DGNSOT_BOUNDED_VOLUME 2
00645
00646
00647
00648
00649
00650 #define DGNC_PRIMARY 0
00651 #define DGNC_PATTERN_COMPONENT 1
00652 #define DGNC_CONSTRUCTION_ELEMENT 2
00653 #define DGNC_DIMENSION_ELEMENT 3
00654 #define DGNC_PRIMARY_RULE_ELEMENT 4
00655 #define DGNC_LINEAR_PATTERNED_ELEMENT 5
00656 #define DGNC_CONSTRUCTION_RULE_ELEMENT 6
00657
00658
00659
00660
00661
00662
00663
00664 #define DGN_GDL_COLOR_TABLE 1
00665 #define DGN_GDL_NAMED_VIEW 3
00666 #define DGN_GDL_REF_FILE 9
00667
00668
00669
00670
00671 #define DGNPF_HOLE 0x8000
00672 #define DGNPF_SNAPPABLE 0x4000
00673 #define DGNPF_PLANAR 0x2000
00674 #define DGNPF_ORIENTATION 0x1000
00675 #define DGNPF_ATTRIBUTES 0x0800
00676 #define DGNPF_MODIFIED 0x0400
00677 #define DGNPF_NEW 0x0200
00678 #define DGNPF_LOCKED 0x0100
00679 #define DGNPF_CLASS 0x000f
00680
00681
00682
00683
00684 #define DGNEIF_DELETED 0x01
00685 #define DGNEIF_COMPLEX 0x02
00686
00687
00688
00689
00690 #define DGNJ_LEFT_TOP 0
00691 #define DGNJ_LEFT_CENTER 1
00692 #define DGNJ_LEFT_BOTTOM 2
00693 #define DGNJ_LEFTMARGIN_TOP 3
00694 #define DGNJ_LEFTMARGIN_CENTER 4
00695 #define DGNJ_LEFTMARGIN_BOTTOM 5
00696 #define DGNJ_CENTER_TOP 6
00697 #define DGNJ_CENTER_CENTER 7
00698 #define DGNJ_CENTER_BOTTOM 8
00699 #define DGNJ_RIGHTMARGIN_TOP 9
00700 #define DGNJ_RIGHTMARGIN_CENTER 10
00701 #define DGNJ_RIGHTMARGIN_BOTTOM 11
00702 #define DGNJ_RIGHT_TOP 12
00703 #define DGNJ_RIGHT_CENTER 13
00704 #define DGNJ_RIGHT_BOTTOM 14
00705
00706
00707
00708
00709 #define DGNO_CAPTURE_RAW_DATA 0x01
00710
00711
00712
00713
00714 #define DGNLT_DMRS 0x0000
00715 #define DGNLT_INFORMIX 0x3848
00716 #define DGNLT_ODBC 0x5e62
00717 #define DGNLT_ORACLE 0x6091
00718 #define DGNLT_RIS 0x71FB
00719 #define DGNLT_SYBASE 0x4f58
00720 #define DGNLT_XBASE 0x1971
00721 #define DGNLT_SHAPE_FILL 0x0041
00722 #define DGNLT_ASSOC_ID 0x7D2F
00723
00724
00725
00726
00727
00728 #define DGNCF_USE_SEED_UNITS 0x01
00729 #define DGNCF_USE_SEED_ORIGIN 0x02
00730 #define DGNCF_COPY_SEED_FILE_COLOR_TABLE 0x04
00731 #define DGNCF_COPY_WHOLE_SEED_FILE 0x08
00732
00733
00734
00735
00736 #define DGNBSC_CURVE_DISPLAY 0x10
00737 #define DGNBSC_POLY_DISPLAY 0x20
00738 #define DGNBSC_RATIONAL 0x40
00739 #define DGNBSC_CLOSED 0x80
00740
00741
00742
00743
00744 #define DGNBSS_ARC_SPACING 0x40
00745 #define DGNBSS_CLOSED 0x80
00746
00747
00748
00749
00751 typedef void *DGNHandle;
00752
00753 DGNHandle CPL_DLL DGNOpen( const char *, int );
00754 void CPL_DLL DGNSetOptions( DGNHandle, int );
00755 int CPL_DLL DGNTestOpen( GByte *, int );
00756 const DGNElementInfo CPL_DLL *DGNGetElementIndex( DGNHandle, int * );
00757 int CPL_DLL DGNGetExtents( DGNHandle, double * );
00758 int CPL_DLL DGNGetDimension( DGNHandle );
00759 DGNElemCore CPL_DLL *DGNReadElement( DGNHandle );
00760 void CPL_DLL DGNFreeElement( DGNHandle, DGNElemCore * );
00761 void CPL_DLL DGNRewind( DGNHandle );
00762 int CPL_DLL DGNGotoElement( DGNHandle, int );
00763 void CPL_DLL DGNClose( DGNHandle );
00764 int CPL_DLL DGNLoadTCB( DGNHandle );
00765 int CPL_DLL DGNLookupColor( DGNHandle, int, int *, int *, int * );
00766 int CPL_DLL DGNGetShapeFillInfo( DGNHandle, DGNElemCore *, int * );
00767 int CPL_DLL DGNGetAssocID( DGNHandle, DGNElemCore * );
00768 int CPL_DLL DGNGetElementExtents( DGNHandle, DGNElemCore *,
00769 DGNPoint *, DGNPoint * );
00770
00771 void CPL_DLL DGNDumpElement( DGNHandle, DGNElemCore *, FILE * );
00772 const char CPL_DLL *DGNTypeToName( int );
00773
00774 void CPL_DLL DGNRotationToQuaternion( double, int * );
00775 void CPL_DLL DGNQuaternionToMatrix( int *, float * );
00776 int CPL_DLL DGNStrokeArc( DGNHandle, DGNElemArc *, int, DGNPoint * );
00777 int CPL_DLL DGNStrokeCurve( DGNHandle, DGNElemMultiPoint*, int, DGNPoint * );
00778 void CPL_DLL DGNSetSpatialFilter( DGNHandle hDGN,
00779 double dfXMin, double dfYMin,
00780 double dfXMax, double dfYMax );
00781 int CPL_DLL DGNGetAttrLinkSize( DGNHandle, DGNElemCore *, int );
00782 unsigned char CPL_DLL *
00783 DGNGetLinkage( DGNHandle hDGN, DGNElemCore *psElement,
00784 int iIndex, int *pnLinkageType,
00785 int *pnEntityNum, int *pnMSLink, int *pnLinkSize);
00786
00787
00788
00789 int CPL_DLL DGNWriteElement( DGNHandle, DGNElemCore * );
00790 int CPL_DLL DGNResizeElement( DGNHandle, DGNElemCore *, int );
00791 DGNHandle CPL_DLL
00792 DGNCreate( const char *pszNewFilename, const char *pszSeedFile,
00793 int nCreationFlags,
00794 double dfOriginX, double dfOriginY, double dfOriginZ,
00795 int nMasterUnitPerSubUnit, int nUORPerSubUnit,
00796 const char *pszMasterUnits, const char *pszSubUnits );
00797 DGNElemCore CPL_DLL *DGNCloneElement( DGNHandle hDGNSrc, DGNHandle hDGNDst,
00798 DGNElemCore *psSrcElement );
00799 int CPL_DLL DGNUpdateElemCore( DGNHandle hDGN, DGNElemCore *psElement,
00800 int nLevel, int nGraphicGroup, int nColor,
00801 int nWeight, int nStyle );
00802 int CPL_DLL DGNUpdateElemCoreExtended( DGNHandle hDGN,
00803 DGNElemCore *psElement );
00804
00805 DGNElemCore CPL_DLL *
00806 DGNCreateMultiPointElem( DGNHandle hDGN, int nType,
00807 int nPointCount, DGNPoint*pasVertices );
00808 DGNElemCore CPL_DLL *
00809 DGNCreateArcElem2D( DGNHandle hDGN, int nType,
00810 double dfOriginX, double dfOriginY,
00811 double dfPrimaryAxis, double dfSecondaryAxis,
00812 double dfRotation,
00813 double dfStartAngle, double dfSweepAngle );
00814
00815 DGNElemCore CPL_DLL *
00816 DGNCreateArcElem( DGNHandle hDGN, int nType,
00817 double dfOriginX, double dfOriginY,
00818 double dfOriginZ,
00819 double dfPrimaryAxis, double dfSecondaryAxis,
00820 double dfStartAngle, double dfSweepAngle,
00821 double dfRotation, int *panQuaternion );
00822
00823 DGNElemCore CPL_DLL *
00824 DGNCreateConeElem( DGNHandle hDGN,
00825 double center_1X, double center_1Y,
00826 double center_1Z, double radius_1,
00827 double center_2X, double center_2Y,
00828 double center_2Z, double radius_2,
00829 int *panQuaternion );
00830
00831 DGNElemCore CPL_DLL *
00832 DGNCreateTextElem( DGNHandle hDGN, const char *pszText,
00833 int nFontId, int nJustification,
00834 double dfLengthMult, double dfHeightMult,
00835 double dfRotation, int *panQuaternion,
00836 double dfOriginX, double dfOriginY, double dfOriginZ );
00837
00838 DGNElemCore CPL_DLL *
00839 DGNCreateColorTableElem( DGNHandle hDGN, int nScreenFlag,
00840 GByte abyColorInfo[256][3] );
00841 DGNElemCore CPL_DLL *
00842 DGNCreateComplexHeaderElem( DGNHandle hDGN, int nType,
00843 int nTotLength, int nNumElems );
00844 DGNElemCore CPL_DLL *
00845 DGNCreateComplexHeaderFromGroup( DGNHandle hDGN, int nType,
00846 int nNumElems, DGNElemCore **papsElems );
00847
00848 DGNElemCore CPL_DLL *
00849 DGNCreateSolidHeaderElem( DGNHandle hDGN, int nType, int nSurfType,
00850 int nBoundElems, int nTotLength, int nNumElems );
00851 DGNElemCore CPL_DLL *
00852 DGNCreateSolidHeaderFromGroup( DGNHandle hDGN, int nType, int nSurfType,
00853 int nBoundElems, int nNumElems,
00854 DGNElemCore **papsElems );
00855
00856 DGNElemCore CPL_DLL *
00857 DGNCreateCellHeaderElem( DGNHandle hDGN, int nTotLength, const char *pszName,
00858 short nClass, short *panLevels,
00859 DGNPoint *psRangeLow, DGNPoint *psRangeHigh,
00860 DGNPoint *psOrigin, double dfXScale, double dfYScale,
00861 double dfRotation );
00862
00863 DGNElemCore CPL_DLL *
00864 DGNCreateCellHeaderFromGroup( DGNHandle hDGN, const char *pszName,
00865 short nClass, short *panLevels,
00866 int nNumElems, DGNElemCore **papsElems,
00867 DGNPoint *psOrigin,
00868 double dfXScale, double dfYScale,
00869 double dfRotation );
00870
00871 int CPL_DLL DGNAddMSLink( DGNHandle hDGN, DGNElemCore *psElement,
00872 int nLinkageType, int nEntityNum, int nMSLink );
00873
00874 int CPL_DLL DGNAddRawAttrLink( DGNHandle hDGN, DGNElemCore *psElement,
00875 int nLinkSize, unsigned char *pabyRawLinkData );
00876
00877 int CPL_DLL DGNAddShapeFillInfo( DGNHandle hDGN, DGNElemCore *psElement,
00878 int nColor );
00879
00880 int CPL_DLL DGNElemTypeHasDispHdr( int nElemType );
00881
00882 CPL_C_END
00883
00884 #endif