⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgconsts.pas

📁 CAD转换工具 CAD转换工具 CAD转换工具 CAD转换工具
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{************************************************************}
{                   Delphi VCL Extensions                    }
{                                                            }
{                 Basic constants and types                  }
{                                                            }
{      Copyright (c) 2002-2007 SoftGold software company     }
{                                                            }
{************************************************************}
unit sgConsts;
{$INCLUDE SGDXF.INC}

interface

uses
  Windows, Classes, Registry;

const
  //dxf/dwg colors
  clByLayer = $2FFFFFFF;
  clByBlock = $3FFFFFFF;
  // Constants for CAD import (entities)
  DXF_SEC_TABLES	    = 0;
  DXF_SEC_BLOCKS	    = 1;
  DXF_SEC_ENTITIES  	= 2;
  DXF_SEC_LTYPE		    = 3;
  DXF_SEC_LAYERS	    = 4;

  DXF_UNKNOWN	       	= 0;
  DXF_TABLE		        = 1;
  DXF_BLOCK		        = 2;
  DXF_LTYPE	         	= 3;
  DXF_LAYER		        = 4;
  DXF_VERTEX		      = 5;
  DXF_LINE		        = 6;
  DXF_SOLID		        = 7;
  DXF_CIRCLE		      = 8;
  DXF_ARC		          = 9;
  DXF_POLYLINE     		= 10;
  DXF_LWPOLYLINE	    = 11;
  DXF_SPLINE		      = 12;
  DXF_INSERT		      = 13;
  DXF_DIMENSION		    = 14;
  DXF_TEXT		        = 15;
  DXF_MTEXT		        = 16;
  DXF_ATTDEF		      = 17;
  DXF_ELLIPSE		      = 18;
  DXF_POINT		        = 19;
  DXF_3DFACE	      	= 20;
  DXF_HATCH		        = 21;
  DXF_IMAGE_ENT       = 22;
  DXF_ATTRIB		      = 23;

  DXF_BEGIN_POLYLINE = 100;
  DXF_END_POLYLINE   = 101;
  DXF_BEGIN_INSERT   = 102;
  DXF_END_INSERT     = 103;
  DXF_BEGIN_VIEWPORT = 104;
  DXF_END_VIEWPORT   = 105;

  
  // Constants for reading CAD images
  Info_0 = 0;
  Text_1 = 1;
  Name_2 = 2;
  Text_3 = 3;
  Text_4 = 4;
  Text_5 = 5;
  LineTypeName_6 = 6;
  TextFont_7 = 7;
  LayerName_8 = 8;
  VarName_9 = 9;
  XFirst_10 = 10;
  XOther_11 = 11;
  XOther_12 = 12;
  XOther_13 = 13;
  XOther_14 = 14;
  XOther_15 = 15;
  XOther_16 = 16;
  XOther_17 = 17;
  XOther_18 = 18;
  XOther_110 = 110;
  XOther_111 = 111;
  XOther_112 = 112;
  YFirst_20 = 20;
  YOther_21 = 21;
  YOther_22 = 22;
  YOther_23 = 23;
  YOther_24 = 24;
  YOther_25 = 25;
  YOther_26 = 26;
  YOther_27 = 27;
  YOther_28 = 28;
  YOther_120 = 120;
  YOther_121 = 121;
  YOther_122 = 122;
  ZFirst_30 = 30;
  ZOther_31 = 31;
  ZOther_32 = 32;
  ZOther_33 = 33;
  ZOther_34 = 34;
  ZOther_35 = 35;
  ZOther_36 = 36;
  ZOther_37 = 37;
  ZOther_130 = 130;
  ZOther_131 = 131;
  ZOther_132 = 132;
  Elevation_38 = 38;
  TableOfEntity_39 = 39;
  Float_40 = 40;
  Float_41 = 41;
  Float_42 = 42;
  Float_43 = 43;
  Float_44 = 44;
  Float_45 = 45;
  Float_46 = 46;
  Float_47 = 47;
  Float_48 = 48;
  FloatRepeated_49 = 49;
  Float_140 = 140;
  Float_141 = 141;
  Float_142 = 142;
  Float_143 = 143;
  Float_144 = 144;
  Float_145 = 145;
  Float_146 = 146;
  Float_147 = 147;
  Float_148 = 148;
  Float_149 = 149;
  Float_211 = 211;
  Float_221 = 221;
  Float_231 = 231;
  Angle_50 = 50;
  Angle_51 = 51;
  Angle_52 = 52;
  Angle_53 = 53;
  Angle_54 = 54;
  Angle_55 = 55;
  Angle_56 = 56;
  Angle_57 = 57;
  Angle_58 = 58;
  Visible_60 = 60;
  ColorNumber_62 = 62;
  UCSVP_65 = 65;
  EntitysBegin_66 = 66;
  PaperSpace_67 = 67;
  Integer_68 = 68;
  Integer_69 = 69;
  Integer_70 = 70;
  Integer_71 = 71;
  Integer_72 = 72;
  Integer_73 = 73;
  Integer_74 = 74;
  Integer_75 = 75;
  Integer_76 = 76;
  Integer_77 = 77;
  Integer_78 = 78;
  Integer_79 = 79;
  Integer_90 = 90;
  Integer_91 = 91;
  Integer_92 = 92;
  Integer_93 = 93;
  Integer_97 = 97;
  Integer_290 = 290;
  Integer_1070 = 1070;
  Extrusion_210 = 210;
  Extrusion_220 = 220;
  Extrusion_230 = 230;
  String_310 = 310;
  String_330 = 330;
  String_331 = 331;
  String_340 = 340;
  String_341 = 341;
  Integer_370 = 370;
  String_1000 = 1000;  
  String_1005 = 1005;
  Float_1040 = 1040;

  UserDigit = 23111;

  sgDimensionArrowTypeNames: array [0..19] of string = ('_CLOSEDFILLED',
    '_CLOSEDBLANK', '_CLOSED', '_DOT', '_ARCHITECTURALTICK', '_OBLIQUE',
    '_OPEN', '_ORIGIN', '_ORIGIN2', '_RIGHTANGLE', '_OPEN30', '_DOTSMALL',
    '_DOTBLANK', '_DOTSMALLBLANK', '_BOX', '_BOXFILLED', '_DATUMTRIANGLE',
    '_INTEGRAL', '_USERARROW', '_NONE');

  sByBlock = 'BYBLOCK';
  sByLayer = 'BYLAYER';
  sContinuous = 'CONTINUOUS';
  sModel  = 'Model';
  sLayout = 'Layout1';
  sACADXDataAppName = 'ACAD';
  sActiveVPort = '*ACTIVE';
  sModelSpace  = '*MODEL_SPACE';
  sPaperSpace  = '*PAPER_SPACE';

  sTextStyleStandardName = 'STANDARD';

  // Names of a DXF-entities
  sPolyline = 'Polyline';
  sCircle   = 'Circle';
  sEllipse  = 'Ellipse';
  sHatchEntity   = 'HATCH';
  sPatternSOLID  = 'SOLID';
  sPatternANSI31 = 'ANSI31';// FDiagonal, BDiagonal
  sPatternANSI37 = 'ANSI37';// DiagCross
  sPatternNET    = 'NET';   // Cross
  sPatternLINE   = 'LINE';  // Horizintal, Vertical

  sRedlineLayerName = 'Redline_layer';

  // Default numbers of parts for parsing circle and spline
  iDefaultNumberOfCircleParts = 47;//13;
  iDefaultNumberOfSplineParts = 24;
  iCurrentNumberOfCircleParts: Integer = iDefaultNumberOfCircleParts;
  iCurrentNumberOfSplineParts: Integer = iDefaultNumberOfSplineParts;
  iMinNumberOfCircleParts = 4;

  //Maximum count of the lines in a dotted polyline or curve
  //(if count of lines more then iMaxNumDottedLines we draws solid-polyline)
  iMaxNumDottedLines = 1000;

  //It is necessary for comparison floating-point numbers
  fAccuracy = 0.000001;
  // bad value for all singles
  BadSingValue: Single = -24444444;

  // Windows text height factor
  fWinTextHeightFactor: Extended = 1.6000000000;

  // Windows text Y-offset factor by height
  fWinTextYOffsetFactor: Extended = 0.2700000000;

  // Pi / 180
  fPiDividedBy180: Extended = 0.017453292519943295769236907684886;
  // 180 / Pi
  f180DividedByPi: Extended = 57.295779513082320876798154814105;

  //Lineweight settings
  bLineWeightOn: Boolean = True;
  fLineWeightByLayer: Double = -1.0;
  fLineWeightByBlock: Double = -2.0;
  fLineWeightDefault: Double = -3.0;
  fLineWeightFactor: Single = 1.0;
  sLineWeightFactor = 'LineWeightDispFactor';

  sCorruptedDWGfileHeader: string = 'DWG file header is corrupted';
  sEncryptedByPassword: string = 'Encrypted by password';
  sUnsupportedOldDWGVer: string = 'Unsupported old DWG version ID:';
  sUnsupportedNewDWGVer: string = 'Unsupported new DWG version ID:';
  
var
  bUseSHXFonts: Boolean = False;
  //bUseTTFFonts: Boolean = False;
  bSearchSHXPaths: Boolean = True;
  sDefaultSHXPath: string = '';
  sDefaultSHXFont: string = 'simplex.shx';//'txt.shx';
  sSHXSearchPaths: string = '';
  sgClientRect: TRect;
  sgClientRectForSnap: TRect;
  sgVisibleArea: TPoint; //!Snap!

const
  sImpossiblePointerID  = '#';
  sInternalDimension = 'sgDim';
  sFilledArrowForLeader = 'Filled_arrow_for_leader';
  sNewBlockID = '#NewBlockID';

  SMessageAnalysing: string = 'Performing file analysing';
  SMessageCleaning: string = 'Performing file cleaning';
  sLoadFile: string = 'Loading file...';
  sLoadEntities: string = 'Loading entities...';

  // AutoCAD 8-bit colors
  arrDXFtoRGBColors: array [0..255] of Cardinal = (
    $000000, $0000FF, $00FFFF, $00FF00, $FFFF00, $FF0000, $FF00FF, $FFFFFF,
    $808080, $C0C0C0, $0000FF, $7F7FFF, $0000CC, $6666CC, $000099, $4C4C99,
    $00007F, $3F3F7F, $00004C, $26264C, $003FFF, $7F9FFF, $0033CC, $667FCC,
    $002699, $4C5F99, $001F7F, $3F4F7F, $00134C, $262F4C, $007FFF, $7FBFFF,
    $0066CC, $6699CC, $004C99, $4C7299, $003F7F, $3F5F7F, $00264C, $26394C,
    $00BFFF, $7FDFFF, $0099CC, $66B2CC, $007299, $4C8599, $005F7F, $3F6F7F,
    $00394C, $26424C, $00FFFF, $7FFFFF, $00CCCC, $66CCCC, $009999, $4C9999,
    $007F7F, $3F7F7F, $004C4C, $264C4C, $00FFBF, $7FFFDF, $00CC99, $66CCB2,
    $009972, $4C9985, $007F5F, $3F7F6F, $004C39, $264C42, $00FF7F, $7FFFBF,
    $00CC66, $66CC99, $00994C, $4C9972, $007F3F, $3F7F5F, $004C26, $264C39,
    $00FF3F, $7FFF9F, $00CC33, $66CC7F, $009926, $4C995F, $007F1F, $3F7F4F,
    $004C13, $264C2F, $00FF00, $7FFF7F, $00CC00, $66CC66, $009900, $4C994C,
    $007F00, $3F7F3F, $004C00, $264C26, $3FFF00, $9FFF7F, $33CC00, $7FCC66,
    $269900, $5F994C, $1F7F00, $4F7F3F, $134C00, $2F4C26, $7FFF00, $BFFF7F,
    $66CC00, $99CC66, $4C9900, $72994C, $3F7F00, $5F7F3F, $264C00, $394C26,
    $BFFF00, $DFFF7F, $99CC00, $B2CC66, $729900, $85994C, $5F7F00, $6F7F3F,
    $394C00, $424C26, $FFFF00, $FFFF7F, $CCCC00, $CCCC66, $999900, $99994C,
    $7F7F00, $7F7F3F, $4C4C00, $4C4C26, $FFBF00, $FFDF7F, $CC9900, $CCB266,
    $997200, $99854C, $7F5F00, $7F6F3F, $4C3900, $4C4226, $FF7F00, $FFBF7F,
    $CC6600, $CC9966, $994C00, $99724C, $7F3F00, $7F5F3F, $4C2600, $4C3926,
    $FF3F00, $FF9F7F, $CC3300, $CC7F66, $992600, $995F4C, $7F1F00, $7F4F3F,
    $4C1300, $4C2F26, $FF0000, $FF7F7F, $CC0000, $CC6666, $990000, $994C4C,
    $7F0000, $7F3F3F, $4C0000, $4C2626, $FF003F, $FF7F9F, $CC0033, $CC667F,
    $990026, $994C5F, $7F001F, $7F3F4F, $4C0013, $4C262F, $FF007F, $FF7FBF,
    $CC0066, $CC6699, $99004C, $994C72, $7F003F, $7F3F5F, $4C0026, $4C2639,
    $FF00BF, $FF7FDF, $CC0099, $CC66B2, $990072, $994C85, $7F005F, $7F3F6F,
    $4C0039, $4C2642, $FF00FF, $FF7FFF, $CC00CC, $CC66CC, $990099, $994C99,
    $7F007F, $7F3F7F, $4C004C, $4C264C, $BF00FF, $DF7FFF, $9900CC, $B266CC, 
    $720099, $854C99, $5F007F, $6F3F7F, $39004C, $42264C, $7F00FF, $BF7FFF,
    $6600CC, $9966CC, $4C0099, $724C99, $3F007F, $5F3F7F, $26004C, $39264C,
    $3F00FF, $9F7FFF, $3300CC, $7F66CC, $260099, $5F4C99, $1F007F, $4F3F7F,
    $13004C, $2F264C, $333333, $5B5B5B, $848484, $ADADAD, $D6D6D6, $FFFFFF);

  sgDXFLineWeights: array [0..23] of Integer = (0, 5, 9, 13, 15, 18, 20, 25, 30, 35,
    40, 50, 53, 60, 70, 80, 90, 100, 106, 120, 140, 158, 200, 211);
    
// Types
type
  PsgFloat = ^TsgFloat;
  TsgFloat = Double;

  PFPoint = ^TFPoint;
  TFPoint = record
  case Integer of
    0: (X, Y, Z: TsgFloat);
    1: (V: array[0..2] of TsgFloat);
  end;

  PF2DPoint = ^TF2DPoint;
  TF2DPoint = record
  case Integer of
    0: (X, Y: TsgFloat);
    1: (V: array[0..1] of TsgFloat);
  end;

  PdxfPoint = ^TdxfPoint;
  TdxfPoint = record
    X,Y,Z: Single;
  end;

  TsgLine = record
    Point1: TFPoint;
    Point2: TFPoint;
  end;

  PFRect = ^TFRect;
  TFRect = record
  case Integer of
    0: (Left, Top, Z1, Right, Bottom, Z2: TsgFloat);
    1: (TopLeft, BottomRight: TFPoint);
  end;

  // Extended CAD data
  PcadExtendedData = ^TcadExtendedData;
  TcadExtendedData = packed record
    Param1: Pointer;// 4 byte field
    { Fields below may be added in future versions }
  end;

  PdxfData = ^TdxfData;
  TdxfData = packed record
    Tag: Word;       // classindex, DXF_LINE, DXF_SOLID etc.
    Count: Word;     // number of child entities
    TickCount: Word;
    Flags: Byte;     // Flags byte
		     // for polylines: low bit <> 0 - is closed
		     // for layers: low bit <> 0 - is invisible
    Style: Byte;     // Style (pen, brush...) - for future versions
    Dimension: Integer;
    DashDots: PdxfPoint;
    DashDotsCount: Integer;
    Color: Integer;  // Color of entity
    Ticks: Pointer;
    Thickness: Single;// for future versions
    Rotation: Single; // Text or block rotation angle
    Layer: PChar;  // Layer name (only one layer for element)
    Text:  PChar;  // Pointer to text string
    FontName: PChar;
    Handle: THandle;
    CADExtendedData: PcadExtendedData;
    Point: TdxfPoint;   // Coordinates of the first point
    Point1: TdxfPoint;  // Coordinates of the second point
    Point2: TdxfPoint;  // Coordinates of the third point
    Point3: TdxfPoint;  // Coordinates of the fourth point
    case Integer of
    0: (Radius, StartAngle, EndAngle, Ratio: Single; EntityType: Byte); // for arcs (NOT in DXFEnum)
    1: (Block: THandle; Scale: TdxfPoint); // for Inserts (NOT in DXFEnum)
    2: (FHeight, FScale, RWidth, RHeight: Single; HAlign, VAlign: Byte); // for Text
    3: (Points: PdxfPoint);                // for polylines (in DXFEnum)
  end;

  // Axes in 3-Dimensional cartesian coordinates
  TsgAxes = (axisX, axisY, axisZ);                

  // DWG, DXF distance units mode
  TsgDistUnitsMode = (umDrawing, umUser, umAltUser);

  // DWG format version
  TsgDWGVersion = (acR09, acR10, acR11, acR12, acR13, acR14, acR2000, acR2004, acR2007);

  // Numbers are necessary for compatibility with a TBrushStyle
  TsgHatchStyle = (hsSolid, hsPatternData, hsHorizontal, hsVertical, hsFDiagonal,
                  hsBDiagonal, hsCross, hsDiagCross);

  TsgImportMode = (imView, imImport);

  // Style of the CAD-drawing space
  TsgCADSpace = (cs2D, cs3D, csUndefined);

  // CAD drawing border type
  TsgBorderType = (btGlobal, btRatio);

  // CAD drawing border size
  TsgBorderSize = Double;

  TsgGradientType = (gtNone, gtCurved, gtCylinder, gtHemiSpherical, gtLinear,
    gtSpherical, gtInvCurved, gtInvCylinder, gtInvHemiSpherical, gtInvSpherical, gtOther);  

  PFMatrix = ^TFMatrix;
  TFMatrix = array[0..3,0..2] of TsgFloat;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -