Power System Platform  2026w11a-beta
Loading...
Searching...
No Matches
Load Class Reference

Loas shunt power element. More...

#include <Load.h>

Inheritance diagram for Load:
Collaboration diagram for Load:

Public Member Functions

 Load (wxString name)
 
virtual ElementGetCopy ()
 Get a the element copy.
 
virtual bool AddParent (Element *parent, wxPoint2DDouble position)
 Add a parent to the element. This method must be used on power elements that connect to a bus, so the parent must be a bus. The element basic points are calculated in this method, so apply this when the element is being inserted.
 
virtual void DrawDC (wxPoint2DDouble translation, double scale, wxGraphicsContext *gc) const
 Draw the element using GDI+.
 
virtual void DrawDC (wxPoint2DDouble translation, double scale, wxDC &dc) const
 Draw the element using wxDC.
 
virtual void Rotate (bool clockwise=true)
 Rotate the element.
 
virtual bool GetContextMenu (wxMenu &menu)
 Get the element contex menu.
 
virtual wxString GetTipText () const
 Get the tip text.
 
virtual bool ShowForm (wxWindow *parent, Element *element, wxWindow *workspace=nullptr)
 Show element data form.
 
LoadElectricalData GetElectricalData ()
 
LoadElectricalDataGetElectricalDataRef ()
 
LoadElectricalData GetPUElectricalData (double systemPowerBase)
 
void SetElectricalData (const LoadElectricalData &electricalData)
 
virtual bool GetPlotData (ElementPlotData &plotData, PlotStudy study=PlotStudy::STABILITY)
 Fill the plot data.
 
virtual rapidxml::xml_node * SaveElement (rapidxml::xml_document<> &doc, rapidxml::xml_node<> *elementListNode)
 
virtual bool OpenElement (rapidxml::xml_node<> *elementNode, std::vector< Element * > parentList)
 
- Public Member Functions inherited from Shunt
virtual bool Contains (wxPoint2DDouble position) const
 Checks if the element contains a position.
 
virtual bool Intersects (wxRect2DDouble rect) const
 Check if the element's rect intersects other rect.
 
virtual void Move (wxPoint2DDouble position)
 Move the element other position.
 
virtual void MoveNode (Element *element, wxPoint2DDouble position)
 Move a node. StartMove(wxPoint2DDouble position) before start moving.
 
virtual void StartMove (wxPoint2DDouble position)
 Update the element attributes related to the movement.
 
virtual void RotateNode (Element *parent, bool clockwise=true)
 Rotate a node.
 
virtual void RemoveParent (Element *parent)
 Remove a parent.
 
virtual bool NodeContains (wxPoint2DDouble position)
 Check if a node contains a point. If contains, set the attributes related to node movement.
 
virtual bool SetNodeParent (Element *parent)
 Set a perent to the node. If all conditions are met, a new parent are added to the element and the points related to the nodes will be calculated.
 
virtual void UpdateNodes ()
 Update the nodes according to the parents. If a parent is removed, use this method.
 
- Public Member Functions inherited from PowerElement
 PowerElement ()
 Constructor.
 
virtual ~PowerElement ()
 Destructor.
 
virtual wxPoint2DDouble GetSwitchPoint (Element *parent, wxPoint2DDouble parentPoint, wxPoint2DDouble secondPoint) const
 Get the correct switch position.
 
virtual bool SwitchesContains (wxPoint2DDouble position) const
 Check if switch contains position.
 
virtual void UpdateSwitches ()
 Update the switch position.
 
virtual void DrawDCSwitches (wxGraphicsContext *gc) const
 Draw switch.
 
virtual void DrawDCSwitches (wxDC &dc) const
 
virtual void CalculatePowerFlowPts (std::vector< wxPoint2DDouble > edges)
 Calculate the points of the power flow arrows.
 
virtual void DrawDCPowerFlowPts (wxGraphicsContext *gc) const
 Draw power flow arrows.
 
virtual void DrawDCPowerFlowPts (wxDC &dc) const
 
virtual void SetNominalVoltage (std::vector< double > nominalVoltage, std::vector< ElectricalUnit > nominalVoltageUnit)
 Set nominal voltage of the element.
 
virtual void SetSwitchingData (SwitchingData data)
 Set the switching data of the element.
 
virtual SwitchingData GetSwitchingData ()
 Returns the switching data of the element.
 
virtual void SetPowerFlowDirection (PowerFlowDirection pfDirection)
 Set the direction of the power flow.
 
virtual PowerFlowDirection GetPowerFlowDirection () const
 Return the direction of the power flow.
 
virtual bool HaveDynamicEvent () const
 Check if the power element have dynamic event.
 
virtual void SetDynamicEvent (bool dynEvent=true)
 Set if the power element have dynamic event.
 
virtual double GetValueFromUnit (double value, ElectricalUnit valueUnit)
 
virtual void SaveCADProperties (rapidxml::xml_document<> &doc, rapidxml::xml_node<> *elementNode)
 
