| /************************************************************** |
| * |
| * 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 <dxfgrprd.hxx> |
| #include <dxfvec.hxx> |
| |
| #include <deque> |
| |
| 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 |
| |
| |