[QGIS Commit] r10705 - in trunk/qgis: images/themes/default python/core src/app src/core

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat May 2 15:38:46 EDT 2009


Author: wonder
Date: 2009-05-02 15:38:46 -0400 (Sat, 02 May 2009)
New Revision: 10705

Added:
   trunk/qgis/images/themes/default/mActionDeleteRing.png
   trunk/qgis/src/app/qgsmaptooldeletering.cpp
   trunk/qgis/src/app/qgsmaptooldeletering.h
Removed:
   trunk/qgis/images/themes/default/mActionDeleteHole.png
   trunk/qgis/src/app/qgsmaptooldeletehole.cpp
   trunk/qgis/src/app/qgsmaptooldeletehole.h
Modified:
   trunk/qgis/python/core/qgsgeometry.sip
   trunk/qgis/src/app/CMakeLists.txt
   trunk/qgis/src/app/qgisapp.cpp
   trunk/qgis/src/app/qgisapp.h
   trunk/qgis/src/core/qgsgeometry.cpp
   trunk/qgis/src/core/qgsgeometry.h
Log:
Renamed delete hole tool to delete ring per suggestion by Borys.


Deleted: trunk/qgis/images/themes/default/mActionDeleteHole.png
===================================================================
(Binary files differ)

Copied: trunk/qgis/images/themes/default/mActionDeleteRing.png (from rev 10700, trunk/qgis/images/themes/default/mActionDeleteHole.png)
===================================================================
(Binary files differ)


Property changes on: trunk/qgis/images/themes/default/mActionDeleteRing.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream
Name: svn:mergeinfo
   + 

Modified: trunk/qgis/python/core/qgsgeometry.sip
===================================================================
--- trunk/qgis/python/core/qgsgeometry.sip	2009-05-02 19:08:21 UTC (rev 10704)
+++ trunk/qgis/python/core/qgsgeometry.sip	2009-05-02 19:38:46 UTC (rev 10705)
@@ -289,11 +289,11 @@
     // TODO: destruction of created geometries??
     QList<QgsGeometry*> asGeometryCollection() /Factory/;
 
-    /** delete a hole in polygon or multipolygon.
+    /** delete a ring in polygon or multipolygon.
       Ring 0 is outer ring and can't be deleted.
       @return TRUE on success
       @note added in version 1.2 */
