ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/RigidBodyVisitor.cpp
Revision: 1118
Committed: Mon Apr 19 03:52:27 2004 UTC (20 years, 2 months ago) by tim
File size: 1994 byte(s)
Log Message:
new implement of quickLate using visitor and composite pattern

File Contents

# User Rev Content
1 tim 1118 #include "RigidBodyVisitor.hpp"
2     #include "RigidBody.hpp"
3     #include "MatVec3.h"
4    
5     void LipidHeadVisitor::visit(RigidBody* rb){
6     double pos[3];
7     double u[3] = {0, 0, 1};
8     double newVec[3];
9     GenericData* data;
10     AtomData* atomData;
11     AtomInfo* atomInfo;
12     bool haveAtomData;
13     double rotMatrix[3][3];
14    
15     if(!canVisit(rb->getType()))
16     return;
17    
18     rb->getPos(pos);
19     rb->getA(rotMatrix);
20     matVecMul3(rotMatrix, u, newVec);
21    
22     data = rb->getProperty("ATOMDATA");
23     if(data != NULL){
24    
25     atomData = dynamic_cast<AtomData*>(data);
26     if(atomData == NULL){
27     cerr << "can not get Atom Data from " << rb->getType() << endl;
28     atomData = new AtomData;
29     haveAtomData = false;
30     }
31     else
32     haveAtomData = true;
33     }
34     else{
35     atomData = new AtomData;
36     haveAtomData = false;
37     }
38    
39     atomInfo = new AtomInfo;
40     atomInfo->AtomType = "X";
41     atomInfo->pos[0] = pos[0];
42     atomInfo->pos[1] = pos[1];
43     atomInfo->pos[2] = pos[2];
44     atomInfo->dipole[0] = newVec[0];
45     atomInfo->dipole[1] = newVec[1];
46     atomInfo->dipole[2] = newVec[2];
47    
48     atomData->addAtomInfo(atomInfo);
49    
50     if(!haveAtomData){
51     atomData->setID("ATOMDATA");
52     rb->addProperty(atomData);
53     }
54    
55     }
56    
57     void LipidHeadVisitor::addLipidHeadName(const string& name){
58     lipidHeadName.insert(name);
59    
60     }
61    
62     bool LipidHeadVisitor::canVisit(const string& name){
63     return lipidHeadName.find(name) != lipidHeadName.end() ? true : false;
64    
65     }
66    
67     const string LipidHeadVisitor::toString(){
68     char buffer[65535];
69     set<string>::iterator i;
70    
71     sprintf(buffer,"------------------------------------------------------------------\n");
72     sprintf(buffer,"Visitor name: %s", visitorName.c_str());
73    
74     //print the ignore type list
75     sprintf(buffer, "lipidHeadName list contains below types:\n");
76     for(i = lipidHeadName.begin(); i != lipidHeadName.end(); ++i)
77     sprintf(buffer,"%s,\t", i->c_str());
78     sprintf(buffer,"\n");
79    
80     sprintf(buffer,"------------------------------------------------------------------\n");
81    
82     return buffer;
83    
84     }

Properties

Name Value
svn:executable *