ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/constraints/ConstraintElem.hpp
Revision: 1782
Committed: Wed Aug 22 02:28:28 2012 UTC (12 years, 8 months ago) by gezelter
File size: 23941 byte(s)
Log Message:
MERGE OpenMD development branch 1465:1781 into trunk

File Contents

# User Rev Content
1 gezelter 507 /*
2 gezelter 246 * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3     *
4     * The University of Notre Dame grants you ("Licensee") a
5     * non-exclusive, royalty free, license to use, modify and
6     * redistribute this software in source and binary code form, provided
7     * that the following conditions are met:
8     *
9 gezelter 1390 * 1. Redistributions of source code must retain the above copyright
10 gezelter 246 * notice, this list of conditions and the following disclaimer.
11     *
12 gezelter 1390 * 2. Redistributions in binary form must reproduce the above copyright
13 gezelter 246 * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the
15     * distribution.
16     *
17     * This software is provided "AS IS," without a warranty of any
18     * kind. All express or implied conditions, representations and
19     * warranties, including any implied warranty of merchantability,
20     * fitness for a particular purpose or non-infringement, are hereby
21     * excluded. The University of Notre Dame and its licensors shall not
22     * be liable for any damages suffered by licensee as a result of
23     * using, modifying or distributing the software or its
24     * derivatives. In no event will the University of Notre Dame or its
25     * licensors be liable for any lost revenue, profit or data, or for
26     * direct, indirect, special, consequential, incidental or punitive
27     * damages, however caused and regardless of the theory of liability,
28     * arising out of the use of or inability to use software, even if the
29     * University of Notre Dame has been advised of the possibility of
30     * such damages.
31 gezelter 1390 *
32     * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
33     * research, please cite the appropriate papers when you publish your
34     * work. Good starting points are:
35     *
36     * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
37     * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
38     * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).
39 gezelter 1782 * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010).
40     * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41 gezelter 246 */
42 gezelter 507
43 gezelter 246 #ifndef CONSTRAINTS_CONTRAINTELEM_HPP
44     #define CONSTRAINTS_CONTRAINTELEM_HPP
45    
46     #include "primitives/StuntDouble.hpp"
47     #include "utils/GenericData.hpp"
48     #include "utils/simError.h"
49 gezelter 1390 namespace OpenMD {
50 gezelter 507
51     /**
52     * @class ConstraintElem ConstraintElem.hpp "constraints/ConstraintElem.hpp"
53     * An adapter class of StuntDouble which is used at constraint algorithm
54     */
55    
56     class ConstraintElem{
57     public:
58     ConstraintElem(StuntDouble* sd) : sd_(sd) {
59     GenericData* movedData = sd_->getPropertyByName("Moved");
60     if (movedData !=NULL) { //if generic data with keyword "moved" exists, assign it to moved_
61     moved_ = dynamic_cast<BoolGenericData*>(movedData);
62     if (moved_ == NULL) {
63     sprintf(painCave.errMsg,
64     "Generic Data with keyword Moved exists, however, it can not be casted to a BoolGenericData.\n");
65     painCave.isFatal = 1;;
66     simError();
67     }
68     }else { //if generic data with keyword "moved" does not exist, create it
69     moved_ = new BoolGenericData("Moved");
70     sd_->addProperty(moved_);
71     }
72 gezelter 246
73 gezelter 507 GenericData* movingData = sd_->getPropertyByName("Moving");
74     if (movingData !=NULL) {
75     moving_ = dynamic_cast<BoolGenericData*>(movingData);
76     if (moving_ == NULL) {
77     sprintf(painCave.errMsg,
78     "Generic Data with keyword Moving exists, however, it can not be casted to a BoolGenericData.\n");
79     painCave.isFatal = 1;;
80     simError();
81     }
82     }else {
83     moving_ = new BoolGenericData("Moving");
84     sd_->addProperty(moving_);
85     }
86    
87     }
88    
89     bool getMoved() { return moved_->getData(); }
90     void setMoved(bool moved) { moved_->setData(moved);}
91    
92     bool getMoving() { return moving_->getData(); }
93     void setMoving(bool moving) { moving_->setData(moving); }
94    
95     StuntDouble* getStuntDouble() { return sd_; }
96    
97     /**
98 tim 963 * Returns the global index of this stuntRealType.
99 gezelter 507 * @return the global index of this stuntdouble
100     */
101     int getGlobalIndex() {
102     return sd_->getGlobalIndex();
103     }
104    
105     /**
106 tim 963 * Sets the global index of this stuntRealType.
107 gezelter 507 * @param new global index to be set
108     */
109     void setGlobalIndex(int index) {
110     sd_->setGlobalIndex(index);
111     }
112    
113     /**
114     * Returns the local index of this stuntdouble
115     * @return the local index of this stuntdouble
116     */
117     int getLocalIndex() {
118     return sd_->getLocalIndex();
119     }
120    
121     /**
122     * Sets the local index of this stuntdouble
123     * @param index new index to be set
124     */
125     void setLocalIndex(int index) {
126     sd_->setLocalIndex(index);
127     }
128    
129     /**
130     * Sets the Snapshot Manager of this stuntdouble
131     */
132     void setSnapshotManager(SnapshotManager* sman) {
133     sd_->setSnapshotManager(sman);
134     }
135    
136     /**
137     * Tests if this stuntdouble is an atom
138     * @return true is this stuntdouble is an atom(or a directional atom), return false otherwise
139     */
140     bool isAtom(){
141     return sd_->isAtom();
142     }
143    
144     /**
145     * Tests if this stuntdouble is an directional atom
146     * @return true if this stuntdouble is an directional atom, return false otherwise
147     */
148     bool isDirectionalAtom(){
149     return sd_->isDirectional();
150     }
151    
152     /**
153     * Tests if this stuntdouble is a rigid body.
154     * @return true if this stuntdouble is a rigid body, otherwise return false
155     */
156     bool isRigidBody(){
157     return sd_->isRigidBody();
158     }
159    
160     /**
161     * Tests if this stuntdouble is a directional one.
162     * @return true is this stuntdouble is a directional atom or a rigid body, return false otherwise
163     */
164     bool isDirectional(){
165     return sd_->isDirectional();
166     }
167    
168     /**
169     * Returns the previous position of this stuntdouble
170     * @return the position of this stuntdouble
171     */
172     Vector3d getPrevPos() {
173     return sd_->getPrevPos();
174     }
175    
176     /**
177     * Returns the current position of this stuntdouble
178     * @return the position of this stuntdouble
179     */
180     Vector3d getPos() {
181     return sd_->getPos();
182     }
183    
184     /**
185     * Returns the position of this stuntdouble in specified snapshot
186     * @return the position of this stuntdouble
187     * @param snapshotNo
188     */
189     Vector3d getPos(int snapshotNo) {
190     return sd_->getPos(snapshotNo);
191     }
192    
193     /**
194     * Sets the previous position of this stuntdouble
195     * @param pos new position
196     * @see #getPos
197     */
198     void setPrevPos(const Vector3d& pos) {
199     sd_->setPrevPos(pos);
200     }
201    
202     /**
203     * Sets the current position of this stuntdouble
204     * @param pos new position
205     */
206     void setPos(const Vector3d& pos) {
207     sd_->setPos(pos);
208     }
209    
210     /**
211     * Sets the position of this stuntdouble in specified snapshot
212     * @param pos position to be set
213     * @param snapshotNo
214     * @see #getPos
215     */
216     void setPos(const Vector3d& pos, int snapshotNo) {
217     sd_->setPos(pos, snapshotNo);
218     }
219    
220     /**
221     * Returns the previous velocity of this stuntdouble
222     * @return the velocity of this stuntdouble
223     */
224     Vector3d getPrevVel() {
225     return sd_->getPrevVel();
226     }
227    
228     /**
229     * Returns the current velocity of this stuntdouble
230     * @return the velocity of this stuntdouble
231     */
232     Vector3d getVel() {
233     return sd_->getVel();
234     }
235    
236     /**
237     * Returns the velocity of this stuntdouble in specified snapshot
238     * @return the velocity of this stuntdouble
239     * @param snapshotNo
240     */
241    
242     Vector3d getVel(int snapshotNo) {
243     return sd_->getVel(snapshotNo);
244     }
245    
246     /**
247     * Sets the previous velocity of this stuntdouble
248     * @param vel new velocity
249     * @see #getVel
250     */
251     void setPrevVel(const Vector3d& vel) {
252     sd_->setPrevVel(vel);
253     }
254    
255     /**
256     * Sets the current velocity of this stuntdouble
257     * @param vel new velocity
258     */
259     void setVel(const Vector3d& vel) {
260     sd_->setVel(vel);
261     }
262    
263     /**
264     * Sets the velocity of this stuntdouble in specified snapshot
265     * @param vel velocity to be set
266     * @param snapshotNo
267     * @see #getVel
268     */
269     void setVel(const Vector3d& vel, int snapshotNo) {
270     sd_->setVel(vel, snapshotNo);
271     }
272    
273     /**
274     * Returns the previous rotation matrix of this stuntdouble
275     * @return the rotation matrix of this stuntdouble
276     */
277     RotMat3x3d getPrevA() {
278     return sd_->getPrevA();
279     }
280    
281     /**
282     * Returns the current rotation matrix of this stuntdouble
283     * @return the rotation matrix of this stuntdouble
284     */
285     RotMat3x3d getA() {
286     return sd_->getA();
287     }
288    
289     /**
290     * Returns the rotation matrix of this stuntdouble in specified snapshot
291     *
292     * @return the rotation matrix of this stuntdouble
293     * @param snapshotNo
294     */
295     RotMat3x3d getA(int snapshotNo) {
296     return sd_->getA(snapshotNo);
297     }
298    
299     /**
300     * Sets the previous rotation matrix of this stuntdouble
301     * @param a new rotation matrix
302     * @see #getA
303     */
304     void setPrevA(const RotMat3x3d& a) {
305     sd_->setPrevA(a);
306     }
307    
308     /**
309     * Sets the current rotation matrix of this stuntdouble
310     * @param a new rotation matrix
311     */
312     void setA(const RotMat3x3d& a) {
313     sd_->setA(a);
314     }
315    
316     /**
317     * Sets the rotation matrix of this stuntdouble in specified snapshot
318     * @param a rotation matrix to be set
319     * @param snapshotNo
320     * @see #getA
321     */
322     void setA(const RotMat3x3d& a, int snapshotNo) {
323     sd_->setA(a, snapshotNo);
324     }
325    
326     /**
327     * Returns the previous angular momentum of this stuntdouble (body-fixed).
328     * @return the angular momentum of this stuntdouble
329     */
330     Vector3d getPrevJ() {
331     return sd_->getPrevJ();
332     }
333    
334     /**
335     * Returns the current angular momentum of this stuntdouble (body -fixed).
336     * @return the angular momentum of this stuntdouble
337     */
338     Vector3d getJ() {
339     return sd_->getJ();
340     }
341    
342     /**
343     * Returns the angular momentum of this stuntdouble in specified snapshot (body-fixed).
344     * @return the angular momentum of this stuntdouble
345     * @param snapshotNo
346     */
347     Vector3d getJ(int snapshotNo) {
348     return sd_->getJ(snapshotNo);
349     }
350    
351     /**
352     * Sets the previous angular momentum of this stuntdouble (body-fixed).
353     * @param angMom new angular momentum
354     * @see #getJ
355     */
356     void setPrevJ(const Vector3d& angMom) {
357     sd_->setPrevJ(angMom);
358     }
359    
360     /**
361     * Sets the current angular momentum of this stuntdouble (body-fixed).
362     * @param angMom new angular momentum
363     */
364     void setJ(const Vector3d& angMom) {
365     sd_->setJ(angMom);
366     }
367    
368     /**
369     * Sets the angular momentum of this stuntdouble in specified snapshot(body-fixed).
370     * @param angMom angular momentum to be set
371     * @param snapshotNo
372     * @see #getJ
373     */
374     void setJ(const Vector3d& angMom, int snapshotNo) {
375     sd_->setJ(angMom, snapshotNo);
376     }
377    
378     /**
379     * Returns the previous quaternion of this stuntdouble
380     * @return the quaternion of this stuntdouble
381     */
382     Quat4d getPrevQ() {
383     return sd_->getPrevQ();
384     }
385    
386     /**
387     * Returns the current quaternion of this stuntdouble
388     * @return the quaternion of this stuntdouble
389     */
390     Quat4d getQ() {
391     return sd_->getQ();
392     }
393    
394     /**
395     * Returns the quaternion of this stuntdouble in specified snapshot
396     * @return the quaternion of this stuntdouble
397     * @param snapshotNo
398     */
399     Quat4d getQ(int snapshotNo) {
400     return sd_->getQ(snapshotNo);
401     }
402    
403     /**
404     * Sets the previous quaternion of this stuntdouble
405     * @param q new quaternion
406     * @note actual storage data is rotation matrix
407     */
408     void setPrevQ(const Quat4d& q) {
409     sd_->setPrevQ(q);
410     }
411    
412     /**
413     * Sets the current quaternion of this stuntdouble
414     * @param q new quaternion
415     * @note actual storage data is rotation matrix
416     */
417     void setQ(const Quat4d& q) {
418     sd_->setQ(q);
419     }
420    
421     /**
422     * Sets the quaternion of this stuntdouble in specified snapshot
423     *
424     * @param q quaternion to be set
425     * @param snapshotNo
426     * @note actual storage data is rotation matrix
427     */
428     void setQ(const Quat4d& q, int snapshotNo) {
429     sd_->setQ(q, snapshotNo);
430     }
431    
432     /**
433     * Returns the previous euler angles of this stuntdouble
434     * @return the euler angles of this stuntdouble
435     */
436     Vector3d getPrevEuler() {
437     return sd_->getPrevEuler();
438     }
439    
440     /**
441     * Returns the current euler angles of this stuntdouble
442     * @return the euler angles of this stuntdouble
443     */
444     Vector3d getEuler() {
445     return sd_->getEuler();
446     }
447    
448     /**
449     * Returns the euler angles of this stuntdouble in specified snapshot.
450     * @return the euler angles of this stuntdouble
451     * @param snapshotNo
452     */
453     Vector3d getEuler(int snapshotNo) {
454     return sd_->getEuler(snapshotNo);
455     }
456    
457     /**
458 tim 963 * Sets the previous euler angles of this stuntRealType.
459 gezelter 507 * @param euler new euler angles
460     * @see #getEuler
461     * @note actual storage data is rotation matrix
462     */
463     void setPrevEuler(const Vector3d& euler) {
464     sd_->setPrevEuler(euler);
465     }
466    
467     /**
468     * Sets the current euler angles of this stuntdouble
469     * @param euler new euler angles
470     */
471     void setEuler(const Vector3d& euler) {
472     sd_->setEuler(euler);
473     }
474    
475     /**
476     * Sets the euler angles of this stuntdouble in specified snapshot
477     *
478     * @param euler euler angles to be set
479     * @param snapshotNo
480     * @note actual storage data is rotation matrix
481     */
482     void setEuler(const Vector3d& euler, int snapshotNo) {
483     sd_->setEuler(euler, snapshotNo);
484     }
485    
486     /**
487     * Returns the previous unit vectors of this stuntdouble
488     * @return the unit vectors of this stuntdouble
489     */
490     RotMat3x3d getPrevElectroFrame() {
491     return sd_->getPrevElectroFrame();
492     }
493    
494     /**
495     * Returns the current unit vectors of this stuntdouble
496     * @return the unit vectors of this stuntdouble
497     */
498     RotMat3x3d getElectroFrame() {
499     return sd_->getElectroFrame();
500     }
501    
502     /**
503     * Returns the unit vectors of this stuntdouble in specified snapshot
504     *
505     * @return the unit vectors of this stuntdouble
506     * @param snapshotNo
507     */
508     RotMat3x3d getElectroFrame(int snapshotNo) {
509     return sd_->getElectroFrame(snapshotNo);
510     }
511    
512     /**
513     * Returns the previous force of this stuntdouble
514     * @return the force of this stuntdouble
515     */
516     Vector3d getPrevFrc() {
517     return sd_->getPrevFrc();
518     }
519    
520     /**
521     * Returns the current force of this stuntdouble
522     * @return the force of this stuntdouble
523     */
524     Vector3d getFrc() {
525     return sd_->getFrc();
526     }
527    
528     /**
529     * Returns the force of this stuntdouble in specified snapshot
530     *
531     * @return the force of this stuntdouble
532     * @param snapshotNo
533     */
534     Vector3d getFrc(int snapshotNo) {
535     return sd_->getFrc(snapshotNo);
536     }
537    
538     /**
539     * Sets the previous force of this stuntdouble
540     *
541     * @param frc new force
542     * @see #getFrc
543     */
544     void setPrevFrc(const Vector3d& frc) {
545     sd_->setPrevFrc(frc);
546     }
547    
548     /**
549     * Sets the current force of this stuntdouble
550     * @param frc new force
551     */
552     void setFrc(const Vector3d& frc) {
553     sd_->setFrc(frc);
554     }
555    
556     /**
557     * Sets the force of this stuntdouble in specified snapshot
558     *
559     * @param frc force to be set
560     * @param snapshotNo
561     * @see #getFrc
562     */
563     void setFrc(const Vector3d& frc, int snapshotNo) {
564     sd_->setFrc(frc, snapshotNo);
565     }
566    
567     /**
568     * Adds force into the previous force of this stuntdouble
569     *
570     * @param frc new force
571     * @see #getFrc
572     */
573     void addPrevFrc(const Vector3d& frc) {
574     sd_->addPrevFrc(frc);
575     }
576    
577     /**
578     * Adds force into the current force of this stuntdouble
579     * @param frc new force
580     */
581     void addFrc(const Vector3d& frc) {
582     sd_->addFrc(frc);
583     }
584    
585     /**
586     * Adds force into the force of this stuntdouble in specified snapshot
587     *
588     * @param frc force to be set
589     * @param snapshotNo
590     * @see #getFrc
591     */
592     void addFrc(const Vector3d& frc, int snapshotNo) {
593     sd_->addFrc(frc, snapshotNo);
594     }
595    
596     /**
597     * Returns the previous torque of this stuntdouble
598     * @return the torque of this stuntdouble
599     */
600     Vector3d getPrevTrq() {
601     return sd_->getPrevTrq();
602     }
603    
604     /**
605     * Returns the current torque of this stuntdouble
606     * @return the torque of this stuntdouble
607     */
608     Vector3d getTrq() {
609     return sd_->getTrq();
610     }
611    
612     /**
613     * Returns the torque of this stuntdouble in specified snapshot
614     *
615     * @return the torque of this stuntdouble
616     * @param snapshotNo
617     */
618     Vector3d getTrq(int snapshotNo) {
619     return sd_->getTrq(snapshotNo);
620     }
621    
622     /**
623     * Sets the previous torque of this stuntdouble
624     *
625     * @param trq new torque
626     * @see #getTrq
627     */
628     void setPrevTrq(const Vector3d& trq) {
629     sd_->setPrevTrq(trq);
630     }
631    
632     /**
633     * Sets the current torque of this stuntdouble
634     * @param trq new torque
635     */
636     void setTrq(const Vector3d& trq) {
637     sd_->setTrq(trq);
638     }
639    
640     /**
641     * Sets the torque of this stuntdouble in specified snapshot
642     *
643     * @param trq torque to be set
644     * @param snapshotNo
645     * @see #getTrq
646     */
647     void setTrq(const Vector3d& trq, int snapshotNo) {
648     sd_->setTrq(trq, snapshotNo);
649     }
650    
651     /**
652     * Adds torque into the previous torque of this stuntdouble
653     *
654     * @param trq new torque
655     * @see #getTrq
656     */
657     void addPrevTrq(const Vector3d& trq) {
658     sd_->addPrevTrq(trq);
659     }
660    
661     /**
662     * Adds torque into the current torque of this stuntdouble
663     * @param trq new torque
664     */
665     void addTrq(const Vector3d& trq) {
666     sd_->addTrq(trq);
667     }
668    
669     /**
670     * Adds torque into the torque of this stuntdouble in specified snapshot
671     *
672     * @param trq torque to be add
673     * @param snapshotNo
674     * @see #getTrq
675     */
676     void addTrq(const Vector3d& trq, int snapshotNo) {
677     sd_->addTrq(trq, snapshotNo);
678     }
679    
680     /** Set the force of this stuntdouble to zero */
681     void zeroForcesAndTorques() {
682     sd_->zeroForcesAndTorques();
683     }
684     /**
685     * Returns the inertia tensor of this stuntdouble
686     * @return the inertia tensor of this stuntdouble
687     */
688     Mat3x3d getI() {
689     return sd_->getI();
690     }
691    
692     /**
693     * Returns the gradient of this stuntdouble
694     * @return the gradient of this stuntdouble
695     */
696 tim 963 std::vector<RealType> getGrad() {
697 gezelter 507 return sd_->getGrad();
698     }
699    
700     /**
701     * Tests the if this stuntdouble is a linear rigidbody
702     *
703     * @return true if this stuntdouble is a linear rigidbody, otherwise return false
704     * @note atom and directional atom will always return false
705     *
706     * @see #linearAxis
707     */
708     bool isLinear() {
709     return sd_->isLinear();
710     }
711    
712     /**
713     * Returns the linear axis of the rigidbody, atom and directional atom will always return -1
714     *
715     * @return the linear axis of the rigidbody
716     *
717     * @see #isLinear
718     */
719     int linearAxis() {
720     return sd_->linearAxis();
721     }
722    
723     /** Returns the mass of this stuntdouble */
724 tim 963 RealType getMass() {
725 gezelter 507 return sd_->getMass();
726     }
727    
728     /**
729     * Sets the mass of this stuntdoulbe
730     * @param mass the mass to be set
731     */
732 tim 963 void setMass(RealType mass) {
733 gezelter 507 sd_->setMass(mass);
734     }
735    
736     /** Returns the name of this stuntdouble */
737     std::string getType() {
738     return sd_->getType();
739     }
740    
741 tim 963 /** Sets the name of this stuntRealType*/
742 gezelter 507 void setType(const std::string& name) {
743     sd_->setType(name);
744     }
745    
746     /**
747     * Converts a lab fixed vector to a body fixed vector.
748     * @return body fixed vector
749     * @param v lab fixed vector
750     */
751     Vector3d lab2Body(const Vector3d& v) {
752     return sd_->lab2Body(v);
753     }
754    
755     /**
756     * Converts a body fixed vector to a lab fixed vector.
757     * @return corresponding lab fixed vector
758     * @param v body fixed vector
759     */
760     Vector3d body2Lab(const Vector3d& v){
761     return sd_->body2Lab(v);
762     }
763     /**
764     * <p>
765     * The purpose of the Visitor Pattern is to encapsulate an operation that you want to perform on
766     * the elements of a data structure. In this way, you can change the operation being performed
767     * on a structure without the need of changing the classes of the elements that you are operating
768     * on. Using a Visitor pattern allows you to decouple the classes for the data structure and the
769     * algorithms used upon them
770     * </p>
771     * @param v visitor
772     */
773     void accept(BaseVisitor* v) {
774     sd_->accept(v);
775     }
776    
777     //below functions are just forward functions
778     /**
779     * Adds property into property map
780     * @param genData GenericData to be added into PropertyMap
781     */
782     void addProperty(GenericData* genData){
783     sd_->addProperty(genData);
784     }
785    
786     /**
787     * Removes property from PropertyMap by name
788     * @param propName the name of property to be removed
789     */
790     void removeProperty(const std::string& propName) {
791     sd_->removeProperty(propName);
792     }
793    
794     /**
795     * clear all of the properties
796     */
797     void clearProperties() {
798     sd_->clearProperties();
799     }
800    
801     /**
802     * Returns all names of properties
803     * @return all names of properties
804     */
805     std::vector<std::string> getPropertyNames() {
806     return sd_->getPropertyNames();
807     }
808    
809     /**
810     * Returns all of the properties in PropertyMap
811     * @return all of the properties in PropertyMap
812     */
813     std::vector<GenericData*> getProperties() {
814     return sd_->getProperties();
815     }
816    
817     /**
818     * Returns property
819     * @param propName name of property
820     * @return a pointer point to property with propName. If no property named propName
821     * exists, return NULL
822     */
823     GenericData* getPropertyByName(const std::string& propName) {
824     return sd_->getPropertyByName(propName);
825     }
826    
827     private:
828     StuntDouble* sd_;
829     BoolGenericData* moved_;
830     BoolGenericData* moving_;
831     };
832    
833 gezelter 246 }
834    
835     #endif

Properties

Name Value
svn:executable *
svn:keywords Author Id Revision Date