virtual void SaveSwitchingData (rapidxml::xml_document<> &doc, rapidxml::xml_node<> *electricalNode)
 
virtual bool OpenCADProperties (rapidxml::xml_node<> *elementNode, std::vector< Element * > parentList)
 
virtual bool OpenSwitchingData (rapidxml::xml_node<> *electricalNode)
 
- Public Member Functions inherited from Element
 Element ()
 Constructor.
 
virtual ~Element ()
 Destructor.
 
void SetDragging (bool dragging=true)
 Set if the element are being dragged.
 
void SetHeight (double height)
 Set element height.
 
void SetPosition (const wxPoint2DDouble position)
 Set the element position and update the rectangle.
 
void SetSelected (bool selected=true)
 Set element selection.
 
void SetWidth (double width)
 Set element width.
 
void SetAngle (double angle)
 Set element angle.
 
void ShowPickbox (bool showPickbox=true)
 Set if the pickbox is shown.
 
void SetBorderSize (double borderSize)
 Set the size of the border (shown in selected elements).
 
bool SetOnline (bool online=true)
 Set if the element is online or offline.
 
virtual void SetPointList (std::vector< wxPoint2DDouble > pointList)
 Set the list of points that connect the element to the bus.
 
ElementType GetElementType ()
 
wxRect2DDouble GetRect () const
 Get the element rectangle.
 
wxPoint2DDouble GetPosition () const
 Get the element position.
 
bool IsDragging () const
 Checks if the element is being dragged.
 
double GetHeight () const
 Get the element height.
 
bool IsSelected () const
 Checks if the element is selected.
 
double GetWidth () const
 Get the element width.
 
double GetAngle () const
 Get the element angle.
 
double GetRotationAngle () const
 Get the angle of rotation.
 
bool IsPickboxShown () const
 Checks if the pickbox is shown.
 
bool IsOnline () const
 Checks if the element is online or offline.
 
virtual std::vector< wxPoint2DDouble > GetPointList () const
 Get the list of points that connect the element to bus.
 
virtual void AddParent (Element *parent)
 Add a parent to the element.
 
virtual void SetID (int id)
 Set the element ID.
 
virtual int GetID () const
 Get the element ID.
 
virtual void AddChild (Element *child)
 Add a child to the child list.
 
virtual void RemoveChild (Element *child)
 Remove a child from the list.
 
virtual void ReplaceChild (Element *oldChild, Element *newChild)
 Replace a child from the list.
 
virtual void AddPoint (wxPoint2DDouble point)
 Add point to the list of points that connect the element to the bus.
 
void SetParent (Element *parent, int num)
 
void SetChild (Element *child, int num)
 
virtual void ReplaceParent (Element *oldParent, Element *newParent)
 Replace a parent.
 
virtual bool PickboxContains (wxPoint2DDouble position)
 Check if a pickbox contains a point. If contains the attributes related to pickbox movement will be calculated.
 
virtual void MovePickbox (wxPoint2DDouble position)
 Move the pickbox.
 
virtual wxCursor GetBestPickboxCursor () const
 Get the best cursor to shown to the user when the mouse is above a pickbox.
 
virtual void ResetPickboxes ()
 Remove the pickboxes.
 
virtual void ResetNodes ()
 Remove the active nodes.
 
virtual wxPoint2DDouble WorldToScreen (wxPoint2DDouble translation, double scale, double offsetX=0.0, double offsetY=0.0) const
 Convert the element position to screen position.
 
virtual wxPoint2DDouble WorldToScreen (wxPoint2DDouble position, wxPoint2DDouble translation, double scale, double offsetX=0.0, double offsetY=0.0) const
 Convert a generic position to screen position.
 
virtual bool RotatedRectanglesIntersects (wxRect2DDouble rect1, wxRect2DDouble rect2, double angle1, double angle2) const
 Check if two roteted rectangles intersect.
 
virtual void DrawDCRectangle (wxPoint2DDouble position, double width, double height, double angle, wxDC &dc) const
 Draw a circle.
 
virtual void DrawDCRoundedRectRotated (wxDC &dc, const wxPoint2DDouble &center, double width, double height, double radius, double angleDeg, int arcSegments=8) const
 
virtual void DrawDCCircle (wxPoint2DDouble position, double radius, int numSegments, wxGraphicsContext *gc) const
 Draw a circle using device context.
 
virtual void DrawDCCircle (wxPoint2DDouble position, double radius, wxDC &dc) const
 
virtual void DrawDCArc (wxPoint2DDouble position, double radius, double initAngle, double finalAngle, int numSegments, wxGraphicsContext *gc) const
 
virtual void DrawDCArc (wxPoint2DDouble position, double radius, double initAngle, double finalAngle, wxDC &dc) const
 
virtual void DrawDCTriangle (std::vector< wxPoint2DDouble > points, wxGraphicsContext *gc) const
 Draw rectangle.
 
virtual void DrawDCTriangle (std::vector< wxPoint > points, wxDC &dc) const
 
