134 enum {
Type = UserType + 1008 };
138 QPointF = QPointF(0,0),
140 QGraphicsItem *parent =
nullptr);
154 virtual bool fromXml (
const QDomElement &);
155 virtual QDomElement
toXml (QDomDocument &document)
const;
156 virtual bool toDXF (
const QString &filepath,
const QPen &
pen);
159 QString
name()
const override;
161 void setP2 (
const QPointF &P2);
216 QPainterPath
shape()
const override;
221 const QStyleOptionGraphicsItem *option,
222 QWidget *widget)
override;
229 GraphicsItemChange change,
230 const QVariant &value)
override;
232 QGraphicsItem *watched,
233 QEvent *event)
override;
235 QGraphicsSceneContextMenuEvent *event)
override;
253 static QVector<PathNode>
bezierNodesForArc(
const QRectF &
rect, qreal startAngleDeg, qreal spanAngleDeg);
255 void mirror(
bool horizontal);
267 void dragResize (
int index,
const QPointF &localPos, Qt::KeyboardModifiers mods);
268 void dragRotateHandle(
int cornerIndex,
const QPointF &scenePos, Qt::KeyboardModifiers mods);
269 void dragSkewHandle (
int edgeIndex,
const QPointF &scenePos, Qt::KeyboardModifiers mods);
271 void dragArcEndpoint (
int which,
const QPointF &localPos, Qt::KeyboardModifiers mods);
273 void dragPathAnchor (
int which,
const QPointF &localPos, Qt::KeyboardModifiers mods);
274 void dragPathControlHandle(
bool isOutHandle,
int nodeIndex,
const QPointF &localPos, Qt::KeyboardModifiers mods);
292 static QRectF
lockAspectRatio(
const QRectF &oldRect, QRectF newRect,
int resizeIndex,
bool mirrored);
The QetGraphicsHandlerItem class This graphics item represents a point, destined to be used as an han...
Definition qetgraphicshandleritem.h:37
QetGraphicsItem(QGraphicsItem *parent=nullptr)
Definition qetgraphicsitem.cpp:44
virtual QDomElement toXml(QDomDocument &document) const
QetShapeItem::toXml Save this item to xml element.
Definition qetshapeitem.cpp:3016
bool close
Definition qetshapeitem.h:50
QDomElement snapshotXml() const
QetShapeItem::snapshotXml toXml() into a private, throwaway document – used only to hand a self-conta...
Definition qetshapeitem.cpp:1761
qreal m_curveDragT
Definition qetshapeitem.h:337
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
QetShapeItem::paint Paint this item.
Definition qetshapeitem.cpp:624
QPolygonF polygon() const
Definition qetshapeitem.h:166
QBrush m_brush
Definition qetshapeitem.h:300
qreal m_old_startAngle
Definition qetshapeitem.h:318
static QRectF lockAspectRatio(const QRectF &oldRect, QRectF newRect, int resizeIndex, bool mirrored)
QetShapeItem::lockAspectRatio Shift-constrained resize: keep the pre-drag width:height ratio,...
Definition qetshapeitem.cpp:2327
void setEndAngle(qreal degrees)
Definition qetshapeitem.cpp:390
void dragPathAnchor(int which, const QPointF &localPos, Qt::KeyboardModifiers mods)
QetShapeItem::dragPathAnchor Normally just moves the anchor (Polygon vertex, or a Path node's anchor ...
Definition qetshapeitem.cpp:2515
void removePoints(int number=1)
QetShapeItem::removePoints Number of point to remove on the polygon If number is superior to number o...
Definition qetshapeitem.cpp:462
static bool isResizeCornerSlot(int slot)
Definition qetshapeitem.cpp:2353
bool m_modifie_radius_equaly
Definition qetshapeitem.h:310
HandleMode
Definition qetshapeitem.h:115
@ NodeEdit
Definition qetshapeitem.h:115
@ RotateSkew
Definition qetshapeitem.h:115
@ Size
Definition qetshapeitem.h:115
ArcClosure m_arcClosure
Definition qetshapeitem.h:330
qreal scaleFactorX
Definition qetshapeitem.h:61
@ Type
Definition qetshapeitem.h:134
bool m_curveDragEngaged
Definition qetshapeitem.h:340
QPointF m_curveDragOriginalP1
Definition qetshapeitem.h:338
QString handleRoleTooltip(HandleRole role, int slot) const
QetShapeItem::handleRoleTooltip Set natively on each handle item in rebuildHandles() – Qt shows a han...
Definition qetshapeitem.cpp:1366
void dragResize(int index, const QPointF &localPos, Qt::KeyboardModifiers mods)
Definition qetshapeitem.cpp:2362
qreal rotation() const
Definition qetshapeitem.h:179
QPointF m_context_menu_pos
Definition qetshapeitem.h:305
qreal xRadius
Definition qetshapeitem.h:51
void insertPathPoint(int segmentIndex, qreal t)
QetShapeItem::insertPathPoint Splits the cubic Bezier between node segmentIndex and its successor at ...
Definition qetshapeitem.cpp:1867
void removePathPoint(int nodeIndex)
QetShapeItem::removePathPoint Deletes a node outright and lets its two former neighbours connect dire...
Definition qetshapeitem.cpp:1932
QPointF m_P1
Definition qetshapeitem.h:301
QPainterPath outline() const
QetShapeItem::outline The raw, unstroked path for the current type, in local coordinates....
Definition qetshapeitem.cpp:526
QPolygonF m_polygon
Definition qetshapeitem.h:306
const QVector< PathNode > & pathNodes() const
Definition qetshapeitem.h:207
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override
QetShapeItem::hoverEnterEvent Handle hover enter event.
Definition qetshapeitem.cpp:741
int pointsCount() const
QetShapeItem::pointCount.
Definition qetshapeitem.cpp:439
void setYRadius(qreal Y)
Definition qetshapeitem.cpp:233
void editProperty() override
QetShapeItem::editProperty Edit the property of this item.
Definition qetshapeitem.cpp:3209
qreal m_yRadius
Definition qetshapeitem.h:315
QString currentModeStatusHint() const
QetShapeItem::currentModeStatusHint One-line reference for whatever handles are visible right now,...
Definition qetshapeitem.cpp:1293
void handlerMouseReleaseEvent(int handlerIndex)
QetShapeItem::handlerMouseReleaseEvent.
Definition qetshapeitem.cpp:2731
QVector< PathNode > m_old_nodes
Definition qetshapeitem.h:335
QPen pen
Definition qetshapeitem.h:45
void dragSkewHandle(int edgeIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods)
Definition qetshapeitem.cpp:2419
virtual bool fromXml(const QDomElement &)
QetShapeItem::fromXml Build this item from the xml description.
Definition qetshapeitem.cpp:2890
QPointF m_P2
Definition qetshapeitem.h:302
QAction * m_insert_point
Definition qetshapeitem.h:312
void clearStatusHint() const
Definition qetshapeitem.cpp:1275
void handlerMouseMoveEvent(int handlerIndex, QGraphicsSceneMouseEvent *event)
QetShapeItem::handlerMouseMoveEvent.
Definition qetshapeitem.cpp:2689
void handlerMousePressEvent(int handlerIndex)
QetShapeItem::handlerMousePressEvent.
Definition qetshapeitem.cpp:2666
void mirrorOppositeHandle(PathNode &node, bool justChangedIsOut)
QetShapeItem::mirrorOppositeHandle Given a node whose one handle (out, if justChangedIsOut; in,...
Definition qetshapeitem.cpp:2589
const ShapeTransform & shapeTransform() const
Definition qetshapeitem.h:178
void dragCornerRadius(int which, const QPointF &localPos)
Definition qetshapeitem.cpp:2490
qreal skewX
Definition qetshapeitem.h:59
void setSkewX(qreal degrees)
Definition qetshapeitem.cpp:258
bool m_deferHandleReposition
Definition qetshapeitem.h:332
qreal m_startAngle
Definition qetshapeitem.h:328
void dragRotateHandle(int cornerIndex, const QPointF &scenePos, Qt::KeyboardModifiers mods)
Definition qetshapeitem.cpp:2393
QVariant itemChange(GraphicsItemChange change, const QVariant &value) override
QetShapeItem::itemChange.
Definition qetshapeitem.cpp:888
QRectF boundingRect() const override
QetShapeItem::boundingRect.
Definition qetshapeitem.cpp:482
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
QetShapeItem::mouseReleaseEvent If the press in mousePressEvent never turned into a real drag,...
Definition qetshapeitem.cpp:852
QVector< PathNode > m_nodes
Definition qetshapeitem.h:334
void dragArcEndpoint(int which, const QPointF &localPos, Qt::KeyboardModifiers mods)
Definition qetshapeitem.cpp:2469
QPointF scaleAndShearOffset(const QPointF &localPoint) const
Definition qetshapeitem.cpp:1548
static QVector< PathNode > bezierNodesForArc(const QRectF &rect, qreal startAngleDeg, qreal spanAngleDeg)
QetShapeItem::bezierNodesForArc Bezier approximation of an elliptical arc, split into <=90-degree seg...
Definition qetshapeitem.cpp:2065
void setRotation(qreal degrees)
QetShapeItem::setRotation.
Definition qetshapeitem.cpp:249
qreal skewX() const
Definition qetshapeitem.h:181
qreal skewY() const
Definition qetshapeitem.h:183
bool setLine(const QLineF &line)
QetShapeItem::setLine Set item geometry to line (only available for line shape).
Definition qetshapeitem.cpp:153
ShapeType
Definition qetshapeitem.h:79
@ Polygon
Definition qetshapeitem.h:82
@ Ellipse
Definition qetshapeitem.h:81
@ Rectangle
Definition qetshapeitem.h:80
@ Line
Definition qetshapeitem.h:79
@ Path
Definition qetshapeitem.h:83
QAction * m_remove_point
Definition qetshapeitem.h:313
static QColor colorForHandleRole(HandleRole role)
QetShapeItem::colorForHandleRole Purely cosmetic, but consistent with the existing convention of colo...
Definition qetshapeitem.cpp:1422
qreal m_old_endAngle
Definition qetshapeitem.h:319
int m_curveDragSegment
Definition qetshapeitem.h:336
NodeKind
Definition qetshapeitem.h:93
@ Corner
Definition qetshapeitem.h:93
@ Smooth
Definition qetshapeitem.h:93
@ Symmetric
Definition qetshapeitem.h:93
void toggleHandleMode()
Definition qetshapeitem.cpp:1178
void resetPivotToBoundingRectCenter()
Definition qetshapeitem.cpp:337
~QetShapeItem() override
Definition qetshapeitem.cpp:79
QVector< QPointF > currentHandlePositions() const
Definition qetshapeitem.cpp:1521
bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override
QetShapeItem::sceneEventFilter.
Definition qetshapeitem.cpp:937
bool setPolygon(const QPolygonF &polygon)
QetShapeItem::setPolygon Set this item geometry to polygon (only available if shape is a polyline).
Definition qetshapeitem.cpp:195
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
QetShapeItem::mouseMoveEvent Only ever does something different from the base class while a curve-seg...
Definition qetshapeitem.cpp:821
qreal yRadius
Definition qetshapeitem.h:52
QPointF scaleOnlyOffset(const QPointF &localPoint) const
QetShapeItem::scaleOnlyOffset / scaleAndShearOffset A local point's offset from the pivot,...
Definition qetshapeitem.cpp:1542
HandleMode m_handleMode
Definition qetshapeitem.h:323
bool m_closed
Definition qetshapeitem.h:309
void setStartAngle(qreal degrees)
Definition qetshapeitem.cpp:380
QVector< int > m_handleSlot
Definition qetshapeitem.h:325
ArcClosure
Definition qetshapeitem.h:86
@ Chord
Definition qetshapeitem.h:86
@ NoClosure
Definition qetshapeitem.h:86
@ Pie
Definition qetshapeitem.h:86
QPointF pivot() const
Definition qetshapeitem.h:189
void setArcClosure(ArcClosure closure)
Definition qetshapeitem.cpp:400
qreal startAngle() const
Definition qetshapeitem.h:197
void setSkewY(qreal degrees)
Definition qetshapeitem.cpp:267
qreal rotation
Definition qetshapeitem.h:58
void rebuildHandles()
QetShapeItem::rebuildHandles (Re)creates the handler items from scratch, for the current shapeType()/...
Definition qetshapeitem.cpp:1565
void removePoint()
Definition qetshapeitem.cpp:1722
qreal scaleFactorY
Definition qetshapeitem.h:62
static QPointF edgeMidpoint(const QRectF &rect, int edgeIndex)
Definition qetshapeitem.cpp:1461
void enableNodeEditMode()
QetShapeItem::enableNodeEditMode Switches into NodeEdit mode, so every node's control handles (and th...
Definition qetshapeitem.cpp:352
HandleMode nextHandleMode() const
QetShapeItem::toggleHandleMode Cycled by clicking an already-selected shape: Size -> Corner -> Rotate...
Definition qetshapeitem.cpp:1161
QPointF m_old_pos
Definition qetshapeitem.h:326
bool m_hovered
Definition qetshapeitem.h:307
void updateModeHint()
QetShapeItem::updateModeHint Keeps the tooltip in sync with what the next click would do – called on ...
Definition qetshapeitem.cpp:1218
int type() const override
Definition qetshapeitem.h:145
ShapeType shapeType() const
Definition qetshapeitem.h:152
QLineF line
Definition qetshapeitem.h:48
QPolygonF polygon
Definition qetshapeitem.h:49
QString name() const override
QetShapeItem::name.
Definition qetshapeitem.cpp:3221
QPointF m_curveDragPressPos
Definition qetshapeitem.h:339
void repositionHandles()
QetShapeItem::repositionHandles Moves the existing handler items to match current geometry,...
Definition qetshapeitem.cpp:1689
QPen m_pen
Definition qetshapeitem.h:299
void insertPoint()
Definition qetshapeitem.cpp:1706
void setScaleFactorY(qreal factor)
Definition qetshapeitem.cpp:285
void setNextPoint(QPointF P)
QetShapeItem::setNextPoint Add a new point to the current polygon.
Definition qetshapeitem.cpp:449
QPointF m_old_P2
Definition qetshapeitem.h:304
QPointF handlePositionFor(HandleRole role, int slot) const
QetShapeItem::handlePositionFor Local-coordinate position for one (role, slot) pair,...
Definition qetshapeitem.cpp:1480
bool isClosed() const
Definition qetshapeitem.h:168
qreal m_old_yRadius
Definition qetshapeitem.h:317
int m_vector_index
Definition qetshapeitem.h:308
void convertToPathOrPolygon()
QetShapeItem::convertToPathOrPolygon Context-menu action, explicitly requested rather than triggered ...
Definition qetshapeitem.cpp:1970
ArcClosure arcClosure() const
Definition qetshapeitem.h:203
void refreshInteractionHints()
QetShapeItem::refreshInteractionHints Keeps the tooltip text current, and – if the shape is already b...
Definition qetshapeitem.cpp:1237
static QVector< PathNode > bezierNodesForRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius)
QetShapeItem::bezierNodesForRoundedRect Bezier equivalent of QPainterPath::addRoundedRect(): 8 anchor...
Definition qetshapeitem.cpp:2117
QPointF m_old_P1
Definition qetshapeitem.h:303
HandleRole
Definition qetshapeitem.h:126
@ PathAnchor
Definition qetshapeitem.h:131
@ PathControlIn
Definition qetshapeitem.h:131
@ CornerRadius
Definition qetshapeitem.h:129
@ SkewEdge
Definition qetshapeitem.h:128
@ PathControlOut
Definition qetshapeitem.h:131
@ Pivot
Definition qetshapeitem.h:128
@ ArcEndpoint
Definition qetshapeitem.h:130
@ Rotate
Definition qetshapeitem.h:128
@ Resize
Definition qetshapeitem.h:127
void setClosed(bool close)
QetShapeItem::setClosed Close this item – has effect for Polygon and Path only (the two shape types w...
Definition qetshapeitem.cpp:215
void dragCurveSegment(int segmentIndex, qreal t, const QPointF &localPos)
QetShapeItem::dragCurveSegment Inkscape-style "grab the curve itself, not a handle" reshaping: moves ...
Definition qetshapeitem.cpp:2632
QPointF pivot
Definition qetshapeitem.h:63
QRectF rect() const
Definition qetshapeitem.h:164
QRectF rect
Definition qetshapeitem.h:47
QPointF rotateHandleReference(int slot) const
Definition qetshapeitem.cpp:1450
void promoteRectangleOrEllipseToPolygon(int detachedResizeIndex, const QPointF &newLocalPos)
QetShapeItem::promoteRectangleOrEllipseToPolygon Alt+drag on a Resize corner detaches that one vertex...
Definition qetshapeitem.cpp:1780
QBrush brush
Definition qetshapeitem.h:46
void setP2(const QPointF &P2)
QetShapeItem::setP2 Set the second point of this item. If this item is a polyline,...
Definition qetshapeitem.cpp:118
std::pair< int, qreal > nearestPathSegment(const QPointF &localPos) const
QetShapeItem::nearestPathSegment Nearest point on the whole curve to localPos, found by coarse sampli...
Definition qetshapeitem.cpp:1816
qreal startAngle
Definition qetshapeitem.h:65
qreal skewY
Definition qetshapeitem.h:60
ShapeType m_shapeType
ATTRIBUTES.
Definition qetshapeitem.h:298
QLineF line() const
Definition qetshapeitem.h:162
qreal endAngle
Definition qetshapeitem.h:66
qreal scaleFactorX() const
Definition qetshapeitem.h:185
void mirror(bool horizontal)
QetShapeItem::mirror Flips the shape around its own current pivot – horizontal negates scaleFactorX,...
Definition qetshapeitem.cpp:2196
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
QetShapeItem::mousePressEvent A left click on an already selected shape (without having dragged) togg...
Definition qetshapeitem.cpp:768
void setNodeKind(int nodeIndex, NodeKind kind)
QetShapeItem::setNodeKind Change a Path node's kind, via the context menu rather than a drag....
Definition qetshapeitem.cpp:2258
QVector< HandleRole > m_handleRoles
Definition qetshapeitem.h:324
bool isFullEllipse() const
Definition qetshapeitem.h:202
qreal spanAngle() const
Definition qetshapeitem.h:201
qreal endAngle() const
Definition qetshapeitem.h:199
ShapeTransform m_transform
Definition qetshapeitem.h:321
virtual bool toDXF(const QString &filepath, const QPen &pen)
QetShapeItem::toDXF Draw this element to the dxf document.
Definition qetshapeitem.cpp:3133
QPainterPath shape() const override
QetShapeItem::shape.
Definition qetshapeitem.cpp:609
QPointF m_curveDragOriginalP2
Definition qetshapeitem.h:338
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override
QetShapeItem::contextMenuEvent.
Definition qetshapeitem.cpp:994
qreal m_old_xRadius
Definition qetshapeitem.h:316
QRectF localRect() const
QetShapeItem::localRect The rect used for corner/edge handle placement and for arc/radius math....
Definition qetshapeitem.cpp:506
QPen pen() const
METHODS.
Definition qetshapeitem.h:148
qreal YRadius() const
Definition qetshapeitem.h:172
qreal scaleFactorY() const
Definition qetshapeitem.h:187
QPolygonF m_old_polygon
Definition qetshapeitem.h:306
bool setRect(const QRectF &rect)
QetShapeItem::setRect Set this item geometry to rect (only available if shape is a rectangle or an el...
Definition qetshapeitem.cpp:172
bool m_pivotIsCustom
Definition qetshapeitem.h:331
void setXRadius(qreal X)
Definition qetshapeitem.cpp:225
void setPen(const QPen &pen)
QetShapeItem::setPen Set the pen to use for draw the shape.
Definition qetshapeitem.cpp:90
QVector< QetGraphicsHandlerItem * > m_handler_vector
Definition qetshapeitem.h:311
void dragPathControlHandle(bool isOutHandle, int nodeIndex, const QPointF &localPos, Qt::KeyboardModifiers mods)
QetShapeItem::dragPathControlHandle Dragging a Bezier control handle. Corner nodes have no linked opp...
Definition qetshapeitem.cpp:2553
void setScaleFactorX(qreal factor)
Definition qetshapeitem.cpp:276
QetShapeItem(QPointF, QPointF=QPointF(0, 0), ShapeType=Line, QGraphicsItem *parent=nullptr)
QetShapeItem::QetShapeItem Constructor of shape item. point 1 and 2 must be in scene coordinate.
Definition qetshapeitem.cpp:52
ShapeTransform m_old_transform
Definition qetshapeitem.h:322
void showStatusHint(const QString &text) const
Definition qetshapeitem.cpp:1267
static QString handleModeLabel(HandleMode mode)
QetShapeItem::handleModeLabel Short, human name for a HandleMode – used to build both the tooltip ("c...
Definition qetshapeitem.cpp:1196
void setPathNodes(const QVector< PathNode > &nodes)
QetShapeItem::setPathNodes Replace the node list of a Path shape. Interactive editing of anchors and ...
Definition qetshapeitem.cpp:416
void dragPivotHandle(const QPointF &localPos)
Definition qetshapeitem.cpp:2460
qreal m_xRadius
Definition qetshapeitem.h:314
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override
QetShapeItem::hoverLeaveEvent Handle hover leave event.
Definition qetshapeitem.cpp:753
static QPointF cornerPoint(const QRectF &rect, int cornerIndex)
Definition qetshapeitem.cpp:1439
qreal XRadius() const
Definition qetshapeitem.h:170
qreal m_endAngle
Definition qetshapeitem.h:329
void setBrush(const QBrush &brush)
QetShapeItem::setBrush Set the brush to use for the fill the shape.
Definition qetshapeitem.cpp:103
void setPivot(const QPointF &pivot)
QetShapeItem::setPivot Move the pivot point. pos() is adjusted at the same time so the shape never vi...
Definition qetshapeitem.cpp:301
QBrush brush() const
Definition qetshapeitem.h:150
Definition qetshapeitem.h:94
bool operator==(const PathNode &other) const
Definition qetshapeitem.h:100
std::optional< QPointF > outHandle
Definition qetshapeitem.h:98
QPointF anchor
Definition qetshapeitem.h:95
NodeKind kind
Definition qetshapeitem.h:96
std::optional< QPointF > inHandle
Definition qetshapeitem.h:97