|
@@ -2,6 +2,7 @@
|
|
|
from PyQt4.QtCore import *
|
|
from PyQt4.QtCore import *
|
|
|
from PyQt4.QtGui import *
|
|
from PyQt4.QtGui import *
|
|
|
from Terrain import Terrain
|
|
from Terrain import Terrain
|
|
|
|
|
+from dmF import *
|
|
|
|
|
|
|
|
class Pinceau():
|
|
class Pinceau():
|
|
|
def __init__(self, plateau):
|
|
def __init__(self, plateau):
|
|
@@ -11,6 +12,7 @@ class Pinceau():
|
|
|
self._epaisseur = 1
|
|
self._epaisseur = 1
|
|
|
self._formeVerrouillee = False
|
|
self._formeVerrouillee = False
|
|
|
|
|
|
|
|
|
|
+ self._coordOrigine = None
|
|
|
self._origine = None
|
|
self._origine = None
|
|
|
self._point2 = None
|
|
self._point2 = None
|
|
|
self._selection = []
|
|
self._selection = []
|
|
@@ -23,8 +25,8 @@ class Pinceau():
|
|
|
return self._actif
|
|
return self._actif
|
|
|
|
|
|
|
|
def majForme(self, forme):
|
|
def majForme(self, forme):
|
|
|
- if forme in ["simple", "ligne", "frontiere", "pot", \
|
|
|
|
|
- "rectV", "rectP", "ellipseV", "ellipseP"] and not self._formeVerrouillee:
|
|
|
|
|
|
|
+ if forme in ["simple", "ligne", "frontiere", "pot", "rectV", "rectP"] and \
|
|
|
|
|
+ not self._formeVerrouillee:
|
|
|
self._forme = forme
|
|
self._forme = forme
|
|
|
|
|
|
|
|
def verrouillerForme(self, actif = True):
|
|
def verrouillerForme(self, actif = True):
|
|
@@ -36,6 +38,7 @@ class Pinceau():
|
|
|
|
|
|
|
|
def defOrigine(self, coord):
|
|
def defOrigine(self, coord):
|
|
|
if self.plateau.coordonneesValides(coord):
|
|
if self.plateau.coordonneesValides(coord):
|
|
|
|
|
+ self._coordOrigine = coord
|
|
|
self._origine = self.plateau.cases[coord].centreGraphique
|
|
self._origine = self.plateau.cases[coord].centreGraphique
|
|
|
|
|
|
|
|
def defPoint2(self, coord):
|
|
def defPoint2(self, coord):
|
|
@@ -49,6 +52,7 @@ class Pinceau():
|
|
|
"""commence a peindre a partir de la case choisie comme origine"""
|
|
"""commence a peindre a partir de la case choisie comme origine"""
|
|
|
self._formeVerrouillee = False
|
|
self._formeVerrouillee = False
|
|
|
if self.plateau.coordonneesValides(coord):
|
|
if self.plateau.coordonneesValides(coord):
|
|
|
|
|
+ self._coordOrigine = coord
|
|
|
self._origine = self.plateau.cases[coord].centreGraphique
|
|
self._origine = self.plateau.cases[coord].centreGraphique
|
|
|
self._point2 = self.plateau.cases[coord].centreGraphique
|
|
self._point2 = self.plateau.cases[coord].centreGraphique
|
|
|
self._actif = True
|
|
self._actif = True
|
|
@@ -95,54 +99,45 @@ class Pinceau():
|
|
|
select.remove(coord)
|
|
select.remove(coord)
|
|
|
enPlus = select #toutes les coord qui restent dans select sont a ajouter
|
|
enPlus = select #toutes les coord qui restent dans select sont a ajouter
|
|
|
|
|
|
|
|
- else:
|
|
|
|
|
- if self._forme == "ligne":
|
|
|
|
|
- #segment simple
|
|
|
|
|
- if self._objetGraphique == None:
|
|
|
|
|
- pinceau = QPen()
|
|
|
|
|
- pinceau.setColor(QColor("black"))
|
|
|
|
|
- self._objetGraphique = QGraphicsLineItem()
|
|
|
|
|
- self._objetGraphique.setPen(pinceau)
|
|
|
|
|
- self._objetGraphique.prepareGeometryChange()
|
|
|
|
|
- self.plateau.addItem(self._objetGraphique)
|
|
|
|
|
- self._point2 = self.plateau.cases[coord].centreGraphique
|
|
|
|
|
- ligne = QLineF(self._origine, self._point2)
|
|
|
|
|
- self._objetGraphique.setLine(ligne)
|
|
|
|
|
-
|
|
|
|
|
- elif self._forme == "rectV" or self._forme == "rectP":
|
|
|
|
|
- #rectangle
|
|
|
|
|
- if self._objetGraphique == None:
|
|
|
|
|
- pinceau = QPen()
|
|
|
|
|
- pinceau.setColor(QColor("black"))
|
|
|
|
|
- self._objetGraphique = QGraphicsRectItem()
|
|
|
|
|
- self._objetGraphique.prepareGeometryChange()
|
|
|
|
|
- self._objetGraphique.setPen(pinceau)
|
|
|
|
|
- self.plateau.addItem(self._objetGraphique)
|
|
|
|
|
- self._point2 = self.plateau.cases[coord].centreGraphique
|
|
|
|
|
- rect = QRectF(QPointF(min(self._origine.x(), self._point2.x()), min(self._origine.y(), self._point2.y())), \
|
|
|
|
|
- QPointF(max(self._origine.x(), self._point2.x()), max(self._origine.y(), self._point2.y())) )
|
|
|
|
|
- self._objetGraphique.setRect(rect)
|
|
|
|
|
-
|
|
|
|
|
- elif self._forme == "ellipseV" or self._forme == "ellipseP":
|
|
|
|
|
- #ellipse
|
|
|
|
|
- if self._objetGraphique == None:
|
|
|
|
|
- pinceau = QPen()
|
|
|
|
|
- pinceau.setColor(QColor("black"))
|
|
|
|
|
- self._objetGraphique = QGraphicsEllipseItem()
|
|
|
|
|
- self._objetGraphique.prepareGeometryChange()
|
|
|
|
|
- self._objetGraphique.setPen(pinceau)
|
|
|
|
|
- self.plateau.addItem(self._objetGraphique)
|
|
|
|
|
- self._point2 = self.plateau.cases[coord].centreGraphique
|
|
|
|
|
- rect = QRectF(QPointF(min(self._origine.x(), self._point2.x()), min(self._origine.y(), self._point2.y())), \
|
|
|
|
|
- QPointF(max(self._origine.x(), self._point2.x()), max(self._origine.y(), self._point2.y())) )
|
|
|
|
|
- self._objetGraphique.setRect(rect)
|
|
|
|
|
-
|
|
|
|
|
|
|
+ elif self._forme == "rectV" or self._forme == "rectP":
|
|
|
|
|
+ #rectangle
|
|
|
|
|
+ if self._objetGraphique == None:
|
|
|
|
|
+ pinceau = QPen()
|
|
|
|
|
+ pinceau.setColor(QColor("black"))
|
|
|
|
|
+ self._objetGraphique = QGraphicsRectItem()
|
|
|
|
|
+ self._objetGraphique.prepareGeometryChange()
|
|
|
|
|
+ self._objetGraphique.setPen(pinceau)
|
|
|
|
|
+ self.plateau.addItem(self._objetGraphique)
|
|
|
|
|
+ self._point2 = self.plateau.cases[coord].centreGraphique
|
|
|
|
|
+ rect = QRectF(QPointF(min(self._origine.x(), self._point2.x()), min(self._origine.y(), self._point2.y())), \
|
|
|
|
|
+ QPointF(max(self._origine.x(), self._point2.x()), max(self._origine.y(), self._point2.y())) )
|
|
|
|
|
+ self._objetGraphique.setRect(rect)
|
|
|
|
|
+ select = self.selectionRectangle(self._coordOrigine, coord, (self._forme == "rectP"))
|
|
|
|
|
+ #on met compare avec l'ancienne selection pour minimiser le nombre de cases a maj
|
|
|
|
|
+ for coord in self._selection:
|
|
|
|
|
+ if not coord in select:
|
|
|
|
|
+ enMoins.append(coord)
|
|
|
|
|
+ else:
|
|
|
|
|
+ select.remove(coord)
|
|
|
|
|
+ enPlus = select #toutes les coord qui restent dans select sont a ajouter
|
|
|
|
|
+
|
|
|
|
|
+ elif self._forme == "ligne":
|
|
|
|
|
+ #segment simple
|
|
|
|
|
+ if self._objetGraphique == None:
|
|
|
|
|
+ pinceau = QPen()
|
|
|
|
|
+ pinceau.setColor(QColor("black"))
|
|
|
|
|
+ self._objetGraphique = QGraphicsLineItem()
|
|
|
|
|
+ self._objetGraphique.setPen(pinceau)
|
|
|
|
|
+ self._objetGraphique.prepareGeometryChange()
|
|
|
|
|
+ self.plateau.addItem(self._objetGraphique)
|
|
|
|
|
+ self._point2 = self.plateau.cases[coord].centreGraphique
|
|
|
|
|
+ ligne = QLineF(self._origine, self._point2)
|
|
|
|
|
+ self._objetGraphique.setLine(ligne)
|
|
|
#on liste les cases intersectant la forme
|
|
#on liste les cases intersectant la forme
|
|
|
if self._objetGraphique:
|
|
if self._objetGraphique:
|
|
|
select = self.plateau.casesSousForme(self._objetGraphique, (self._forme[-1:] == "P"), self._epaisseur - 1)
|
|
select = self.plateau.casesSousForme(self._objetGraphique, (self._forme[-1:] == "P"), self._epaisseur - 1)
|
|
|
else:
|
|
else:
|
|
|
select = [coord]
|
|
select = [coord]
|
|
|
-
|
|
|
|
|
for coord in self._selection:
|
|
for coord in self._selection:
|
|
|
if not coord in select:
|
|
if not coord in select:
|
|
|
enMoins.append(coord)
|
|
enMoins.append(coord)
|
|
@@ -172,6 +167,24 @@ class Pinceau():
|
|
|
def afficherCase(self, coord, actif):
|
|
def afficherCase(self, coord, actif):
|
|
|
self.plateau.cases[coord].majEstCibleCurseur(actif)
|
|
self.plateau.cases[coord].majEstCibleCurseur(actif)
|
|
|
|
|
|
|
|
|
|
+ def selectionRectangle(self, coord0, coord1, plein = True):
|
|
|
|
|
+ """retourne les cases selectionnees lors de l'utilisation de la forme 'rectP' ou 'rectV'"""
|
|
|
|
|
+ retour = []
|
|
|
|
|
+ #a: point en haut a gauche
|
|
|
|
|
+ xa = mini(coord0[0], coord1[0]); ya = mini(coord0[1], coord1[1])
|
|
|
|
|
+ #b: point en bas a droite
|
|
|
|
|
+ xb = maxi(coord0[0], coord1[0]); yb = maxi(coord0[1], coord1[1])
|
|
|
|
|
+
|
|
|
|
|
+ for coord in self.plateau.cases:
|
|
|
|
|
+ x, y = coord
|
|
|
|
|
+ if xa <= x <= xb and ya <= y <= yb:
|
|
|
|
|
+ if plein:
|
|
|
|
|
+ retour.append((x,y))
|
|
|
|
|
+ else:
|
|
|
|
|
+ if x == xa or x == xb or y == ya or y == yb:
|
|
|
|
|
+ retour.append((x,y))
|
|
|
|
|
+ return retour
|
|
|
|
|
+
|
|
|
def selectionFrontiere(self):
|
|
def selectionFrontiere(self):
|
|
|
"""retourne les cases selectionnees lors de l'utilisation de la forme 'frontiere'"""
|
|
"""retourne les cases selectionnees lors de l'utilisation de la forme 'frontiere'"""
|
|
|
listeCases = []
|
|
listeCases = []
|
|
@@ -238,9 +251,6 @@ class Pinceau():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|