void CircleObject::updateRubber(QPainter* painter) { int rubberMode = objectRubberMode(); if(rubberMode == OBJ_RUBBER_CIRCLE_1P_RAD) { QPointF sceneCenterPoint = objectRubberPoint("CIRCLE_CENTER"); QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_RADIUS"); QPointF itemCenterPoint = mapFromScene(sceneCenterPoint); QPointF itemQSnapPoint = mapFromScene(sceneQSnapPoint); QLineF itemLine(itemCenterPoint, itemQSnapPoint); setObjectCenter(sceneCenterPoint); QLineF sceneLine(sceneCenterPoint, sceneQSnapPoint); qreal radius = sceneLine.length(); setObjectRadius(radius); if(painter) painter->drawLine(itemLine); updatePath(); } else if(rubberMode == OBJ_RUBBER_CIRCLE_1P_DIA) { QPointF sceneCenterPoint = objectRubberPoint("CIRCLE_CENTER"); QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_DIAMETER"); QPointF itemCenterPoint = mapFromScene(sceneCenterPoint); QPointF itemQSnapPoint = mapFromScene(sceneQSnapPoint); QLineF itemLine(itemCenterPoint, itemQSnapPoint); setObjectCenter(sceneCenterPoint); QLineF sceneLine(sceneCenterPoint, sceneQSnapPoint); qreal diameter = sceneLine.length(); setObjectDiameter(diameter); if(painter) painter->drawLine(itemLine); updatePath(); } else if(rubberMode == OBJ_RUBBER_CIRCLE_2P) { QPointF sceneTan1Point = objectRubberPoint("CIRCLE_TAN1"); QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_TAN2"); QLineF sceneLine(sceneTan1Point, sceneQSnapPoint); setObjectCenter(sceneLine.pointAt(0.5)); qreal diameter = sceneLine.length(); setObjectDiameter(diameter); updatePath(); } else if(rubberMode == OBJ_RUBBER_CIRCLE_3P) { QPointF sceneTan1Point = objectRubberPoint("CIRCLE_TAN1"); QPointF sceneTan2Point = objectRubberPoint("CIRCLE_TAN2"); QPointF sceneTan3Point = objectRubberPoint("CIRCLE_TAN3"); double sceneCenterX; double sceneCenterY; getArcCenter(sceneTan1Point.x(), sceneTan1Point.y(), sceneTan2Point.x(), sceneTan2Point.y(), sceneTan3Point.x(), sceneTan3Point.y(), &sceneCenterX, &sceneCenterY); QPointF sceneCenterPoint(sceneCenterX, sceneCenterY); QLineF sceneLine(sceneCenterPoint, sceneTan3Point); setObjectCenter(sceneCenterPoint); qreal radius = sceneLine.length(); setObjectRadius(radius); updatePath(); } }
void CircleObject::updateRubber(QPainter* painter) { int rubberMode = objectRubberMode(); if(rubberMode == OBJ_RUBBER_CIRCLE_1P_RAD) { QPointF sceneCenterPoint = objectRubberPoint("CIRCLE_CENTER"); QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_RADIUS"); QPointF itemCenterPoint = mapFromScene(sceneCenterPoint); QPointF itemQSnapPoint = mapFromScene(sceneQSnapPoint); QLineF itemLine(itemCenterPoint, itemQSnapPoint); setObjectCenter(sceneCenterPoint); QLineF sceneLine(sceneCenterPoint, sceneQSnapPoint); qreal radius = sceneLine.length(); setObjectRadius(radius); if(painter) drawRubberLine(itemLine, painter, VIEW_COLOR_CROSSHAIR); updatePath(); } else if(rubberMode == OBJ_RUBBER_CIRCLE_1P_DIA) { QPointF sceneCenterPoint = objectRubberPoint("CIRCLE_CENTER"); QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_DIAMETER"); QPointF itemCenterPoint = mapFromScene(sceneCenterPoint); QPointF itemQSnapPoint = mapFromScene(sceneQSnapPoint); QLineF itemLine(itemCenterPoint, itemQSnapPoint); setObjectCenter(sceneCenterPoint); QLineF sceneLine(sceneCenterPoint, sceneQSnapPoint); qreal diameter = sceneLine.length(); setObjectDiameter(diameter); if(painter) drawRubberLine(itemLine, painter, VIEW_COLOR_CROSSHAIR); updatePath(); } else if(rubberMode == OBJ_RUBBER_CIRCLE_2P) { QPointF sceneTan1Point = objectRubberPoint("CIRCLE_TAN1"); QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_TAN2"); QLineF sceneLine(sceneTan1Point, sceneQSnapPoint); setObjectCenter(sceneLine.pointAt(0.5)); qreal diameter = sceneLine.length(); setObjectDiameter(diameter); updatePath(); } else if(rubberMode == OBJ_RUBBER_CIRCLE_3P) { QPointF sceneTan1Point = objectRubberPoint("CIRCLE_TAN1"); QPointF sceneTan2Point = objectRubberPoint("CIRCLE_TAN2"); QPointF sceneTan3Point = objectRubberPoint("CIRCLE_TAN3"); double sceneCenterX; double sceneCenterY; getArcCenter(sceneTan1Point.x(), sceneTan1Point.y(), sceneTan2Point.x(), sceneTan2Point.y(), sceneTan3Point.x(), sceneTan3Point.y(), &sceneCenterX, &sceneCenterY); QPointF sceneCenterPoint(sceneCenterX, sceneCenterY); QLineF sceneLine(sceneCenterPoint, sceneTan3Point); setObjectCenter(sceneCenterPoint); qreal radius = sceneLine.length(); setObjectRadius(radius); updatePath(); } else if(rubberMode == OBJ_RUBBER_GRIP) { if(painter) { QPointF gripPoint = objectRubberPoint("GRIP_POINT"); if(gripPoint == objectCenter()) { painter->drawEllipse(rect().translated(mapFromScene(objectRubberPoint(QString()))-mapFromScene(gripPoint))); } else { qreal gripRadius = QLineF(objectCenter(), objectRubberPoint(QString())).length(); painter->drawEllipse(QPointF(), gripRadius, gripRadius); } QLineF rubLine(mapFromScene(gripPoint), mapFromScene(objectRubberPoint(QString()))); drawRubberLine(rubLine, painter, VIEW_COLOR_CROSSHAIR); } } }