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

📄 qgscomposermap.cpp

📁 一个非常好的GIS开源新版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -