/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _DXFENTRD_HXX #define _DXFENTRD_HXX #include #include #include typedef std::deque< Point > DXFPointArray; //------------------------------------------------------------------------------ //------------------------- Art eines Entity ----------------------------------- //------------------------------------------------------------------------------ enum DXFEntityType { DXF_LINE, DXF_POINT, DXF_CIRCLE, DXF_ARC, DXF_TRACE, DXF_SOLID, DXF_TEXT, DXF_SHAPE, DXF_INSERT, DXF_ATTDEF, DXF_ATTRIB, DXF_POLYLINE, DXF_VERTEX, DXF_SEQEND, DXF_3DFACE, DXF_DIMENSION, DXF_LWPOLYLINE, DXF_HATCH }; //------------------------------------------------------------------------------ //---------------------- Basisklasse fuer ein Entity --------------------------- //------------------------------------------------------------------------------ class DXFBasicEntity { public: DXFBasicEntity * pSucc; // Zeiger auf naechstes Entity (in der Liste DXFEntities.pFirst) DXFEntityType eType; // Art des Entitys (Linie oder Kreis oder was) // Eigenschaftenm, die alle Entities besitzen, jeweils // durch den Gruppencode kommentiert: char sLayer[DXF_MAX_STRING_LEN+1]; // 8 char sLineType[DXF_MAX_STRING_LEN+1]; // 6 double fElevation; // 38 double fThickness; // 39 long nColor; // 62 long nSpace; // 67 DXFVector aExtrusion; // 210,220,230 protected: DXFBasicEntity(DXFEntityType eThisType); // Konstruktoren der Entities initialiseren immer mit Defaultwerten. public: virtual ~DXFBasicEntity(); virtual void Read(DXFGroupReader & rDGR); // Liest die Prameter ein, bis zur naechten 0-Gruppe protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); // Diese Methode wird durch Read() fuer jeden Parameter (bzw. fuer jede // Gruppe) aufgerufen. // Sofern der Gruppencode dem Entity bekannt ist, wird der entsprechende // Parameter geholt. }; //------------------------------------------------------------------------------ //---------------- die verschiedenen Arten von Entyties ------------------------ //------------------------------------------------------------------------------ //--------------------------Line------------------------------------------------ class DXFLineEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 DXFVector aP1; // 11,21,31 DXFLineEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Point----------------------------------------------- class DXFPointEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 DXFPointEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Circle---------------------------------------------- class DXFCircleEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 double fRadius; // 40 DXFCircleEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Arc------------------------------------------------- class DXFArcEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 double fRadius; // 40 double fStart; // 50 double fEnd; // 51 DXFArcEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Trace----------------------------------------------- class DXFTraceEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 DXFVector aP1; // 11,21,31 DXFVector aP2; // 12,22,32 DXFVector aP3; // 13,23,33 DXFTraceEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Solid----------------------------------------------- class DXFSolidEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 DXFVector aP1; // 11,21,31 DXFVector aP2; // 12,22,32 DXFVector aP3; // 13,23,33 DXFSolidEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Text------------------------------------------------ class DXFTextEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 double fHeight; // 40 char sText[DXF_MAX_STRING_LEN+1]; // 1 double fRotAngle; // 50 double fXScale; // 41 double fOblAngle; // 42 char sStyle[DXF_MAX_STRING_LEN+1]; // 7 long nGenFlags; // 71 long nHorzJust; // 72 long nVertJust; // 73 DXFVector aAlign; // 11,21,31 DXFTextEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Shape----------------------------------------------- class DXFShapeEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 double fSize; // 40 char sName[DXF_MAX_STRING_LEN+1]; // 2 double fRotAngle; // 50 double fXScale; // 41 double fOblAngle; // 51 DXFShapeEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Insert---------------------------------------------- class DXFInsertEntity : public DXFBasicEntity { public: long nAttrFlag; // 66 char sName[DXF_MAX_STRING_LEN+1]; // 2 DXFVector aP0; // 10,20,30 double fXScale; // 41 double fYScale; // 42 double fZScale; // 43 double fRotAngle; // 50 long nColCount; // 70 long nRowCount; // 71 double fColSpace; // 44 double fRowSpace; // 45 DXFInsertEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------AttDef---------------------------------------------- class DXFAttDefEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 double fHeight; // 40 char sDefVal[DXF_MAX_STRING_LEN+1]; // 1 char sPrompt[DXF_MAX_STRING_LEN+1]; // 3 char sTagStr[DXF_MAX_STRING_LEN+1]; // 2 long nAttrFlags; // 70 long nFieldLen; // 73 double fRotAngle; // 50 double fXScale; // 41 double fOblAngle; // 51 char sStyle[DXF_MAX_STRING_LEN+1]; // 7 long nGenFlags; // 71 long nHorzJust; // 72 long nVertJust; // 74 DXFVector aAlign; // 11,21,31 DXFAttDefEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Attrib---------------------------------------------- class DXFAttribEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 double fHeight; // 40 char sText[DXF_MAX_STRING_LEN+1]; // 1 char sTagStr[DXF_MAX_STRING_LEN+1]; // 2 long nAttrFlags; // 70 long nFieldLen; // 73 double fRotAngle; // 50 double fXScale; // 41 double fOblAngle; // 51 char sStyle[DXF_MAX_STRING_LEN+1]; // 7 long nGenFlags; // 71 long nHorzJust; // 72 long nVertJust; // 74 DXFVector aAlign; // 11,21,31 DXFAttribEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------PolyLine-------------------------------------------- class DXFPolyLineEntity : public DXFBasicEntity { public: double fElevation; // 30 long nFlags; // 70 double fSWidth; // 40 double fEWidth; // 41 long nMeshMCount; // 71 long nMeshNCount; // 72 long nMDensity; // 73 long nNDensity; // 74 long nCSSType; // 75 DXFPolyLineEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; class DXFLWPolyLineEntity : public DXFBasicEntity { sal_Int32 nIndex; public : sal_Int32 nCount; // 90 sal_Int32 nFlags; // 70 1 = closed, 128 = plinegen double fConstantWidth; // 43 (optional - default: 0, not used if fStartWidth and/or fEndWidth is used) double fStartWidth; // 40 double fEndWidth; // 41 DXFVector* pP; DXFLWPolyLineEntity(); ~DXFLWPolyLineEntity(); protected : virtual void EvaluateGroup( DXFGroupReader & rDGR ); }; //-------------------------- Hatch --------------------------------------------- struct DXFEdgeType { sal_Int32 nEdgeType; virtual ~DXFEdgeType(){}; virtual sal_Bool EvaluateGroup( DXFGroupReader & /*rDGR*/ ){ return sal_True; }; protected : DXFEdgeType( sal_Int32 EdgeType ):nEdgeType(EdgeType){}; }; struct DXFEdgeTypeLine : public DXFEdgeType { DXFVector aStartPoint; // 10,20 DXFVector aEndPoint; // 11,21 DXFEdgeTypeLine(); virtual ~DXFEdgeTypeLine(); virtual sal_Bool EvaluateGroup( DXFGroupReader & rDGR ); }; struct DXFEdgeTypeCircularArc : public DXFEdgeType { DXFVector aCenter; // 10,20 double fRadius; // 40 double fStartAngle; // 50 double fEndAngle; // 51 sal_Int32 nIsCounterClockwiseFlag; // 73 DXFEdgeTypeCircularArc(); virtual ~DXFEdgeTypeCircularArc(); virtual sal_Bool EvaluateGroup( DXFGroupReader & rDGR ); }; struct DXFEdgeTypeEllipticalArc : public DXFEdgeType { DXFVector aCenter; // 10,20 DXFVector aEndPoint; // 11,21 double fLength; // 40 double fStartAngle; // 50 double fEndAngle; // 51 sal_Int32 nIsCounterClockwiseFlag; // 73 DXFEdgeTypeEllipticalArc(); virtual ~DXFEdgeTypeEllipticalArc(); virtual sal_Bool EvaluateGroup( DXFGroupReader & rDGR ); }; struct DXFEdgeTypeSpline : public DXFEdgeType { sal_Int32 nDegree; // 94 sal_Int32 nRational; // 73 sal_Int32 nPeriodic; // 74 sal_Int32 nKnotCount; // 75 sal_Int32 nControlCount; // 76 DXFEdgeTypeSpline(); virtual ~DXFEdgeTypeSpline(); virtual sal_Bool EvaluateGroup( DXFGroupReader & rDGR ); }; typedef std::deque< DXFEdgeType* > DXFEdgeTypeArray; struct DXFBoundaryPathData { sal_Int32 nFlags; // 92 sal_Int32 nHasBulgeFlag; // 72 sal_Int32 nIsClosedFlag; // 73 sal_Int32 nPointCount; // 93 double fBulge; // 42 sal_Int32 nSourceBoundaryObjects; // 97 sal_Int32 nEdgeCount; // 93 sal_Bool bIsPolyLine; sal_Int32 nPointIndex; DXFVector* pP; DXFEdgeTypeArray aEdges; DXFBoundaryPathData(); ~DXFBoundaryPathData(); sal_Bool EvaluateGroup( DXFGroupReader & rDGR ); }; class DXFHatchEntity : public DXFBasicEntity { sal_Bool bIsInBoundaryPathContext; sal_Int32 nCurrentBoundaryPathIndex; public : DXFVector aElevationPoint; sal_Int32 nFlags; // 70 (solid fill = 1, pattern fill = 0) sal_Int32 nAssociativityFlag; // 71 (assoiciative = 1, non-associative = 0) sal_Int32 nBoundaryPathCount; // 91 sal_Int32 nHatchStyle; // 75 (odd parity = 0, outmost area = 1, entire area = 2 ) sal_Int32 nHatchPatternType; // 76 (user defined = 0, predefined = 1, custom = 2) double fHatchPatternAngle; // 52 (pattern fill only) double fHatchPatternScale; // 41 (pattern fill only:scale or spacing) sal_Int32 nHatchDoubleFlag; // 77 (pattern fill only:double = 1, not double = 0) sal_Int32 nHatchPatternDefinitionLines; // 78 double fPixelSize; // 47 sal_Int32 nNumberOfSeedPoints; // 98 DXFBoundaryPathData* pBoundaryPathData; DXFHatchEntity(); ~DXFHatchEntity(); protected : virtual void EvaluateGroup( DXFGroupReader & rDGR ); }; //--------------------------Vertex---------------------------------------------- class DXFVertexEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 double fSWidth; // 40 (Wenn <0.0, dann gilt DXFPolyLine::fSWidth) double fEWidth; // 41 (Wenn <0.0, dann gilt DXFPolyLine::fEWidth) double fBulge; // 42 long nFlags; // 70 double fCFTDir; // 50 DXFVertexEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------SeqEnd---------------------------------------------- class DXFSeqEndEntity : public DXFBasicEntity { public: DXFSeqEndEntity(); }; //--------------------------3DFace---------------------------------------------- class DXF3DFaceEntity : public DXFBasicEntity { public: DXFVector aP0; // 10,20,30 DXFVector aP1; // 11,21,31 DXFVector aP2; // 12,22,32 DXFVector aP3; // 13,23,33 long nIEFlags; // 70 DXF3DFaceEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //--------------------------Dimension------------------------------------------- class DXFDimensionEntity : public DXFBasicEntity { public: char sPseudoBlock[DXF_MAX_STRING_LEN+1]; // 2 DXFDimensionEntity(); protected: virtual void EvaluateGroup(DXFGroupReader & rDGR); }; //------------------------------------------------------------------------------ //----------- Eine Menge von Entities lesen und repraesentieren ---------------- //------------------------------------------------------------------------------ class DXFEntities { public: DXFEntities(); ~DXFEntities(); DXFBasicEntity * pFirst; // Liste von Entities, READ ONLY! void Read(DXFGroupReader & rDGR); // Liest Entitis per rGDR aus einer DXF-Datei bis zu // einem ENDBLK, ENDSEC oder EOF (der Gruppe 0). // (Alle unbekannten Dinge werden uebersprungen) void Clear(); // Loescht alle Entities }; //------------------------------------------------------------------------------ //--------------------------------- inlines ------------------------------------ //------------------------------------------------------------------------------ inline DXFEntities::DXFEntities() { pFirst=NULL; } inline DXFEntities::~DXFEntities() { Clear(); } #endif