virtual void DrawDCPickbox (wxPoint2DDouble position, wxGraphicsContext *gc) const
 Draw a point.
 
virtual wxPoint2DDouble RotateAtPosition (wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
 Rotate a point as element position being the origin.
 
virtual wxPoint2DDouble RotateLocal (wxPoint2DDouble local, double angleDeg) const
 
virtual wxPoint RotateAround (const wxPoint2DDouble &p, const wxPoint2DDouble &center, double angleDeg) const
 
virtual std::vector< Element * > GetParentList () const
 Get the parent list.
 
virtual std::vector< Element * > GetChildList () const
 Get the Child list.
 
virtual void CalculateBoundaries (wxPoint2DDouble &leftUp, wxPoint2DDouble &rightBottom) const
 Calculate the element boundaries.
 
virtual void GeneralMenuItens (wxMenu &menu)
 Insert general itens to context menu.
 
virtual double PointToLineDistance (wxPoint2DDouble point, int *segmentNumber=nullptr) const
 Calculate the distance between a line (formed by point list) and a point.
 
bool IsInserted () const
 Check if the element is properly inserted in the workspace.
 
void SetInserted (bool inserted=true)
 Set if the element is properly inserted in the workspace.
 
virtual bool OpenElement (rapidxml::xml_node<> *elementNode)
 
void SaveCADProperties (rapidxml::xml_document<> &doc, rapidxml::xml_node<> *elementNode)
 
bool OpenCADProperties (rapidxml::xml_node<> *elementNode)
 

Protected Attributes

std::vector< wxPoint2DDouble > m_triangPts
 
LoadElectricalData m_electricalData
 
- Protected Attributes inherited from PowerElement
SwitchingData m_swData
 
std::vector< std::vector< wxPoint2DDouble > > m_powerFlowArrow
 
PowerFlowDirection m_pfDirection = PowerFlowDirection::PF_NONE
 
wxColour m_busColour
 
wxColour m_onlineElementColour
 
wxColour m_offlineElementColour
 
wxColour m_closedSwitchColour
 
wxColour m_openedSwitchColour
 
wxColour m_powerFlowArrowColour
 
wxColour m_dynamicEventColour
 
bool m_dynEvent = false
 
- Protected Attributes inherited from Element
ElementType m_elementType = ElementType::TYPE_NONE
 
int m_elementID = 0
 
std::vector< Element * > m_parentList
 
std::vector< Element * > m_childList
 
wxRect2DDouble m_rect
 
wxPoint2DDouble m_position
 
double m_width = 0.0
 
double m_height = 0.0
 
double m_angle = 0.0
 
double m_borderSize = 2.0
 
double m_rotationAngle = 45.0
 
double m_switchSize = 10.0
 
std::vector< wxRect2DDouble > m_switchRect
 
bool m_selected = false
 
bool m_dragging = false
 
bool m_showPickbox = false
 
bool m_inserted = false
 
int m_activePickboxID = ID_PB_NONE
 
int m_activeNodeID = 0
 
std::vector< wxPoint2DDouble > m_pointList
 
std::vector< wxPoint2DDouble > m_movePts
 
wxPoint2DDouble m_moveStartPt
 
wxPoint2DDouble m_movePos
 
bool m_online = true
 
wxColour m_selectionColour
 

Additional Inherited Members

- Static Public Member Functions inherited from Element
static bool DoubleFromString (wxWindow *parent, wxString strValue, double &value, wxString errorMsg)
 Get a double value from a string. Show a error message if the conversion fail.
 
static bool IntFromString (wxWindow *parent, wxString strValue, int &value, wxString errorMsg)
 Convert a string to int. Show a error message if the conversion fail.
 
static wxString StringFromDouble (double value, int minDecimal=1, int maxDecimals=13)
 Convert a double value to string.
 
- Protected Member Functions inherited from Shunt
void UpdateSwitchesPosition ()
 
void UpdatePowerFlowArrowsPosition ()
 
void DrawDCGround (wxPoint2DDouble position, wxGraphicsContext *gc) const
 
void DrawDCGround (wxPoint2DDouble position, wxDC &dc) const
 

Detailed Description

Loas shunt power element.

Author
Thales Lima Oliveira thale.nosp@m.s@uf.nosp@m.u.br
Date
06/10/2017

Definition at line 73 of file Load.h.

Constructor & Destructor Documentation

◆ Load() [1/2]

Load::Load ( )

Definition at line 21 of file Load.cpp.

21 : Shunt()
22{
23 m_elementType = TYPE_LOAD;
24}
Abstract class for shunt power elements.
Definition Shunt.h:32

◆ Load() [2/2]

Load::Load ( wxString  name)

Definition at line 26 of file Load.cpp.

26 : Shunt()
27{
28 m_elementType = TYPE_LOAD;
29 m_electricalData.name = name;
30}

◆ ~Load()

Load::~Load ( )

Definition at line 32 of file Load.cpp.

32{}

Member Function Documentation

◆ AddParent()

bool Load::AddParent ( Element parent,
wxPoint2DDouble  position 
)
virtual

Add a parent to the element. This method must be used on power elements that connect to a bus, so the parent must be a bus. The element basic points are calculated in this method, so apply this when the element is being inserted.

Parameters
parentElement parent.
positionNode position in the parent.

Reimplemented from Element.

Definition at line 34 of file Load.cpp.

35{
36 if (parent) {
37 m_parentList.push_back(parent);
38 parent->AddChild(this);
39 wxPoint2DDouble parentPt =
40 parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
41 parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
42 parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
43
44 m_position = parentPt + wxPoint2DDouble(0.0, 100.0); // Shifts the position to the down of the bus.
45 m_width = m_height = 20.0;
46 m_rect = wxRect2DDouble(m_position.m_x - 10.0, m_position.m_y - 10.0, m_width, m_height);
47
48 m_pointList.push_back(parentPt);
49 m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_position));
50 m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -20.0));
51 m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -10.0));
52
53 m_triangPts.push_back(wxPoint2DDouble(-m_width / 2.0, -m_height / 2.0));
54 m_triangPts.push_back(wxPoint2DDouble(m_width / 2.0, -m_height / 2.0));
55 m_triangPts.push_back(wxPoint2DDouble(0.0, m_height / 2.0));
56
57 m_inserted = true;
58
59 wxRect2DDouble genRect(0, 0, 0, 0);
60 m_switchRect.push_back(genRect); // Push a general rectangle.
63 UpdatePowerFlowArrowsPosition();
64
65 return true;
66 }
67 return false;
68}
wxPoint2DDouble GetPosition() const
Get the element position.
Definition Element.h:186
double GetAngle() const
Get the element angle.
Definition Element.h:211
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees=true) const
Rotate a point as element position being the origin.
Definition Element.cpp:223
virtual void AddChild(Element *child)
Add a child to the child list.
Definition Element.cpp:494
virtual void UpdateSwitches()
Update the switch position.
virtual wxPoint2DDouble GetSwitchPoint(Element *parent, wxPoint2DDouble parentPoint, wxPoint2DDouble secondPoint) const
Get the correct switch position.
Here is the call graph for this function:

◆ DrawDC() [1/2]

void Load::DrawDC ( wxPoint2DDouble  translation,
double  scale,
wxDC &  dc 
) const
virtual

Draw the element using wxDC.

Parameters
translationTranslation of the system.
scaleScale of the system.
dcDevice context.

Reimplemented from Element.

Definition at line 200 of file Load.cpp.

201{
202 wxColour elementColour;
203 if (m_online) {
204 if (m_dynEvent)
205 elementColour = m_dynamicEventColour;
206 else
207 elementColour = m_onlineElementColour;
208 }
209 else
210 elementColour = m_offlineElementColour;
211
212 std::vector<wxPoint> pointListInt;
213 for (auto& pt : m_pointList) {
214 pointListInt.emplace_back(static_cast<int>(pt.m_x), static_cast<int>(pt.m_y));
215 }
216 wxPoint pos = wxPoint(static_cast<int>(m_position.m_x), static_cast<int>(m_position.m_y));
217
218 if (m_inserted) {
219 // Draw Selection (layer 1).
220 if (m_selected) {
221 dc.SetPen(wxPen(m_selectionColour, 2 + m_borderSize * 2.0));
222 dc.SetBrush(*wxTRANSPARENT_BRUSH);
223
224 dc.DrawLines(pointListInt.size(), &pointListInt[0]);
225
226 dc.SetPen(*wxTRANSPARENT_PEN);
227 dc.SetBrush(wxBrush(m_selectionColour));
228
229 wxPoint2DDouble p;
230 wxPoint selTriangPts[3];
231 p = m_triangPts[0] + m_position + wxPoint2DDouble(-m_borderSize / scale, -m_borderSize / scale);
232 selTriangPts[0] = RotateAround(p, m_position, m_angle);
233 p = m_triangPts[1] + m_position + wxPoint2DDouble(m_borderSize / scale, -m_borderSize / scale);
234 selTriangPts[1] = RotateAround(p, m_position, m_angle);
235 p = m_triangPts[2] + m_position + wxPoint2DDouble(0.0, m_borderSize / scale);
236 selTriangPts[2] = RotateAround(p, m_position, m_angle);
237
238 dc.DrawPolygon(3, selTriangPts);
239
240 // Draw node selection.
241 DrawDCCircle(m_pointList[0], 5.0 + m_borderSize / scale, dc);
242 }
243
244 // Draw Load (layer 2).
245 dc.SetPen(wxPen(elementColour, 2));
246 dc.SetBrush(*wxTRANSPARENT_BRUSH);
247 dc.DrawLines(pointListInt.size(), &pointListInt[0]);
248
249 // Draw node.
250 dc.SetPen(*wxTRANSPARENT_PEN);
251 dc.SetBrush(wxBrush(elementColour));
252 DrawDCCircle(m_pointList[0], 5.0, dc);
253
254 DrawDCSwitches(dc);
256
257 wxPoint2DDouble p;
258 wxPoint triangPts[3];
259
260 //std::vector<wxPoint2DDouble> triangPts;
261 for (int i = 0; i < 3; i++) {
262 p = m_triangPts[i] + m_position;
263 triangPts[i] = RotateAround(p, m_position, m_angle);
264 }
265 dc.SetPen(*wxTRANSPARENT_PEN);
266 dc.SetBrush(wxBrush(elementColour));
267 dc.DrawPolygon(3, triangPts);
268 }
269}
virtual void DrawDCCircle(wxPoint2DDouble position, double radius, int numSegments, wxGraphicsContext *gc) const
Draw a circle using device context.
Definition Element.cpp:168
virtual void DrawDCSwitches(wxGraphicsContext *gc) const
Draw switch.
virtual void DrawDCPowerFlowPts(wxGraphicsContext *gc) const
Draw power flow arrows.
Here is the call graph for this function:

◆ DrawDC() [2/2]

void Load::DrawDC ( wxPoint2DDouble  translation,
double  scale,
wxGraphicsContext *  gc 
) const
virtual

Draw the element using GDI+.

Parameters
translationTranslation of the system.
scaleScale of the system.
gcGraphics context

Reimplemented from Element.

Definition at line 131 of file Load.cpp.

132{
133 wxColour elementColour;
134 if (m_online) {
135 if (m_dynEvent)
136 elementColour = m_dynamicEventColour;
137 else
138 elementColour = m_onlineElementColour;
139 }
140 else
141 elementColour = m_offlineElementColour;
142
143 if (m_inserted) {
144 // Draw Selection (layer 1).
145 if (m_selected) {
146 gc->SetPen(wxPen(m_selectionColour, 2 + m_borderSize * 2.0));
147 gc->SetBrush(*wxTRANSPARENT_BRUSH);
148
149 gc->StrokeLines(m_pointList.size(), &m_pointList[0]);
150
151 gc->SetPen(*wxTRANSPARENT_PEN);
152 gc->SetBrush(wxBrush(m_selectionColour));
153
154 std::vector<wxPoint2DDouble> selTriangPts;
155 selTriangPts.push_back(m_triangPts[0] + m_position +
156 wxPoint2DDouble(-m_borderSize / scale, -m_borderSize / scale));
157 selTriangPts.push_back(m_triangPts[1] + m_position +
158 wxPoint2DDouble(m_borderSize / scale, -m_borderSize / scale));
159 selTriangPts.push_back(m_triangPts[2] + m_position + wxPoint2DDouble(0.0, m_borderSize / scale));
160
161 // Push the current matrix on stack.
162 gc->PushState();
163 // Rotate the matrix around the object position.
164 gc->Translate(m_position.m_x, m_position.m_y);
165 gc->Rotate(wxDegToRad(m_angle));
166 gc->Translate(-m_position.m_x, -m_position.m_y);
167 DrawDCTriangle(selTriangPts, gc);
168 gc->PopState();
169
170 // Draw node selection.
171 DrawDCCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, gc);
172 }
173
174 // Draw Load (layer 2).
175 gc->SetPen(wxPen(elementColour, 2));
176 gc->SetBrush(*wxTRANSPARENT_BRUSH);
177 gc->StrokeLines(m_pointList.size(), &m_pointList[0]);
178
179 // Draw node.
180 gc->SetPen(*wxTRANSPARENT_PEN);
181 gc->SetBrush(wxBrush(elementColour));
182 DrawDCCircle(m_pointList[0], 5.0, 10, gc);
183
184 DrawDCSwitches(gc);
186
187 std::vector<wxPoint2DDouble> triangPts;
188 for (int i = 0; i < 3; i++) { triangPts.push_back(m_triangPts[i] + m_position); }
189 gc->PushState();
190 gc->Translate(m_position.m_x, m_position.m_y);
191 gc->Rotate(wxDegToRad(m_angle));
192 gc->Translate(-m_position.m_x, -m_position.m_y);
193 gc->SetPen(*wxTRANSPARENT_PEN);
194 gc->SetBrush(wxBrush(elementColour));
195 DrawDCTriangle(triangPts, gc);
196 gc->PopState();
197 }
198}
virtual void DrawDCTriangle(std::vector< wxPoint2DDouble > points, wxGraphicsContext *gc) const
Draw rectangle.
Definition Element.cpp:204
Here is the call graph for this function:

◆ GetContextMenu()

bool Load::GetContextMenu ( wxMenu &  menu)
virtual

Get the element contex menu.

Parameters
menumenu that will be inserted the element itens.
Returns
True if was possible to build the menu, false otherwise.

Reimplemented from Element.

Definition at line 284 of file Load.cpp.

285{
286 menu.Append(ID_EDIT_ELEMENT, _("Edit Load"));
287
288 wxMenu* textMenu = new wxMenu();
289
290 textMenu->Append(ID_TXT_NAME, _("Name"));
291 textMenu->Append(ID_TXT_ACTIVE_POWER, _("Active power"));
292 textMenu->Append(ID_TXT_REACTIVE_POWER, _("Reactive power"));
293 textMenu->SetClientData(menu.GetClientData());
294
295
296 menu.AppendSubMenu(textMenu, _("Add text"));
297
298 GeneralMenuItens(menu);
299 return true;
300}
@ ID_EDIT_ELEMENT
Definition Element.h:75
virtual void GeneralMenuItens(wxMenu &menu)
Insert general itens to context menu.
Definition Element.cpp:388
Here is the call graph for this function:

◆ GetCopy()

Element * Load::GetCopy ( )
virtual

Get a the element copy.

Returns
Copy of the element.

Reimplemented from Element.

Definition at line 361 of file Load.cpp.

362{
363 Load* copy = new Load();
364 *copy = *this;
365 return copy;
366}
Loas shunt power element.
Definition Load.h:74

◆ GetElectricalData()

LoadElectricalData Load::GetElectricalData ( )
inline

Definition at line 89 of file Load.h.

89{ return m_electricalData; }

◆ GetElectricalDataRef()

LoadElectricalData & Load::GetElectricalDataRef ( )
inline

Definition at line 90 of file Load.h.

90{ return m_electricalData; }

◆ GetPlotData()

bool Load::GetPlotData ( ElementPlotData plotData,
PlotStudy  study = PlotStudy::STABILITY 
)
virtual

Fill the plot data.

Parameters
plotDataPlot data to be filled.
Returns
true if the plot data was successfully filled, false otherwise.

Reimplemented from PowerElement.

Definition at line 423 of file Load.cpp.

424{
425 if (!m_electricalData.plotLoad) return false;
426 plotData.SetName(m_electricalData.name);
427 plotData.SetCurveType(ElementPlotData::CurveType::CT_LOAD);
428
429 std::vector<double> absVoltage, activePower, reactivePower, current;
430 for (unsigned int i = 0; i < m_electricalData.voltageVector.size(); ++i) {
431 absVoltage.push_back(std::abs(m_electricalData.voltageVector[i]));
432 activePower.push_back(std::real(m_electricalData.electricalPowerVector[i]));
433 reactivePower.push_back(std::imag(m_electricalData.electricalPowerVector[i]));
434 current.push_back(std::abs(std::complex<double>(activePower[i], -reactivePower[i]) /
435 std::conj(m_electricalData.voltageVector[i])));
436 }
437
438 plotData.AddData(absVoltage, _("Voltage"));
439 plotData.AddData(activePower, _("Active power"));
440 plotData.AddData(reactivePower, _("Reactive power"));
441 plotData.AddData(current, _("Current"));
442
443 return true;
444}

◆ GetPUElectricalData()

LoadElectricalData Load::GetPUElectricalData ( double  systemPowerBase)

Definition at line 315 of file Load.cpp.

316{
318
319 data.activePower = m_electricalData.activePower;
320 data.activePowerUnit = m_electricalData.activePowerUnit;
321
322 data.reactivePower = m_electricalData.reactivePower;
323 data.reactivePowerUnit = m_electricalData.reactivePowerUnit;
324
325 switch (data.activePowerUnit) {
327 data.activePower = data.activePower / systemPowerBase;
328 data.activePowerUnit = ElectricalUnit::UNIT_PU;
329 } break;
331 data.activePower = (data.activePower * 1e3) / systemPowerBase;
332 data.activePowerUnit = ElectricalUnit::UNIT_PU;
333 } break;
335 data.activePower = (data.activePower * 1e6) / systemPowerBase;
336 data.activePowerUnit = ElectricalUnit::UNIT_PU;
337 } break;
338 default:
339 break;
340 }
341 switch (data.reactivePowerUnit) {
343 data.reactivePower = data.reactivePower / systemPowerBase;
344 data.reactivePowerUnit = ElectricalUnit::UNIT_PU;
345 } break;
347 data.reactivePower = (data.reactivePower * 1e3) / systemPowerBase;
348 data.reactivePowerUnit = ElectricalUnit::UNIT_PU;
349 } break;
351 data.reactivePower = (data.reactivePower * 1e6) / systemPowerBase;
352 data.reactivePowerUnit = ElectricalUnit::UNIT_PU;
353 } break;
354 default:
355 break;
356 }
357
358 return data;
359}

◆ GetTipText()

wxString Load::GetTipText ( ) const
virtual

Get the tip text.

Returns
Tip text.

Reimplemented from Element.

Definition at line 368 of file Load.cpp.

