QElectroTech 0.200.1-dev
Loading...
Searching...
No Matches
conductor.h
Go to the documentation of this file.
1/*
2 Copyright 2006-2026 The QElectroTech Team
3 This file is part of QElectroTech.
4
5 QElectroTech is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 2 of the License, or
8 (at your option) any later version.
9
10 QElectroTech is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
17*/
18#ifndef CONDUCTOR_H
19#define CONDUCTOR_H
22
23#include <QGraphicsPathItem>
24#include <QUuid>
25
28class Diagram;
29class Terminal;
32class Element;
36
37typedef QPair<QPointF, Qt::Corner> ConductorBend;
38typedef QHash<Qt::Corner, ConductorProfile> ConductorProfilesGroup;
43class Conductor : public QGraphicsObject
44{
45 Q_OBJECT
46
47 Q_PROPERTY(QPointF pos READ pos WRITE setPos)
48 Q_PROPERTY(int animPath READ fakePath WRITE updatePathAnimate)
50 Q_PROPERTY(autonum::sequentialNumbers sequenceNum READ sequenceNum WRITE setSequenceNum)
51
52 signals:
54
55 public:
57 ~Conductor() override;
58
59 bool isValid() const;
60
61 private:
63
64 public:
65 enum { Type = UserType + 1001 };
67
70
71 public:
78 int type() const override { return Type; }
79 Diagram *diagram() const;
81 QUuid uuid() const {return m_uuid;}
82 void newUuid() {m_uuid = QUuid::createUuid(); m_persist_uuid = true;} //create new uuid for this conductor
83 void updatePath(const QRectF & = QRectF());
84
85 //This method do nothing, it's only made to be used with Q_PROPERTY
86 //It's used to anim the path when is change
87 void updatePathAnimate(const int = 1) {updatePath();}
88 int fakePath() {return 1;}
89
90 void paint(
91 QPainter *,
92 const QStyleOptionGraphicsItem *,
93 QWidget *) override;
94 QRectF boundingRect() const override;
95 QPainterPath shape() const override;
96 virtual QPainterPath nearShape() const;
97 qreal length() const;
99 QPointF posForText(Qt::Orientations &flag);
100 void refreshText();
101 void setPath(const QPainterPath &path);
102 QPainterPath path() const;
103
104 public:
105 static bool valideXml (QDomElement &);
106 bool fromXml (QDomElement &);
107 QDomElement toXml (
108 QDomDocument &,
109 QHash<Terminal *,
110 int> &) const;
111 private:
112 bool pathFromXml(const QDomElement &);
113
114 public:
115 QVector <QPointF> handlerPoints() const;
116 const QList<ConductorSegment *> segmentsList() const;
117
119 const ConductorProperties &property,
120 bool only_text = false);
121 void setProperties(const ConductorProperties &property);
123
124 void setProfile(const ConductorProfile &, Qt::Corner);
125 ConductorProfile profile(Qt::Corner) const;
129 virtual Highlight highlight() const;
130 virtual void setHighlighted(Highlight);
131 QSet<Conductor *> relatedPotentialConductors(
132 const bool all_diagram = true,
133 QList <Terminal *> *t_list=nullptr);
135 void editProperty ();
136
142
143 QList<QPointF> junctions() const;
144
145 private:
147 QString old_formula, QString new_formula);
149
150 public:
151 void setFreezeLabel(bool freeze);
152
153 public slots:
155
156 protected:
158 QGraphicsSceneMouseEvent *event) override;
159 void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
161 QGraphicsSceneMouseEvent *event) override;
162 void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
163 void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
164 QVariant itemChange(
165 GraphicsItemChange, const QVariant &) override;
166 bool sceneEventFilter(
167 QGraphicsItem *watched, QEvent *event) override;
168
169 private:
170 void adjustHandlerPos();
171
174 QGraphicsSceneMouseEvent *event);
177 QGraphicsSceneMouseEvent *event);
180 QGraphicsSceneMouseEvent *event);
181 void addHandler();
182 void removeHandler();
183
184
185 QVector<QetGraphicsHandlerItem *> m_handler_vector;
210 bool m_freeze_label = false;
211 QUuid m_uuid;
215 bool m_persist_uuid = true;
216
218 static QPen conductor_pen;
219 static QBrush conductor_brush;
221 QPainterPath m_path;
222
223 private:
224 void segmentsToPath();
225 void saveProfile(bool = true);
226 void generateConductorPath(const QPointF &, Qet::Orientation, const QPointF &, Qet::Orientation);
227 void updateConductorPath(const QPointF &, Qet::Orientation, const QPointF &, Qet::Orientation);
229 QList<QPointF> segmentsToPoints() const;
230 QList<ConductorBend> bends() const;
231
232 void pointsToSegments(const QList<QPointF>&);
233 Qt::Corner currentPathType() const;
234 void deleteSegments();
235 static int getCoeff(const qreal &, const qreal &);
236 static int getSign(const qreal &);
237 QHash<ConductorSegmentProfile *, qreal> shareOffsetBetweenSegments(const qreal &offset, const QList<ConductorSegmentProfile *> &, const qreal & = 0.01) const;
238 static QPointF extendTerminal(const QPointF &, Qet::Orientation, qreal = 10);
239 static Qt::Corner movementType(const QPointF &, const QPointF &);
240 static QPointF movePointIntoPolygon(const QPointF &, const QPainterPath &);
241};
242
243Conductor * longestConductorInPotential (Conductor *conductor, bool all_diagram = false);
244QList <Conductor *> relatedConductors (const Conductor *conductor);
245
246
247//return true if @a is between or at @b and @c.
248template <typename T>
249bool isBetween (const T a, const T b, const T c) {
250 return (b <= c)? (a >= b && a <= c) : (a <= b && a >= c);
251}
252
253#endif
Definition conductor.h:44
bool has_to_save_profile
Whether the current profile should be saved as soon as possible.
Definition conductor.h:203
autonum::sequentialNumbers m_autoNum_seq
Definition conductor.h:148
void setSequenceNum(const autonum::sequentialNumbers &sn)
Definition conductor.cpp:1782
bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override
Conductor::sceneEventFilter.
Definition conductor.cpp:739
bool pathFromXml(const QDomElement &)
Conductor::pathFromXml Generate the path (of the line) from xml file by checking the segments in the ...
Definition conductor.cpp:1140
static QPen conductor_pen
QPen et QBrush objects used to draw conductors.
Definition conductor.h:218
int moved_point
Definition conductor.h:196
QETDiagramEditor * diagramEditor() const
Conductor::diagramEditor.
Definition conductor.cpp:1762
bool isValid() const
Conductor::isValid.
Definition conductor.cpp:154
void setProperties(const ConductorProperties &property)
Conductor::setProperties Set property as current property of conductor.
Definition conductor.cpp:1600
qreal length() const
Conductor::length.
Definition conductor.cpp:1256
void newUuid()
Definition conductor.h:82
void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override
Conductor::hoverEnterEvent Manage the hover enter event.
Definition conductor.cpp:675
ConductorProfile profile(Qt::Corner) const
Definition conductor.cpp:1504
Diagram * diagram() const
Definition conductor.cpp:586
uint segmentsCount(QET::ConductorSegmentType=QET::Both) const
Definition conductor.cpp:945
void handlerMouseReleaseEvent(QetGraphicsHandlerItem *qghi, QGraphicsSceneMouseEvent *event)
Conductor::handlerMouseReleaseEvent.
Definition conductor.cpp:851
void updatePathAnimate(const int=1)
Definition conductor.h:87
QPainterPath path() const
Definition conductor.cpp:1553
QUuid uuid() const
Definition conductor.h:81
void generateConductorPath(const QPointF &, Qet::Orientation, const QPointF &, Qet::Orientation)
Definition conductor.cpp:362
void deleteSegments()
Supprime les segments.
Definition conductor.cpp:2008
QDomElement toXml(QDomDocument &, QHash< Terminal *, int > &) const
Conductor::toXml Exporte les caracteristiques du conducteur sous forme d'une element XML.
Definition conductor.cpp:1057
void pointsToSegments(const QList< QPointF > &)
Definition conductor.cpp:989
int m_vector_index
Definition conductor.h:186
ConductorProperties properties
Definition conductor.h:49
ConductorProfilesGroup profiles() const
Definition conductor.cpp:1984
int type() const override
type Enable the use of qgraphicsitem_cast to safely cast a QGraphicsItem into a conductor.
Definition conductor.h:78
ConductorProfilesGroup conductor_profiles
Definition conductor.h:206
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override
Conductor::mouseReleaseEvent.
Definition conductor.cpp:664
QVariant itemChange(GraphicsItemChange, const QVariant &) override
Conductor::itemChange.
Definition conductor.cpp:698
ConductorProperties m_properties
Functional properties.
Definition conductor.h:189
QPointF pos
Definition conductor.h:47
Terminal * terminal1
Definition conductor.h:68
void updateConductorPath(const QPointF &, Qet::Orientation, const QPointF &, Qet::Orientation)
Definition conductor.cpp:223
QRectF boundingRect() const override
Conductor::boundingRect.
Definition conductor.cpp:907
static bool pen_and_brush_initialized
Definition conductor.h:220
void displayedTextChanged()
Conductor::displayedTextChanged Update the properties (text) of this conductor and other conductors a...
Definition conductor.cpp:1669
virtual QPainterPath nearShape() const
Conductor::nearShape.
Definition conductor.cpp:933
ConductorSegment * middleSegment()
Definition conductor.cpp:1263
int animPath
Definition conductor.h:48
bool fromXml(QDomElement &)
Conductor::fromXml Load the conductor and its information from xml element.
Definition conductor.cpp:1007
Conductor(Terminal *, Terminal *)
Conductor::Conductor Default constructor.
Definition conductor.cpp:80
QSet< Conductor * > relatedPotentialConductors(const bool all_diagram=true, QList< Terminal * > *t_list=nullptr)
Conductor::relatedPotentialConductors Return all conductors at the same potential of this conductor,...
Definition conductor.cpp:1710
void setProfiles(const ConductorProfilesGroup &)
Conductor::setProfiles.
Definition conductor.cpp:1993
void setPath(const QPainterPath &path)
Definition conductor.cpp:1543
void setFreezeLabel(bool freeze)
Conductor::setFreezeLabel Freeze this conductor label if true Unfreeze this conductor label if false.
Definition conductor.cpp:2122
bool modified_path
Whether the conductor was manually modified by users.
Definition conductor.h:201
static QPointF extendTerminal(const QPointF &, Qet::Orientation, qreal=10)
Conductor::extendTerminal.
Definition conductor.cpp:469
static int getSign(const qreal &)
Definition conductor.cpp:1477
int fakePath()
Definition conductor.h:88
Highlight must_highlight_
Define whether and how the conductor should be highlighted.
Definition conductor.h:208
QHash< ConductorSegmentProfile *, qreal > shareOffsetBetweenSegments(const qreal &offset, const QList< ConductorSegmentProfile * > &, const qreal &=0.01) const
Definition conductor.cpp:302
qreal m_previous_z_value
Definition conductor.h:197
Terminal * terminal2
Definition conductor.h:69
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override
Conductor::hoverLeaveEvent Manage the mouse leave event.
Definition conductor.cpp:686
virtual void setHighlighted(Highlight)
Definition conductor.cpp:1659
static int getCoeff(const qreal &, const qreal &)
Definition conductor.cpp:1469
Highlight
Definition conductor.h:66
@ None
Definition conductor.h:66
@ Normal
Definition conductor.h:66
@ Alert
Definition conductor.h:66
void adjustHandlerPos()
Conductor::adjustHandlerPos Adjust the position of the handler item.
Definition conductor.cpp:782
QList< QPointF > segmentsToPoints() const
Definition conductor.cpp:960
QPainterPath shape() const override
Conductor::shape.
Definition conductor.cpp:918
QVector< QPointF > handlerPoints() const
Conductor::handlerPoints.
Definition conductor.cpp:1219
bool m_valid
Definition conductor.h:209
void setPropertyToPotential(const ConductorProperties &property, bool only_text=false)
Conductor::setPropertiesToPotential.
Definition conductor.cpp:1569
Qt::Corner currentPathType() const
Definition conductor.cpp:1978
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override
Conductor::mouseDoubleClickEvent Manage the mouse double click.
Definition conductor.cpp:642
void setProfile(const ConductorProfile &, Qt::Corner)
Definition conductor.cpp:1486
ConductorTextItem * m_text_item
Text input for non simple, non-singleline conductors.
Definition conductor.h:191
static Qt::Corner movementType(const QPointF &, const QPointF &)
Definition conductor.cpp:1967
@ Type
Definition conductor.h:65
bool m_freeze_label
Definition conductor.h:210
autonum::sequentialNumbers & rSequenceNum()
Definition conductor.h:139
QPointF posForText(Qt::Orientations &flag)
Conductor::posForText Calculate and return the better pos for text.
Definition conductor.cpp:1287
void removeHandler()
Conductor::removeHandler Remove the handlers of this item.
Definition conductor.cpp:894
void calculateTextItemPosition()
Conductor::calculateTextItemPosition Move the text at middle of conductor (if is vertical or horizont...
Definition conductor.cpp:1350
void setUpConnectionForFormula(QString old_formula, QString new_formula)
Conductor::setUpConnectionForFormula setup connection according to the variable of formula.
Definition conductor.cpp:1794
bool m_mouse_over
Definition conductor.h:187
autonum::sequentialNumbers sequenceNum() const
Definition conductor.h:137
QUuid m_uuid
Definition conductor.h:211
const QList< ConductorSegment * > segmentsList() const
Definition conductor.cpp:1237
QVector< QetGraphicsHandlerItem * > m_handler_vector
Definition conductor.h:185
autonum::sequentialNumbers sequenceNum
Definition conductor.h:50
QPointF before_mov_text_pos_
Definition conductor.h:199
void saveProfile(bool=true)
Definition conductor.cpp:1447
void editProperty()
Conductor::editProperty.
Definition conductor.cpp:1777
ConductorSegment * m_moved_segment
Definition conductor.h:198
ConductorSegment * segments
Segments composing the conductor.
Definition conductor.h:193
void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) override
Definition conductor.cpp:501
virtual Highlight highlight() const
Definition conductor.cpp:1651
ConductorTextItem * textItem() const
Definition conductor.cpp:594
void handlerMouseMoveEvent(QetGraphicsHandlerItem *qghi, QGraphicsSceneMouseEvent *event)
Conductor::handlerMouseMoveEvent.
Definition conductor.cpp:823
QPainterPath m_path
Definition conductor.h:221
QList< QPointF > junctions() const
Definition conductor.cpp:1838
bool m_persist_uuid
Definition conductor.h:215
void segmentsToPath()
Conductor::segmentsToPath Generate the QPainterPath from the list of points.
Definition conductor.cpp:182
void propertiesChange()
bool m_moving_segment
Attributes related to mouse interaction.
Definition conductor.h:195
void refreshText()
Conductor::refreshText Refresh the text of this conductor. recalculate and set the text according to ...
Definition conductor.cpp:1514
QList< ConductorBend > bends() const
Definition conductor.cpp:1909
static QPointF movePointIntoPolygon(const QPointF &, const QPainterPath &)
Conductor::movePointIntoPolygon.
Definition conductor.cpp:2024
void handlerMousePressEvent(QetGraphicsHandlerItem *qghi, QGraphicsSceneMouseEvent *event)
Conductor::handlerMousePressEvent.
Definition conductor.cpp:800
static bool valideXml(QDomElement &)
Definition conductor.cpp:604
void updatePath(const QRectF &=QRectF())
Definition conductor.cpp:166
static QBrush conductor_brush
Definition conductor.h:219
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
Conductor::mousePressEvent Manage the mouse press event.
Definition conductor.cpp:652
void addHandler()
Conductor::addHandler Add handlers for this item.
Definition conductor.cpp:874
Definition conductorprofile.h:28
The ConductorProperties class This class represents the functional properties of a particular conduct...
Definition conductorproperties.h:68
Definition conductorsegment.h:25
Definition conductorsegmentprofile.h:26
Definition conductortextitem.h:30
The Diagram class This class represents an electric diagram. It manages its various child elements,...
Definition diagram.h:54
Definition element.h:44
Definition numerotationcontext.h:31
Definition qetdiagrameditor.h:53
The QetGraphicsHandlerItem class This graphics item represents a point, destined to be used as an han...
Definition qetgraphicshandleritem.h:37
Orientation
Orientation (used for electrical elements and their terminals).
Definition qet.h:211
The Terminal class This class represents a terminal of an electrical element, i.e....
Definition terminal.h:37
Definition assignvariables.h:35
QPair< QPointF, Qt::Corner > ConductorBend
Definition conductor.h:37
bool isBetween(const T a, const T b, const T c)
Definition conductor.h:249
Conductor * longestConductorInPotential(Conductor *conductor, bool all_diagram=false)
longestConductorInPotential
Definition conductor.cpp:2092
QList< Conductor * > relatedConductors(const Conductor *conductor)
relatedConductors
Definition conductor.cpp:2109
QHash< Qt::Corner, ConductorProfile > ConductorProfilesGroup
Definition conductor.h:38
ConductorSegmentType
Known kinds of conductor segments.
Definition qet.h:85
@ Both
Invalid segment.
Definition qet.h:88
Definition assignvariables.cpp:32