97 |
|
virtual ~StuntDouble(); |
98 |
|
|
99 |
|
/** |
100 |
< |
* Returns the global index of this stuntdouble. |
100 |
> |
* Returns the global index of this stuntRealType. |
101 |
|
* @return the global index of this stuntdouble |
102 |
|
*/ |
103 |
|
int getGlobalIndex() { |
105 |
|
} |
106 |
|
|
107 |
|
/** |
108 |
< |
* Sets the global index of this stuntdouble. |
108 |
> |
* Sets the global index of this stuntRealType. |
109 |
|
* @param new global index to be set |
110 |
|
*/ |
111 |
|
void setGlobalIndex(int index) { |
128 |
|
localIndex_ = index; |
129 |
|
} |
130 |
|
|
131 |
+ |
int getGlobalIntegrableObjectIndex(){ |
132 |
+ |
return globalIntegrableObjectIndex_; |
133 |
+ |
} |
134 |
+ |
void setGlobalIntegrableObjectIndex(int index) { |
135 |
+ |
globalIntegrableObjectIndex_ = index; |
136 |
+ |
} |
137 |
+ |
|
138 |
|
/** |
139 |
|
* Sets the Snapshot Manager of this stuntdouble |
140 |
|
*/ |
172 |
|
*/ |
173 |
|
bool isDirectional(){ |
174 |
|
return isDirectionalAtom() || isRigidBody(); |
175 |
+ |
} |
176 |
+ |
|
177 |
+ |
/** |
178 |
+ |
* Freezes out all velocity, angular velocity, forces and torques |
179 |
+ |
* on this StuntDouble. Also computes the number of frozen degrees |
180 |
+ |
* of freedom. |
181 |
+ |
* @return the total number of frozen degrees of freedom |
182 |
+ |
*/ |
183 |
+ |
int freeze() { |
184 |
+ |
|
185 |
+ |
int fdf = 3; |
186 |
+ |
|
187 |
+ |
setVel(V3Zero); |
188 |
+ |
setFrc(V3Zero); |
189 |
+ |
if (isDirectional()){ |
190 |
+ |
setJ(V3Zero); |
191 |
+ |
setTrq(V3Zero); |
192 |
+ |
if (isLinear()) |
193 |
+ |
fdf +=2; |
194 |
+ |
else |
195 |
+ |
fdf +=3; |
196 |
+ |
} |
197 |
+ |
return fdf; |
198 |
|
} |
199 |
|
|
200 |
|
/** |
409 |
|
void setJ(const Vector3d& angMom, int snapshotNo) { |
410 |
|
((snapshotMan_->getSnapshot(snapshotNo))->*storage_).angularMomentum[localIndex_] = angMom; |
411 |
|
} |
412 |
< |
|
412 |
> |
|
413 |
|
/** |
414 |
+ |
* Returns system Center of Mass for stuntdouble frame from snapshot |
415 |
+ |
* |
416 |
+ |
*/ |
417 |
+ |
Vector3d getCOM(){ |
418 |
+ |
return (snapshotMan_->getCurrentSnapshot())->getCOM(); |
419 |
+ |
} |
420 |
+ |
|
421 |
+ |
/** |
422 |
+ |
* Returns system Center of Mass velocity for stuntdouble frame from snapshot |
423 |
+ |
* |
424 |
+ |
*/ |
425 |
+ |
|
426 |
+ |
Vector3d getCOMvel(){ |
427 |
+ |
return (snapshotMan_->getCurrentSnapshot())->getCOMvel(); |
428 |
+ |
} |
429 |
+ |
|
430 |
+ |
/** |
431 |
+ |
* Returns system Center of Mass angular momentum for stuntdouble frame from snapshot |
432 |
+ |
* |
433 |
+ |
*/ |
434 |
+ |
Vector3d getCOMw(){ |
435 |
+ |
return (snapshotMan_->getCurrentSnapshot())->getCOMw(); |
436 |
+ |
} |
437 |
+ |
|
438 |
+ |
/** |
439 |
+ |
* Returns system Center of Mass for stuntdouble frame from snapshot |
440 |
+ |
* |
441 |
+ |
*/ |
442 |
+ |
Vector3d getCOM(int snapshotNo){ |
443 |
+ |
return (snapshotMan_->getSnapshot(snapshotNo))->getCOM(); |
444 |
+ |
} |
445 |
+ |
|
446 |
+ |
/** |
447 |
+ |
* Returns system Center of Mass velocity for stuntdouble frame from snapshot |
448 |
+ |
* |
449 |
+ |
*/ |
450 |
+ |
|
451 |
+ |
Vector3d getCOMvel(int snapshotNo){ |
452 |
+ |
return (snapshotMan_->getSnapshot(snapshotNo))->getCOMvel(); |
453 |
+ |
} |
454 |
+ |
|
455 |
+ |
/** |
456 |
+ |
* Returns system Center of Mass angular momentum for stuntdouble frame from snapshot |
457 |
+ |
* |
458 |
+ |
*/ |
459 |
+ |
Vector3d getCOMw(int snapshotNo){ |
460 |
+ |
return (snapshotMan_->getSnapshot(snapshotNo))->getCOMw(); |
461 |
+ |
} |
462 |
+ |
|
463 |
+ |
/** |
464 |
|
* Returns the previous quaternion of this stuntdouble |
465 |
|
* @return the quaternion of this stuntdouble |
466 |
|
*/ |
540 |
|
} |
541 |
|
|
542 |
|
/** |
543 |
< |
* Sets the previous euler angles of this stuntdouble. |
543 |
> |
* Sets the previous euler angles of this stuntRealType. |
544 |
|
* @param euler new euler angles |
545 |
|
* @see #getEuler |
546 |
|
* @note actual storage data is rotation matrix |
767 |
|
* Returns the previous z-angle of this stuntdouble |
768 |
|
* @return the z-angle of this stuntdouble |
769 |
|
*/ |
770 |
< |
double getPrevZangle() { |
770 |
> |
RealType getPrevZangle() { |
771 |
|
return ((snapshotMan_->getPrevSnapshot())->*storage_).zAngle[localIndex_]; |
772 |
|
} |
773 |
|
|
775 |
|
* Returns the current z-angle of this stuntdouble |
776 |
|
* @return the z-angle of this stuntdouble |
777 |
|
*/ |
778 |
< |
double getZangle() { |
778 |
> |
RealType getZangle() { |
779 |
|
return ((snapshotMan_->getCurrentSnapshot())->*storage_).zAngle[localIndex_]; |
780 |
|
} |
781 |
|
|
784 |
|
* @return the z-angle of this stuntdouble |
785 |
|
* @param snapshotNo |
786 |
|
*/ |
787 |
< |
double getZangle(int snapshotNo) { |
787 |
> |
RealType getZangle(int snapshotNo) { |
788 |
|
return ((snapshotMan_->getSnapshot(snapshotNo))->*storage_).zAngle[localIndex_]; |
789 |
|
} |
790 |
|
|
793 |
|
* @param angle new z-angle |
794 |
|
* @see #getZangle |
795 |
|
*/ |
796 |
< |
void setPrevZangle(double angle) { |
796 |
> |
void setPrevZangle(RealType angle) { |
797 |
|
((snapshotMan_->getPrevSnapshot())->*storage_).zAngle[localIndex_] = angle; |
798 |
|
} |
799 |
|
|
801 |
|
* Sets the current z-angle of this stuntdouble |
802 |
|
* @param angle new z-angle |
803 |
|
*/ |
804 |
< |
void setZangle(double angle) { |
804 |
> |
void setZangle(RealType angle) { |
805 |
|
((snapshotMan_->getCurrentSnapshot())->*storage_).zAngle[localIndex_] = angle; |
806 |
|
} |
807 |
|
|
811 |
|
* @param snapshotNo |
812 |
|
* @see #getZangle |
813 |
|
*/ |
814 |
< |
void setZangle(double angle, int snapshotNo) { |
814 |
> |
void setZangle(RealType angle, int snapshotNo) { |
815 |
|
((snapshotMan_->getSnapshot(snapshotNo))->*storage_).zAngle[localIndex_] = angle; |
816 |
|
} |
817 |
|
|
820 |
|
* @param angle new z-angle |
821 |
|
* @see #getZangle |
822 |
|
*/ |
823 |
< |
void addPrevZangle(double angle) { |
823 |
> |
void addPrevZangle(RealType angle) { |
824 |
|
((snapshotMan_->getPrevSnapshot())->*storage_).zAngle[localIndex_] += angle; |
825 |
|
} |
826 |
|
|
828 |
|
* Adds z-angle into the current z-angle of this stuntdouble |
829 |
|
* @param angle new z-angle |
830 |
|
*/ |
831 |
< |
void addZangle(double angle) { |
831 |
> |
void addZangle(RealType angle) { |
832 |
|
((snapshotMan_->getCurrentSnapshot())->*storage_).zAngle[localIndex_] += angle; |
833 |
|
} |
834 |
|
|
838 |
|
* @param snapshotNo |
839 |
|
* @see #getZangle |
840 |
|
*/ |
841 |
< |
void addZangle(double angle, int snapshotNo) { |
841 |
> |
void addZangle(RealType angle, int snapshotNo) { |
842 |
|
((snapshotMan_->getSnapshot(snapshotNo))->*storage_).zAngle[localIndex_] += angle; |
843 |
|
} |
844 |
|
|
854 |
|
* Returns the gradient of this stuntdouble |
855 |
|
* @return the gradient of this stuntdouble |
856 |
|
*/ |
857 |
< |
virtual std::vector<double> getGrad() = 0; |
857 |
> |
virtual std::vector<RealType> getGrad() = 0; |
858 |
|
|
859 |
|
/** |
860 |
|
* Tests the if this stuntdouble is a linear rigidbody |
880 |
|
} |
881 |
|
|
882 |
|
/** Returns the mass of this stuntdouble */ |
883 |
< |
double getMass() { |
883 |
> |
RealType getMass() { |
884 |
|
return mass_; |
885 |
|
} |
886 |
|
|
888 |
|
* Sets the mass of this stuntdoulbe |
889 |
|
* @param mass the mass to be set |
890 |
|
*/ |
891 |
< |
void setMass(double mass) { |
891 |
> |
void setMass(RealType mass) { |
892 |
|
mass_ = mass; |
893 |
|
} |
894 |
|
|
895 |
|
/** Returns the name of this stuntdouble */ |
896 |
|
virtual std::string getType() = 0; |
897 |
|
|
898 |
< |
/** Sets the name of this stuntdouble*/ |
898 |
> |
/** Sets the name of this stuntRealType*/ |
899 |
|
virtual void setType(const std::string& name) {} |
900 |
|
|
901 |
|
/** |
989 |
|
|
990 |
|
|
991 |
|
int globalIndex_; |
992 |
+ |
int globalIntegrableObjectIndex_; |
993 |
|
int localIndex_; |
994 |
|
|
995 |
|
|
996 |
< |
double mass_; |
996 |
> |
RealType mass_; |
997 |
|
|
998 |
|
private: |
999 |
|
|