-    bool deleteHole( int ringNum, int partNum = 0 );
+    bool deleteRing( int ringNum, int partNum = 0 );
 
     /** delete part identified by the part number
       @return TRUE on success

Modified: trunk/qgis/src/app/CMakeLists.txt
===================================================================
--- trunk/qgis/src/app/CMakeLists.txt	2009-05-02 19:08:21 UTC (rev 10704)
+++ trunk/qgis/src/app/CMakeLists.txt	2009-05-02 19:38:46 UTC (rev 10705)
@@ -27,7 +27,7 @@
   qgsmaptooladdisland.cpp
   qgsmaptooladdring.cpp
   qgsmaptoolcapture.cpp
-  qgsmaptooldeletehole.cpp
+  qgsmaptooldeletering.cpp
   qgsmaptooldeletepart.cpp
   qgsmaptooldeletevertex.cpp
   qgsmaptooledit.cpp

Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp	2009-05-02 19:08:21 UTC (rev 10704)
+++ trunk/qgis/src/app/qgisapp.cpp	2009-05-02 19:38:46 UTC (rev 10705)
@@ -157,7 +157,7 @@
 #include "qgsmaptooladdisland.h"
 #include "qgsmaptooladdring.h"
 #include "qgsmaptooladdvertex.h"
-#include "qgsmaptooldeletehole.h"
+#include "qgsmaptooldeletering.h"
 #include "qgsmaptooldeletepart.h"
 #include "qgsmaptooldeletevertex.h"
 #include "qgsmaptoolidentify.h"
@@ -469,7 +469,7 @@
   delete mMapTools.mVertexDelete;
   delete mMapTools.mAddRing;
   delete mMapTools.mSimplifyFeature;
-  delete mMapTools.mDeleteHole;
+  delete mMapTools.mDeleteRing;
   delete mMapTools.mDeletePart;
   delete mMapTools.mAddIsland;
 
@@ -678,10 +678,10 @@
   connect( mActionSimplifyFeature, SIGNAL( triggered() ), this, SLOT( simplifyFeature() ) );
   mActionSimplifyFeature->setEnabled( false );
 
-  mActionDeleteHole = new QAction( getThemeIcon( "mActionDeleteHole.png" ), tr( "Delete Hole" ), this );
-  mActionDeleteHole->setStatusTip( tr( "Delete Hole" ) );
-  connect( mActionDeleteHole, SIGNAL( triggered() ), this, SLOT( deleteHole() ) );
-  mActionDeleteHole->setEnabled( false );
+  mActionDeleteRing = new QAction( getThemeIcon( "mActionDeleteRing.png" ), tr( "Delete Ring" ), this );
+  mActionDeleteRing->setStatusTip( tr( "Delete Ring" ) );
+  connect( mActionDeleteRing, SIGNAL( triggered() ), this, SLOT( deleteRing() ) );
+  mActionDeleteRing->setEnabled( false );
 
   mActionDeletePart = new QAction( getThemeIcon( "mActionDeletePart.png" ), tr( "Delete Part" ), this );
   mActionDeletePart->setStatusTip( tr( "Delete Part" ) );
@@ -1014,8 +1014,8 @@
   mMapToolGroup->addAction( mActionAddIsland );
   mActionSimplifyFeature->setCheckable( true );
   mMapToolGroup->addAction( mActionSimplifyFeature );
-  mActionDeleteHole->setCheckable( true );
-  mMapToolGroup->addAction( mActionDeleteHole );
+  mActionDeleteRing->setCheckable( true );
+  mMapToolGroup->addAction( mActionDeleteRing );
   mActionDeletePart->setCheckable( true );
   mMapToolGroup->addAction( mActionDeletePart );
 }
@@ -1104,7 +1104,7 @@
   mEditMenu->addAction( mActionSimplifyFeature );
   mEditMenu->addAction( mActionAddRing );
   mEditMenu->addAction( mActionAddIsland );
-  mEditMenu->addAction( mActionDeleteHole );
+  mEditMenu->addAction( mActionDeleteRing );
   mEditMenu->addAction( mActionDeletePart );
 
   if ( layout == QDialogButtonBox::GnomeLayout || layout == QDialogButtonBox::MacLayout )
@@ -1306,7 +1306,7 @@
   mAdvancedDigitizeToolBar->addAction( mActionSimplifyFeature );
   mAdvancedDigitizeToolBar->addAction( mActionAddRing );
   mAdvancedDigitizeToolBar->addAction( mActionAddIsland );
-  mAdvancedDigitizeToolBar->addAction( mActionDeleteHole );
+  mAdvancedDigitizeToolBar->addAction( mActionDeleteRing );
   mAdvancedDigitizeToolBar->addAction( mActionDeletePart );
   mToolbarMenu->addAction( mAdvancedDigitizeToolBar->toggleViewAction() );
 
@@ -1534,7 +1534,7 @@
   mActionSimplifyFeature->setIcon( getThemeIcon( "/mActionSimplify.png" ) );
   mActionAddRing->setIcon( getThemeIcon( "/mActionAddRing.png" ) );
   mActionAddIsland->setIcon( getThemeIcon( "/mActionAddIsland.png" ) );
-  mActionDeleteHole->setIcon( getThemeIcon( "/mActionDeleteHole.png" ) );
+  mActionDeleteRing->setIcon( getThemeIcon( "/mActionDeleteRing.png" ) );
   mActionDeletePart->setIcon( getThemeIcon( "/mActionDeletePart.png" ) );
   mActionZoomIn->setIcon( getThemeIcon( "/mActionZoomIn.png" ) );
   mActionZoomOut->setIcon( getThemeIcon( "/mActionZoomOut.png" ) );
@@ -1655,8 +1655,8 @@
   mMapTools.mAddIsland = new QgsMapToolAddIsland( mMapCanvas );
   mMapTools.mSimplifyFeature = new QgsMapToolSimplify( mMapCanvas );
   mMapTools.mSimplifyFeature->setAction( mActionSimplifyFeature );
-  mMapTools.mDeleteHole = new QgsMapToolDeleteHole( mMapCanvas );
-  mMapTools.mDeleteHole->setAction( mActionDeleteHole );
+  mMapTools.mDeleteRing = new QgsMapToolDeleteRing( mMapCanvas );
+  mMapTools.mDeleteRing->setAction( mActionDeleteRing );
   mMapTools.mDeletePart = new QgsMapToolDeletePart( mMapCanvas );
   mMapTools.mDeletePart->setAction( mActionDeletePart );
   //ensure that non edit tool is initialised or we will get crashes in some situations
@@ -4037,9 +4037,9 @@
   mMapCanvas->setMapTool( mMapTools.mSimplifyFeature );
 }
 
-void QgisApp::deleteHole()
+void QgisApp::deleteRing()
 {
-  mMapCanvas->setMapTool( mMapTools.mDeleteHole );
+  mMapCanvas->setMapTool( mMapTools.mDeleteRing );
 }
 
 void QgisApp::deletePart()
@@ -5302,7 +5302,7 @@
         mActionAddIsland->setEnabled( false );
         mActionSplitFeatures->setEnabled( false );
         mActionSimplifyFeature->setEnabled( false );
-        mActionDeleteHole->setEnabled( false );
+        mActionDeleteRing->setEnabled( false );
 
         if ( vlayer->isEditable() && dprovider->capabilities() & QgsVectorDataProvider::ChangeGeometries )
         {
@@ -5334,7 +5334,7 @@
         mActionCapturePolygon->setVisible( false );
         mActionAddRing->setEnabled( false );
         mActionAddIsland->setEnabled( false );
-        mActionDeleteHole->setEnabled( false );
+        mActionDeleteRing->setEnabled( false );
       }
       else if ( vlayer->geometryType() == QGis::Polygon )
       {
@@ -5346,7 +5346,7 @@
           mActionAddIsland->setEnabled( true );
           mActionSplitFeatures->setEnabled( true );
           mActionSimplifyFeature->setEnabled( true );
-          mActionDeleteHole->setEnabled( true );
+          mActionDeleteRing->setEnabled( true );
           mActionDeletePart->setEnabled( true );
         }
         else
@@ -5357,7 +5357,7 @@
           mActionAddIsland->setEnabled( false );
           mActionSplitFeatures->setEnabled( false );
           mActionSimplifyFeature->setEnabled( false );
-          mActionDeleteHole->setEnabled( false );
+          mActionDeleteRing->setEnabled( false );
           mActionDeletePart->setEnabled( false );
         }
         mActionCapturePoint->setEnabled( false );

Modified: trunk/qgis/src/app/qgisapp.h
===================================================================
--- trunk/qgis/src/app/qgisapp.h	2009-05-02 19:08:21 UTC (rev 10704)
+++ trunk/qgis/src/app/qgisapp.h	2009-05-02 19:38:46 UTC (rev 10705)
@@ -223,7 +223,7 @@
     QAction *actionAddRing() { return mActionAddRing; }
     QAction *actionAddIsland() { return mActionAddIsland; }
     QAction *actionSimplifyFeature() { return mActionSimplifyFeature; }
-    QAction *actionDeleteHole() { return mActionDeleteHole; }
+    QAction *actionDeleteRing() { return mActionDeleteRing; }
     QAction *actionDeletePart() { return mActionDeletePart; }
     QAction *actionEditSeparator2() { return mActionEditSeparator2; }
 
@@ -502,8 +502,8 @@
     void addIsland();
     //! simplifies feature
     void simplifyFeature();
-    //! deletes hole in polygon
-    void deleteHole();
+    //! deletes ring in polygon
+    void deleteRing();
     //! deletes part of polygon
     void deletePart();
 
@@ -714,7 +714,7 @@
     QAction *mActionAddIsland;
     QAction *mActionEditSeparator2;
     QAction *mActionSimplifyFeature;
-    QAction *mActionDeleteHole;
+    QAction *mActionDeleteRing;
     QAction *mActionDeletePart;
     QAction *mActionEditSeparator3;
 
@@ -833,7 +833,7 @@
         QgsMapTool* mAddRing;
         QgsMapTool* mAddIsland;
         QgsMapTool* mSimplifyFeature;
-        QgsMapTool* mDeleteHole;
+        QgsMapTool* mDeleteRing;
         QgsMapTool* mDeletePart;
     } mMapTools;
 

Deleted: trunk/qgis/src/app/qgsmaptooldeletehole.cpp
===================================================================
--- trunk/qgis/src/app/qgsmaptooldeletehole.cpp	2009-05-02 19:08:21 UTC (rev 10704)
+++ trunk/qgis/src/app/qgsmaptooldeletehole.cpp	2009-05-02 19:38:46 UTC (rev 10705)
@@ -1,160 +0,0 @@
-/***************************************************************************
-    qgsmaptooldeletehole.h  - delete a hole from polygon
-    ---------------------
-    begin                : April 2009
-    copyright            : (C) 2009 by Richard Kostecky
-    email                : csf dot kostej at mail dot com
- ***************************************************************************
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- ***************************************************************************/
-
-#include "qgsmaptooldeletehole.h"
-
-#include "qgsmapcanvas.h"
-#include "qgsvertexmarker.h"
-#include "qgsvectorlayer.h"
-
-#include <QMouseEvent>
-#include <QMessageBox>
-
-QgsMapToolDeleteHole::QgsMapToolDeleteHole( QgsMapCanvas* canvas )
-  : QgsMapToolVertexEdit( canvas ), mCross( 0 )
-{
-}
-
-QgsMapToolDeleteHole::~QgsMapToolDeleteHole()
-{
-  delete mCross;
-}
-
-void QgsMapToolDeleteHole::canvasMoveEvent( QMouseEvent * e )
-{
-  //nothing to do
-}
-
-void QgsMapToolDeleteHole::canvasPressEvent( QMouseEvent * e )
-{
-  delete mCross;
-  mCross = 0;
-
-  mRecentSnappingResults.clear();
-  //do snap -> new recent snapping results
-  if ( mSnapper.snapToCurrentLayer( e->pos(), mRecentSnappingResults, QgsSnapper::SnapToVertex ) != 0 )
-  {
-    //error
-  }
-
-  if ( mRecentSnappingResults.size() > 0 )
-  {
-    QgsPoint markerPoint = mRecentSnappingResults.begin()->snappedVertex;
-
-    //show vertex marker
-    mCross = new QgsVertexMarker( mCanvas );
-    mCross->setIconType( QgsVertexMarker::ICON_X );
-    mCross->setCenter( markerPoint );
-  }
-  else
-  {
-    displaySnapToleranceWarning();
-  }
-}
-
-void QgsMapToolDeleteHole::canvasReleaseEvent( QMouseEvent * e )
-{
-  delete mCross;
-  mCross = 0;
-
-  QgsMapLayer* currentLayer = mCanvas->currentLayer();
-  if ( !currentLayer )
-    return;
-
-  QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>( currentLayer );
-  if ( !vlayer )
-    return;
-
-
-  if ( mRecentSnappingResults.size() > 0 )
-  {
-    QList<QgsSnappingResult>::iterator sr_it = mRecentSnappingResults.begin();
-    for ( ; sr_it != mRecentSnappingResults.end(); ++sr_it )
-    {
-      deleteHole( sr_it->snappedAtGeometry, sr_it->snappedVertexNr, vlayer);
-    }
-  }
-}
-
-
-void QgsMapToolDeleteHole::deleteHole( int fId, int beforeVertexNr, QgsVectorLayer* vlayer)
-{
-  QgsFeature f;
-  vlayer->featureAtId( fId, f );
-
-  QgsGeometry* g = f.geometry();
-  QGis::WkbType wkbtype = g->wkbType();
-  int ringNum, partNum = 0;
-
-  if (wkbtype == QGis::WKBPolygon || wkbtype == QGis::WKBPolygon25D)
-  {
-    ringNum = ringNumInPolygon( g, beforeVertexNr );
-  }
-  else if (wkbtype == QGis::WKBMultiPolygon || wkbtype == QGis::WKBMultiPolygon25D)
-  {
-    ringNum = ringNumInMultiPolygon( g, beforeVertexNr, partNum );
-  }
-  else
-    return;
-
-  if (g->deleteHole( ringNum, partNum ))
-  {
-    vlayer->changeGeometry( fId, g );
-    mCanvas->refresh();
-  }
-  
-}
-
-int QgsMapToolDeleteHole::ringNumInPolygon( QgsGeometry* g, int vertexNr )
-{
-  QgsPolygon polygon = g->asPolygon();
-  for (int ring = 0; ring < polygon.count(); ring++)
-  {
-    if (vertexNr < polygon[ring].count())
-      return ring;
-
-    vertexNr -= polygon[ring].count();
-  }
-  return -1;
-}
-
-int QgsMapToolDeleteHole::ringNumInMultiPolygon( QgsGeometry* g, int vertexNr, int& partNum )
-{
-  QgsMultiPolygon mpolygon = g->asMultiPolygon();
-  for (int part = 0; part < mpolygon.count(); part++)
-  {
-    const QgsPolygon& polygon = mpolygon[part];
-    for (int ring = 0; ring < polygon.count(); ring++)
-    {
-      if (vertexNr < polygon[ring].count())
-      {
-        partNum = part;
-        return ring;
-      }
-
-      vertexNr -= polygon[ring].count();
-    }
-  }
-  return -1;
-}
-
-
-void QgsMapToolDeleteHole::deactivate()
-{
-  delete mCross;
-  mCross = 0;
-
-  QgsMapTool::deactivate();
-}

Deleted: trunk/qgis/src/app/qgsmaptooldeletehole.h
===================================================================
--- trunk/qgis/src/app/qgsmaptooldeletehole.h	2009-05-02 19:08:21 UTC (rev 10704)
+++ trunk/qgis/src/app/qgsmaptooldeletehole.h	2009-05-02 19:38:46 UTC (rev 10705)
@@ -1,53 +0,0 @@
-/***************************************************************************
-    qgsmaptooldeletehole.h  - delete a hole from polygon
-    ---------------------
-    begin                : April 2009
-    copyright            : (C) 2009 by Richard Kostecky
-    email                : csf dot kostej at mail dot com
- ***************************************************************************
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- ***************************************************************************/
-
-#ifndef QGSMAPTOOLDELETEHOLE_H
-#define QGSMAPTOOLDELETEHOLE_H
-
-#include "qgsmaptoolvertexedit.h"
-#include <QUndoCommand>
-
-class QgsVertexMarker;
-/**Map tool to delete vertices from line/polygon features*/
-
-class QgsMapToolDeleteHole: public QgsMapToolVertexEdit
-{
-  public:
-    QgsMapToolDeleteHole( QgsMapCanvas* canvas );
-    virtual ~QgsMapToolDeleteHole();
-
-    void canvasMoveEvent( QMouseEvent * e );
-
-    void canvasPressEvent( QMouseEvent * e );
-
-    void canvasReleaseEvent( QMouseEvent * e );
-
-    //! called when map tool is being deactivated
-    void deactivate();
-
-  private:
-    QgsVertexMarker* mCross;
-
-    //! delete hole from the geometry
-    void deleteHole( int fId, int beforeVertexNr, QgsVectorLayer* vlayer);
-
-    //! return ring number in polygon
-    int ringNumInPolygon( QgsGeometry* g, int vertexNr );
-
-    //! return ring number in multipolygon and set parNum to index of the part
-    int ringNumInMultiPolygon( QgsGeometry* g, int vertexNr, int& partNum );
-};
-
-#endif

Copied: trunk/qgis/src/app/qgsmaptooldeletering.cpp (from rev 10701, trunk/qgis/src/app/qgsmaptooldeletehole.cpp)
===================================================================
--- trunk/qgis/src/app/qgsmaptooldeletering.cpp	                        (rev 0)
+++ trunk/qgis/src/app/qgsmaptooldeletering.cpp	2009-05-02 19:38:46 UTC (rev 10705)
@@ -0,0 +1,160 @@
+/***************************************************************************
+    qgsmaptooldeletering.cpp  - delete a ring from polygon
+    ---------------------
+    begin                : April 2009
+    copyright            : (C) 2009 by Richard Kostecky
+    email                : csf dot kostej at mail dot com
+ ***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#include "qgsmaptooldeletering.h"
+
+#include "qgsmapcanvas.h"
+#include "qgsvertexmarker.h"
+#include "qgsvectorlayer.h"
+
+#include <QMouseEvent>
+#include <QMessageBox>
+
+QgsMapToolDeleteRing::QgsMapToolDeleteRing( QgsMapCanvas* canvas )
+  : QgsMapToolVertexEdit( canvas ), mCross( 0 )
+{
+}
+
+QgsMapToolDeleteRing::~QgsMapToolDeleteRing()
+{
+  delete mCross;
+}
+
+void QgsMapToolDeleteRing::canvasMoveEvent( QMouseEvent * e )
+{
+  //nothing to do
+}
+
+void QgsMapToolDeleteRing::canvasPressEvent( QMouseEvent * e )
+{
+  delete mCross;
+  mCross = 0;
+
+  mRecentSnappingResults.clear();
+  //do snap -> new recent snapping results
+  if ( mSnapper.snapToCurrentLayer( e->pos(), mRecentSnappingResults, QgsSnapper::SnapToVertex ) != 0 )
+  {
+    //error
+  }
+
+  if ( mRecentSnappingResults.size() > 0 )
+  {
+    QgsPoint markerPoint = mRecentSnappingResults.begin()->snappedVertex;
+
+    //show vertex marker
+    mCross = new QgsVertexMarker( mCanvas );
+    mCross->setIconType( QgsVertexMarker::ICON_X );
+    mCross->setCenter( markerPoint );
+  }
+  else
+  {
+    displaySnapToleranceWarning();
+  }
+}
+
+void QgsMapToolDeleteRing::canvasReleaseEvent( QMouseEvent * e )
+{
+  delete mCross;
+  mCross = 0;
+
+  QgsMapLayer* currentLayer = mCanvas->currentLayer();
+  if ( !currentLayer )
+    return;
+
+  QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>( currentLayer );
+  if ( !vlayer )
+    return;
+
+
+  if ( mRecentSnappingResults.size() > 0 )
+  {
+    QList<QgsSnappingResult>::iterator sr_it = mRecentSnappingResults.begin();
+    for ( ; sr_it != mRecentSnappingResults.end(); ++sr_it )
+    {
+      deleteRing( sr_it->snappedAtGeometry, sr_it->snappedVertexNr, vlayer);
+    }
+  }
+}
+
+
+void QgsMapToolDeleteRing::deleteRing( int fId, int beforeVertexNr, QgsVectorLayer* vlayer)
+{
+  QgsFeature f;
+  vlayer->featureAtId( fId, f );
+
+  QgsGeometry* g = f.geometry();
+  QGis::WkbType wkbtype = g->wkbType();
+  int ringNum, partNum = 0;
+
+  if (wkbtype == QGis::WKBPolygon || wkbtype == QGis::WKBPolygon25D)
+  {
+    ringNum = ringNumInPolygon( g, beforeVertexNr );
+  }
+  else if (wkbtype == QGis::WKBMultiPolygon || wkbtype == QGis::WKBMultiPolygon25D)
+  {
+    ringNum = ringNumInMultiPolygon( g, beforeVertexNr, partNum );
+  }
+  else
+    return;
+
+  if (g->deleteRing( ringNum, partNum ))
+  {
+    vlayer->changeGeometry( fId, g );
+    mCanvas->refresh();
+  }
+  
+}
+
+int QgsMapToolDeleteRing::ringNumInPolygon( QgsGeometry* g, int vertexNr )
+{
+  QgsPolygon polygon = g->asPolygon();
+  for (int ring = 0; ring < polygon.count(); ring++)
+  {
+    if (vertexNr < polygon[ring].count())
+      return ring;
+
+    vertexNr -= polygon[ring].count();
+  }
+  return -1;
+}
+
+int QgsMapToolDeleteRing::ringNumInMultiPolygon( QgsGeometry* g, int vertexNr, int& partNum )
+{
+  QgsMultiPolygon mpolygon = g->asMultiPolygon();
+  for (int part = 0; part < mpolygon.count(); part++)
+  {
+    const QgsPolygon& polygon = mpolygon[part];
+    for (int ring = 0; ring < polygon.count(); ring++)
+    {
+      if (vertexNr < polygon[ring].count())
+      {
+        partNum = part;
+        return ring;
+      }
+
+      vertexNr -= polygon[ring].count();
+    }
+  }
+  return -1;
+}
+
+
+void QgsMapToolDeleteRing::deactivate()
+{
+  delete mCross;
+  mCross = 0;
+
+  QgsMapTool::deactivate();
+}


Property changes on: trunk/qgis/src/app/qgsmaptooldeletering.cpp
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: trunk/qgis/src/app/qgsmaptooldeletering.h (from rev 10700, trunk/qgis/src/app/qgsmaptooldeletehole.h)
===================================================================
--- trunk/qgis/src/app/qgsmaptooldeletering.h	                        (rev 0)
+++ trunk/qgis/src/app/qgsmaptooldeletering.h	2009-05-02 19:38:46 UTC (rev 10705)
@@ -0,0 +1,52 @@
+/***************************************************************************
+    qgsmaptooldeletering.h  - delete a ring from polygon
+    ---------------------
+    begin                : April 2009
+    copyright            : (C) 2009 by Richard Kostecky
+    email                : csf dot kostej at mail dot com
+ ***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#ifndef QGSMAPTOOLDELETERING_H
+#define QGSMAPTOOLDELETERING_H
+
+#include "qgsmaptoolvertexedit.h"
+
+class QgsVertexMarker;
+/**Map tool to delete vertices from line/polygon features*/
+
+class QgsMapToolDeleteRing : public QgsMapToolVertexEdit
+{
+  public:
+    QgsMapToolDeleteRing( QgsMapCanvas* canvas );
+    virtual ~QgsMapToolDeleteRing();
+
+    void canvasMoveEvent( QMouseEvent * e );
+
+    void canvasPressEvent( QMouseEvent * e );
+
+    void canvasReleaseEvent( QMouseEvent * e );
+
+    //! called when map tool is being deactivated
+    void deactivate();
+
+  private:
+    QgsVertexMarker* mCross;
+
+    //! delete inner ring from the geometry
+    void deleteRing( int fId, int beforeVertexNr, QgsVectorLayer* vlayer);
+
+    //! return ring number in polygon
+    int ringNumInPolygon( QgsGeometry* g, int vertexNr );
+
+    //! return ring number in multipolygon and set parNum to index of the part
+    int ringNumInMultiPolygon( QgsGeometry* g, int vertexNr, int& partNum );
+};
+
+#endif


Property changes on: trunk/qgis/src/app/qgsmaptooldeletering.h
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: trunk/qgis/src/core/qgsgeometry.cpp
===================================================================
--- trunk/qgis/src/core/qgsgeometry.cpp	2009-05-02 19:08:21 UTC (rev 10704)
+++ trunk/qgis/src/core/qgsgeometry.cpp	2009-05-02 19:38:46 UTC (rev 10705)
@@ -5542,7 +5542,7 @@
 }
 
 
-bool QgsGeometry::deleteHole( int ringNum, int partNum )
+bool QgsGeometry::deleteRing( int ringNum, int partNum )
 {
   if (ringNum <= 0 || partNum < 0)
     return FALSE;

Modified: trunk/qgis/src/core/qgsgeometry.h
===================================================================
--- trunk/qgis/src/core/qgsgeometry.h	2009-05-02 19:08:21 UTC (rev 10704)
+++ trunk/qgis/src/core/qgsgeometry.h	2009-05-02 19:38:46 UTC (rev 10705)
@@ -332,11 +332,11 @@
      @note added in version 1.1 */
     QList<QgsGeometry*> asGeometryCollection();
 
-    /** delete a hole in polygon or multipolygon.
+    /** delete a ring in polygon or multipolygon.
       Ring 0 is outer ring and can't be deleted.
       @return TRUE on success
       @note added in version 1.2 */
-    bool deleteHole( int ringNum, int partNum = 0 );
+    bool deleteRing( int ringNum, int partNum = 0 );
 
     /** delete part identified by the part number
       @return TRUE on success



More information about the QGIS-commit mailing list