-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathObjectModel.cpp
146 lines (126 loc) · 4.12 KB
/
ObjectModel.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "stdafx.h"
#include "ObjectModel.h"
namespace PowerSolutions
{
namespace Interop
{
_NATIVE_OM Bus* MarshalBus(IntPtr ptr)
{
auto obj = MarshalPointer<_NATIVE_OM NetworkObject>(ptr);
Diagnostics::Debug::Assert(dynamic_cast<_NATIVE_OM Bus*>(obj) != nullptr);
return static_cast<_NATIVE_OM Bus*>(obj);
}
namespace ObjectModel
{
NetworkCase::NetworkCase()
: nativeObject(new _NATIVE_OM NetworkCase)
{
nativeObject->AutoDeleteChildren(true);
}
NetworkCase::!NetworkCase()
{
delete nativeObject;
nativeObject = nullptr;
}
NetworkCase::~NetworkCase()
{
this->!NetworkCase();
}
void NetworkCase::AddObject(IntPtr obj)
{
nativeObject->AddObject(MarshalPointer<_NATIVE_OM NetworkObject>(obj));
}
Bus NetworkCase::AddBus(Complex initialVoltage)
{
return Bus(nativeObject->AddBus(MarshalComplex(initialVoltage)));
}
Component NetworkCase::AddLine(Bus bus1, Bus bus2, Complex impedance, Complex admittance)
{
_CHECK_NON_NULLABLE_PARAM(bus1);
_CHECK_NON_NULLABLE_PARAM(bus2);
auto newInst = new _NATIVE_OM Line(bus1.AsWritable(), bus2.AsWritable(), MarshalComplex(impedance), MarshalComplex(admittance));
nativeObject->AddObject(newInst);
return Component(newInst);
}
Component NetworkCase::AddPVGenerator(Bus bus1, double activePower, double voltage)
{
_CHECK_NON_NULLABLE_PARAM(bus1);
auto newInst = new _NATIVE_OM PVGenerator(bus1.AsWritable(), activePower, voltage);
nativeObject->AddObject(newInst);
return Component(newInst);
}
Component NetworkCase::AddSlackGenerator(Bus bus1, Complex voltage)
{
_CHECK_NON_NULLABLE_PARAM(bus1);
auto newInst = new _NATIVE_OM SlackGenerator(bus1.AsWritable(), MarshalComplex(voltage));
nativeObject->AddObject(newInst);
return Component(newInst);
}
Component NetworkCase::AddPQLoad(Bus bus1, Complex power)
{
_CHECK_NON_NULLABLE_PARAM(bus1);
auto newInst = new _NATIVE_OM PQLoad(bus1.AsWritable(), MarshalComplex(power));
nativeObject->AddObject(newInst);
return Component(newInst);
}
Component NetworkCase::AddShuntAdmittance(Bus bus1, Complex admittance)
{
_CHECK_NON_NULLABLE_PARAM(bus1);
auto newInst = new _NATIVE_OM ShuntAdmittance(bus1.AsWritable(), MarshalComplex(admittance));
nativeObject->AddObject(newInst);
return Component(newInst);
}
Component NetworkCase::AddTransformer(Bus bus1, Bus bus2, Complex impedance, Complex admittance, Complex tapRatio)
{
_CHECK_NON_NULLABLE_PARAM(bus1);
_CHECK_NON_NULLABLE_PARAM(bus2);
auto newInst = new _NATIVE_OM Transformer(
bus1.AsWritable(), bus2.AsWritable(),
MarshalComplex(impedance), MarshalComplex(admittance),
MarshalComplex(tapRatio));
nativeObject->AddObject(newInst);
return Component(newInst);
}
ThreeWindingTransformer NetworkCase::AddThreeWindingTransformer(Bus bus1, Bus bus2, Bus bus3, Complex impedance12, Complex impedance13, Complex impedance23, Complex admittance, Complex tapRatio1, Complex tapRatio2, Complex tapRatio3)
{
_CHECK_NON_NULLABLE_PARAM(bus1);
_CHECK_NON_NULLABLE_PARAM(bus2);
_CHECK_NON_NULLABLE_PARAM(bus3);
auto newInst = new _NATIVE_OM ThreeWindingTransformer(
bus1.AsWritable(), bus2.AsWritable(), bus3.AsWritable(),
MarshalComplex(impedance12), MarshalComplex(impedance13),
MarshalComplex(impedance23), MarshalComplex(admittance),
MarshalComplex(tapRatio1), MarshalComplex(tapRatio2),
MarshalComplex(tapRatio3));
nativeObject->AddObject(newInst);
return ThreeWindingTransformer(newInst);
}
BusPair::BusPair(Bus bus1, Bus bus2)
{
Bus1 = bus1;
Bus2 = bus2;
}
BusPair::BusPair(_NATIVE_OM BusPair pair)
{
Bus1 = Bus(pair.first);
Bus2 = Bus(pair.second);
}
bool BusPair::Equals(BusPair obj)
{
return obj.Bus1 == Bus1 && obj.Bus2 == Bus2;
}
bool BusPair::Equals(Object^ obj)
{
if (Component::typeid->IsInstanceOfType(obj))
{
return this->Equals((BusPair)obj);
}
return false;
}
int BusPair::GetHashCode()
{
return Bus1.GetHashCode() ^ Bus2.GetHashCode();
}
}
}
}