369{
370 wxString tipText = m_electricalData.name;
371
372 // TODO: Avoid power calculation.
373 double activePower = m_electricalData.activePower;
374 double reactivePower = m_electricalData.reactivePower;
375 if (!m_online) {
376 activePower = 0.0;
377 reactivePower = 0.0;
378 }
379 if (m_online && m_electricalData.loadType == CONST_IMPEDANCE) {
380 std::complex<double> v = static_cast<Bus*>(m_parentList[0])->GetElectricalData().voltage;
381 reactivePower *= std::pow(std::abs(v), 2);
382 activePower *= std::pow(std::abs(v), 2);
383 }
384 tipText += "\n";
385 tipText += _("\nP = ") + wxString::FromDouble(activePower, 5);
386 switch (m_electricalData.activePowerUnit) {
388 tipText += _(" p.u.");
389 } break;
391 tipText += _(" W");
392 } break;
394 tipText += _(" kW");
395 } break;
397 tipText += _(" MW");
398 } break;
399 default:
400 break;
401 }
402 tipText += _("\nQ = ") + wxString::FromDouble(reactivePower, 5);
403 switch (m_electricalData.reactivePowerUnit) {
405 tipText += _(" p.u.");
406 } break;
408 tipText += _(" var");
409 } break;
411 tipText += _(" kvar");
412 } break;
414 tipText += _(" Mvar");
415 } break;
416 default:
417 break;
418 }
419
420 return tipText;
421}
Node for power elements. All others power elements are connected through this.
Definition Bus.h:86

◆ OpenElement()

bool Load::OpenElement ( rapidxml::xml_node<> *  elementNode,
std::vector< Element * >  parentList 
)
virtual

Reimplemented from PowerElement.

Definition at line 492 of file Load.cpp.

493{
494 if (!OpenCADProperties(elementNode, parentList)) return false;
495 // The load have to insert the points that define his triangle
496 m_triangPts.push_back(wxPoint2DDouble(-m_width / 2.0, -m_height / 2.0));
497 m_triangPts.push_back(wxPoint2DDouble(m_width / 2.0, -m_height / 2.0));
498 m_triangPts.push_back(wxPoint2DDouble(0.0, m_height / 2.0));
499
500 auto electricalProp = elementNode->first_node("ElectricalProperties");
501 if (!electricalProp) return false;
502
503 SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline"));
504 m_electricalData.name = electricalProp->first_node("Name")->value();
505 m_electricalData.activePower = XMLParser::GetNodeValueDouble(electricalProp, "ActivePower");
506 m_electricalData.activePowerUnit =
507 static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp, "ActivePower", "UnitID"));
508 m_electricalData.reactivePower = XMLParser::GetNodeValueDouble(electricalProp, "ReactivePower");
509 m_electricalData.reactivePowerUnit =
510 static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID"));
511 m_electricalData.loadType = static_cast<LoadType>(XMLParser::GetNodeValueInt(electricalProp, "LoadType"));
512 // Stability
513 auto stability = electricalProp->first_node("Stability");
514 if (stability) {
515 m_electricalData.plotLoad = XMLParser::GetNodeValueInt(stability, "PlotLoad");
516 m_electricalData.useCompLoad = XMLParser::GetNodeValueInt(stability, "UseCompositeLoad");
517 auto activePowerComp = stability->first_node("ActivePowerComposition");
518 m_electricalData.constImpedanceActive = XMLParser::GetNodeValueDouble(activePowerComp, "ConstantImpedance");
519 m_electricalData.constCurrentActive = XMLParser::GetNodeValueDouble(activePowerComp, "ConstantCurrent");
520 m_electricalData.constPowerActive = XMLParser::GetNodeValueDouble(activePowerComp, "ConstantPower");
521 auto reactivePowerComp = stability->first_node("ReactivePowerComposition");
522 m_electricalData.constImpedanceReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantImpedance");
523 m_electricalData.constCurrentReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantCurrent");
524 m_electricalData.constPowerReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantPower");
525 }
526
527 if (!OpenSwitchingData(electricalProp)) return false;
528 if (m_swData.swTime.size() != 0) SetDynamicEvent(true);
529
530 m_inserted = true;
531
532 return true;
533}
ElectricalUnit
Electrical units.
bool SetOnline(bool online=true)
Set if the element is online or offline.
Definition Element.cpp:378
virtual void SetDynamicEvent(bool dynEvent=true)
Set if the power element have dynamic event.
std::vector< double > swTime

◆ Rotate()

void Load::Rotate ( bool  clockwise = true)
virtual

Rotate the element.

Parameters
clockwiseTrue to rotate clockwise, false to rotate counter-clockwise.

Reimplemented from Element.

Definition at line 271 of file Load.cpp.

272{
273 double rotAngle = m_rotationAngle;
274 if (!clockwise) rotAngle = -m_rotationAngle;
275
276 m_angle += rotAngle;
277 if (m_angle >= 360 || m_angle <= -360) m_angle = 0.0;
278 m_pointList[2] = RotateAtPosition(m_pointList[2], rotAngle);
279 m_pointList[3] = RotateAtPosition(m_pointList[3], rotAngle);
280 UpdateSwitchesPosition();
281 UpdatePowerFlowArrowsPosition();
282}
Here is the call graph for this function:

◆ SaveElement()

