def __init__(self, Ps=Point(0, 0), Pe=Point(0, 0), hdl=[]): """ Standard method to initialize the class """ self.Ps = Ps self.Pe = Pe
def calc_bounding_box(self): """ Calculated the BoundingBox of the geometry and saves it into self.BB """ Ps = Point(x=min(self.Ps.x, self.Pe.x), y=min(self.Ps.y, self.Pe.y)) Pe = Point(x=max(self.Ps.x, self.Pe.x), y=max(self.Ps.y, self.Pe.y)) self.BB = BoundingBox(Ps=Ps, Pe=Pe)
def mouseMoveEvent(self, event): """ MouseMoveEvent of the Graphiscview. May also be used for the Statusbar. @purpose: Get the MouseMoveEvent and use it for the Rubberband Selection @param event: Event Parameters passed to function """ if self.mppos is not None: Point = event.pos() - self.mppos if Point.manhattanLength() > 3: # print 'the mouse has moved more than 3 pixels since the oldPosition' # print "Mouse Pointer is currently hovering at: ", event.pos() rect = QtCore.QRect(self.mppos, event.pos()) ''' The following is needed because of PyQt5 doesn't like to switch from sign it will keep displaying last rectangle, i.e. you can end up will multiple rectangles ''' if self.prvRectRubberBand.width() > 0 and not rect.width() > 0 or rect.width() == 0 or\ self.prvRectRubberBand.height() > 0 and not rect.height() > 0 or rect.height() == 0: self.rubberBand.hide() self.rubberBand.setGeometry(rect.normalized()) self.rubberBand.show() self.prvRectRubberBand = rect scpoint = self.mapToScene(event.pos()) # self.setStatusTip('X: %3.1f; Y: %3.1f' % (scpoint.x(), -scpoint.y())) # works not as supposed to self.setToolTip('X: %3.1f; Y: %3.1f' %(scpoint.x(), -scpoint.y())) super(MyGraphicsView, self).mouseMoveEvent(event)
def joinBB(self, other): """ Joins two Bounding Box Classes and returns the new one @param other: The 2nd Bounding Box @return: Returns the joined Bounding Box Class """ if type(self.Ps) == type(None) or type(self.Pe) == type(None): return BoundingBox(deepcopy(other.Ps), deepcopy(other.Pe)) xmin = min(self.Ps.x, other.Ps.x) xmax = max(self.Pe.x, other.Pe.x) ymin = min(self.Ps.y, other.Ps.y) ymax = max(self.Pe.y, other.Pe.y) return BoundingBox(Ps=Point(xmin, ymin), Pe=Point(xmax, ymax))
def __init__( self, text='S', startp=Point(x=0.0, y=0.0), ): """ Initialisation of the class. """ QGraphicsItem.__init__(self) self.setFlag(QGraphicsItem.ItemIsSelectable, False) self.text = text self.sc = 1.0 self.startp = QtCore.QPointF(startp.x, -startp.y) pencolor = QColor(0, 200, 255) self.brush = QColor(0, 100, 255) self.pen = QPen(pencolor, 1, QtCore.Qt.SolidLine) self.pen.setCosmetic(True) self.path = QPainterPath() self.path.addText(QtCore.QPointF(0, 0), QFont("Arial", 10 / self.sc), self.text)
def contains_point(self, point): """ Method to determine the minimal distance from the point to the shape @param point: a QPointF @return: minimal distance """ min_distance = float(0x7fffffff) ref_point = Point(point.x(), point.y()) t = 0.0 while t < 1.0: per_point = self.path.pointAtPercent(t) spline_point = Point(per_point.x(), per_point.y()) distance = ref_point.distance(spline_point) if distance < min_distance: min_distance = distance t += 0.01 return min_distance
def AnalyseAndOptimize(self): self.setNearestStPoint(Point()) logger.debug( self.tr("Analysing the shape for CW direction Nr: %s" % self.nr)) if self.isDirectionOfGeosCCW(self.geos): self.reverse() logger.debug(self.tr("Had to reverse the shape to be CW")) self.cw = True
def contextMenuEvent(self, event): """ Create the contextmenu. @purpose: Links the new Class of ContextMenu to Graphicsview. """ position = self.mapToGlobal(event.pos()) GVPos = self.mapToScene(event.pos()) real_pos = Point(GVPos.x(), -GVPos.y()) menu = MyDropDownMenu(self.scene(), position, real_pos)
def pointisinBB(self, Point=Point(), tol=eps): """ Checks if the Point is within the bounding box @param Point: The Point which shall be ckecke @return: Returns true or false """ x_inter_pos = (self.Pe.x + tol > Point.x) and \ (self.Ps.x - tol < Point.x) y_inter_pos = (self.Pe.y + tol > Point.y) and \ (self.Ps.y - tol < Point.y) return x_inter_pos and y_inter_pos