summaryrefslogtreecommitdiff
path: root/goodies
diff options
context:
space:
mode:
Diffstat (limited to 'goodies')
-rw-r--r--goodies/source/filter.vcl/idxf/dxf2mtf.cxx181
-rw-r--r--goodies/source/filter.vcl/idxf/dxf2mtf.hxx10
-rw-r--r--goodies/source/filter.vcl/idxf/dxfreprd.cxx12
-rw-r--r--goodies/source/filter.vcl/idxf/dxfreprd.hxx10
-rw-r--r--goodies/source/filter.vcl/idxf/dxfvec.cxx29
-rw-r--r--goodies/source/filter.vcl/idxf/dxfvec.hxx34
-rw-r--r--goodies/source/graphic/grfmgr.cxx31
7 files changed, 217 insertions, 90 deletions
diff --git a/goodies/source/filter.vcl/idxf/dxf2mtf.cxx b/goodies/source/filter.vcl/idxf/dxf2mtf.cxx
index a2547bcae232..654b66888f67 100644
--- a/goodies/source/filter.vcl/idxf/dxf2mtf.cxx
+++ b/goodies/source/filter.vcl/idxf/dxf2mtf.cxx
@@ -91,41 +91,93 @@ long DXF2GDIMetaFile::GetEntityColor(const DXFBasicEntity & rE)
return nColor;
}
-
-PenStyle DXF2GDIMetaFile::LTypeToPStyle(const char * sLineType)
+DXFLineInfo DXF2GDIMetaFile::LTypeToDXFLineInfo(const char * sLineType)
{
const DXFLType * pLT;
- PenStyle ePStyle;
+ DXFLineInfo aDXFLineInfo;
+
pLT=pDXF->aTables.SearchLType(sLineType);
- if (pLT==NULL) ePStyle=PEN_SOLID;
- else if (pLT->nDashCount<=1) ePStyle=PEN_SOLID;
- else if (pLT->nDashCount==2) {
- if (fabs(pLT->fDash[0])*4<fabs(pLT->fPatternLength)) ePStyle=PEN_DOT;
- else ePStyle=PEN_DASH;
- }
- else ePStyle=PEN_DASHDOT;
- return ePStyle;
-}
+ if (pLT==NULL || pLT->nDashCount == 0) {
+ aDXFLineInfo.eStyle = LINE_SOLID;
+ }
+ else {
+ sal_Int32 i;
+ double x;
+ aDXFLineInfo.eStyle = LINE_DASH;
+ for (i=0; i < (pLT->nDashCount); i++) {
+ x = pLT->fDash[i] * pDXF->getGlobalLineTypeScale();
+// ####
+ // x = (sal_Int32) rTransform.TransLineWidth( pLT->fDash[i] * pDXF->getGlobalLineTypeScale() );
+ if ( x >= 0.0 ) {
+ if ( aDXFLineInfo.nDotCount == 0 ) {
+ aDXFLineInfo.nDotCount ++;
+ aDXFLineInfo.fDotLen = x;
+ }
+ else if ( aDXFLineInfo.fDotLen == x ) {
+ aDXFLineInfo.nDotCount ++;
+ }
+ else if ( aDXFLineInfo.nDashCount == 0 ) {
+ aDXFLineInfo.nDashCount ++;
+ aDXFLineInfo.fDashLen = x;
+ }
+ else if ( aDXFLineInfo.fDashLen == x ) {
+ aDXFLineInfo.nDashCount ++;
+ }
+ else {
+ // It is impossible to be converted.
+ }
+ }
+ else {
+ if ( aDXFLineInfo.fDistance == 0 ) {
+ aDXFLineInfo.fDistance = -1 * x;
+ }
+ else {
+ // It is impossible to be converted.
+ }
+ }
+
+ }
+ }
+#if 0
+ if (aDXFLineInfo.DashCount > 0 && aDXFLineInfo.DashLen == 0.0)
+ aDXFLineInfo.DashLen ( 1 );
+ if (aDXFLineInfo.DotCount > 0 && aDXFLineInfo.DotLen() == 0.0)
+ aDXFLineInfo.SetDotLen( 1 );
+ if (aDXFLineInfo.GetDashCount > 0 || aDXFLineInfo.GetDotCount > 0)
+ if (aDXFLineInfo.GetDistance() == 0)
+ aDXFLineInfo.SetDistance( 1 );
+#endif
-PenStyle DXF2GDIMetaFile::GetEntityPStyle(const DXFBasicEntity & rE)
+ return aDXFLineInfo;
+}
+
+DXFLineInfo DXF2GDIMetaFile::GetEntityDXFLineInfo(const DXFBasicEntity & rE)
{
- PenStyle ePStyle;
+ DXFLineInfo aDXFLineInfo;
const DXFLayer * pLayer;
+ aDXFLineInfo.eStyle = LINE_SOLID;
+ aDXFLineInfo.fWidth = 0;
+ aDXFLineInfo.nDashCount = 0;
+ aDXFLineInfo.fDashLen = 0;
+ aDXFLineInfo.nDotCount = 0;
+ aDXFLineInfo.fDotLen = 0;
+ aDXFLineInfo.fDistance = 0;
+
if (strcmp(rE.sLineType,"BYLAYER")==0) {
- if (rE.sLayer[0]=='0' && rE.sLayer[1]==0) ePStyle=eParentLayerPStyle;
+ if (rE.sLayer[0]=='0' && rE.sLayer[1]==0) aDXFLineInfo=aParentLayerDXFLineInfo;
else {
pLayer=pDXF->aTables.SearchLayer(rE.sLayer);
- if (pLayer!=NULL) ePStyle=LTypeToPStyle(pLayer->sLineType);
- else ePStyle=eParentLayerPStyle;
+ if (pLayer!=NULL) aDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType);
+ else aDXFLineInfo=aParentLayerDXFLineInfo;
}
}
else if (strcmp(rE.sLineType,"BYBLOCK")==0) {
- ePStyle=eBlockPStyle;
+ aDXFLineInfo=aBlockDXFLineInfo;
}
- else ePStyle=LTypeToPStyle(rE.sLineType);
- return ePStyle;
+ else aDXFLineInfo=LTypeToDXFLineInfo(rE.sLineType);
+ return aDXFLineInfo;
}
@@ -133,12 +185,10 @@ BOOL DXF2GDIMetaFile::SetLineAttribute(const DXFBasicEntity & rE, ULONG /*nWidth
{
long nColor;
Color aColor;
- PenStyle ePStyle;
nColor=GetEntityColor(rE);
if (nColor<0) return FALSE;
aColor=ConvertColor((BYTE)nColor);
- ePStyle=GetEntityPStyle(rE);
if (aActLineColor!=aColor) {
pVirDev->SetLineColor( aActLineColor = aColor );
@@ -202,12 +252,30 @@ BOOL DXF2GDIMetaFile::SetFontAttribute(const DXFBasicEntity & rE, short nAngle,
void DXF2GDIMetaFile::DrawLineEntity(const DXFLineEntity & rE, const DXFTransform & rTransform)
{
-
if (SetLineAttribute(rE)) {
Point aP0,aP1;
rTransform.Transform(rE.aP0,aP0);
rTransform.Transform(rE.aP1,aP1);
- pVirDev->DrawLine(aP0,aP1);
+
+ DXFLineInfo aDXFLineInfo;
+ aDXFLineInfo=GetEntityDXFLineInfo(rE);
+ LineInfo aLineInfo;
+ aLineInfo = rTransform.Transform(aDXFLineInfo);
+
+#if 0
+ printf("%f\n", rTransform.TransLineWidth(1000.0));
+
+ // LINE_NONE = 0, LINE_SOLID = 1, LINE_DASH = 2, LineStyle_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
+ aLineInfo.SetStyle( LINE_DASH );
+ aLineInfo.SetWidth( 300 );
+ aLineInfo.SetDashCount( 2 );
+ aLineInfo.SetDashLen( 100 );
+ aLineInfo.SetDotCount( 1 );
+ aLineInfo.SetDotLen( 0 );
+ aLineInfo.SetDistance( 500 );
+#endif
+
+ pVirDev->DrawLine(aP0,aP1,aLineInfo);
if (rE.fThickness!=0) {
Point aP2,aP3;
rTransform.Transform(rE.aP0+DXFVector(0,0,rE.fThickness),aP2);
@@ -426,23 +494,23 @@ void DXF2GDIMetaFile::DrawInsertEntity(const DXFInsertEntity & rE, const DXFTran
rTransform
);
long nSavedBlockColor, nSavedParentLayerColor;
- PenStyle eSavedBlockPStyle, eSavedParentLayerPStyle;
+ DXFLineInfo aSavedBlockDXFLineInfo, aSavedParentLayerDXFLineInfo;
nSavedBlockColor=nBlockColor;
nSavedParentLayerColor=nParentLayerColor;
- eSavedBlockPStyle=eBlockPStyle;
- eSavedParentLayerPStyle=eParentLayerPStyle;
+ aSavedBlockDXFLineInfo=aBlockDXFLineInfo;
+ aSavedParentLayerDXFLineInfo=aParentLayerDXFLineInfo;
nBlockColor=GetEntityColor(rE);
- eBlockPStyle=GetEntityPStyle(rE);
+ aBlockDXFLineInfo=GetEntityDXFLineInfo(rE);
if (rE.sLayer[0]!='0' || rE.sLayer[1]!=0) {
DXFLayer * pLayer=pDXF->aTables.SearchLayer(rE.sLayer);
if (pLayer!=NULL) {
nParentLayerColor=pLayer->nColor;
- eParentLayerPStyle=LTypeToPStyle(pLayer->sLineType);
+ aParentLayerDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType);
}
}
DrawEntities(*pB,aT,FALSE);
- eBlockPStyle=eSavedBlockPStyle;
- eParentLayerPStyle=eSavedParentLayerPStyle;
+ aBlockDXFLineInfo=aSavedBlockDXFLineInfo;
+ aParentLayerDXFLineInfo=aSavedParentLayerDXFLineInfo;
nBlockColor=nSavedBlockColor;
nParentLayerColor=nSavedParentLayerColor;
}
@@ -540,6 +608,8 @@ void DXF2GDIMetaFile::DrawLWPolyLineEntity(const DXFLWPolyLineEntity & rE, const
pVirDev->DrawPolygon( aPoly );
else
pVirDev->DrawPolyLine( aPoly );
+ // ####
+ //pVirDev->DrawPolyLine( aPoly, aDXFLineInfo );
}
}
}
@@ -675,23 +745,23 @@ void DXF2GDIMetaFile::DrawDimensionEntity(const DXFDimensionEntity & rE, const D
rTransform
);
long nSavedBlockColor, nSavedParentLayerColor;
- PenStyle eSavedBlockPStyle, eSavedParentLayerPStyle;
+ DXFLineInfo aSavedBlockDXFLineInfo, aSavedParentLayerDXFLineInfo;
nSavedBlockColor=nBlockColor;
nSavedParentLayerColor=nParentLayerColor;
- eSavedBlockPStyle=eBlockPStyle;
- eSavedParentLayerPStyle=eParentLayerPStyle;
+ aSavedBlockDXFLineInfo=aBlockDXFLineInfo;
+ aSavedParentLayerDXFLineInfo=aParentLayerDXFLineInfo;
nBlockColor=GetEntityColor(rE);
- eBlockPStyle=GetEntityPStyle(rE);
+ aBlockDXFLineInfo=GetEntityDXFLineInfo(rE);
if (rE.sLayer[0]!='0' || rE.sLayer[1]!=0) {
DXFLayer * pLayer=pDXF->aTables.SearchLayer(rE.sLayer);
if (pLayer!=NULL) {
nParentLayerColor=pLayer->nColor;
- eParentLayerPStyle=LTypeToPStyle(pLayer->sLineType);
+ aParentLayerDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType);
}
}
DrawEntities(*pB,aT,FALSE);
- eBlockPStyle=eSavedBlockPStyle;
- eParentLayerPStyle=eSavedParentLayerPStyle;
+ aBlockDXFLineInfo=aSavedBlockDXFLineInfo;
+ aParentLayerDXFLineInfo=aSavedParentLayerDXFLineInfo;
nBlockColor=nSavedBlockColor;
nParentLayerColor=nSavedParentLayerColor;
}
@@ -801,16 +871,28 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF
nMainEntitiesCount=CountEntities(pDXF->aEntities);
nBlockColor=7;
- eBlockPStyle=PEN_SOLID;
+ aBlockDXFLineInfo.eStyle = LINE_SOLID;
+ aBlockDXFLineInfo.fWidth = 0;
+ aBlockDXFLineInfo.nDashCount = 0;
+ aBlockDXFLineInfo.fDashLen = 0;
+ aBlockDXFLineInfo.nDotCount = 0;
+ aBlockDXFLineInfo.fDotLen = 0;
+ aBlockDXFLineInfo.fDistance = 0;
pLayer=pDXF->aTables.SearchLayer("0");
if (pLayer!=NULL) {
nParentLayerColor=pLayer->nColor & 0xff;
- eParentLayerPStyle=LTypeToPStyle(pLayer->sLineType);
+ aParentLayerDXFLineInfo=LTypeToDXFLineInfo(pLayer->sLineType);
}
else {
nParentLayerColor=7;
- eParentLayerPStyle=PEN_SOLID;
+ aParentLayerDXFLineInfo.eStyle = LINE_SOLID;
+ aParentLayerDXFLineInfo.fWidth = 0;
+ aParentLayerDXFLineInfo.nDashCount = 0;
+ aParentLayerDXFLineInfo.fDashLen = 0;
+ aParentLayerDXFLineInfo.nDotCount = 0;
+ aParentLayerDXFLineInfo.fDotLen = 0;
+ aParentLayerDXFLineInfo.fDistance = 0;
}
pVirDev->EnableOutput(FALSE);
@@ -837,14 +919,14 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF
fScale = 0; // -Wall added this...
}
else {
- if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) {
+// if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) {
if (fWidth>fHeight)
fScale=10000.0/fWidth;
else
fScale=10000.0/fHeight;
- }
- else
- fScale=1.0;
+// }
+// else
+// fScale=1.0;
aTransform=DXFTransform(fScale,-fScale,fScale,
DXFVector(-pDXF->aBoundingBox.fMinX*fScale,
pDXF->aBoundingBox.fMaxY*fScale,
@@ -857,14 +939,14 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF
else {
fHeight=pVPort->fHeight;
fWidth=fHeight*pVPort->fAspectRatio;
- if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) {
+// if (fWidth<500.0 || fHeight<500.0 || fWidth>32767.0 || fHeight>32767.0) {
if (fWidth>fHeight)
fScale=10000.0/fWidth;
else
fScale=10000.0/fHeight;
- }
- else
- fScale=1.0;
+// }
+// else
+// fScale=1.0;
aTransform=DXFTransform(
DXFTransform(pVPort->aDirection,pVPort->aTarget),
DXFTransform(
@@ -894,7 +976,6 @@ BOOL DXF2GDIMetaFile::Convert(const DXFRepresentation & rDXF, GDIMetaFile & rMTF
}
delete pVirDev;
-
return bStatus;
}
diff --git a/goodies/source/filter.vcl/idxf/dxf2mtf.hxx b/goodies/source/filter.vcl/idxf/dxf2mtf.hxx
index bf32750cc0af..a1bf99639430 100644
--- a/goodies/source/filter.vcl/idxf/dxf2mtf.hxx
+++ b/goodies/source/filter.vcl/idxf/dxf2mtf.hxx
@@ -33,6 +33,7 @@
#include "dxfreprd.hxx"
#include <vcl/font.hxx>
+#include <vcl/lineinfo.hxx>
// MT: NOOLDSV, someone should change the code...
enum PenStyle { PEN_NULL, PEN_SOLID, PEN_DOT, PEN_DASH, PEN_DASHDOT };
@@ -41,6 +42,7 @@ enum BrushStyle { BRUSH_NULL, BRUSH_SOLID, BRUSH_HORZ, BRUSH_VERT,
BRUSH_25, BRUSH_50, BRUSH_75,
BRUSH_BITMAP };
+
class DXF2GDIMetaFile {
private:
@@ -56,9 +58,9 @@ private:
ULONG nMainEntitiesCount;
long nBlockColor;
- PenStyle eBlockPStyle;
+ DXFLineInfo aBlockDXFLineInfo;
long nParentLayerColor;
- PenStyle eParentLayerPStyle;
+ DXFLineInfo aParentLayerDXFLineInfo;
Color aActLineColor;
Color aActFillColor;
Font aActFont;
@@ -71,9 +73,9 @@ private:
long GetEntityColor(const DXFBasicEntity & rE);
- PenStyle LTypeToPStyle(const char * sLineType);
+ DXFLineInfo LTypeToDXFLineInfo(const char * sLineType);
- PenStyle GetEntityPStyle(const DXFBasicEntity & rE);
+ DXFLineInfo GetEntityDXFLineInfo(const DXFBasicEntity & rE);
BOOL SetLineAttribute(const DXFBasicEntity & rE, ULONG nWidth=0);
diff --git a/goodies/source/filter.vcl/idxf/dxfreprd.cxx b/goodies/source/filter.vcl/idxf/dxfreprd.cxx
index 7dc2f5d8d58d..80b4cb599b73 100644
--- a/goodies/source/filter.vcl/idxf/dxfreprd.cxx
+++ b/goodies/source/filter.vcl/idxf/dxfreprd.cxx
@@ -142,7 +142,8 @@ void DXFPalette::SetColor(BYTE nIndex, BYTE nRed, BYTE nGreen, BYTE nBlue)
DXFRepresentation::DXFRepresentation()
{
- setTextEncoding(RTL_TEXTENCODING_IBM_437);
+ setTextEncoding(RTL_TEXTENCODING_IBM_437);
+ setGlobalLineTypeScale(1.0);
}
@@ -217,11 +218,18 @@ void DXFRepresentation::ReadHeader(DXFGroupReader & rDGR)
// FIXME: we really need a whole table of
// $DWGCODEPAGE to encodings mappings
if ( (strcmp(rDGR.GetS(),"ANSI_932")==0) ||
- (strcmp(rDGR.GetS(),"DOS932")==0) )
+ (strcmp(rDGR.GetS(),"ansi_932")==0) ||
+ (strcmp(rDGR.GetS(),"DOS932")==0) ||
+ (strcmp(rDGR.GetS(),"dos932")==0) )
{
setTextEncoding(RTL_TEXTENCODING_MS_932);
}
}
+ else if (strcmp(rDGR.GetS(),"$LTSCALE")==0)
+ {
+ rDGR.Read();
+ setGlobalLineTypeScale(getGlobalLineTypeScale() * rDGR.GetF());
+ }
else rDGR.Read();
}
}
diff --git a/goodies/source/filter.vcl/idxf/dxfreprd.hxx b/goodies/source/filter.vcl/idxf/dxfreprd.hxx
index 490f7af57223..13ca7d022697 100644
--- a/goodies/source/filter.vcl/idxf/dxfreprd.hxx
+++ b/goodies/source/filter.vcl/idxf/dxfreprd.hxx
@@ -101,7 +101,9 @@ public:
DXFEntities aEntities;
// Die Entities (aus der Entities-Section) der DXF-Datei
- rtl_TextEncoding mEnc;
+ rtl_TextEncoding mEnc; // $DWGCODEPAGE
+
+ double mfGlobalLineTypeScale; // $LTSCALE
DXFRepresentation();
~DXFRepresentation();
@@ -109,6 +111,9 @@ public:
rtl_TextEncoding getTextEncoding() const;
void setTextEncoding(rtl_TextEncoding aEnc);
+ double getGlobalLineTypeScale() const;
+ void setGlobalLineTypeScale(double fGlobalLineTypeScale);
+
BOOL Read( SvStream & rIStream, USHORT nMinPercent, USHORT nMaxPercent);
// Liesst die komplette DXF-Datei ein.
@@ -128,7 +133,8 @@ inline BYTE DXFPalette::GetGreen(BYTE nIndex) const { return pGreen[nIndex]; }
inline BYTE DXFPalette::GetBlue(BYTE nIndex) const { return pBlue[nIndex]; }
inline rtl_TextEncoding DXFRepresentation::getTextEncoding() const { return mEnc; }
inline void DXFRepresentation::setTextEncoding(rtl_TextEncoding aEnc) { mEnc = aEnc; }
-
+inline double DXFRepresentation::getGlobalLineTypeScale() const { return mfGlobalLineTypeScale; }
+inline void DXFRepresentation::setGlobalLineTypeScale(double fGlobalLineTypeScale) { mfGlobalLineTypeScale = fGlobalLineTypeScale; }
#endif
diff --git a/goodies/source/filter.vcl/idxf/dxfvec.cxx b/goodies/source/filter.vcl/idxf/dxfvec.cxx
index ee5a923a8684..48bc93ae3eb6 100644
--- a/goodies/source/filter.vcl/idxf/dxfvec.cxx
+++ b/goodies/source/filter.vcl/idxf/dxfvec.cxx
@@ -206,6 +206,32 @@ BOOL DXFTransform::TransCircleToEllipse(double fRadius, double & rEx, double & r
else return FALSE;
}
+LineInfo DXFTransform::Transform(const DXFLineInfo& aDXFLineInfo) const
+{
+ double fex,fey,scale;
+
+ fex=sqrt(aMX.fx*aMX.fx + aMX.fy*aMX.fy);
+ fey=sqrt(aMY.fx*aMY.fx + aMY.fy*aMY.fy);
+ scale = (fex+fey)/2.0;
+
+ LineInfo aLineInfo;
+
+ aLineInfo.SetStyle( aDXFLineInfo.eStyle );
+ aLineInfo.SetWidth( (sal_Int32) (aDXFLineInfo.fWidth * scale + 0.5) );
+ aLineInfo.SetDashCount( static_cast< USHORT >( aDXFLineInfo.nDashCount ) );
+ aLineInfo.SetDashLen( (sal_Int32) (aDXFLineInfo.fDashLen * scale + 0.5) );
+ aLineInfo.SetDotCount( static_cast< USHORT >( aDXFLineInfo.nDotCount ) );
+ aLineInfo.SetDotLen( (sal_Int32) (aDXFLineInfo.fDotLen * scale + 0.5) );
+ aLineInfo.SetDistance( (sal_Int32) (aDXFLineInfo.fDistance * scale + 0.5) );
+
+ if ( aLineInfo.GetDashCount() > 0 && aLineInfo.GetDashLen() == 0 )
+ aLineInfo.SetDashLen(1);
+
+ if ( aLineInfo.GetDotCount() > 0 && aLineInfo.GetDotLen() == 0 )
+ aLineInfo.SetDotLen(1);
+
+ return aLineInfo;
+}
ULONG DXFTransform::TransLineWidth(double fW) const
{
@@ -213,6 +239,8 @@ ULONG DXFTransform::TransLineWidth(double fW) const
fex=sqrt(aMX.fx*aMX.fx + aMX.fy*aMX.fy);
fey=sqrt(aMY.fx*aMY.fx + aMY.fy*aMY.fy);
+ // ###
+ // printf("fex=%f fey=%f\n", fex, fey);
return (ULONG)(fabs(fW)*(fex+fey)/2.0+0.5);
}
@@ -227,4 +255,3 @@ BOOL DXFTransform::Mirror() const
if (aMZ.SProd(aMX*aMY)<0) return TRUE; else return FALSE;
}
-
diff --git a/goodies/source/filter.vcl/idxf/dxfvec.hxx b/goodies/source/filter.vcl/idxf/dxfvec.hxx
index 5ccc0be25774..aca26df46676 100644
--- a/goodies/source/filter.vcl/idxf/dxfvec.hxx
+++ b/goodies/source/filter.vcl/idxf/dxfvec.hxx
@@ -32,6 +32,37 @@
#define _DXFVEC_HXX
#include <tools/gen.hxx>
+#include <vcl/lineinfo.hxx>
+
+class DXFLineInfo {
+public:
+ LineStyle eStyle;
+ double fWidth;
+ sal_Int32 nDashCount;
+ double fDashLen;
+ sal_Int32 nDotCount;
+ double fDotLen;
+ double fDistance;
+
+ DXFLineInfo() :
+ eStyle(LINE_SOLID),
+ fWidth(0),
+ nDashCount(0),
+ fDashLen(0),
+ nDotCount(0),
+ fDotLen(0),
+ fDistance(0) {}
+
+ DXFLineInfo(const DXFLineInfo& x) :
+ eStyle(x.eStyle),
+ fWidth(x.fWidth),
+ nDashCount(x.nDashCount),
+ fDashLen(x.fDashLen),
+ nDotCount(x.nDotCount),
+ fDotLen(x.fDotLen),
+ fDistance(x.fDistance) {}
+
+};
//------------------------------------------------------------------------------
@@ -135,6 +166,9 @@ public:
BOOL Mirror() const;
// Liefert TRUE, wenn die Matrix ein Linkssystem bildet
+ LineInfo Transform(const DXFLineInfo& aDXFLineInfo) const;
+ // Transform to LineInfo
+
private:
DXFVector aMX;
DXFVector aMY;
diff --git a/goodies/source/graphic/grfmgr.cxx b/goodies/source/graphic/grfmgr.cxx
index bece8389d270..5cb37a51e81f 100644
--- a/goodies/source/graphic/grfmgr.cxx
+++ b/goodies/source/graphic/grfmgr.cxx
@@ -44,7 +44,6 @@
#include <vcl/metaact.hxx>
#include <vcl/virdev.hxx>
#include <vcl/salbtype.hxx>
-#include <vcl/pdfextoutdevdata.hxx>
#include <svtools/cacheoptions.hxx>
#include "grfmgr.hxx"
@@ -674,31 +673,11 @@ BOOL GraphicObject::Draw( OutputDevice* pOut, const Point& rPt, const Size& rSz,
const sal_uInt32 nOldDrawMode = pOut->GetDrawMode();
BOOL bCropped = aAttr.IsCropped();
BOOL bCached = FALSE;
- BOOL bWritingPdfLinkedGraphic = FALSE;
BOOL bRet;
// #i29534# Provide output rects for PDF writer
Rectangle aCropRect;
- // #i29534# Notify PDF writer about linked graphic (if any)
- vcl::ExtOutDevData* pExtOutDevData = pOut->GetExtOutDevData();
- if( pExtOutDevData && pExtOutDevData->ISA(vcl::PDFExtOutDevData) )
- {
- // #i29534# Only delegate image handling to PDF, if no special
- // treatment is necessary
- if( GetGraphic().IsLink() &&
- aSz.Width() > 0L &&
- aSz.Height() > 0L &&
- !aAttr.IsSpecialDrawMode() &&
- !aAttr.IsMirrored() &&
- !aAttr.IsRotated() &&
- !aAttr.IsAdjusted() )
- {
- bWritingPdfLinkedGraphic = TRUE;
- static_cast< vcl::PDFExtOutDevData* >( pExtOutDevData )->BeginGroup();
- }
- }
-
if( !( GRFMGR_DRAW_USE_DRAWMODE_SETTINGS & nFlags ) )
pOut->SetDrawMode( nOldDrawMode & ( ~( DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT ) ) );
@@ -749,16 +728,6 @@ BOOL GraphicObject::Draw( OutputDevice* pOut, const Point& rPt, const Size& rSz,
pOut->SetDrawMode( nOldDrawMode );
- // #i29534# Notify PDF writer about linked graphic (if any)
- if( bWritingPdfLinkedGraphic )
- {
- static_cast< vcl::PDFExtOutDevData* >( pExtOutDevData )->EndGroup(
- const_cast< Graphic& >(GetGraphic()),
- aAttr.GetTransparency(),
- Rectangle( aPt, aSz ),
- aCropRect );
- }
-
// #i29534# Moved below OutDev restoration, to avoid multiple swap-ins
// (code above needs to call GetGraphic twice)
if( bCached )