📄 doc_pdf.cpp
字号:
rColumn.m_rect.xMax = rTable.Get_XMin() + (i + 1) * dx - dxSpace;
_Draw_Table(rColumn, pTable, iRecord, nRecords, CellHeight, HeaderHeightRel);
}
return( true );
}
return( Draw_Table(r, pTable, CellHeight, HeaderHeightRel) );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
bool CSG_Doc_PDF::_Draw_Shape(CSG_Rect r, CSG_Shape *pShape, double xMin, double yMin, double World2PDF, int Style, int Fill_Color, int Line_Color, int Line_Width, int Point_Width)
{
if( pShape && pShape->is_Valid() )
{
int iPart, iPoint;
TSG_Point Point;
CSG_Points Points;
for(iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
{
Points.Clear();
for(iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
{
Point = pShape->Get_Point(iPoint, iPart);
Point.x = r.Get_XMin() + World2PDF * (Point.x - xMin);
Point.y = r.Get_YMin() + World2PDF * (Point.y - yMin);
Points.Add(Point.x, Point.y);
}
switch( pShape->Get_Type() )
{
case SHAPE_TYPE_Point:
case SHAPE_TYPE_Points:
for(iPoint=0; iPoint<Points.Get_Count(); iPoint++)
{
Draw_Point(Points[iPoint].x, Points[iPoint].y, Point_Width, Style, Fill_Color, Line_Color, Line_Width);
}
break;
case SHAPE_TYPE_Line:
Draw_Line(Points, Line_Width, Line_Color, Style);
break;
case SHAPE_TYPE_Polygon:
if( ((CSG_Shape_Polygon *)pShape)->is_Lake(iPart) )
{
Draw_Polygon(Points, PDF_STYLE_POLYGON_FILLSTROKE, SG_COLOR_WHITE, Line_Color, Line_Width);
}
else
{
Draw_Polygon(Points, Style, Fill_Color, Line_Color, Line_Width);
}
break;
}
}
return( true );
}
return( false );
}
//---------------------------------------------------------
bool CSG_Doc_PDF::Draw_Shape(const CSG_Rect &r, CSG_Shape *pShape, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)
{
double World2PDF;
CSG_Rect rWorld, rFit;
if( pShape && pShape->is_Valid() && r.Get_XRange() > 0.0 && r.Get_YRange() > 0.0 )
{
rWorld = prWorld ? *prWorld : pShape->Get_Extent();
if( rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 )
{
_Fit_Rectangle(rFit = r, rWorld.Get_XRange() / rWorld.Get_YRange(), true);
World2PDF = rFit.Get_XRange() / rWorld.Get_XRange();
_Draw_Shape(rFit, pShape, rWorld.Get_XMin(), rWorld.Get_YMin(), World2PDF, Style, Fill_Color, Line_Color, Line_Width, Line_Width);
return( true );
}
}
return( false );
}
//---------------------------------------------------------
bool CSG_Doc_PDF::Draw_Shapes(const CSG_Rect &r, CSG_Shapes *pShapes, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld)
{
double World2PDF;
CSG_Rect rWorld, rFit;
if( pShapes && pShapes->is_Valid() && r.Get_XRange() > 0.0 && r.Get_YRange() > 0.0 )
{
rWorld = prWorld ? *prWorld : pShapes->Get_Extent();
if( rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 )
{
_Fit_Rectangle(rFit = r, rWorld.Get_XRange() / rWorld.Get_YRange(), true);
World2PDF = rFit.Get_XRange() / rWorld.Get_XRange();
for(int iShape=0; iShape<pShapes->Get_Count(); iShape++)
{
_Draw_Shape(rFit, pShapes->Get_Shape(iShape), rWorld.Get_XMin(), rWorld.Get_YMin(), World2PDF, Style, Fill_Color, Line_Color, Line_Width, Line_Width);
}
return( true );
}
}
return( false );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
bool CSG_Doc_PDF::Draw_Grid(const CSG_Rect &r, CSG_Grid *pGrid, const CSG_Colors &Colors, double zMin, double zMax, int Style, CSG_Rect *prWorld)
{
double x, y, z, d, xFit, yFit, dFit;
CSG_Rect rWorld, rFit;
if( Is_Ready_To_Draw() && pGrid && pGrid->is_Valid() && pGrid->Get_ZRange() > 0.0 )
{
rWorld = prWorld ? *prWorld : pGrid->Get_Extent();
if( rWorld.Get_XRange() > 0.0 && rWorld.Get_YRange() > 0.0 )
{
_Fit_Rectangle(rFit = r, rWorld.Get_XRange() / rWorld.Get_YRange(), true);
dFit = 1.0;
d = dFit * (rWorld.Get_XRange() / rFit.Get_XRange());
if( zMin >= zMax )
{
zMin = pGrid->Get_ZMin();
zMax = pGrid->Get_ZMax();
}
zMax = Colors.Get_Count() / (zMax - zMin);
for(y=rWorld.Get_YMin(), yFit=rFit.Get_YMin(); yFit<rFit.Get_YMax() && y<pGrid->Get_Extent().Get_YMax(); y++, yFit+=dFit, y+=d)
{
for(x=rWorld.Get_XMin(), xFit=rFit.Get_XMin(); xFit<rFit.Get_XMax() && x<pGrid->Get_Extent().Get_XMax(); x++, xFit+=dFit, x+=d)
{
if( pGrid->Get_Value(x, y, z) )
{
Draw_Point(xFit, yFit, dFit, PDF_STYLE_POINT_SQUARE|PDF_STYLE_POLYGON_FILL, Colors.Get_Color((int)(zMax * (z - zMin))));
}
}
}
return( true );
}
}
return( false );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
void CSG_Doc_PDF::Draw_Curve(CSG_Points &Data, const CSG_Rect &r, int iGraphType)
{
/*
int i;
int iMag;
int iNumLines;
int iNumData;
float fMinLine = 0;
float fWidth;
float fMax, fMin;
float fStep;
float fX, fY;
float fMaxX, fMinX;
float fOffsetX;
CSG_String sValue;
CSG_Points Points;
fMin = fMax = Data[0].y;
for (i = 0; i < Data.Get_Count(); i++)
{
if (Data[i].y > fMax)
{
fMax = Data[i].y;
}
if (Data[i].y < fMin)
{
fMin = Data[i].y;
}
if (iGraphType == PDF_GRAPH_TYPE_BARS){
fMin = M_GET_MIN(0, fMin);
}
}
if (fMin != fMax){
iMag = (int) (log(fMax - fMin) / log(10.0));
fStep = (float) ((int) pow(10.0, (double) iMag));
if (fStep == 0)
{
fStep = 1.;
}
if (fMin < 0)
{
iMag = (int) (log(fabs(fMin)) / log(10.0));
fMinLine = -(int) pow(10.0, (double) iMag);
}
else
{
fMinLine=(int)(((int)(fMin/fStep)) *fStep);
}
iNumLines = (int) ((fMax - fMin) / fStep);
while (iNumLines < 8)
{
fStep = fStep / 2.0;
iNumLines = (int) ((fMax - fMin) / fStep);
}
iNumLines = (int) ((fMax - fMinLine) / fStep);
}
else{
if (fMin > 0)
{
fStep = fMin = 0;
iNumLines = 1;
fMinLine = fMax;
}
else if (fMin < 0)
{
fStep = 0;
fMin = fMin - 1;
fMinLine = fMax;
}
else
{
return;
}
}
for (i = 0; i < iNumLines; i++)
{
fY = r.Get_YMax() - ((fMinLine + fStep * i - fMin) / (fMax - fMin)) * r.Get_YRange();
if (fY <= r.Get_YMax() && fY >= r.Get_YMin())
{
fY = m_pCanvas->Height() - fY;
}
}
if (iGraphType == PDF_GRAPH_TYPE_BARS)
{
fWidth = (float) r.Get_XRange() / (float) (Data.Get_Count());
for (i = 0; i < Data.Get_Count(); i++)
{
fX = r.Get_XMin() + i * fWidth;
fY = r.Get_YMax();
fY = m_pCanvas->Height() - fY;
Draw_Rectangle(fX, fY, fX + fWidth,
fY - r.Get_YRange() * ((Data[i].y - fMin) / (fMax - fMin)),
PDF_STYLE_POLYGON_FILLSTROKE, 0x660000);
}
}
else
{
fWidth = (float) r.Get_XRange() / (float) (Data.Get_Count() - 1);
fY = r.Get_YMin() + r.Get_YRange()
- r.Get_YRange() * ((Data[0].y - fMin) / (fMax - fMin));
fY = m_pCanvas->Height() - fY;
Points.Add(r.Get_XMin(), fY);
for (i = 1; i < Data.Get_Count(); i++)
{
fY = r.Get_YMin() + r.Get_YRange()
- r.Get_YRange() * ((Data[i].y - fMin) / (fMax - fMin));
fY = m_pCanvas->Height() - fY;
Points.Add(r.Get_XMin() + i * fWidth, fY);
}
Draw_Line(Points, 3, 0x660000);
}
fMaxX = Data[Data.Get_Count() - 1].x;
fMinX = Data[0].x;
if (fMaxX != fMinX)
{
iMag = (int) (log(fMaxX - fMinX) / log(10.0));
fStep = (float) pow(10.0, (double) iMag);
iNumData = (int) ((fMaxX-fMinX) / fStep);
while (iNumData < 3)
{
fStep = fStep / 2.0;
iNumData = (int) ((fMaxX-fMinX) / fStep);
}
fMinLine = (int)(((int)(fMinX/fStep)) * fStep);
while (fMinLine<fMinX)
{
fMinLine+=fStep;
}
fOffsetX = fMinX-fMinLine;
fY = m_pCanvas->Height() - r.Get_YMin() - r.Get_YRange();
for (i = 0; i < iNumData; i++)
{
fX = r.Get_XMin() + ((fStep * (float) i-fOffsetX) / (fMaxX-fMinX)) * r.Get_XRange();
if (fX >= r.Get_XMin() && fX < r.Get_XMin() + r.Get_XRange()){
if (fabs(fStep * (float)i +fMinLine) > 100000)
{
sValue = SG_Get_String(fStep * (float)i +fMinLine);
}
else
{
sValue = SG_Get_String(fStep * (float)i + fMinLine, 2, true);
}
Draw_Text(fX, fY, sValue, 9, PDF_STYLE_TEXT_ALIGN_H_RIGHT);
Draw_Line(fX, fY, fX, fY - 10, 1);
}
}
}
Draw_Line(r.Get_XMin(), m_pCanvas->Height() - r.Get_YMin(),
r.Get_XMin(), m_pCanvas->Height() - r.Get_YMax(), 4);
Draw_Line(r.Get_XMin(), m_pCanvas->Height() - r.Get_YMax(),
r.Get_XMax(), m_pCanvas->Height() - r.Get_YMax(), 4);
*/
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
#else // #ifndef _SAGA_DONOTUSE_HARU
#include "doc_pdf.h"
CSG_Doc_PDF::CSG_Doc_PDF(void) { m_pPDF = NULL; }
CSG_Doc_PDF::CSG_Doc_PDF(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title) { m_pPDF = NULL; }
CSG_Doc_PDF::~CSG_Doc_PDF(void) {}
void CSG_Doc_PDF::Layout_Set_Box_Space(double Space, bool bPercent) {}
void CSG_Doc_PDF::_Layout_Set_Boxes(void) {}
void CSG_Doc_PDF::_Layout_Set_Box(int iBox) {}
double CSG_Doc_PDF::Get_Page_To_Meter(void) { return( 1.0 ); }
const char * CSG_Doc_PDF::_Get_Font_Name(TSG_PDF_Font_Type Font) { return( "-" ); }
const CSG_Rect & CSG_Doc_PDF::Layout_Get_Box(const SG_Char *ID) { return( m_Size_Margins ); }
TSG_PDF_Title_Level CSG_Doc_PDF::_Get_Lowest_Level_Outline_Item(void) { return( PDF_TITLE_NONE ); }
bool CSG_Doc_PDF::Open(const SG_Char *Title) { return( false ); }
bool CSG_Doc_PDF::Open(TSG_PDF_Page_Size Size, int Orientation, const SG_Char *Title) { return( false ); }
bool CSG_Doc_PDF::Close(void) { return( false ); }
bool CSG_Doc_PDF::Save(const SG_Char *FileName) { return( false ); }
bool CSG_Doc_PDF::Layout_Add_Box(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const SG_Char *ID) { return( false ); }
bool CSG_Doc_PDF::Layout_Add_Box(const CSG_Rect &Box_Percent, const SG_Char *ID) { return( false ); }
bool CSG_Doc_PDF::_Fit_Rectangle(double &x, double &y, double &dx, double &dy, double XToY_Ratio, bool bShrink) { return( false ); }
bool CSG_Doc_PDF::_Fit_Rectangle(CSG_Rect &r, double XToY_Ratio, bool bShrink) { return( false ); }
bool CSG_Doc_PDF::_Add_Outline_Item(const SG_Char *Title, PdfPage *pPage, TSG_PDF_Title_Level Level) { return( false ); }
bool CSG_Doc_PDF::Add_Outline_Item(const SG_Char *Title) { return( false ); }
bool CSG_Doc_PDF::Add_Page(void) { return( false ); }
bool CSG_Doc_PDF::Add_Page(TSG_PDF_Page_Size Size, int Orientation) { return( false ); }
bool CSG_Doc_PDF::Add_Page(double Width, double Height) { return( false ); }
bool CSG_Doc_PDF::Set_Size_Page(TSG_PDF_Page_Size Size, int Orientation) { return( false ); }
bool CSG_Doc_PDF::Set_Size_Page(double Width, double Height) { return( false ); }
bool CSG_Doc_PDF::Add_Page_Title(const SG_Char *Title, TSG_PDF_Title_Level Level, TSG_PDF_Page_Size Size, int Orientation) { return( false ); }
bool CSG_Doc_PDF::_Set_Style_FillStroke(int Style, int Fill_Color, int Line_Color, int Line_Width) { return( false ); }
bool CSG_Doc_PDF::Draw_Point(double x, double y, double Width, int Style, int Fill_Color, int Line_Color, int Line_Width) { return( false ); }
bool CSG_Doc_PDF::Draw_Line(double xa, double ya, double xb, double yb, int Width, int Color, int Style) { return( false ); }
bool CSG_Doc_PDF::Draw_Line(CSG_Points &Points, int Width, int Color, int Style) { return( false ); }
bool CSG_Doc_PDF::Draw_Rectangle(double xa, double ya, double xb, double yb, int Style, int Fill_Color, int Line_Color, int Line_Width) { return( false ); }
bool CSG_Doc_PDF::Draw_Rectangle(const CSG_Rect &r, int Style, int Fill_Color, int Line_Color, int Line_Width) { return( false ); }
bool CSG_Doc_PDF::Draw_Polygon(CSG_Points &Points, int Style, int Fill_Color, int Line_Color, int Line_Width) { return( false ); }
bool CSG_Doc_PDF::Draw_Text(double x, double y, CSG_Strings &Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font) { return( false ); }
bool CSG_Doc_PDF::Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font) { return( false ); }
bool CSG_Doc_PDF::_Draw_Text(double x, double y, const SG_Char *Text, int Size, int Style, double Angle, int Color, TSG_PDF_Font_Type Font) { return( false ); }
bool CSG_Doc_PDF::Draw_Image(double x, double y, double dx, double dy, const SG_Char *FileName) { return( false ); }
bool CSG_Doc_PDF::Draw_Image(const CSG_Rect &r, const SG_Char *FileName) { return( false ); }
bool CSG_Doc_PDF::Draw_Graticule(const CSG_Rect &r, const CSG_Rect &rWorld, int Size) { return( false ); }
bool CSG_Doc_PDF::_Draw_Ruler(const CSG_Rect &r, double zMin, double zMax, bool bHorizontal, bool bAscendent, bool bTickAtTop) { return( false ); }
bool CSG_Doc_PDF::_Draw_Table(CSG_Rect r, CSG_Table *pTable, int iRecord, int nRecords, double CellHeight, double HeaderHeightRel) { return( false ); }
bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, double CellHeight, double HeaderHeightRel) { return( false ); }
bool CSG_Doc_PDF::Draw_Table(const CSG_Rect &r, CSG_Table *pTable, int nColumns, double CellHeight, double HeaderHeightRel) { return( false ); }
bool CSG_Doc_PDF::_Draw_Shape(CSG_Rect r, CSG_Shape *pShape, double xMin, double yMin, double World2PDF, int Style, int Fill_Color, int Line_Color, int Line_Width, int Point_Width) { return( false ); }
bool CSG_Doc_PDF::Draw_Shape(const CSG_Rect &r, CSG_Shape *pShape, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld) { return( false ); }
bool CSG_Doc_PDF::Draw_Shapes(const CSG_Rect &r, CSG_Shapes *pShapes, int Style, int Fill_Color, int Line_Color, int Line_Width, CSG_Rect *prWorld) { return( false ); }
bool CSG_Doc_PDF::Draw_Grid(const CSG_Rect &r, CSG_Grid *pGrid, const CSG_Colors &Colors, double zMin, double zMax, int Style, CSG_Rect *prWorld) { return( false ); }
void CSG_Doc_PDF::Draw_Curve(CSG_Points &Data, const CSG_Rect &r, int iGraphType) {}
#endif // #else // #ifndef _SAGA_DONOTUSE_HARU
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
#ifdef _SAGA_UNICODE
bool CSG_Doc_PDF::Layout_Add_Box(double xMin_Percent, double yMin_Percent, double xMax_Percent, double yMax_Percent, const char *ID)
{ return( Layout_Add_Box(xMin_Percent, yMin_Percent, xMax_Percent, yMax_Percent, SG_STR_MBTOSG(ID)) ); }
bool CSG_Doc_PDF::Layout_Add_Box(const CSG_Rect &Box_Percent, const char *ID)
{ return( Layout_Add_Box(Box_Percent, SG_STR_MBTOSG(ID)) ); }
const CSG_Rect & CSG_Doc_PDF::Layout_Get_Box(const char *ID)
{ return( Layout_Get_Box(SG_STR_MBTOSG(ID)) ); }
#endif
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -