Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
OpenBoard
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lifo
Nicolas Ollinger
OpenBoard
Commits
691eb2a8
Commit
691eb2a8
authored
Nov 24, 2015
by
agriche
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- Modify all paint buttons (close,reset,rotate,mark,resize buttons).
parent
411a0988
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
189 additions
and
43 deletions
+189
-43
UBGraphicsProtractor.cpp
src/tools/UBGraphicsProtractor.cpp
+178
-41
UBGraphicsProtractor.h
src/tools/UBGraphicsProtractor.h
+11
-2
No files found.
src/tools/UBGraphicsProtractor.cpp
View file @
691eb2a8
...
...
@@ -35,6 +35,10 @@
#include "core/memcheck.h"
#include <QtWidgets/QGraphicsView>
//#include <math.h>
const
QRectF
UBGraphicsProtractor
::
sDefaultRect
=
QRectF
(
-
175
,
-
175
,
350
,
350
);
...
...
@@ -78,7 +82,9 @@ UBGraphicsProtractor::UBGraphicsProtractor()
setData
(
UBGraphicsItemData
::
itemLayerType
,
QVariant
(
itemLayerType
::
CppTool
));
//Necessary to set if we want z value to be assigned correctly
setFlag
(
QGraphicsItem
::
ItemIsSelectable
,
false
);
setTransform
(
QTransform
::
fromScale
(
1.5
,
1.5
),
true
);
setScale
(
1.5
);
}
...
...
@@ -181,7 +187,6 @@ void UBGraphicsProtractor::mousePressEvent(QGraphicsSceneMouseEvent *event)
event
->
accept
();
}
void
UBGraphicsProtractor
::
mouseMoveEvent
(
QGraphicsSceneMouseEvent
*
event
)
{
QPointF
currentPoint
=
event
->
pos
();
...
...
@@ -190,6 +195,13 @@ void UBGraphicsProtractor::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
qreal
angle
=
startLine
.
angleTo
(
currentLine
);
qreal
scaleFactor
=
currentLine
.
length
()
/
startLine
.
length
();
qreal
mod_angle
=
0
;
if
(
angle
>
350
)
{
mod_angle
=
angle
-
360
;
// only for debugging
angle
=
angle
-
360
;
}
switch
(
mCurrentTool
)
{
case
Rotate
:
...
...
@@ -197,14 +209,18 @@ void UBGraphicsProtractor::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
mStartAngle
=
mStartAngle
+
angle
;
setStartAngle
(
mStartAngle
*
16
);
mPreviousMousePos
=
currentPoint
;
//qDebug() << "UBGraphicsProtractor Rotate"<<"mStartAngle= "<<mStartAngle<<"angle = "<<angle<<"modulo_angle"<<mod_angle;
break
;
case
Resize
:
prepareGeometryChange
();
setTransform
(
QTransform
::
fromTranslate
(
rect
().
center
().
x
(),
rect
().
center
().
y
()),
true
);
setTransform
(
QTransform
::
fromScale
(
scaleFactor
,
scaleFactor
),
true
);
setTransform
(
QTransform
::
fromTranslate
(
-
rect
().
center
().
x
(),
-
rect
().
center
().
y
()),
true
);
mScaleFactor
*=
scaleFactor
;
setPos
(
rect
().
center
().
x
(),
rect
().
center
().
y
());
setScale
(
scaleFactor
);
setPos
(
-
rect
().
center
().
x
(),
-
rect
().
center
().
y
());
mScaleFactor
*=
scaleFactor
;
break
;
case
MoveMarker
:
...
...
@@ -250,6 +266,10 @@ void UBGraphicsProtractor::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
update
();
break
;
case
Resize
:
update
();
break
;
default
:
QGraphicsEllipseItem
::
mouseReleaseEvent
(
event
);
break
;
...
...
@@ -326,7 +346,9 @@ qreal UBGraphicsProtractor::antiScale() const
QRectF
UBGraphicsProtractor
::
resetButtonRect
()
const
{
qreal
antiSc
=
antiScale
();
//qreal antiSc = antiScale();
qreal
antiSc
=
1
;
if
(
buttonSizeReference
().
width
()
*
antiSc
<=
buttonSizeReference
().
width
()
*
15
)
return
QRectF
(
-
buttonSizeReference
().
width
()
*
7
,
-
buttonSizeReference
().
height
()
*
antiSc
/
2
,
...
...
@@ -336,10 +358,14 @@ QRectF UBGraphicsProtractor::resetButtonRect () const
buttonSizeReference
().
width
()
*
antiSc
,
buttonSizeReference
().
height
()
*
antiSc
);
}
QRectF
UBGraphicsProtractor
::
closeButtonRect
()
const
{
qreal
antiSc
=
antiScale
();
//qreal antiSc = antiScale();
qreal
antiSc
=
1
;
//qDebug() << "UBGraphicsProtractor closeButtonRect"<<"antiSc = "<<antiSc;
if
(
buttonSizeReference
().
width
()
*
antiSc
<=
buttonSizeReference
().
width
()
*
2
)
return
QRectF
(
-
buttonSizeReference
().
width
()
*
9
,
-
buttonSizeReference
().
height
()
*
antiSc
/
2
,
...
...
@@ -350,12 +376,15 @@ QRectF UBGraphicsProtractor::closeButtonRect () const
else
return
QRectF
(
-
buttonSizeReference
().
width
()
*
antiSc
/
2
,
-
buttonSizeReference
().
height
()
*
antiSc
/
2
,
buttonSizeReference
().
width
()
*
antiSc
,
buttonSizeReference
().
height
()
*
antiSc
);
}
QRectF
UBGraphicsProtractor
::
resizeButtonRect
()
const
{
qreal
antiSc
=
antiScale
();
//qreal antiSc = antiScale();
qreal
antiSc
=
1
;
if
(
buttonSizeReference
().
width
()
*
antiSc
<=
buttonSizeReference
().
width
()
*
15
)
return
QRectF
(
buttonSizeReference
().
width
()
*
8
,
-
buttonSizeReference
().
height
()
*
antiSc
/
2
,
...
...
@@ -378,6 +407,7 @@ void UBGraphicsProtractor::paintGraduations(QPainter *painter)
const
int
oneDegreeGraduationLength
=
5
;
QFont
font1
=
painter
->
font
();
#ifdef Q_OS_OSX
font1
.
setPointSizeF
(
font1
.
pointSizeF
()
-
3
);
#endif
...
...
@@ -438,47 +468,136 @@ void UBGraphicsProtractor::paintButtons(QPainter *painter)
{
Q_UNUSED
(
painter
);
if
(
mShowButtons
)
{
qreal
antiSc
=
antiScale
();
qreal
co
=
cos
(
mStartAngle
*
PI
/
180
);
// cos(rad)
qreal
si
=
sin
(
mStartAngle
*
PI
/
180
);
//sin(rad)
if
(
mShowButtons
)
{
qreal
scale
=
buttonSizeReference
().
width
()
/
mCloseSvgItem
->
boundingRect
().
width
();
mCloseSvgItem
->
setPos
(
closeButtonRect
().
topLeft
()
+
rect
().
center
());
/*qDebug() << "UBGraphicsProtractor paint()"
<<"closeButtonRect_Topleft="<<closeButtonRect().topLeft()
<<"mStartAngle="<<mStartAngle
<<"mCurrentAngle="<<mCurrentAngle
<<"rect_center = "<<rect().center();
*/
// Determine and apply the coordinates of the close button object.
//---------------------------------------------------------------
qreal
pos_close_x
=
closeButtonRect
().
topLeft
().
x
()
*
co
;
qreal
pos_close_y
=
qAbs
(
closeButtonRect
().
topLeft
().
x
())
*
si
+
closeButtonRect
().
topLeft
().
y
();
qDebug
()
<<
"pos_close_x ="
<<
pos_close_x
<<
"pos_close_y ="
<<
pos_close_y
<<
"cos"
<<
co
<<
"sin"
<<
si
;
mCloseSvgItem
->
setPos
(
pos_close_x
,
pos_close_y
);
mCloseSvgItem
->
resetTransform
();
mCloseSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
-
closeButtonRect
().
left
(),
-
closeButtonRect
().
top
()),
true
);
mCloseSvgItem
->
setRotation
(
rotation
()
-
mStartAngle
);
mCloseSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
closeButtonRect
().
left
(),
closeButtonRect
().
top
()),
true
);
mCloseSvgItem
->
setTransform
(
QTransform
::
fromScale
(
scale
*
antiSc
,
scale
*
antiSc
),
true
);
//this do not impact the bounding box of thr svg item...
//mCloseSvgItem->translate(-closeButtonRect().left(),-closeButtonRect().top()); --
mCloseSvgItem
->
setPos
(
-
pos_close_x
,
-
pos_close_y
);
//mCloseSvgItem->setPos(-closeButtonRect().left(),-closeButtonRect().top());
//mCloseSvgItem->rotate(-mStartAngle); --
mCloseSvgItem
->
setRotation
(
rotation
()
-
mStartAngle
);
//mCloseSvgItem->translate(closeButtonRect().left(), closeButtonRect().top()); --
mCloseSvgItem
->
setPos
(
pos_close_x
,
pos_close_y
);
//mCloseSvgItem->setPos(closeButtonRect().left(), closeButtonRect().top());
//mCloseSvgItem->scale(scale * antiSc, scale * antiSc);//this do not impact the bounding box of thr svg item...
mCloseSvgItem
->
setScale
(
scale
);
//this do not impact the bounding box of thr svg item...
mResetSvgItem
->
setPos
(
resetButtonRect
().
topLeft
()
+
rect
().
center
());
// Determine and apply the position on the reset button object.
//------------------------------------------------------------
qreal
pos_reset_x
=
resetButtonRect
().
topLeft
().
x
()
*
co
;
qreal
pos_reset_y
=
qAbs
(
resetButtonRect
().
topLeft
().
x
())
*
si
+
resetButtonRect
().
topLeft
().
y
();
mResetSvgItem
->
setPos
(
pos_reset_x
,
pos_reset_y
);
//mResetSvgItem->setPos(resetButtonRect().topLeft() + rect().center());
mResetSvgItem
->
resetTransform
();
mResetSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
-
resetButtonRect
().
left
(),
-
resetButtonRect
().
top
()),
true
);
mResetSvgItem
->
setRotation
(
rotation
()
-
mStartAngle
);
mResetSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
resetButtonRect
().
left
(),
resetButtonRect
().
top
()),
true
);
mResetSvgItem
->
setTransform
(
QTransform
::
fromScale
(
scale
*
antiSc
,
scale
*
antiSc
),
true
);
//this do not impact the bounding box of thr svg item...
//mResetSvgItem->translate(-resetButtonRect().left(), -resetButtonRect().top());--
mResetSvgItem
->
setPos
(
-
pos_reset_x
,
-
pos_reset_y
);
//mResetSvgItem->rotate(-mStartAngle);--
mResetSvgItem
->
setRotation
(
-
mStartAngle
);
//mResetSvgItem->translate(resetButtonRect().left(), resetButtonRect().top());--
mResetSvgItem
->
setPos
(
pos_reset_x
,
pos_reset_y
);
//mResetSvgItem->scale(scale * antiSc, scale * antiSc);//this do not impact the bounding box of thr svg item...
mResetSvgItem
->
setScale
(
scale
);
//this do not impact the bounding box of thr svg item...
// Determine and apply the position on the resize button object.
//------------------------------------------------------------
qreal
pos_resize_x
=
resizeButtonRect
().
topLeft
().
x
()
*
co
;
qreal
pos_resize_y
=
-
(
resizeButtonRect
().
topLeft
().
x
())
*
si
+
resizeButtonRect
().
topLeft
().
y
();
qDebug
()
<<
"pos_resize_x ="
<<
pos_resize_x
<<
"pos_resize_y ="
<<
pos_resize_y
;
mResizeSvgItem
->
setPos
(
resizeButtonRect
().
topLeft
()
+
rect
().
center
());
// mResizeSvgItem->setPos(resizeButtonRect().topLeft() + rect().center());
mResizeSvgItem
->
setPos
(
pos_resize_x
,
pos_resize_y
);
mResizeSvgItem
->
resetTransform
();
mResizeSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
-
resizeButtonRect
().
left
(),
-
resizeButtonRect
().
top
()),
true
);
mResizeSvgItem
->
setRotation
(
rotation
()
-
mStartAngle
);
mResizeSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
resizeButtonRect
().
left
(),
resizeButtonRect
().
top
()),
true
);
mResizeSvgItem
->
setTransform
(
QTransform
::
fromScale
(
scale
*
antiSc
,
scale
*
antiSc
),
true
);
//this do not impact the bounding box of thr svg item...
mResizeSvgItem
->
setPos
(
-
pos_resize_x
,
-
pos_resize_y
);
//mResizeSvgItem->rotate(-mStartAngle);--
mResizeSvgItem
->
setRotation
(
-
mStartAngle
);
mRotateSvgItem
->
setPos
(
rotateButtonRect
().
topLeft
()
+
rect
().
center
());
//mResizeSvgItem->translate(-resizeButtonRect().left(), -resizeButtonRect().top());--
mResizeSvgItem
->
setPos
(
pos_resize_x
,
pos_resize_y
);
// mResizeSvgItem->scale(scale * antiSc, scale * antiSc);//this do not impact the bounding box of thr svg item...
mResizeSvgItem
->
setScale
(
scale
);
//this do not impact the bounding box of thr svg item...
// Determine and apply the position on the rotate button object.
//--------------------------------------------------------------
qreal
qPow_x
=
qPow
(
rotateButtonRect
().
topLeft
().
x
(),
2
);
qreal
qPow_y
=
qPow
(
rotateButtonRect
().
topLeft
().
y
(),
2
);
qreal
module_rotate_pos
=
qSqrt
(
qPow_x
+
qPow_y
);
qreal
arg_rotate_pos
=
(
qAtan2
(
rotateButtonRect
().
topLeft
().
y
(),
rotateButtonRect
().
topLeft
().
x
()));
//argument in radian
qreal
co_r
=
cos
(
-
mStartAngle
*
PI
/
180
+
arg_rotate_pos
);
// cos(rad)
qreal
si_r
=
sin
(
-
mStartAngle
*
PI
/
180
+
arg_rotate_pos
);
//sin(rad)
qreal
pos_rotate_x
=
(
module_rotate_pos
*
co_r
)
;
qreal
pos_rotate_y
=
(
module_rotate_pos
*
si_r
)
;
mRotateSvgItem
->
setPos
(
pos_rotate_x
,
pos_rotate_y
);
//mRotateSvgItem->setPos(rotateButtonRect().topLeft() + rect().center()); --
mRotateSvgItem
->
resetTransform
();
mRotateSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
-
rotateButtonRect
().
left
(),
-
rotateButtonRect
().
top
()),
true
);
mRotateSvgItem
->
setRotation
(
rotation
()
-
mStartAngle
);
mRotateSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
rotateButtonRect
().
left
(),
rotateButtonRect
().
top
()),
true
);
mRotateSvgItem
->
setTransform
(
QTransform
::
fromScale
(
scale
,
scale
),
true
);
//this do not impact the bounding box of thr svg item...
mRotateSvgItem
->
setPos
(
-
pos_rotate_x
,
-
pos_rotate_y
);
//mRotateSvgItem->rotate(-mStartAngle);--
mRotateSvgItem
->
setRotation
(
-
mStartAngle
);
mRotateSvgItem
->
setPos
(
pos_rotate_x
,
pos_rotate_y
);
//mRotateSvgItem->scale(scale, scale);//this do not impact the bounding box of thr svg item...
mRotateSvgItem
->
setScale
(
scale
);
//this do not impact the bounding box of thr svg item...
//qDebug()<<"UBGraphicsProtractor scale()"<<"scale ="<<scale<<"antiSc = "<<antiSc <<"mScaleFactor ="<<mScaleFactor;
}
qreal
scale
=
markerSizeReference
().
width
()
/
mMarkerSvgItem
->
boundingRect
().
width
();
mMarkerSvgItem
->
setPos
(
markerButtonRect
().
topLeft
()
+
rect
().
center
());
qreal
pos_marker_x
=
markerButtonRect
().
topLeft
().
x
()
*
co
;
qreal
pos_marker_y
=
-
(
markerButtonRect
().
topLeft
().
x
())
*
si
+
markerButtonRect
().
topLeft
().
y
();
// mMarkerSvgItem->setPos(markerButtonRect().topLeft() + rect().center()); --
mMarkerSvgItem
->
setPos
(
pos_marker_x
,
pos_marker_y
);
mMarkerSvgItem
->
resetTransform
();
mMarkerSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
-
markerButtonRect
().
left
(),
-
markerButtonRect
().
top
()),
true
);
mMarkerSvgItem
->
setRotation
(
rotation
()
-
mStartAngle
-
mCurrentAngle
);
mMarkerSvgItem
->
setTransform
(
QTransform
::
fromTranslate
(
markerButtonRect
().
left
(),
markerButtonRect
().
top
()),
true
);
mMarkerSvgItem
->
setTransform
(
QTransform
::
fromScale
(
scale
,
scale
),
true
);
//this do not impact the bounding box of thr svg item...
//mMarkerSvgItem->setPos(-markerButtonRect().left(), -markerButtonRect().top());--
mMarkerSvgItem
->
setPos
(
-
pos_marker_x
,
-
pos_marker_y
);
//mMarkerSvgItem->rotate(- mStartAngle - mCurrentAngle);
mMarkerSvgItem
->
setRotation
(
-
mStartAngle
-
mCurrentAngle
);
mMarkerSvgItem
->
setPos
(
pos_marker_x
,
pos_marker_y
);
//mMarkerSvgItem->setPos(markerButtonRect().left(), markerButtonRect().top());--
//mMarkerSvgItem->scale(scale, scale);//this do not impact the bounding box of thr svg item...
mMarkerSvgItem
->
setScale
(
scale
);
//this do not impact the bounding box of thr svg item...
mCloseSvgItem
->
setVisible
(
mShowButtons
);
mResetSvgItem
->
setVisible
(
mShowButtons
);
...
...
@@ -486,6 +605,8 @@ void UBGraphicsProtractor::paintButtons(QPainter *painter)
mRotateSvgItem
->
setVisible
(
mShowButtons
);
mMarkerSvgItem
->
setVisible
(
true
);
}
...
...
@@ -539,7 +660,6 @@ void UBGraphicsProtractor::paintAngleMarker(QPainter *painter)
painter
->
restore
();
}
UBGraphicsProtractor
::
Tool
UBGraphicsProtractor
::
toolFromPos
(
QPointF
pos
)
{
pos
=
pos
-
rect
().
center
();
...
...
@@ -550,10 +670,18 @@ UBGraphicsProtractor::Tool UBGraphicsProtractor::toolFromPos(QPointF pos)
t
.
rotate
(
mCurrentAngle
);
QPointF
p2
=
t
.
map
(
pos
);
if
(
resizeButtonRect
().
contains
(
p1
))
qDebug
()
<<
"UBGraphicsProtractor toolFromPos()"
<<
"p1="
<<
p1
<<
"p2 ="
<<
p2
<<
"closeButtonRect_topLeft="
;
qDebug
()
<<
"closeButtonRect_topleft"
<<
closeButtonRect
().
topLeft
()
<<
"closeButtonRect_width"
<<
closeButtonRect
().
width
();
if
(
resizeButtonRect
().
contains
(
p1
.
x
(),
p1
.
y
()))
//if (resizeButtonRect().contains(p1))
return
Resize
;
else
if
(
closeButtonRect
().
contains
(
p1
))
{
qDebug
()
<<
"UBGraphicsProtractor toolFromPos()"
<<
"closeButtonRect_Topleft="
<<
closeButtonRect
().
topLeft
();
return
Close
;
}
else
if
(
resetButtonRect
().
contains
(
p1
))
return
Reset
;
else
if
(
rotateButtonRect
().
contains
(
p1
))
...
...
@@ -613,10 +741,19 @@ void UBGraphicsProtractor::copyItemParameters(UBItem *copy) const
void
UBGraphicsProtractor
::
rotateAroundCenter
(
qreal
angle
)
{
Q_UNUSED
(
angle
);
// Q_UNUSED(angle);
// Align the implementation with the others apps objects.
QTransform
transform
;
transform
.
translate
(
rotationCenter
().
x
(),
rotationCenter
().
y
());
transform
.
rotate
(
angle
);
transform
.
translate
(
-
rotationCenter
().
x
(),
-
rotationCenter
().
y
());
setTransform
(
transform
,
true
);
}
QPointF
UBGraphicsProtractor
::
rotationCenter
()
const
{
return
QPointF
(
rect
().
x
(),
rect
().
y
());
}
src/tools/UBGraphicsProtractor.h
View file @
691eb2a8
...
...
@@ -28,13 +28,20 @@
#ifndef UBGRAPHICSPROTRACTOR_H_
#define UBGRAPHICSPROTRACTOR_H_
#include <QtGui>
//#include <QtGui>
#include <QtWidgets>
#include <QtWidgets/QGraphicsItem>
#include <QtWidgets/QGraphicsView>
#include <QtSvg>
#include "core/UB.h"
#include "tools/UBAbstractDrawRuler.h"
#include "domain/UBItem.h"
#include "frameworks/UBGeometryUtils.h"
class
UBGraphicsScene
;
class
UBGraphicsProtractor
:
public
UBAbstractDrawRuler
,
public
QGraphicsEllipseItem
,
public
UBItem
...
...
@@ -74,7 +81,8 @@ class UBGraphicsProtractor : public UBAbstractDrawRuler, public QGraphicsEllipse
virtual
void
hoverMoveEvent
(
QGraphicsSceneHoverEvent
*
event
);
virtual
QPainterPath
shape
()
const
;
QRectF
boundingRect
()
const
;
void
paintGraduations
(
QPainter
*
painter
);
void
paintGraduations
(
QPainter
*
painter
);
private
:
// Helpers
...
...
@@ -88,6 +96,7 @@ class UBGraphicsProtractor : public UBAbstractDrawRuler, public QGraphicsEllipse
QSizeF
buttonSizeReference
()
const
{
return
QSizeF
(
radius
()
/
10
,
mCloseSvgItem
->
boundingRect
().
height
()
*
radius
()
/
(
10
*
mCloseSvgItem
->
boundingRect
().
width
()));}
QSizeF
markerSizeReference
()
const
{
return
QSizeF
(
radius
()
/
10
,
mMarkerSvgItem
->
boundingRect
().
height
()
*
radius
()
/
(
10
*
mMarkerSvgItem
->
boundingRect
().
width
()));}
QRectF
resetButtonRect
()
const
;
QRectF
closeButtonRect
()
const
;
QRectF
resizeButtonRect
()
const
;
QRectF
rotateButtonRect
()
const
{
return
QRectF
(
buttonSizeReference
().
width
()
*
5
.
5
,
-
buttonSizeReference
().
width
()
*
5
,
buttonSizeReference
().
width
(),
buttonSizeReference
().
width
());}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment