ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-4/src/visitors/RigidBodyVisitor.cpp
Revision: 1832
Committed: Thu Dec 2 16:04:19 2004 UTC (19 years, 7 months ago) by tim
File size: 3496 byte(s)
Log Message:
still have two linking problem

File Contents

# Content
1 #include "visitors/RigidBodyVisitor.hpp"
2
3 #include "primitives/RigidBody.hpp"
4
5 #include "math/MatVec3.h"
6
7
8
9 namespace oopse {
10
11
12
13 void LipidHeadVisitor::visit(RigidBody* rb){
14
15 Vector3d pos;
16
17 Vector3d u(0, 0, 1);
18
19 Vector3d newVec;
20
21 GenericData* data;
22
23 AtomData* atomData;
24
25 AtomInfo* atomInfo;
26
27 bool haveAtomData;
28
29 RotMat3x3d rotMatrix;
30
31
32
33 if(!canVisit(rb->getType()))
34
35 return;
36
37
38
39 pos = rb->getPos();
40
41 rotMatrix = rb->getA();
42
43 //matVecMul3(rotMatrix, u, newVec);
44
45 newVec = rotMatrix * u;
46
47
48
49 data = rb->getPropertyByName("ATOMDATA");
50
51 if(data != NULL){
52
53
54
55 atomData = dynamic_cast<AtomData*>(data);
56
57 if(atomData == NULL){
58
59 std::cerr << "can not get Atom Data from " << rb->getType() << std::endl;
60
61 atomData = new AtomData;
62
63 haveAtomData = false;
64
65 }
66
67 else
68
69 haveAtomData = true;
70
71 }
72
73 else{
74
75 atomData = new AtomData;
76
77 haveAtomData = false;
78
79 }
80
81
82
83 atomInfo = new AtomInfo;
84
85 atomInfo->AtomType = "X";
86
87 atomInfo->pos[0] = pos[0];
88
89 atomInfo->pos[1] = pos[1];
90
91 atomInfo->pos[2] = pos[2];
92
93 atomInfo->dipole[0] = newVec[0];
94
95 atomInfo->dipole[1] = newVec[1];
96
97 atomInfo->dipole[2] = newVec[2];
98
99
100
101 atomData->addAtomInfo(atomInfo);
102
103
104
105 if(!haveAtomData){
106
107 atomData->setID("ATOMDATA");
108
109 rb->addProperty(atomData);
110
111 }
112
113
114
115 }
116
117
118
119 void LipidHeadVisitor::addLipidHeadName(const std::string& name){
120
121 lipidHeadName.insert(name);
122
123
124
125 }
126
127
128
129 bool LipidHeadVisitor::canVisit(const std::string& name){
130
131 return lipidHeadName.find(name) != lipidHeadName.end() ? true : false;
132
133
134
135 }
136
137
138
139 const std::string LipidHeadVisitor::toString(){
140
141 char buffer[65535];
142
143 std::string result;
144
145 std::set<std::string>::iterator i;
146
147
148
149 sprintf(buffer ,"------------------------------------------------------------------\n");
150
151 result += buffer;
152
153
154
155 sprintf(buffer ,"Visitor name: %s\n", visitorName.c_str());
156
157 result += buffer;
158
159
160
161 //print the ignore type list
162
163 sprintf(buffer , "lipidHeadName list contains below types:\n");
164
165 result += buffer;
166
167
168
169 for(i = lipidHeadName.begin(); i != lipidHeadName.end(); ++i){
170
171 sprintf(buffer ,"%s\t", i->c_str());
172
173 result += buffer;
174
175 }
176
177
178
179 sprintf(buffer ,"\n");
180
181 result += buffer;
182
183
184
185 sprintf(buffer ,"------------------------------------------------------------------\n");
186
187 result += buffer;
188
189
190
191 return result;
192
193
194
195 }
196
197
198
199 void RBCOMVisitor::visit(RigidBody* rb){
200
201 AtomData* atomData;
202
203 AtomInfo* atomInfo;
204
205 Vector3d pos;
206
207
208
209 pos = rb->getPos();
210
211 atomInfo = new AtomInfo;
212
213 atomInfo->AtomType = "X";
214
215 atomInfo->pos[0] = pos[0];
216
217 atomInfo->pos[1] = pos[1];
218
219 atomInfo->pos[2] = pos[2];
220
221 atomInfo->dipole[0] = 0;
222
223 atomInfo->dipole[1] = 0;
224
225 atomInfo->dipole[2] = 0;
226
227
228
229 atomData = new AtomData;
230
231 atomData->setID("ATOMDATA");
232
233 atomData->addAtomInfo(atomInfo);
234
235
236
237 rb->addProperty(atomData);
238
239 }
240
241
242
243 const std::string RBCOMVisitor::toString(){
244
245 char buffer[65535];
246
247 std::string result;
248
249
250
251 sprintf(buffer ,"------------------------------------------------------------------\n");
252
253 result += buffer;
254
255
256
257 sprintf(buffer ,"Visitor name: %s\n", visitorName.c_str());
258
259 result += buffer;
260
261
262
263 //print the ignore type list
264
265 sprintf(buffer , "Visitor Description: add a pseudo atom at the center of the mass of the rigidbody\n");
266
267 result += buffer;
268
269
270
271 sprintf(buffer ,"------------------------------------------------------------------\n");
272
273 result += buffer;
274
275
276
277 return result;
278
279
280
281 }
282
283
284
285
286
287 }//namespace oopse
288

Properties

Name Value
svn:executable *