📄 qgscomposermap.cpp
字号:
double s = mComposition->selectionBoxSize(); painter->drawRect (QRectF(0, 0, s, s)); painter->drawRect (QRectF(QGraphicsRectItem::rect().width() -s, 0, s, s)); painter->drawRect (QRectF(QGraphicsRectItem::rect().width() -s, QGraphicsRectItem::rect().height() -s, s, s)); painter->drawRect (QRectF(0, QGraphicsRectItem::rect().height() -s, s, s)); } mDrawing = false;}void QgsComposerMap::sizeChanged ( void ) { int w, h; w = mComposition->fromMM ( mWidthLineEdit->text().toDouble() ); h = mComposition->fromMM ( mHeightLineEdit->text().toDouble() ); QGraphicsRectItem::setRect(0, 0, w, h); recalculate(); QGraphicsRectItem::update(); QGraphicsRectItem::scene()->update(); writeSettings();}void QgsComposerMap::on_mWidthLineEdit_editingFinished ( void ) { sizeChanged(); }void QgsComposerMap::on_mHeightLineEdit_editingFinished ( void ) { sizeChanged(); }void QgsComposerMap::on_mCalculateComboBox_activated( int ){ mCalculate = mCalculateComboBox->currentItem(); if ( mCalculate == Scale ) { recalculate(); mCacheUpdated = false; QGraphicsRectItem::scene()->update(); mComposition->emitMapChanged ( mId ); } setOptions(); writeSettings();}double QgsComposerMap::scaleFromUserScale ( double us ) { double s=0; switch ( mComposition->mapCanvas()->mapUnits() ) { case QGis::METERS : s = 1000. * mComposition->scale() / us; break; case QGis::FEET : s = 304.8 * mComposition->scale() / us; break; case QGis::UNKNOWN : case QGis::DEGREES : s = mComposition->scale() / us; break; } return s;}double QgsComposerMap::userScaleFromScale ( double s ){ double us=0; switch ( mComposition->mapCanvas()->mapUnits() ) { case QGis::METERS : us = 1000. * mComposition->scale() / s; break; case QGis::FEET : us = 304.8 * mComposition->scale() / s; break; case QGis::DEGREES : case QGis::UNKNOWN : us = mComposition->scale() / s; break; } return us;}void QgsComposerMap::on_mScaleLineEdit_editingFinished(){#ifdef QGISDEBUG std::cout << "QgsComposerMap::on_mScaleLineEdit_editingFinished" << std::endl;#endif mCalculate = mCalculateComboBox->currentItem(); mUserScale = mScaleLineEdit->text().toDouble(); mScale = scaleFromUserScale ( mUserScale ); recalculate(); mCacheUpdated = false; QGraphicsRectItem::update(); QGraphicsRectItem::scene()->update(); writeSettings(); mComposition->emitMapChanged ( mId );}void QgsComposerMap::scaleChanged ( void ) { mWidthScale = mWidthScaleLineEdit->text().toDouble(); mSymbolScale = mSymbolScaleLineEdit->text().toDouble(); mFontScale = mFontScaleLineEdit->text().toDouble(); mCacheUpdated = false; QGraphicsRectItem::update(); QGraphicsRectItem::scene()->update(); writeSettings(); mComposition->emitMapChanged ( mId );}void QgsComposerMap::on_mFontScaleLineEdit_editingFinished ( void ) { scaleChanged(); }void QgsComposerMap::on_mSymbolScaleLineEdit_editingFinished ( void ) { scaleChanged(); }void QgsComposerMap::on_mWidthScaleLineEdit_editingFinished ( void ) { scaleChanged(); }void QgsComposerMap::mapCanvasChanged ( void ) { std::cout << "QgsComposerMap::canvasChanged" << std::endl; mCacheUpdated = false; QGraphicsRectItem::update();}void QgsComposerMap::on_mPreviewModeComboBox_activated ( int i ){ mPreviewMode = (PreviewMode) i; writeSettings();}void QgsComposerMap::recalculate ( void ) {#ifdef QGISDEBUG std::cout << "QgsComposerMap::recalculate mCalculate = " << mCalculate << std::endl;#endif if ( mCalculate == Scale ) { // Calculate scale from extent and rectangle double xscale = QGraphicsRectItem::rect().width() / mUserExtent.width(); double yscale = QGraphicsRectItem::rect().height() / mUserExtent.height(); mExtent = mUserExtent; if ( xscale < yscale ) { mScale = xscale; // extend y double d = ( 1. * QGraphicsRectItem::rect().height() / mScale - mUserExtent.height() ) / 2 ; mExtent.setYmin ( mUserExtent.yMin() - d ); mExtent.setYmax ( mUserExtent.yMax() + d ); } else { mScale = yscale; // extend x double d = ( 1.* QGraphicsRectItem::rect().width() / mScale - mUserExtent.width() ) / 2 ; mExtent.setXmin ( mUserExtent.xMin() - d ); mExtent.setXmax ( mUserExtent.xMax() + d ); } mUserScale = userScaleFromScale ( mScale ); } else { // Calculate extent double xc = ( mUserExtent.xMax() + mUserExtent.xMin() ) / 2; double yc = ( mUserExtent.yMax() + mUserExtent.yMin() ) / 2; double width = QGraphicsRectItem::rect().width() / mScale; double height = QGraphicsRectItem::rect().height() / mScale; mExtent.setXmin ( xc - width/2 ); mExtent.setXmax ( xc + width/2 ); mExtent.setYmin ( yc - height/2 ); mExtent.setYmax ( yc + height/2 ); } std::cout << "mUserExtent = " << mUserExtent.stringRep().toLocal8Bit().data() << std::endl; std::cout << "mScale = " << mScale << std::endl; std::cout << "mExtent = " << mExtent.stringRep().toLocal8Bit().data() << std::endl; setOptions(); mCacheUpdated = false;}void QgsComposerMap::on_mFrameCheckBox_clicked ( ){ mFrame = mFrameCheckBox->isChecked(); QGraphicsRectItem::update(); QGraphicsRectItem::scene()->update(); writeSettings();}void QgsComposerMap::setOptions ( void ){ std::cout << "QgsComposerMap::setOptions" << std::endl; mNameLabel->setText ( mName ); mCalculateComboBox->setCurrentItem( mCalculate ); mWidthLineEdit->setText ( QString("%1").arg( mComposition->toMM((int)QGraphicsRectItem::rect().width()), 0,'g') ); mHeightLineEdit->setText ( QString("%1").arg( mComposition->toMM((int)QGraphicsRectItem::rect().height()),0,'g') ); // Scale switch ( mComposition->mapCanvas()->mapUnits() ) { case QGis::METERS : case QGis::FEET : mScaleLineEdit->setText ( QString("%1").arg((int)mUserScale) ); break; case QGis::DEGREES : case QGis::UNKNOWN : mScaleLineEdit->setText ( QString("%1").arg(mUserScale,0,'f') ); break; } if ( mCalculate == Scale ) { mScaleLineEdit->setEnabled(false); } else { mScaleLineEdit->setEnabled(true); } mWidthScaleLineEdit->setText ( QString("%1").arg(mWidthScale,0,'g',2) ); mSymbolScaleLineEdit->setText ( QString("%1").arg(mSymbolScale,0,'g',2) ); mFontScaleLineEdit->setText ( QString("%1").arg(mFontScale,0,'g',2) ); mFrameCheckBox->setChecked ( mFrame ); mPreviewModeComboBox->setCurrentItem( mPreviewMode );}void QgsComposerMap::on_mSetCurrentExtentButton_clicked ( void ){ mUserExtent = mMapCanvas->extent(); recalculate(); QGraphicsRectItem::update(); QGraphicsRectItem::scene()->update(); setOptions(); writeSettings(); mComposition->emitMapChanged ( mId );}void QgsComposerMap::setSelected ( bool s ) { mSelected = s; QGraphicsRectItem::update(); //re-paint, so we show the highlight boxes} bool QgsComposerMap::selected( void ){ return mSelected;}void QgsComposerMap::setCacheUpdated ( bool u ) { mCacheUpdated = u;} double QgsComposerMap::scale ( void ) { return mScale; }QWidget *QgsComposerMap::options ( void ){ setOptions (); return ( dynamic_cast <QWidget *> (this) );}QString QgsComposerMap::name ( void ) { return mName;}double QgsComposerMap::widthScale (void ) { return mWidthScale ; }double QgsComposerMap::symbolScale (void ) { return mSymbolScale ; }double QgsComposerMap::fontScale (void ) { return mFontScale ; }bool QgsComposerMap::writeSettings ( void ) { QString path; path.sprintf("/composition_%d/map_%d/", mComposition->id(), mId ); QgsProject::instance()->writeEntry( "Compositions", path+"x", mComposition->toMM((int)QGraphicsRectItem::pos().x()) ); QgsProject::instance()->writeEntry( "Compositions", path+"y", mComposition->toMM((int)QGraphicsRectItem::pos().y()) ); QgsProject::instance()->writeEntry( "Compositions", path+"width", mComposition->toMM((int)QGraphicsRectItem::rect().width()) ); QgsProject::instance()->writeEntry( "Compositions", path+"height", mComposition->toMM((int)QGraphicsRectItem::rect().height()) ); if ( mCalculate == Scale ) { QgsProject::instance()->writeEntry( "Compositions", path+"calculate", QString("scale") ); } else { QgsProject::instance()->writeEntry( "Compositions", path+"calculate", QString("extent") ); } QgsProject::instance()->writeEntry( "Compositions", path+"north", mUserExtent.yMax() ); QgsProject::instance()->writeEntry( "Compositions", path+"south", mUserExtent.yMin() ); QgsProject::instance()->writeEntry( "Compositions", path+"east", mUserExtent.xMax() ); QgsProject::instance()->writeEntry( "Compositions", path+"west", mUserExtent.xMin() ); QgsProject::instance()->writeEntry( "Compositions", path+"scale", mUserScale ); QgsProject::instance()->writeEntry( "Compositions", path+"widthscale", mWidthScale ); QgsProject::instance()->writeEntry( "Compositions", path+"symbolscale", mSymbolScale ); QgsProject::instance()->writeEntry( "Compositions", path+"fontscale", mFontScale ); QgsProject::instance()->writeEntry( "Compositions", path+"frame", mFrame ); QgsProject::instance()->writeEntry( "Compositions", path+"previewmode", mPreviewMode ); return true; }bool QgsComposerMap::readSettings ( void ){ bool ok; QString path; path.sprintf("/composition_%d/map_%d/", mComposition->id(), mId ); double x = mComposition->fromMM(QgsProject::instance()->readDoubleEntry( "Compositions", path+"x", 0, &ok)); double y = mComposition->fromMM(QgsProject::instance()->readDoubleEntry( "Compositions", path+"y", 0, &ok)); int w = mComposition->fromMM(QgsProject::instance()->readDoubleEntry( "Compositions", path+"width", 100, &ok)) ; int h = mComposition->fromMM(QgsProject::instance()->readDoubleEntry( "Compositions", path+"height", 100, &ok)) ; QGraphicsRectItem::setRect(0, 0, w, h); QGraphicsRectItem::setPos(x, y); QString calculate = QgsProject::instance()->readEntry("Compositions", path+"calculate", "scale", &ok); if ( calculate == "extent" ) { mCalculate = Extent; }else { mCalculate = Scale; } mUserExtent.setYmax ( QgsProject::instance()->readDoubleEntry( "Compositions", path+"north", 100, &ok) ); mUserExtent.setYmin ( QgsProject::instance()->readDoubleEntry( "Compositions", path+"south", 0, &ok) ); mUserExtent.setXmax ( QgsProject::instance()->readDoubleEntry( "Compositions", path+"east", 100, &ok) ); mUserExtent.setXmin ( QgsProject::instance()->readDoubleEntry( "Compositions", path+"west", 0, &ok) ); mUserScale = QgsProject::instance()->readDoubleEntry( "Compositions", path+"scale", 1000., &ok); mScale = scaleFromUserScale ( mUserScale ); mWidthScale = QgsProject::instance()->readDoubleEntry("Compositions", path+"widthscale", 1., &ok); mSymbolScale = QgsProject::instance()->readDoubleEntry("Compositions", path+"symbolscale", 1., &ok); mFontScale = QgsProject::instance()->readDoubleEntry("Compositions", path+"fontscale", 1., &ok); mFrame = QgsProject::instance()->readBoolEntry("Compositions", path+"frame", true, &ok); mPreviewMode = (PreviewMode) QgsProject::instance()->readNumEntry("Compositions", path+"previewmode", Cache, &ok); recalculate(); return true;}bool QgsComposerMap::removeSettings ( void ){ QString path; path.sprintf("/composition_%d/map_%d", mComposition->id(), mId ); return QgsProject::instance()->removeEntry ( "Compositions", path );}bool QgsComposerMap::writeXML( QDomNode & node, QDomDocument & document, bool temp ){ return true;}bool QgsComposerMap::readXML( QDomNode & node ){ return true;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -