doVisual.diff
| frmVisual.ui (working copy) | ||
|---|---|---|
| 114 | 114 |
</item> |
| 115 | 115 |
</layout> |
| 116 | 116 |
</item> |
| 117 |
<item row="7" column="0"> |
|
| 117 |
<item row="3" column="0"> |
|
| 118 |
<layout class="QVBoxLayout" name="verticalLayout"> |
|
| 119 |
<item> |
|
| 120 |
<widget class="QCheckBox" name="useSelected"> |
|
| 121 |
<property name="text"> |
|
| 122 |
<string>Use only selected features</string> |
|
| 123 |
</property> |
|
| 124 |
</widget> |
|
| 125 |
</item> |
|
| 126 |
</layout> |
|
| 127 |
</item> |
|
| 128 |
<item row="8" column="1" rowspan="2"> |
|
| 129 |
<widget class="QDialogButtonBox" name="buttonBox_2"> |
|
| 130 |
<property name="orientation"> |
|
| 131 |
<enum>Qt::Vertical</enum> |
|
| 132 |
</property> |
|
| 133 |
<property name="standardButtons"> |
|
| 134 |
<set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set> |
|
| 135 |
</property> |
|
| 136 |
</widget> |
|
| 137 |
</item> |
|
| 138 |
<item row="9" column="0"> |
|
| 118 | 139 |
<widget class="QProgressBar" name="progressBar"> |
| 119 | 140 |
<property name="value"> |
| 120 | 141 |
<number>24</number> |
| ... | ... | |
| 124 | 145 |
</property> |
| 125 | 146 |
</widget> |
| 126 | 147 |
</item> |
| 127 |
<item row="7" column="1">
|
|
| 128 |
<widget class="QDialogButtonBox" name="buttonBox_2">
|
|
| 129 |
<property name="orientation">
|
|
| 130 |
<enum>Qt::Horizontal</enum>
|
|
| 148 |
<item row="8" column="0">
|
|
| 149 |
<widget class="QProgressBar" name="partProgressBar">
|
|
| 150 |
<property name="enabled">
|
|
| 151 |
<bool>false</bool>
|
|
| 131 | 152 |
</property> |
| 132 |
<property name="standardButtons">
|
|
| 133 |
<set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
|
|
| 153 |
<property name="value">
|
|
| 154 |
<number>24</number>
|
|
| 134 | 155 |
</property> |
| 156 |
<property name="alignment"> |
|
| 157 |
<set>Qt::AlignCenter</set> |
|
| 158 |
</property> |
|
| 135 | 159 |
</widget> |
| 136 | 160 |
</item> |
| 137 |
<item row="3" column="0"> |
|
| 138 |
<layout class="QVBoxLayout" name="verticalLayout"> |
|
| 139 |
<item> |
|
| 140 |
<widget class="QCheckBox" name="useSelected"> |
|
| 141 |
<property name="text"> |
|
| 142 |
<string>Use only selected features</string> |
|
| 143 |
</property> |
|
| 144 |
</widget> |
|
| 145 |
</item> |
|
| 146 |
</layout> |
|
| 147 |
</item> |
|
| 148 | 161 |
</layout> |
| 149 | 162 |
</widget> |
| 150 | 163 |
<resources/> |
| doVisual.py (working copy) | ||
|---|---|---|
| 16 | 16 |
self.manageGui() |
| 17 | 17 |
self.cancel_close = self.buttonBox_2.button( QDialogButtonBox.Close ) |
| 18 | 18 |
self.progressBar.setValue( 0 ) |
| 19 |
self.partProgressBar.setValue( 0 ) |
|
| 20 |
self.partProgressBar.setEnabled( False ) |
|
| 19 | 21 |
|
| 20 | 22 |
def keyPressEvent( self, e ): |
| 21 | 23 |
''' |
| ... | ... | |
| 111 | 113 |
QObject.connect( self.testThread, SIGNAL( "runFinished(PyQt_PyObject)" ), self.runFinishedFromThread ) |
| 112 | 114 |
QObject.connect( self.testThread, SIGNAL( "runStatus(PyQt_PyObject)" ), self.runStatusFromThread ) |
| 113 | 115 |
QObject.connect( self.testThread, SIGNAL( "runRange(PyQt_PyObject)" ), self.runRangeFromThread ) |
| 116 |
QObject.connect( self.testThread, SIGNAL( "runPartRange(PyQt_PyObject)" ), self.runPartRangeFromThread ) |
|
| 117 |
QObject.connect( self.testThread, SIGNAL( "runPartStatus(PyQt_PyObject)" ), self.runPartStatusFromThread ) |
|
| 114 | 118 |
self.cancel_close.setText( "Cancel" ) |
| 115 | 119 |
QObject.connect( self.cancel_close, SIGNAL( "clicked()" ), self.cancelThread ) |
| 116 | 120 |
self.testThread.start() |
| ... | ... | |
| 154 | 158 |
|
| 155 | 159 |
def runRangeFromThread( self, range_vals ): |
| 156 | 160 |
self.progressBar.setRange( range_vals[ 0 ], range_vals[ 1 ] ) |
| 161 | ||
| 162 |
def runPartStatusFromThread( self, status ): |
|
| 163 |
self.partProgressBar.setValue( status ) |
|
| 164 |
if status >= self.part_max: |
|
| 165 |
self.partProgressBar.setEnabled( False ) |
|
| 166 |
|
|
| 167 |
def runPartRangeFromThread( self, range_vals ): |
|
| 168 |
self.part_max = range_vals[ 1 ] |
|
| 169 |
self.partProgressBar.setEnabled( True ) |
|
| 170 |
self.partProgressBar.setRange( range_vals[ 0 ], range_vals[ 1 ] ) |
|
| 157 | 171 |
|
| 158 | 172 |
class visualThread( QThread ): |
| 159 | 173 |
def __init__( self, parentThread, parentObject, function, vlayer, myField, mySelection ): |
| ... | ... | |
| 431 | 445 |
if not self.isCorrectOrientation( geom ): |
| 432 | 446 |
lstErrors.append( self.tr( "Feature %1 has incorrect node ordering" ).arg( unicode( feat.id() ) ) ) |
| 433 | 447 |
count += 1 |
| 448 |
self.emit( SIGNAL( "runStatus(PyQt_PyObject)" ), nFeat ) |
|
| 434 | 449 |
return ( lstErrors, count ) |
| 435 | 450 | |
| 436 | 451 |
def isHoleNested( self, polygon ): |
| ... | ... | |
| 459 | 474 |
return True |
| 460 | 475 | |
| 461 | 476 |
def isSelfIntersecting( self, polygon ): |
| 477 |
cPart = 0 |
|
| 462 | 478 |
for h in polygon: |
| 463 |
count = 0 |
|
| 464 |
size = range( 0, len (h )- 1 ) |
|
| 465 |
for i in size: |
|
| 479 |
cPart += len(h) |
|
| 480 | ||
| 481 |
self.emit( SIGNAL( "runPartRange(PyQt_PyObject)" ), ( 0, cPart ) ) |
|
| 482 | ||
| 483 |
nPart = 0 |
|
| 484 |
for h in polygon: |
|
| 485 |
for i in range( 0, len(h)-1 ): |
|
| 486 |
self.emit( SIGNAL( "runPartStatus(PyQt_PyObject)" ), nPart ) |
|
| 487 | ||
| 466 | 488 |
count = 0 |
| 467 |
for j in size:
|
|
| 489 |
for j in range( i+1, len(h)-1 ):
|
|
| 468 | 490 |
if QgsGeometry().fromPolyline( [ h[ i ], h[ i + 1 ] ] ).intersects( QgsGeometry().fromPolyline( [ h[ j ], h[ j + 1 ] ] ) ): |
| 469 | 491 |
count += 1 |
| 470 |
if count > 3: |
|
| 492 |
if count > 2: |
|
| 493 |
self.emit( SIGNAL( "runPartStatus(PyQt_PyObject)" ), cPart ) |
|
| 471 | 494 |
return True |
| 495 | ||
| 496 |
nPart += 1 |
|
| 497 | ||
| 498 |
self.emit( SIGNAL( "runPartStatus(PyQt_PyObject)" ), cPart ) |
|
| 499 | ||
| 472 | 500 |
return False |
| 473 | 501 | |
| 474 | 502 |
def isCorrectOrientation( self, polygon ): |