rapidxml::xml_node * Load::SaveElement ( rapidxml::xml_document<> &  doc,
rapidxml::xml_node<> *  elementListNode 
)
virtual

Reimplemented from Element.

Definition at line 446 of file Load.cpp.

447{
448 auto elementNode = XMLParser::AppendNode(doc, elementListNode, "Load");
449 XMLParser::SetNodeAttribute(doc, elementNode, "ID", m_elementID);
450
451 SaveCADProperties(doc, elementNode);
452
453 auto electricalProp = XMLParser::AppendNode(doc, elementNode, "ElectricalProperties");
454 auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline");
455 XMLParser::SetNodeValue(doc, isOnline, m_online);
456 auto name = XMLParser::AppendNode(doc, electricalProp, "Name");
457 XMLParser::SetNodeValue(doc, name, m_electricalData.name);
458 auto activePower = XMLParser::AppendNode(doc, electricalProp, "ActivePower");
459 XMLParser::SetNodeValue(doc, activePower, m_electricalData.activePower);
460 XMLParser::SetNodeAttribute(doc, activePower, "UnitID", static_cast<int>(m_electricalData.activePowerUnit));
461 auto reactivePower = XMLParser::AppendNode(doc, electricalProp, "ReactivePower");
462 XMLParser::SetNodeValue(doc, reactivePower, m_electricalData.reactivePower);
463 XMLParser::SetNodeAttribute(doc, reactivePower, "UnitID", static_cast<int>(m_electricalData.reactivePowerUnit));
464 auto loadType = XMLParser::AppendNode(doc, electricalProp, "LoadType");
465 XMLParser::SetNodeValue(doc, loadType, m_electricalData.loadType);
466
467 auto stability = XMLParser::AppendNode(doc, electricalProp, "Stability");
468 auto plotLoad = XMLParser::AppendNode(doc, stability, "PlotLoad");
469 XMLParser::SetNodeValue(doc, plotLoad, m_electricalData.plotLoad);
470 auto useCompLoad = XMLParser::AppendNode(doc, stability, "UseCompositeLoad");
471 XMLParser::SetNodeValue(doc, useCompLoad, m_electricalData.useCompLoad);
472 auto activePowerCompl = XMLParser::AppendNode(doc, stability, "ActivePowerComposition");
473 auto pzl = XMLParser::AppendNode(doc, activePowerCompl, "ConstantImpedance");
474 XMLParser::SetNodeValue(doc, pzl, m_electricalData.constImpedanceActive);
475 auto pil = XMLParser::AppendNode(doc, activePowerCompl, "ConstantCurrent");
476 XMLParser::SetNodeValue(doc, pil, m_electricalData.constCurrentActive);
477 auto ppl = XMLParser::AppendNode(doc, activePowerCompl, "ConstantPower");
478 XMLParser::SetNodeValue(doc, ppl, m_electricalData.constPowerActive);
479 auto reactivePowerCompl = XMLParser::AppendNode(doc, stability, "ReactivePowerComposition");
480 auto qzl = XMLParser::AppendNode(doc, reactivePowerCompl, "ConstantImpedance");
481 XMLParser::SetNodeValue(doc, qzl, m_electricalData.constImpedanceReactive);
482 auto qil = XMLParser::AppendNode(doc, reactivePowerCompl, "ConstantCurrent");
483 XMLParser::SetNodeValue(doc, qil, m_electricalData.constCurrentReactive);
484 auto qpl = XMLParser::AppendNode(doc, reactivePowerCompl, "ConstantPower");
485 XMLParser::SetNodeValue(doc, qpl, m_electricalData.constPowerReactive);
486
487 SaveSwitchingData(doc, electricalProp);
488
489 return elementNode;
490}

◆ SetElectricalData()

void Load::SetElectricalData ( const LoadElectricalData electricalData)
inline

Definition at line 92 of file Load.h.

92{ m_electricalData = electricalData; }

◆ ShowForm()

bool Load::ShowForm ( wxWindow *  parent,
Element element,
wxWindow *  workspace = nullptr 
)
virtual

Show element data form.

Parameters
parentForm parent
elementElement that will be edited.
Returns
True if the form is shown, false otherwise.

Reimplemented from Element.

Definition at line 302 of file Load.cpp.

303{
304 wxLogDebug("Before form constructor");
305 LoadForm loadForm(parent, this);
306 loadForm.CenterOnParent();
307 wxLogDebug("Before ShowModal");
308 if (loadForm.ShowModal() == wxID_OK) {
309 wxLogDebug("After ShowModal");
310 return true;
311 }
312 return false;
313}
Form to edit the load power data.
Definition LoadForm.h:33

Member Data Documentation

◆ m_electricalData

LoadElectricalData Load::m_electricalData
protected

Definition at line 100 of file Load.h.

◆ m_triangPts

std::vector<wxPoint2DDouble> Load::m_triangPts
protected

Definition at line 99 of file Load.h.


The documentation for this class was generated from the following files: