⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plugin.cpp

📁 一个非常好的GIS开源新版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    case 1: // Top Left      myOriginX=myMargin;      myOriginY=myMargin;      break;    case 2: // Top Right      myOriginX=myCanvasWidth - ((int) myTotalScaleBarWidth) - myMargin;      myOriginY=myMargin;      break;    case 3: // Bottom Right      myOriginX=myCanvasWidth - ((int) myTotalScaleBarWidth) - myMargin;      myOriginY=myCanvasHeight - myMargin;      break;    default:      std::cout << "Unable to determine where to put scale bar so defaulting to top left" << std::endl;    }    //Set pen to draw with    QPen myForegroundPen( mColour, 2 );    QPen myBackgroundPen( Qt::white, 4 );    //Cast myScaleBarWidth to int for drawing    int myScaleBarWidthInt = (int) myScaleBarWidth;    //Create array of vertices for scale bar depending on style    switch (mStyleIndex)    {    case 0: // Tick Down    {      QPolygon myTickDownArray(4);      //draw a buffer first so bar shows up on dark images      theQPainter->setPen( myBackgroundPen );      myTickDownArray.putPoints(0,4,              myOriginX                    , (myOriginY + myMajorTickSize) ,              myOriginX                    ,  myOriginY                    ,              (myScaleBarWidthInt + myOriginX),  myOriginY                    ,              (myScaleBarWidthInt + myOriginX), (myOriginY + myMajorTickSize)              );      theQPainter->drawPolyline(myTickDownArray);      //now draw the bar itself in user selected color      theQPainter->setPen( myForegroundPen );      myTickDownArray.putPoints(0,4,              myOriginX                    , (myOriginY + myMajorTickSize) ,              myOriginX                    ,  myOriginY                    ,              (myScaleBarWidthInt + myOriginX),  myOriginY                    ,              (myScaleBarWidthInt + myOriginX), (myOriginY + myMajorTickSize)              );      theQPainter->drawPolyline(myTickDownArray);      break;    }    case 1: // tick up    {      QPolygon myTickUpArray(4);      //draw a buffer first so bar shows up on dark images      theQPainter->setPen( myBackgroundPen );      myTickUpArray.putPoints(0,4,              myOriginX                    ,  myOriginY                    ,              myOriginX                    ,  myOriginY + myMajorTickSize  ,              (myScaleBarWidthInt + myOriginX),  myOriginY + myMajorTickSize  ,              (myScaleBarWidthInt + myOriginX),  myOriginY              );      theQPainter->drawPolyline(myTickUpArray);      //now draw the bar itself in user selected color      theQPainter->setPen( myForegroundPen );      myTickUpArray.putPoints(0,4,              myOriginX                    ,  myOriginY                    ,              myOriginX                    ,  myOriginY + myMajorTickSize  ,              (myScaleBarWidthInt + myOriginX),  myOriginY + myMajorTickSize  ,              (myScaleBarWidthInt + myOriginX),  myOriginY              );      theQPainter->drawPolyline(myTickUpArray);      break;    }    case 2: // Bar    {      QPolygon myBarArray(2);      //draw a buffer first so bar shows up on dark images      theQPainter->setPen( myBackgroundPen );      myBarArray.putPoints(0,2,              myOriginX                    ,  (myOriginY + (myMajorTickSize/2)),              (myScaleBarWidthInt + myOriginX),  (myOriginY + (myMajorTickSize/2))              );      theQPainter->drawPolyline(myBarArray);      //now draw the bar itself in user selected color      theQPainter->setPen( myForegroundPen );      myBarArray.putPoints(0,2,              myOriginX                    ,  (myOriginY + (myMajorTickSize/2)),              (myScaleBarWidthInt + myOriginX),  (myOriginY + (myMajorTickSize/2))              );      theQPainter->drawPolyline(myBarArray);      break;    }    case 3: // box    {      // Want square corners for a box      myBackgroundPen.setJoinStyle( Qt::MiterJoin );      myForegroundPen.setJoinStyle( Qt::MiterJoin );      QPolygon myBoxArray(5);      //draw a buffer first so bar shows up on dark images      theQPainter->setPen( myBackgroundPen );      myBoxArray.putPoints(0,5,              myOriginX                    ,  myOriginY,              (myScaleBarWidthInt + myOriginX),  myOriginY,              (myScaleBarWidthInt + myOriginX), (myOriginY+myMajorTickSize),              myOriginX                    , (myOriginY+myMajorTickSize),              myOriginX                    ,  myOriginY              );      theQPainter->drawPolyline(myBoxArray);      //now draw the bar itself in user selected color      theQPainter->setPen( myForegroundPen );      theQPainter->setBrush( QBrush( mColour, Qt::SolidPattern) );      int midPointX = myScaleBarWidthInt/2 + myOriginX;       myBoxArray.putPoints(0,5,              myOriginX                    ,  myOriginY,              midPointX,  myOriginY,              midPointX, (myOriginY+myMajorTickSize),              myOriginX                    , (myOriginY+myMajorTickSize),              myOriginX                    ,  myOriginY              );      theQPainter->drawPolygon(myBoxArray);      theQPainter->setBrush( Qt::NoBrush );      myBoxArray.putPoints(0,5,              midPointX                    ,  myOriginY,              (myScaleBarWidthInt + myOriginX),  myOriginY,              (myScaleBarWidthInt + myOriginX), (myOriginY+myMajorTickSize),              midPointX                    , (myOriginY+myMajorTickSize),              midPointX                    ,  myOriginY              );      theQPainter->drawPolygon(myBoxArray);      break;    }    default:      std::cerr << "Unknown style\n";    }    //Do actual drawing of scale bar    //    //Do drawing of scale bar text    //    QColor myBackColor = Qt::white;    QColor myForeColor = Qt::black;    //Draw the minimum label buffer    theQPainter->setPen( myBackColor );    myFontWidth = myFontMetrics.width( "0" );    myFontHeight = myFontMetrics.height();    for (int i = 0-myBufferSize; i <= myBufferSize; i++)    {      for (int j = 0-myBufferSize; j <= myBufferSize; j++)      {        theQPainter->drawText( int(i +(myOriginX-(myFontWidth/2))),                              int(j + (myOriginY-(myFontHeight/4))),                              "0");      }    }    //Draw minimum label    theQPainter->setPen( myForeColor );    theQPainter->drawText(            int(myOriginX-(myFontWidth/2)),            int(myOriginY-(myFontHeight/4)),            "0"            );    //    //Draw maximum label    //    theQPainter->setPen( myBackColor );    myFontWidth = myFontMetrics.width( myScaleBarMaxLabel );    myFontHeight = myFontMetrics.height();    //first the buffer    for (int i = 0-myBufferSize; i <= myBufferSize; i++)    {      for (int j = 0-myBufferSize; j <= myBufferSize; j++)      {        theQPainter->drawText( int(i + (myOriginX+myScaleBarWidthInt-(myFontWidth/2))),                              int(j + (myOriginY-(myFontHeight/4))),                              myScaleBarMaxLabel);      }    }    //then the text itself    theQPainter->setPen( myForeColor );    theQPainter->drawText(            int(myOriginX+myScaleBarWidthInt-(myFontWidth/2)),            int(myOriginY-(myFontHeight/4)),            myScaleBarMaxLabel            );    //    //Draw unit label    //    theQPainter->setPen( myBackColor );    myFontWidth = myFontMetrics.width( myScaleBarUnitLabel );    myFontHeight = myFontMetrics.height();    //first the buffer    for (int i = 0-myBufferSize; i <= myBufferSize; i++)    {      for (int j = 0-myBufferSize; j <= myBufferSize; j++)      {        theQPainter->drawText( i + (myOriginX+myScaleBarWidthInt+myTextOffsetX),                              j + (myOriginY+myMajorTickSize),                              myScaleBarUnitLabel);      }    }    //then the text itself    theQPainter->setPen( myForeColor );    theQPainter->drawText(            (myOriginX+myScaleBarWidthInt+myTextOffsetX),(myOriginY+myMajorTickSize),            myScaleBarUnitLabel            );  }}// Unload the plugin by cleaning up the GUIvoid QgsScaleBarPlugin::unload(){  // remove the GUI  qGisInterface->removePluginMenu(tr("&Decorations"),myQActionPointer);  qGisInterface->removeToolBarIcon(myQActionPointer);  // remove the northarrow from the canvas  disconnect(qGisInterface->getMapCanvas(), SIGNAL(renderComplete(QPainter *)),	     this, SLOT(renderScaleBar(QPainter *)));  refreshCanvas();  delete myQActionPointer;}//! set placement of scale barvoid QgsScaleBarPlugin::setPlacement(int placementIndex){  mPlacementIndex = placementIndex;  QgsProject::instance()->writeEntry("ScaleBar","/Placement",mPlacementIndex);}//! set preferred size of scale barvoid QgsScaleBarPlugin::setPreferredSize(int thePreferredSize){  mPreferredSize = thePreferredSize;  QgsProject::instance()->writeEntry("ScaleBar","/PreferredSize",mPreferredSize);}//! set whether the scale bar length should snap to the closes A*10^Bvoid QgsScaleBarPlugin::setSnapping(bool theSnapping){  mSnapping = theSnapping;  QgsProject::instance()->writeEntry("ScaleBar","/Snapping",mSnapping);}//! set scale bar enablevoid QgsScaleBarPlugin::setEnabled(bool theBool){  mEnabled = theBool;  QgsProject::instance()->writeEntry("ScaleBar","/Enabled",mEnabled);}//! set scale bar enablevoid QgsScaleBarPlugin::setStyle(int styleIndex){  mStyleIndex = styleIndex;  QgsProject::instance()->writeEntry("ScaleBar","/Style",mStyleIndex);}//! set the scale bar colourvoid QgsScaleBarPlugin::setColour(QColor theQColor){  mColour = theQColor;  QgsProject::instance()->writeEntry("ScaleBar","/ColorRedPart", mColour.red());  QgsProject::instance()->writeEntry("ScaleBar","/ColorGreenPart", mColour.green());  QgsProject::instance()->writeEntry("ScaleBar","/ColorBluePart", mColour.blue());}/** * Required extern functions needed  for every plugin * These functions can be called prior to creating an instance * of the plugin class */// Class factory to return a new instance of the plugin classQGISEXTERN QgisPlugin * classFactory(QgisInterface * theQgisInterfacePointer){  return new QgsScaleBarPlugin(theQgisInterfacePointer);}// Return the name of the plugin - note that we do not user class members as// the class may not yet be insantiated when this method is called.QGISEXTERN QString name(){  return name_;}// Return the descriptionQGISEXTERN QString description(){  return description_;}// Return the type (either UI or MapLayer plugin)QGISEXTERN int type(){  return type_;}// Return the version number for the pluginQGISEXTERN QString version(){  return version_;}// Delete ourselfQGISEXTERN void unload(QgisPlugin * thePluginPointer){  delete thePluginPointer;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -