-
Notifications
You must be signed in to change notification settings - Fork 0
/
Model.h
126 lines (96 loc) · 3.13 KB
/
Model.h
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
#pragma once
#include <vector>
#include <iostream>
#include <string>
#include "Node.h"
#include "Member.h"
#include "Restraint.h"
#include "LoadCase.h"
#include "Load.h"
#include "API/Include/ScadAPIX.hxx"
class Model {
public:
/*Collection of nodes*/
std::vector<Node> nodes;
/*Collection of members*/
std::vector<Member> members;
/*Collection of restraints*/
std::vector<Restraint> restraints;
/*Collection of load cases*/
std::vector<LoadCase> loadCases;
/*Collection of loads*/
std::vector<Load> loads;
// Default constructor
Model();
// Creates nodes
void createNodes(ScadAPI& handle) {
// óçëû
ApiNodeAddSize(handle, this->nodes.size());
for (u_int i = 0; i < this->nodes.size(); i++) {
ApiNodeUpdate(handle, this->nodes[i].id, this->nodes[i].x, this->nodes[i].y, this->nodes[i].z);
ApiNodeSetName(handle, this->nodes[i].id, this->nodes[i].name.c_str());
}
}
// Creates restraint
void createRestraints(ScadAPI& handle) {
// ñâÿçè
u_int nodeArray[1];
for (u_int i = 0; i < this->restraints.size(); i++) {
nodeArray[0] = this->restraints[i].id;
ApiSetBound(handle,this->restraints[i].fix, 1, nodeArray, TRUE);
}
}
// Creates load cases
void createLoadCases(ScadAPI& handle) {
for (u_int i = 0; i < this->loadCases.size(); i++) {
// TYPE
ApiSetLoadDescription(handle, this->loadCases[i].id, this->loadCases[i].type.c_str());
// NAME
ApiSetLoadName(handle, this->loadCases[i].id, this->loadCases[i].name.c_str());
if ( this->loadCases[i].massCount > 0) {
ApiSetLoadMass(handle, this->loadCases[i].id, this->loadCases[i].massCount, &this->loadCases[i].masses[0]);
}
}
}
// Creates loads
void createLoads(ScadAPI& handle) {
// Create element's array
u_int elementArray[1];
for (u_int i = 0; i < this->loads.size(); i++) {
// Only one element in array
elementArray[0] = this->loads[i].number;
ApiAppendForce(handle, this->loads[i].loadCase, this->loads[i].loadType, this->loads[i].loadDirection,
this->loads[i].dataCount, &this->loads[i].data[0], 1, elementArray);
}
}
// Creates members
void createMembers(ScadAPI& handle) {
// Add count of members
ApiElemAdd(handle, this->members.size());
// Update members
u_int nodeArray[2];
u_int elementArray[1];
double angleArray[1];
for (u_int i = 0; i < this->members.size(); i++) {
nodeArray[0] = this->members[i].node1;
nodeArray[1] = this->members[i].node2;
ApiElemUpdate(handle, this->members[i].id, 5, 2, nodeArray);
// Name
ApiElemSetName(handle, this->members[i].id, this->members[i].name.c_str());
// Section
u_int section = ApiSetRigid(handle, this->members[i].section.c_str());
elementArray[0] = this->members[i].id;
ApiSetRigidElem(handle, section, 2, elementArray);
// Pins
if (this->members[i].pin1 > 0) {
ApiSetJoint(handle, this->members[i].pin1, this->members[i].id, 1, 0);
}
if (this->members[i].pin2 > 0) {
ApiSetJoint(handle, this->members[i].pin2, this->members[i].id, 2, 0);
}
// Angle
angleArray[0] = members[i].betaAngle;
ApiSetSystemCoordElem(handle, ApiGroupRod, ApiRodCornerInDegrees, 1, angleArray, 1, elementArray);
}
}
};