summaryrefslogtreecommitdiffstats
path: root/Project/Text.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Project/Text.cpp')
-rw-r--r--Project/Text.cpp44
1 files changed, 25 insertions, 19 deletions
diff --git a/Project/Text.cpp b/Project/Text.cpp
index e3a5e7e..5168329 100644
--- a/Project/Text.cpp
+++ b/Project/Text.cpp
@@ -24,7 +24,11 @@ Text::Text(wxPoint2DDouble position)
SetText(m_text);
}
-Text::~Text() {}
+Text::~Text()
+{
+ if(m_glString) delete m_glString;
+ if(m_glStringArray) delete m_glStringArray;
+}
bool Text::Contains(wxPoint2DDouble position) const
{
wxPoint2DDouble ptR = RotateAtPosition(position, -m_angle);
@@ -105,7 +109,8 @@ void Text::SetText(wxString text)
m_glStringArray = new wxGLStringArray();
dc.SetFont(font);
- int w = 0, h = 0;
+ m_width = 0.0;
+ m_height = 0.0;
wxString multText = m_text;
for(int i = 0; i < m_numberOfLines; ++i) {
wxString nextLine;
@@ -114,15 +119,12 @@ void Text::SetText(wxString text)
m_glStringArray->addString(currentLine);
wxSize size = dc.GetTextExtent(currentLine);
- if(size.GetWidth() > w) w = size.GetWidth();
- h += size.GetHeight();
+ if(size.GetWidth() > m_width) m_width = size.GetWidth();
+ m_height += size.GetHeight();
}
m_glStringArray->setFont(font);
m_glStringArray->consolidate(&dc);
-
- m_width = w;
- m_height = h;
}
// Update text rectangle.
@@ -157,7 +159,7 @@ void Text::UpdateText(double systemPowerBase)
SetText(m_text);
break;
case TYPE_BUS: {
- Bus* bus = (Bus*)m_element;
+ Bus* bus = static_cast<Bus*>(m_element);
if(bus) {
BusElectricalData data = bus->GetEletricalData();
double baseVoltage = data.nominalVoltage;
@@ -289,7 +291,7 @@ void Text::UpdateText(double systemPowerBase)
}
} break;
case TYPE_SYNC_GENERATOR: {
- SyncGenerator* syncGenerator = (SyncGenerator*)m_element;
+ SyncGenerator* syncGenerator = static_cast<SyncGenerator*>(m_element);
if(syncGenerator) {
SyncGeneratorElectricalData data = syncGenerator->GetPUElectricalData(systemPowerBase);
double baseVoltage = data.nominalVoltage;
@@ -384,7 +386,7 @@ void Text::UpdateText(double systemPowerBase)
}
} break;
case TYPE_LINE: {
- Line* line = (Line*)m_element;
+ Line* line = static_cast<Line*>(m_element);
if(line) {
LineElectricalData data = line->GetElectricalData();
double baseVoltage = data.nominalVoltage;
@@ -510,7 +512,7 @@ void Text::UpdateText(double systemPowerBase)
}
} break;
case TYPE_TRANSFORMER: {
- Transformer* transformer = (Transformer*)m_element;
+ Transformer* transformer = static_cast<Transformer*>(m_element);
if(transformer) {
TransformerElectricalData data = transformer->GetElectricalData();
double baseVoltage[2] = { data.primaryNominalVoltage, data.secondaryNominalVoltage };
@@ -652,12 +654,12 @@ void Text::UpdateText(double systemPowerBase)
}
} break;
case TYPE_LOAD: {
- Load* load = (Load*)m_element;
+ Load* load = static_cast<Load*>(m_element);
if(load) {
LoadElectricalData data = load->GetPUElectricalData(systemPowerBase);
std::complex<double> sPower(data.activePower, data.reactivePower);
if(data.loadType == CONST_IMPEDANCE && load->IsOnline()) {
- std::complex<double> v = ((Bus*)load->GetParentList()[0])->GetEletricalData().voltage;
+ std::complex<double> v = static_cast<Bus*>(load->GetParentList()[0])->GetEletricalData().voltage;
sPower = std::pow(std::abs(v), 2) * sPower;
}
switch(m_dataType) {
@@ -711,7 +713,7 @@ void Text::UpdateText(double systemPowerBase)
}
} break;
case TYPE_SYNC_MOTOR: {
- SyncMotor* syncMotor = (SyncMotor*)m_element;
+ SyncMotor* syncMotor = static_cast<SyncMotor*>(m_element);
if(syncMotor) {
SyncMotorElectricalData data = syncMotor->GetPUElectricalData(systemPowerBase);
std::complex<double> sPower(data.activePower, data.reactivePower);
@@ -766,7 +768,7 @@ void Text::UpdateText(double systemPowerBase)
}
} break;
case TYPE_IND_MOTOR: {
- IndMotor* indMotor = (IndMotor*)m_element;
+ IndMotor* indMotor = static_cast<IndMotor*>(m_element);
if(indMotor) {
IndMotorElectricalData data = indMotor->GetPUElectricalData(systemPowerBase);
std::complex<double> sPower(data.activePower, data.reactivePower);
@@ -821,12 +823,12 @@ void Text::UpdateText(double systemPowerBase)
}
} break;
case TYPE_CAPACITOR: {
- Capacitor* capacitor = (Capacitor*)m_element;
+ Capacitor* capacitor = static_cast<Capacitor*>(m_element);
if(capacitor) {
CapacitorElectricalData data = capacitor->GetPUElectricalData(systemPowerBase);
double reativePower = -data.reactivePower;
if(capacitor->IsOnline()) {
- std::complex<double> v = ((Bus*)capacitor->GetParentList()[0])->GetEletricalData().voltage;
+ std::complex<double> v = static_cast<Bus*>(capacitor->GetParentList()[0])->GetEletricalData().voltage;
reativePower *= std::pow(std::abs(v), 2);
}
switch(m_dataType) {
@@ -859,12 +861,12 @@ void Text::UpdateText(double systemPowerBase)
}
} break;
case TYPE_INDUCTOR: {
- Inductor* inductor = (Inductor*)m_element;
+ Inductor* inductor = static_cast<Inductor*>(m_element);
if(inductor) {
InductorElectricalData data = inductor->GetPUElectricalData(systemPowerBase);
double reativePower = data.reactivePower;
if(inductor->IsOnline()) {
- std::complex<double> v = ((Bus*)inductor->GetParentList()[0])->GetEletricalData().voltage;
+ std::complex<double> v = static_cast<Bus*>(inductor->GetParentList()[0])->GetEletricalData().voltage;
reativePower *= std::pow(std::abs(v), 2);
}
switch(m_dataType) {
@@ -903,5 +905,9 @@ Element* Text::GetCopy()
{
Text* copy = new Text();
*copy = *this;
+ // The pointers to wxGLString must be different or can cause crashes.
+ copy->m_glString = NULL;
+ copy->m_glStringArray = NULL;
+ copy->SetText(copy->m_text);
return copy;
}