예제 #1
0
    def updateRubber(self, painter=None):
        """
        TOWRITE

        :param `painter`: TOWRITE
        :type `painter`: `QPainter`_
        """
        rubberMode = self.objectRubberMode()  # int
        if rubberMode == OBJ_RUBBER_CIRCLE_1P_RAD:

            sceneCenterPoint = self.objectRubberPoint(
                "CIRCLE_CENTER")  # QPointF
            sceneQSnapPoint = self.objectRubberPoint(
                "CIRCLE_RADIUS")  # QPointF
            itemCenterPoint = self.mapFromScene(sceneCenterPoint)  # QPointF
            itemQSnapPoint = self.mapFromScene(sceneQSnapPoint)  # QPointF
            itemLine = QLineF(itemCenterPoint, itemQSnapPoint)
            self.setObjectCenter(sceneCenterPoint)
            sceneLine = QLineF(sceneCenterPoint, sceneQSnapPoint)
            radius = sceneLine.length()  # qreal
            self.setObjectRadius(radius)
            if painter:
                self.drawRubberLine(itemLine, painter, "VIEW_COLOR_CROSSHAIR")
            self.updatePath()

        elif rubberMode == OBJ_RUBBER_CIRCLE_1P_DIA:

            sceneCenterPoint = self.objectRubberPoint(
                "CIRCLE_CENTER")  # QPointF
            sceneQSnapPoint = self.objectRubberPoint(
                "CIRCLE_DIAMETER")  # QPointF
            itemCenterPoint = self.mapFromScene(sceneCenterPoint)  # QPointF
            itemQSnapPoint = self.mapFromScene(sceneQSnapPoint)  # QPointF
            itemLine = QLineF(itemCenterPoint, itemQSnapPoint)
            self.setObjectCenter(sceneCenterPoint)
            sceneLine = QLineF(sceneCenterPoint, sceneQSnapPoint)
            diameter = sceneLine.length()  # qreal
            self.setObjectDiameter(diameter)
            if painter:
                self.drawRubberLine(itemLine, painter, "VIEW_COLOR_CROSSHAIR")
            self.updatePath()

        elif rubberMode == OBJ_RUBBER_CIRCLE_2P:

            sceneTan1Point = self.objectRubberPoint("CIRCLE_TAN1")  # QPointF
            sceneQSnapPoint = self.objectRubberPoint("CIRCLE_TAN2")  # QPointF
            sceneLine = QLineF(sceneTan1Point, sceneQSnapPoint)
            self.setObjectCenter(sceneLine.pointAt(0.5))
            diameter = sceneLine.length()  # qreal
            self.setObjectDiameter(diameter)
            self.updatePath()

        elif rubberMode == OBJ_RUBBER_CIRCLE_3P:

            sceneTan1Point = self.objectRubberPoint("CIRCLE_TAN1")  # QPointF
            sceneTan2Point = self.objectRubberPoint("CIRCLE_TAN2")  # QPointF
            sceneTan3Point = self.objectRubberPoint("CIRCLE_TAN3")  # QPointF

            #TODO/PORT# double sceneCenterX
            #TODO/PORT# double sceneCenterY
            #TODO/PORT# getArcCenter(sceneTan1Point.x(), sceneTan1Point.y(),
            #TODO/PORT#              sceneTan2Point.x(), sceneTan2Point.y(),
            #TODO/PORT#              sceneTan3Point.x(), sceneTan3Point.y(),
            #TODO/PORT#              &sceneCenterX, &sceneCenterY)
            sceneCenterPoint = QPointF(sceneCenterX, sceneCenterY)
            sceneLine = QLineF(sceneCenterPoint, sceneTan3Point)
            self.setObjectCenter(sceneCenterPoint)
            radius = sceneLine.length()  # qreal
            self.setObjectRadius(radius)
            self.updatePath()

        elif rubberMode == OBJ_RUBBER_GRIP:

            if painter:

                gripPoint = self.objectRubberPoint("GRIP_POINT")  # QPointF
                if gripPoint == self.objectCenter():
                    painter.drawEllipse(self.rect().translated(
                        self.mapFromScene(self.objectRubberPoint('')) -
                        self.mapFromScene(gripPoint)))

                else:
                    gripRadius = QLineF(
                        self.objectCenter(),
                        self.objectRubberPoint('')).length()  # qreal
                    painter.drawEllipse(QPointF(), gripRadius, gripRadius)

                rubLine = QLineF(self.mapFromScene(gripPoint),
                                 self.mapFromScene(self.objectRubberPoint('')))
                self.drawRubberLine(rubLine, painter, "VIEW_COLOR_CROSSHAIR")
예제 #2
0
    def updateRubber(self, painter=None):
        """
        TOWRITE

        :param `painter`: TOWRITE
        :type `painter`: `QPainter`_
        """
        rubberMode = self.objectRubberMode()  # int
        if rubberMode == OBJ_RUBBER_CIRCLE_1P_RAD:

            sceneCenterPoint = self.objectRubberPoint("CIRCLE_CENTER")  # QPointF
            sceneQSnapPoint = self.objectRubberPoint("CIRCLE_RADIUS")   # QPointF
            itemCenterPoint = self.mapFromScene(sceneCenterPoint)       # QPointF
            itemQSnapPoint = self.mapFromScene(sceneQSnapPoint)         # QPointF
            itemLine = QLineF(itemCenterPoint, itemQSnapPoint)
            self.setObjectCenter(sceneCenterPoint)
            sceneLine = QLineF(sceneCenterPoint, sceneQSnapPoint)
            radius = sceneLine.length()  # qreal
            self.setObjectRadius(radius)
            if painter:
                self.drawRubberLine(itemLine, painter, "VIEW_COLOR_CROSSHAIR")
            self.updatePath()

        elif rubberMode == OBJ_RUBBER_CIRCLE_1P_DIA:

            sceneCenterPoint = self.objectRubberPoint("CIRCLE_CENTER")   # QPointF
            sceneQSnapPoint = self.objectRubberPoint("CIRCLE_DIAMETER")  # QPointF
            itemCenterPoint = self.mapFromScene(sceneCenterPoint)        # QPointF
            itemQSnapPoint = self.mapFromScene(sceneQSnapPoint)          # QPointF
            itemLine = QLineF(itemCenterPoint, itemQSnapPoint)
            self.setObjectCenter(sceneCenterPoint)
            sceneLine = QLineF(sceneCenterPoint, sceneQSnapPoint)
            diameter = sceneLine.length()  # qreal
            self.setObjectDiameter(diameter)
            if painter:
                self.drawRubberLine(itemLine, painter, "VIEW_COLOR_CROSSHAIR")
            self.updatePath()

        elif rubberMode == OBJ_RUBBER_CIRCLE_2P:

            sceneTan1Point = self.objectRubberPoint("CIRCLE_TAN1")   # QPointF
            sceneQSnapPoint = self.objectRubberPoint("CIRCLE_TAN2")  # QPointF
            sceneLine = QLineF(sceneTan1Point, sceneQSnapPoint)
            self.setObjectCenter(sceneLine.pointAt(0.5))
            diameter = sceneLine.length()  # qreal
            self.setObjectDiameter(diameter)
            self.updatePath()

        elif rubberMode == OBJ_RUBBER_CIRCLE_3P:

            sceneTan1Point = self.objectRubberPoint("CIRCLE_TAN1")  # QPointF
            sceneTan2Point = self.objectRubberPoint("CIRCLE_TAN2")  # QPointF
            sceneTan3Point = self.objectRubberPoint("CIRCLE_TAN3")  # QPointF

            #TODO/PORT# double sceneCenterX
            #TODO/PORT# double sceneCenterY
            #TODO/PORT# getArcCenter(sceneTan1Point.x(), sceneTan1Point.y(),
            #TODO/PORT#              sceneTan2Point.x(), sceneTan2Point.y(),
            #TODO/PORT#              sceneTan3Point.x(), sceneTan3Point.y(),
            #TODO/PORT#              &sceneCenterX, &sceneCenterY)
            sceneCenterPoint = QPointF(sceneCenterX, sceneCenterY)
            sceneLine = QLineF(sceneCenterPoint, sceneTan3Point)
            self.setObjectCenter(sceneCenterPoint)
            radius = sceneLine.length()  # qreal
            self.setObjectRadius(radius)
            self.updatePath()

        elif rubberMode == OBJ_RUBBER_GRIP:

            if painter:

                gripPoint = self.objectRubberPoint("GRIP_POINT")  # QPointF
                if gripPoint == self.objectCenter():
                    painter.drawEllipse(self.rect().translated(self.mapFromScene(self.objectRubberPoint('')) - self.mapFromScene(gripPoint)))

                else:
                    gripRadius = QLineF(self.objectCenter(), self.objectRubberPoint('')).length()  # qreal
                    painter.drawEllipse(QPointF(), gripRadius, gripRadius)

                rubLine = QLineF(self.mapFromScene(gripPoint), self.mapFromScene(self.objectRubberPoint('')))
                self.drawRubberLine(rubLine, painter, "VIEW_COLOR_CROSSHAIR")