| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_filter.hxx" |
| |
| #include <string.h> |
| #include <dxfentrd.hxx> |
| |
| //--------------------------DXFBasicEntity-------------------------------------- |
| |
| DXFBasicEntity::DXFBasicEntity(DXFEntityType eThisType) |
| { |
| eType=eThisType; |
| pSucc=NULL; |
| strncpy(sLayer,"0", 2 ); |
| strncpy(sLineType,"BYLAYER", 8 ); |
| fElevation=0; |
| fThickness=0; |
| nColor=256; |
| nSpace=0; |
| aExtrusion.fx=0.0; |
| aExtrusion.fy=0.0; |
| aExtrusion.fz=1.0; |
| } |
| |
| void DXFBasicEntity::Read(DXFGroupReader & rDGR) |
| { |
| while (rDGR.Read()!=0) EvaluateGroup(rDGR); |
| } |
| |
| void DXFBasicEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) |
| { |
| case 8: strncpy( sLayer, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 6: strncpy( sLineType, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 38: fElevation=rDGR.GetF(); break; |
| case 39: fThickness=rDGR.GetF(); break; |
| case 62: nColor=rDGR.GetI(); break; |
| case 67: nSpace=rDGR.GetI(); break; |
| case 210: aExtrusion.fx=rDGR.GetF(); break; |
| case 220: aExtrusion.fy=rDGR.GetF(); break; |
| case 230: aExtrusion.fz=rDGR.GetF(); break; |
| } |
| } |
| |
| DXFBasicEntity::~DXFBasicEntity() |
| { |
| } |
| |
| //--------------------------DXFLineEntity--------------------------------------- |
| |
| DXFLineEntity::DXFLineEntity() : DXFBasicEntity(DXF_LINE) |
| { |
| } |
| |
| void DXFLineEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 11: aP1.fx=rDGR.GetF(); break; |
| case 21: aP1.fy=rDGR.GetF(); break; |
| case 31: aP1.fz=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFPointEntity-------------------------------------- |
| |
| DXFPointEntity::DXFPointEntity() : DXFBasicEntity(DXF_POINT) |
| { |
| } |
| |
| void DXFPointEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFCircleEntity------------------------------------- |
| |
| DXFCircleEntity::DXFCircleEntity() : DXFBasicEntity(DXF_CIRCLE) |
| { |
| fRadius=1.0; |
| } |
| |
| void DXFCircleEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 40: fRadius=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFArcEntity---------------------------------------- |
| |
| DXFArcEntity::DXFArcEntity() : DXFBasicEntity(DXF_ARC) |
| { |
| fRadius=1.0; |
| fStart=0; |
| fEnd=360.0; |
| } |
| |
| void DXFArcEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 40: fRadius=rDGR.GetF(); break; |
| case 50: fStart=rDGR.GetF(); break; |
| case 51: fEnd=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFTraceEntity-------------------------------------- |
| |
| DXFTraceEntity::DXFTraceEntity() : DXFBasicEntity(DXF_TRACE) |
| { |
| } |
| |
| void DXFTraceEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 11: aP1.fx=rDGR.GetF(); break; |
| case 21: aP1.fy=rDGR.GetF(); break; |
| case 31: aP1.fz=rDGR.GetF(); break; |
| case 12: aP2.fx=rDGR.GetF(); break; |
| case 22: aP2.fy=rDGR.GetF(); break; |
| case 32: aP2.fz=rDGR.GetF(); break; |
| case 13: aP3.fx=rDGR.GetF(); break; |
| case 23: aP3.fy=rDGR.GetF(); break; |
| case 33: aP3.fz=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFSolidEntity-------------------------------------- |
| |
| DXFSolidEntity::DXFSolidEntity() : DXFBasicEntity(DXF_SOLID) |
| { |
| } |
| |
| void DXFSolidEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 11: aP1.fx=rDGR.GetF(); break; |
| case 21: aP1.fy=rDGR.GetF(); break; |
| case 31: aP1.fz=rDGR.GetF(); break; |
| case 12: aP2.fx=rDGR.GetF(); break; |
| case 22: aP2.fy=rDGR.GetF(); break; |
| case 32: aP2.fz=rDGR.GetF(); break; |
| case 13: aP3.fx=rDGR.GetF(); break; |
| case 23: aP3.fy=rDGR.GetF(); break; |
| case 33: aP3.fz=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFTextEntity--------------------------------------- |
| |
| DXFTextEntity::DXFTextEntity() : DXFBasicEntity(DXF_TEXT) |
| { |
| fHeight=1.0; |
| sText[0]=0; |
| fRotAngle=0.0; |
| fXScale=1.0; |
| fOblAngle=0.0; |
| strncpy( sStyle, "STANDARD", 9 ); |
| nGenFlags=0; |
| nHorzJust=0; |
| nVertJust=0; |
| } |
| |
| void DXFTextEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 40: fHeight=rDGR.GetF(); break; |
| case 1: strncpy( sText, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 50: fRotAngle=rDGR.GetF(); break; |
| case 41: fXScale=rDGR.GetF(); break; |
| case 42: fOblAngle=rDGR.GetF(); break; |
| case 7: strncpy( sStyle, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 71: nGenFlags=rDGR.GetI(); break; |
| case 72: nHorzJust=rDGR.GetI(); break; |
| case 73: nVertJust=rDGR.GetI(); break; |
| case 11: aAlign.fx=rDGR.GetF(); break; |
| case 21: aAlign.fy=rDGR.GetF(); break; |
| case 31: aAlign.fz=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFShapeEntity-------------------------------------- |
| |
| DXFShapeEntity::DXFShapeEntity() : DXFBasicEntity(DXF_SHAPE) |
| { |
| fSize=1.0; |
| sName[0]=0; |
| fRotAngle=0; |
| fXScale=1.0; |
| fOblAngle=0; |
| } |
| |
| void DXFShapeEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 40: fSize=rDGR.GetF(); break; |
| case 2: strncpy( sName, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 50: fRotAngle=rDGR.GetF(); break; |
| case 41: fXScale=rDGR.GetF(); break; |
| case 51: fOblAngle=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFInsertEntity------------------------------------- |
| |
| DXFInsertEntity::DXFInsertEntity() : DXFBasicEntity(DXF_INSERT) |
| { |
| nAttrFlag=0; |
| sName[0]=0; |
| fXScale=1.0; |
| fYScale=1.0; |
| fZScale=1.0; |
| fRotAngle=0.0; |
| nColCount=1; |
| nRowCount=1; |
| fColSpace=0.0; |
| fRowSpace=0.0; |
| } |
| |
| void DXFInsertEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 66: nAttrFlag=rDGR.GetI(); break; |
| case 2: strncpy( sName, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 41: fXScale=rDGR.GetF(); break; |
| case 42: fYScale=rDGR.GetF(); break; |
| case 43: fZScale=rDGR.GetF(); break; |
| case 50: fRotAngle=rDGR.GetF(); break; |
| case 70: nColCount=rDGR.GetI(); break; |
| case 71: nRowCount=rDGR.GetI(); break; |
| case 44: fColSpace=rDGR.GetF(); break; |
| case 45: fRowSpace=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFAttDefEntity------------------------------------- |
| |
| DXFAttDefEntity::DXFAttDefEntity() : DXFBasicEntity(DXF_ATTDEF) |
| { |
| fHeight=1.0; |
| sDefVal[0]=0; |
| sPrompt[0]=0; |
| sTagStr[0]=0; |
| nAttrFlags=0; |
| nFieldLen=0; |
| fRotAngle=0.0; |
| fXScale=1.0; |
| fOblAngle=0.0; |
| strncpy( sStyle, "STANDARD", 9 ); |
| nGenFlags=0; |
| nHorzJust=0; |
| nVertJust=0; |
| } |
| |
| void DXFAttDefEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 40: fHeight=rDGR.GetF(); break; |
| case 1: strncpy( sDefVal, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 3: strncpy( sPrompt, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 2: strncpy( sTagStr, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 70: nAttrFlags=rDGR.GetI(); break; |
| case 73: nFieldLen=rDGR.GetI(); break; |
| case 50: fRotAngle=rDGR.GetF(); break; |
| case 41: fXScale=rDGR.GetF(); break; |
| case 51: fOblAngle=rDGR.GetF(); break; |
| case 7: strncpy( sStyle, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 71: nGenFlags=rDGR.GetI(); break; |
| case 72: nHorzJust=rDGR.GetI(); break; |
| case 74: nVertJust=rDGR.GetI(); break; |
| case 11: aAlign.fx=rDGR.GetF(); break; |
| case 21: aAlign.fy=rDGR.GetF(); break; |
| case 31: aAlign.fz=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFAttribEntity------------------------------------- |
| |
| DXFAttribEntity::DXFAttribEntity() : DXFBasicEntity(DXF_ATTRIB) |
| { |
| fHeight=1.0; |
| sText[0]=0; |
| sTagStr[0]=0; |
| nAttrFlags=0; |
| nFieldLen=0; |
| fRotAngle=0.0; |
| fXScale=1.0; |
| fOblAngle=0.0; |
| strncpy( sStyle, "STANDARD", 9 ); |
| nGenFlags=0; |
| nHorzJust=0; |
| nVertJust=0; |
| } |
| |
| void DXFAttribEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 40: fHeight=rDGR.GetF(); break; |
| case 1: strncpy( sText, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 2: strncpy( sTagStr, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 70: nAttrFlags=rDGR.GetI(); break; |
| case 73: nFieldLen=rDGR.GetI(); break; |
| case 50: fRotAngle=rDGR.GetF(); break; |
| case 41: fXScale=rDGR.GetF(); break; |
| case 51: fOblAngle=rDGR.GetF(); break; |
| case 7: strncpy( sStyle, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| case 71: nGenFlags=rDGR.GetI(); break; |
| case 72: nHorzJust=rDGR.GetI(); break; |
| case 74: nVertJust=rDGR.GetI(); break; |
| case 11: aAlign.fx=rDGR.GetF(); break; |
| case 21: aAlign.fy=rDGR.GetF(); break; |
| case 31: aAlign.fz=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFPolyLine----------------------------------------- |
| |
| DXFPolyLineEntity::DXFPolyLineEntity() : DXFBasicEntity(DXF_POLYLINE) |
| { |
| fElevation=0.0; |
| nFlags=0; |
| fSWidth=0.0; |
| fEWidth=0.0; |
| nMeshMCount=0; |
| nMeshNCount=0; |
| nMDensity=0; |
| nNDensity=0; |
| nCSSType=0; |
| } |
| |
| void DXFPolyLineEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 30: fElevation=rDGR.GetF(); break; |
| case 70: nFlags=rDGR.GetI(); break; |
| case 40: fSWidth=rDGR.GetF(); break; |
| case 41: fEWidth=rDGR.GetF(); break; |
| case 71: nMeshMCount=rDGR.GetI(); break; |
| case 72: nMeshNCount=rDGR.GetI(); break; |
| case 73: nMDensity=rDGR.GetI(); break; |
| case 74: nNDensity=rDGR.GetI(); break; |
| case 75: nCSSType=rDGR.GetI(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFLWPolyLine--------------------------------------- |
| |
| DXFLWPolyLineEntity::DXFLWPolyLineEntity() : |
| DXFBasicEntity( DXF_LWPOLYLINE ), |
| nIndex( 0 ), |
| nCount( 0 ), |
| nFlags( 0 ), |
| fConstantWidth( 0.0 ), |
| fStartWidth( 0.0 ), |
| fEndWidth( 0.0 ), |
| pP( NULL ) |
| { |
| } |
| |
| void DXFLWPolyLineEntity::EvaluateGroup( DXFGroupReader & rDGR ) |
| { |
| switch ( rDGR.GetG() ) |
| { |
| case 90 : |
| { |
| nCount = rDGR.GetI(); |
| if ( nCount ) |
| pP = new DXFVector[ nCount ]; |
| } |
| break; |
| case 70: nFlags = rDGR.GetI(); break; |
| case 43: fConstantWidth = rDGR.GetF(); break; |
| case 40: fStartWidth = rDGR.GetF(); break; |
| case 41: fEndWidth = rDGR.GetF(); break; |
| case 10: |
| { |
| if ( pP && ( nIndex < nCount ) ) |
| pP[ nIndex ].fx = rDGR.GetF(); |
| } |
| break; |
| case 20: |
| { |
| if ( pP && ( nIndex < nCount ) ) |
| pP[ nIndex++ ].fy = rDGR.GetF(); |
| } |
| break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| DXFLWPolyLineEntity::~DXFLWPolyLineEntity() |
| { |
| delete[] pP; |
| } |
| |
| //--------------------------DXFHatchEntity------------------------------------- |
| |
| DXFEdgeTypeLine::DXFEdgeTypeLine() : |
| DXFEdgeType( 1 ) |
| { |
| |
| } |
| DXFEdgeTypeLine::~DXFEdgeTypeLine() |
| { |
| |
| } |
| sal_Bool DXFEdgeTypeLine::EvaluateGroup( DXFGroupReader & rDGR ) |
| { |
| sal_Bool bExecutingGroupCode = sal_True; |
| switch ( rDGR.GetG() ) |
| { |
| case 10 : aStartPoint.fx = rDGR.GetF(); break; |
| case 20 : aStartPoint.fy = rDGR.GetF(); break; |
| case 11 : aEndPoint.fx = rDGR.GetF(); break; |
| case 21 : aEndPoint.fy = rDGR.GetF(); break; |
| default : bExecutingGroupCode = sal_False; break; |
| } |
| return bExecutingGroupCode; |
| } |
| |
| DXFEdgeTypeCircularArc::DXFEdgeTypeCircularArc() : |
| DXFEdgeType( 2 ), |
| fRadius( 0.0 ), |
| fStartAngle( 0.0 ), |
| fEndAngle( 0.0 ), |
| nIsCounterClockwiseFlag( 0 ) |
| { |
| } |
| DXFEdgeTypeCircularArc::~DXFEdgeTypeCircularArc() |
| { |
| } |
| sal_Bool DXFEdgeTypeCircularArc::EvaluateGroup( DXFGroupReader & rDGR ) |
| { |
| sal_Bool bExecutingGroupCode = sal_True; |
| switch ( rDGR.GetG() ) |
| { |
| case 10 : aCenter.fx = rDGR.GetF(); break; |
| case 20 : aCenter.fy = rDGR.GetF(); break; |
| case 40 : fRadius = rDGR.GetF(); break; |
| case 50 : fStartAngle = rDGR.GetF(); break; |
| case 51 : fEndAngle = rDGR.GetF(); break; |
| case 73 : nIsCounterClockwiseFlag = rDGR.GetI(); break; |
| default : bExecutingGroupCode = sal_False; break; |
| } |
| return bExecutingGroupCode; |
| } |
| |
| DXFEdgeTypeEllipticalArc::DXFEdgeTypeEllipticalArc() : |
| DXFEdgeType( 3 ), |
| fLength( 0.0 ), |
| fStartAngle( 0.0 ), |
| fEndAngle( 0.0 ), |
| nIsCounterClockwiseFlag( 0 ) |
| { |
| } |
| DXFEdgeTypeEllipticalArc::~DXFEdgeTypeEllipticalArc() |
| { |
| |
| } |
| sal_Bool DXFEdgeTypeEllipticalArc::EvaluateGroup( DXFGroupReader & rDGR ) |
| { |
| sal_Bool bExecutingGroupCode = sal_True; |
| switch( rDGR.GetG() ) |
| { |
| case 10 : aCenter.fx = rDGR.GetF(); break; |
| case 20 : aCenter.fy = rDGR.GetF(); break; |
| case 11 : aEndPoint.fx = rDGR.GetF(); break; |
| case 21 : aEndPoint.fy = rDGR.GetF(); break; |
| case 40 : fLength = rDGR.GetF(); break; |
| case 50 : fStartAngle = rDGR.GetF(); break; |
| case 51 : fEndAngle = rDGR.GetF(); break; |
| case 73 : nIsCounterClockwiseFlag = rDGR.GetI(); break; |
| default : bExecutingGroupCode = sal_False; break; |
| } |
| return bExecutingGroupCode; |
| } |
| |
| DXFEdgeTypeSpline::DXFEdgeTypeSpline() : |
| DXFEdgeType( 4 ), |
| nDegree( 0 ), |
| nRational( 0 ), |
| nPeriodic( 0 ), |
| nKnotCount( 0 ), |
| nControlCount( 0 ) |
| { |
| } |
| DXFEdgeTypeSpline::~DXFEdgeTypeSpline() |
| { |
| |
| } |
| sal_Bool DXFEdgeTypeSpline::EvaluateGroup( DXFGroupReader & rDGR ) |
| { |
| sal_Bool bExecutingGroupCode = sal_True; |
| switch ( rDGR.GetG() ) |
| { |
| case 94 : nDegree = rDGR.GetI(); break; |
| case 73 : nRational = rDGR.GetI(); break; |
| case 74 : nPeriodic = rDGR.GetI(); break; |
| case 95 : nKnotCount = rDGR.GetI(); break; |
| case 96 : nControlCount = rDGR.GetI(); break; |
| default : bExecutingGroupCode = sal_False; break; |
| } |
| return bExecutingGroupCode; |
| } |
| |
| DXFBoundaryPathData::DXFBoundaryPathData() : |
| nFlags( 0 ), |
| nHasBulgeFlag( 0 ), |
| nIsClosedFlag( 0 ), |
| nPointCount( 0 ), |
| fBulge( 0.0 ), |
| nSourceBoundaryObjects( 0 ), |
| nEdgeCount( 0 ), |
| bIsPolyLine( sal_True ), |
| nPointIndex( 0 ), |
| pP( NULL ) |
| { |
| } |
| |
| DXFBoundaryPathData::~DXFBoundaryPathData() |
| { |
| sal_uInt32 i = 0; |
| for ( i = 0; i < aEdges.size(); i++ ) |
| delete aEdges[ i ]; |
| delete[] pP; |
| } |
| |
| sal_Bool DXFBoundaryPathData::EvaluateGroup( DXFGroupReader & rDGR ) |
| { |
| sal_Bool bExecutingGroupCode = sal_True; |
| if ( bIsPolyLine ) |
| { |
| switch( rDGR.GetG() ) |
| { |
| case 92 : |
| { |
| nFlags = rDGR.GetI(); |
| if ( ( nFlags & 2 ) == 0 ) |
| bIsPolyLine = sal_False; |
| } |
| break; |
| case 93 : |
| { |
| nPointCount = rDGR.GetI(); |
| if ( nPointCount ) |
| pP = new DXFVector[ nPointCount ]; |
| } |
| break; |
| case 72 : nHasBulgeFlag = rDGR.GetI(); break; |
| case 73 : nIsClosedFlag = rDGR.GetI(); break; |
| case 97 : nSourceBoundaryObjects = rDGR.GetI(); break; |
| case 42 : fBulge = rDGR.GetF(); break; |
| case 10: |
| { |
| if ( pP && ( nPointIndex < nPointCount ) ) |
| pP[ nPointIndex ].fx = rDGR.GetF(); |
| } |
| break; |
| case 20: |
| { |
| if ( pP && ( nPointIndex < nPointCount ) ) |
| pP[ nPointIndex++ ].fy = rDGR.GetF(); |
| } |
| break; |
| |
| default : bExecutingGroupCode = sal_False; break; |
| } |
| } |
| else |
| { |
| if ( rDGR.GetG() == 93 ) |
| nEdgeCount = rDGR.GetI(); |
| else if ( rDGR.GetG() == 72 ) |
| { |
| sal_Int32 nEdgeType = rDGR.GetI(); |
| switch( nEdgeType ) |
| { |
| case 1 : aEdges.push_back( new DXFEdgeTypeLine() ); break; |
| case 2 : aEdges.push_back( new DXFEdgeTypeCircularArc() ); break; |
| case 3 : aEdges.push_back( new DXFEdgeTypeEllipticalArc() ); break; |
| case 4 : aEdges.push_back( new DXFEdgeTypeSpline() ); break; |
| } |
| } |
| else if ( aEdges.size() ) |
| aEdges[ aEdges.size() - 1 ]->EvaluateGroup( rDGR ); |
| else |
| bExecutingGroupCode = sal_False; |
| } |
| return bExecutingGroupCode; |
| } |
| |
| DXFHatchEntity::DXFHatchEntity() : |
| DXFBasicEntity( DXF_HATCH ), |
| bIsInBoundaryPathContext( sal_False ), |
| nCurrentBoundaryPathIndex( -1 ), |
| nFlags( 0 ), |
| nAssociativityFlag( 0 ), |
| nBoundaryPathCount( 0 ), |
| nHatchStyle( 0 ), |
| nHatchPatternType( 0 ), |
| fHatchPatternAngle( 0.0 ), |
| fHatchPatternScale( 1.0 ), |
| nHatchDoubleFlag( 0 ), |
| nHatchPatternDefinitionLines( 0 ), |
| fPixelSize( 1.0 ), |
| nNumberOfSeedPoints( 0 ), |
| pBoundaryPathData( NULL ) |
| { |
| } |
| |
| void DXFHatchEntity::EvaluateGroup( DXFGroupReader & rDGR ) |
| { |
| switch ( rDGR.GetG() ) |
| { |
| // case 10 : aElevationPoint.fx = rDGR.GetF(); break; |
| // case 20 : aElevationPoint.fy = rDGR.GetF(); break; |
| // case 30 : aElevationPoint.fz = rDGR.GetF(); break; |
| case 70 : nFlags = rDGR.GetI(); break; |
| case 71 : nAssociativityFlag = rDGR.GetI(); break; |
| case 91 : |
| { |
| bIsInBoundaryPathContext = sal_True; |
| nBoundaryPathCount = rDGR.GetI(); |
| if ( nBoundaryPathCount ) |
| pBoundaryPathData = new DXFBoundaryPathData[ nBoundaryPathCount ]; |
| } |
| break; |
| case 75 : |
| { |
| nHatchStyle = rDGR.GetI(); |
| bIsInBoundaryPathContext = sal_False; |
| } |
| break; |
| case 76 : nHatchPatternType = rDGR.GetI(); break; |
| case 52 : fHatchPatternAngle = rDGR.GetF(); break; |
| case 41 : fHatchPatternScale = rDGR.GetF(); break; |
| case 77 : nHatchDoubleFlag = rDGR.GetI(); break; |
| case 78 : nHatchPatternDefinitionLines = rDGR.GetI(); break; |
| case 47 : fPixelSize = rDGR.GetF(); break; |
| case 98 : nNumberOfSeedPoints = rDGR.GetI(); break; |
| |
| //!! passthrough !! |
| case 92 : nCurrentBoundaryPathIndex++; |
| default: |
| { |
| sal_Bool bExecutingGroupCode = sal_False; |
| if ( bIsInBoundaryPathContext ) |
| { |
| if ( ( nCurrentBoundaryPathIndex >= 0 ) && |
| ( nCurrentBoundaryPathIndex < nBoundaryPathCount ) ) |
| bExecutingGroupCode = pBoundaryPathData[ nCurrentBoundaryPathIndex ].EvaluateGroup( rDGR ); |
| } |
| if ( bExecutingGroupCode == sal_False ) |
| DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| break; |
| } |
| } |
| |
| DXFHatchEntity::~DXFHatchEntity() |
| { |
| delete[] pBoundaryPathData; |
| } |
| |
| //--------------------------DXFVertexEntity------------------------------------- |
| |
| DXFVertexEntity::DXFVertexEntity() : DXFBasicEntity(DXF_VERTEX) |
| { |
| fSWidth=-1.0; |
| fEWidth=-1.0; |
| fBulge=0.0; |
| nFlags=0; |
| fCFTDir=0.0; |
| |
| } |
| |
| void DXFVertexEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 40: fSWidth=rDGR.GetF(); break; |
| case 41: fEWidth=rDGR.GetF(); break; |
| case 42: fBulge=rDGR.GetF(); break; |
| case 70: nFlags=rDGR.GetI(); break; |
| case 50: fCFTDir=rDGR.GetF(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //--------------------------DXFSeqEndEntity------------------------------------- |
| |
| DXFSeqEndEntity::DXFSeqEndEntity() : DXFBasicEntity(DXF_SEQEND) |
| { |
| } |
| |
| //--------------------------DXF3DFace------------------------------------------- |
| |
| DXF3DFaceEntity::DXF3DFaceEntity() : DXFBasicEntity(DXF_3DFACE) |
| { |
| nIEFlags=0; |
| } |
| |
| void DXF3DFaceEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 10: aP0.fx=rDGR.GetF(); break; |
| case 20: aP0.fy=rDGR.GetF(); break; |
| case 30: aP0.fz=rDGR.GetF(); break; |
| case 11: aP1.fx=rDGR.GetF(); break; |
| case 21: aP1.fy=rDGR.GetF(); break; |
| case 31: aP1.fz=rDGR.GetF(); break; |
| case 12: aP2.fx=rDGR.GetF(); break; |
| case 22: aP2.fy=rDGR.GetF(); break; |
| case 32: aP2.fz=rDGR.GetF(); break; |
| case 13: aP3.fx=rDGR.GetF(); break; |
| case 23: aP3.fy=rDGR.GetF(); break; |
| case 33: aP3.fz=rDGR.GetF(); break; |
| case 70: nIEFlags=rDGR.GetI(); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| |
| //--------------------------DXFDimensionEntity---------------------------------- |
| |
| DXFDimensionEntity::DXFDimensionEntity() : DXFBasicEntity(DXF_DIMENSION) |
| { |
| sPseudoBlock[0]=0; |
| } |
| |
| void DXFDimensionEntity::EvaluateGroup(DXFGroupReader & rDGR) |
| { |
| switch (rDGR.GetG()) { |
| case 2: strncpy( sPseudoBlock, rDGR.GetS(), DXF_MAX_STRING_LEN + 1 ); break; |
| default: DXFBasicEntity::EvaluateGroup(rDGR); |
| } |
| } |
| |
| //---------------------------- DXFEntites -------------------------------------- |
| |
| void DXFEntities::Read(DXFGroupReader & rDGR) |
| { |
| DXFBasicEntity * pE, * * ppSucc; |
| |
| ppSucc=&pFirst; |
| while (*ppSucc!=NULL) ppSucc=&((*ppSucc)->pSucc); |
| |
| while (rDGR.GetG()!=0) rDGR.Read(); |
| |
| while (strcmp(rDGR.GetS(),"ENDBLK")!=0 && |
| strcmp(rDGR.GetS(),"ENDSEC")!=0 && |
| strcmp(rDGR.GetS(),"EOF")!=0 ) |
| { |
| |
| if (strcmp(rDGR.GetS(),"LINE" )==0) pE=new DXFLineEntity; |
| else if (strcmp(rDGR.GetS(),"POINT" )==0) pE=new DXFPointEntity; |
| else if (strcmp(rDGR.GetS(),"CIRCLE" )==0) pE=new DXFCircleEntity; |
| else if (strcmp(rDGR.GetS(),"ARC" )==0) pE=new DXFArcEntity; |
| else if (strcmp(rDGR.GetS(),"TRACE" )==0) pE=new DXFTraceEntity; |
| else if (strcmp(rDGR.GetS(),"SOLID" )==0) pE=new DXFSolidEntity; |
| else if (strcmp(rDGR.GetS(),"TEXT" )==0) pE=new DXFTextEntity; |
| else if (strcmp(rDGR.GetS(),"SHAPE" )==0) pE=new DXFShapeEntity; |
| else if (strcmp(rDGR.GetS(),"INSERT" )==0) pE=new DXFInsertEntity; |
| else if (strcmp(rDGR.GetS(),"ATTDEF" )==0) pE=new DXFAttDefEntity; |
| else if (strcmp(rDGR.GetS(),"ATTRIB" )==0) pE=new DXFAttribEntity; |
| else if (strcmp(rDGR.GetS(),"POLYLINE" )==0) pE=new DXFPolyLineEntity; |
| else if (strcmp(rDGR.GetS(),"LWPOLYLINE")==0) pE=new DXFLWPolyLineEntity; |
| else if (strcmp(rDGR.GetS(),"VERTEX" )==0) pE=new DXFVertexEntity; |
| else if (strcmp(rDGR.GetS(),"SEQEND" )==0) pE=new DXFSeqEndEntity; |
| else if (strcmp(rDGR.GetS(),"3DFACE" )==0) pE=new DXF3DFaceEntity; |
| else if (strcmp(rDGR.GetS(),"DIMENSION" )==0) pE=new DXFDimensionEntity; |
| else if (strcmp(rDGR.GetS(),"HATCH" )==0) pE=new DXFHatchEntity; |
| else |
| { |
| do { |
| rDGR.Read(); |
| } while (rDGR.GetG()!=0); |
| continue; |
| } |
| *ppSucc=pE; |
| ppSucc=&(pE->pSucc); |
| pE->Read(rDGR); |
| } |
| } |
| |
| void DXFEntities::Clear() |
| { |
| DXFBasicEntity * ptmp; |
| |
| while (pFirst!=NULL) { |
| ptmp=pFirst; |
| pFirst=ptmp->pSucc; |
| delete ptmp; |
| } |
| } |
| |