📄 plugin.cpp
字号:
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 + -