| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355 |
- /*************************************************************************
- * *
- * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. *
- * All rights reserved. Email: [email protected] Web: www.q12.org *
- * *
- * This library is free software; you can redistribute it and/or *
- * modify it under the terms of EITHER: *
- * (1) The GNU Lesser General Public License as published by the Free *
- * Software Foundation; either version 2.1 of the License, or (at *
- * your option) any later version. The text of the GNU Lesser *
- * General Public License is included with this library in the *
- * file LICENSE.TXT. *
- * (2) The BSD-style license that is included with this library in *
- * the file LICENSE-BSD.TXT. *
- * *
- * This library is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files *
- * LICENSE.TXT and LICENSE-BSD.TXT for more details. *
- * *
- *************************************************************************/
- /* C++ interface for non-collision stuff */
- #ifndef _ODE_ODECPP_H_
- #define _ODE_ODECPP_H_
- #ifdef __cplusplus
- //namespace ode {
- class dWorldSimpleIDContainer {
- protected:
- dWorldID _id;
- dWorldSimpleIDContainer(): _id(0) {}
- ~dWorldSimpleIDContainer() { destroy(); }
- void destroy() {
- if (_id) {
- dWorldDestroy(_id);
- _id = 0;
- }
- }
- };
- class dWorldDynamicIDContainer: public dWorldSimpleIDContainer {
- protected:
- virtual ~dWorldDynamicIDContainer() {}
- };
- template <class dWorldTemplateBase>
- class dWorldTemplate: public dWorldTemplateBase {
- // intentionally undefined, don't use these
- dWorldTemplate (const dWorldTemplate<dWorldTemplateBase> &);
- void operator= (const dWorldTemplate<dWorldTemplateBase> &);
- protected:
- dWorldID get_id() const { return dWorldTemplateBase::_id; }
- void set_id(dWorldID value) { dWorldTemplateBase::_id = value; }
- public:
- dWorldTemplate()
- { set_id(dWorldCreate()); }
- dWorldID id() const
- { return get_id(); }
- operator dWorldID() const
- { return get_id(); }
- void setGravity (dReal x, dReal y, dReal z)
- { dWorldSetGravity (get_id(), x, y, z); }
- void setGravity (const dVector3 g)
- { setGravity (g[0], g[1], g[2]); }
- void getGravity (dVector3 g) const
- { dWorldGetGravity (get_id(), g); }
- void setERP (dReal erp)
- { dWorldSetERP(get_id(), erp); }
- dReal getERP() const
- { return dWorldGetERP(get_id()); }
- void setCFM (dReal cfm)
- { dWorldSetCFM(get_id(), cfm); }
- dReal getCFM() const
- { return dWorldGetCFM(get_id()); }
- void step (dReal stepsize)
- { dWorldStep (get_id(), stepsize); }
- void quickStep(dReal stepsize)
- { dWorldQuickStep (get_id(), stepsize); }
- void setQuickStepNumIterations(int num)
- { dWorldSetQuickStepNumIterations (get_id(), num); }
- int getQuickStepNumIterations() const
- { return dWorldGetQuickStepNumIterations (get_id()); }
- void setQuickStepW(dReal over_relaxation)
- { dWorldSetQuickStepW (get_id(), over_relaxation); }
- dReal getQuickStepW() const
- { return dWorldGetQuickStepW (get_id()); }
- void setAutoDisableLinearThreshold (dReal threshold)
- { dWorldSetAutoDisableLinearThreshold (get_id(), threshold); }
- dReal getAutoDisableLinearThreshold() const
- { return dWorldGetAutoDisableLinearThreshold (get_id()); }
- void setAutoDisableAngularThreshold (dReal threshold)
- { dWorldSetAutoDisableAngularThreshold (get_id(), threshold); }
- dReal getAutoDisableAngularThreshold() const
- { return dWorldGetAutoDisableAngularThreshold (get_id()); }
- void setAutoDisableSteps (int steps)
- { dWorldSetAutoDisableSteps (get_id(), steps); }
- int getAutoDisableSteps() const
- { return dWorldGetAutoDisableSteps (get_id()); }
- void setAutoDisableTime (dReal time)
- { dWorldSetAutoDisableTime (get_id(), time); }
- dReal getAutoDisableTime() const
- { return dWorldGetAutoDisableTime (get_id()); }
- void setAutoDisableFlag (int do_auto_disable)
- { dWorldSetAutoDisableFlag (get_id(), do_auto_disable); }
- int getAutoDisableFlag() const
- { return dWorldGetAutoDisableFlag (get_id()); }
- dReal getLinearDampingThreshold() const
- { return dWorldGetLinearDampingThreshold(get_id()); }
- void setLinearDampingThreshold(dReal threshold)
- { dWorldSetLinearDampingThreshold(get_id(), threshold); }
- dReal getAngularDampingThreshold() const
- { return dWorldGetAngularDampingThreshold(get_id()); }
- void setAngularDampingThreshold(dReal threshold)
- { dWorldSetAngularDampingThreshold(get_id(), threshold); }
- dReal getLinearDamping() const
- { return dWorldGetLinearDamping(get_id()); }
- void setLinearDamping(dReal scale)
- { dWorldSetLinearDamping(get_id(), scale); }
- dReal getAngularDamping() const
- { return dWorldGetAngularDamping(get_id()); }
- void setAngularDamping(dReal scale)
- { dWorldSetAngularDamping(get_id(), scale); }
- void setDamping(dReal linear_scale, dReal angular_scale)
- { dWorldSetDamping(get_id(), linear_scale, angular_scale); }
- dReal getMaxAngularSpeed() const
- { return dWorldGetMaxAngularSpeed(get_id()); }
- void setMaxAngularSpeed(dReal max_speed)
- { dWorldSetMaxAngularSpeed(get_id(), max_speed); }
- void setContactSurfaceLayer(dReal depth)
- { dWorldSetContactSurfaceLayer (get_id(), depth); }
- dReal getContactSurfaceLayer() const
- { return dWorldGetContactSurfaceLayer (get_id()); }
- void impulseToForce (dReal stepsize, dReal ix, dReal iy, dReal iz,
- dVector3 force)
- { dWorldImpulseToForce (get_id(), stepsize, ix, iy, iz, force); }
- };
- class dBodySimpleIDContainer {
- protected:
- dBodyID _id;
- dBodySimpleIDContainer(): _id(0) {}
- ~dBodySimpleIDContainer() { destroy(); }
- void destroy() {
- if (_id) {
- dBodyDestroy(_id);
- _id = 0;
- }
- }
- };
- class dBodyDynamicIDContainer: public dBodySimpleIDContainer {
- protected:
- virtual ~dBodyDynamicIDContainer() {}
- };
- template <class dBodyTemplateBase, class dWorldTemplateBase>
- class dBodyTemplate: public dBodyTemplateBase {
- // intentionally undefined, don't use these
- dBodyTemplate (const dBodyTemplate<dBodyTemplateBase, dWorldTemplateBase> &);
- void operator= (const dBodyTemplate<dBodyTemplateBase, dWorldTemplateBase> &);
- protected:
- dBodyID get_id() const { return dBodyTemplateBase::_id; }
- void set_id(dBodyID value) { dBodyTemplateBase::_id = value; }
- void destroy() { dBodyTemplateBase::destroy(); }
- public:
- dBodyTemplate()
- { }
- dBodyTemplate (dWorldID world)
- { set_id(dBodyCreate(world)); }
- dBodyTemplate (dWorldTemplate<dWorldTemplateBase>& world)
- { set_id(dBodyCreate(world.id())); }
- void create (dWorldID world) {
- destroy();
- set_id(dBodyCreate(world));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world) {
- create(world.id());
- }
- dBodyID id() const
- { return get_id(); }
- operator dBodyID() const
- { return get_id(); }
- void setData (void *data)
- { dBodySetData (get_id(), data); }
- void *getData() const
- { return dBodyGetData (get_id()); }
- void setPosition (dReal x, dReal y, dReal z)
- { dBodySetPosition (get_id(), x, y, z); }
- void setPosition (const dVector3 p)
- { setPosition(p[0], p[1], p[2]); }
- void setRotation (const dMatrix3 R)
- { dBodySetRotation (get_id(), R); }
- void setQuaternion (const dQuaternion q)
- { dBodySetQuaternion (get_id(), q); }
- void setLinearVel (dReal x, dReal y, dReal z)
- { dBodySetLinearVel (get_id(), x, y, z); }
- void setLinearVel (const dVector3 v)
- { setLinearVel(v[0], v[1], v[2]); }
- void setAngularVel (dReal x, dReal y, dReal z)
- { dBodySetAngularVel (get_id(), x, y, z); }
- void setAngularVel (const dVector3 v)
- { setAngularVel (v[0], v[1], v[2]); }
- const dReal * getPosition() const
- { return dBodyGetPosition (get_id()); }
- const dReal * getRotation() const
- { return dBodyGetRotation (get_id()); }
- const dReal * getQuaternion() const
- { return dBodyGetQuaternion (get_id()); }
- const dReal * getLinearVel() const
- { return dBodyGetLinearVel (get_id()); }
- const dReal * getAngularVel() const
- { return dBodyGetAngularVel (get_id()); }
- void setMass (const dMass *mass)
- { dBodySetMass (get_id(), mass); }
- void setMass (const dMass &mass)
- { setMass (&mass); }
- dMass getMass () const
- { dMass mass; dBodyGetMass (get_id(), &mass); return mass; }
- void addForce (dReal fx, dReal fy, dReal fz)
- { dBodyAddForce (get_id(), fx, fy, fz); }
- void addForce (const dVector3 f)
- { addForce (f[0], f[1], f[2]); }
- void addTorque (dReal fx, dReal fy, dReal fz)
- { dBodyAddTorque (get_id(), fx, fy, fz); }
- void addTorque (const dVector3 t)
- { addTorque(t[0], t[1], t[2]); }
- void addRelForce (dReal fx, dReal fy, dReal fz)
- { dBodyAddRelForce (get_id(), fx, fy, fz); }
- void addRelForce (const dVector3 f)
- { addRelForce (f[0], f[1], f[2]); }
- void addRelTorque (dReal fx, dReal fy, dReal fz)
- { dBodyAddRelTorque (get_id(), fx, fy, fz); }
- void addRelTorque (const dVector3 t)
- { addRelTorque (t[0], t[1], t[2]); }
- void addForceAtPos (dReal fx, dReal fy, dReal fz,
- dReal px, dReal py, dReal pz)
- { dBodyAddForceAtPos (get_id(), fx, fy, fz, px, py, pz); }
- void addForceAtPos (const dVector3 f, const dVector3 p)
- { addForceAtPos (f[0], f[1], f[2], p[0], p[1], p[2]); }
- void addForceAtRelPos (dReal fx, dReal fy, dReal fz,
- dReal px, dReal py, dReal pz)
- { dBodyAddForceAtRelPos (get_id(), fx, fy, fz, px, py, pz); }
- void addForceAtRelPos (const dVector3 f, const dVector3 p)
- { addForceAtRelPos (f[0], f[1], f[2], p[0], p[1], p[2]); }
- void addRelForceAtPos (dReal fx, dReal fy, dReal fz,
- dReal px, dReal py, dReal pz)
- { dBodyAddRelForceAtPos (get_id(), fx, fy, fz, px, py, pz); }
- void addRelForceAtPos (const dVector3 f, const dVector3 p)
- { addRelForceAtPos (f[0], f[1], f[2], p[0], p[1], p[2]); }
- void addRelForceAtRelPos (dReal fx, dReal fy, dReal fz,
- dReal px, dReal py, dReal pz)
- { dBodyAddRelForceAtRelPos (get_id(), fx, fy, fz, px, py, pz); }
- void addRelForceAtRelPos (const dVector3 f, const dVector3 p)
- { addRelForceAtRelPos (f[0], f[1], f[2], p[0], p[1], p[2]); }
- const dReal * getForce() const
- { return dBodyGetForce(get_id()); }
- const dReal * getTorque() const
- { return dBodyGetTorque(get_id()); }
- void setForce (dReal x, dReal y, dReal z)
- { dBodySetForce (get_id(), x, y, z); }
- void setForce (const dVector3 f)
- { setForce (f[0], f[1], f[2]); }
- void setTorque (dReal x, dReal y, dReal z)
- { dBodySetTorque (get_id(), x, y, z); }
- void setTorque (const dVector3 t)
- { setTorque (t[0], t[1], t[2]); }
- void setDynamic()
- { dBodySetDynamic (get_id()); }
- void setKinematic()
- { dBodySetKinematic (get_id()); }
- bool isKinematic() const
- { return dBodyIsKinematic (get_id()) != 0; }
- void enable()
- { dBodyEnable (get_id()); }
- void disable()
- { dBodyDisable (get_id()); }
- bool isEnabled() const
- { return dBodyIsEnabled (get_id()) != 0; }
- void getRelPointPos (dReal px, dReal py, dReal pz, dVector3 result) const
- { dBodyGetRelPointPos (get_id(), px, py, pz, result); }
- void getRelPointPos (const dVector3 p, dVector3 result) const
- { getRelPointPos (p[0], p[1], p[2], result); }
- void getRelPointVel (dReal px, dReal py, dReal pz, dVector3 result) const
- { dBodyGetRelPointVel (get_id(), px, py, pz, result); }
- void getRelPointVel (const dVector3 p, dVector3 result) const
- { getRelPointVel (p[0], p[1], p[2], result); }
- void getPointVel (dReal px, dReal py, dReal pz, dVector3 result) const
- { dBodyGetPointVel (get_id(), px, py, pz, result); }
- void getPointVel (const dVector3 p, dVector3 result) const
- { getPointVel (p[0], p[1], p[2], result); }
- void getPosRelPoint (dReal px, dReal py, dReal pz, dVector3 result) const
- { dBodyGetPosRelPoint (get_id(), px, py, pz, result); }
- void getPosRelPoint (const dVector3 p, dVector3 result) const
- { getPosRelPoint (p[0], p[1], p[2], result); }
- void vectorToWorld (dReal px, dReal py, dReal pz, dVector3 result) const
- { dBodyVectorToWorld (get_id(), px, py, pz, result); }
- void vectorToWorld (const dVector3 p, dVector3 result) const
- { vectorToWorld (p[0], p[1], p[2], result); }
- void vectorFromWorld (dReal px, dReal py, dReal pz, dVector3 result) const
- { dBodyVectorFromWorld (get_id(), px, py, pz, result); }
- void vectorFromWorld (const dVector3 p, dVector3 result) const
- { vectorFromWorld (p[0], p[1], p[2], result); }
- void setFiniteRotationMode (bool mode)
- { dBodySetFiniteRotationMode (get_id(), mode); }
- void setFiniteRotationAxis (dReal x, dReal y, dReal z)
- { dBodySetFiniteRotationAxis (get_id(), x, y, z); }
- void setFiniteRotationAxis (const dVector3 a)
- { setFiniteRotationAxis (a[0], a[1], a[2]); }
- bool getFiniteRotationMode() const
- { return dBodyGetFiniteRotationMode (get_id()) != 0; }
- void getFiniteRotationAxis (dVector3 result) const
- { dBodyGetFiniteRotationAxis (get_id(), result); }
- int getNumJoints() const
- { return dBodyGetNumJoints (get_id()); }
- dJointID getJoint (int index) const
- { return dBodyGetJoint (get_id(), index); }
- void setGravityMode (bool mode)
- { dBodySetGravityMode (get_id(), mode); }
- bool getGravityMode() const
- { return dBodyGetGravityMode (get_id()) != 0; }
- bool isConnectedTo (dBodyID body) const
- { return dAreConnected (get_id(), body) != 0; }
- void setAutoDisableLinearThreshold (dReal threshold)
- { dBodySetAutoDisableLinearThreshold (get_id(), threshold); }
- dReal getAutoDisableLinearThreshold() const
- { return dBodyGetAutoDisableLinearThreshold (get_id()); }
- void setAutoDisableAngularThreshold (dReal threshold)
- { dBodySetAutoDisableAngularThreshold (get_id(), threshold); }
- dReal getAutoDisableAngularThreshold() const
- { return dBodyGetAutoDisableAngularThreshold (get_id()); }
- void setAutoDisableSteps (int steps)
- { dBodySetAutoDisableSteps (get_id(), steps); }
- int getAutoDisableSteps() const
- { return dBodyGetAutoDisableSteps (get_id()); }
- void setAutoDisableTime (dReal time)
- { dBodySetAutoDisableTime (get_id(), time); }
- dReal getAutoDisableTime() const
- { return dBodyGetAutoDisableTime (get_id()); }
- void setAutoDisableFlag (bool do_auto_disable)
- { dBodySetAutoDisableFlag (get_id(), do_auto_disable); }
- bool getAutoDisableFlag() const
- { return dBodyGetAutoDisableFlag (get_id()) != 0; }
- dReal getLinearDamping() const
- { return dBodyGetLinearDamping(get_id()); }
- void setLinearDamping(dReal scale)
- { dBodySetLinearDamping(get_id(), scale); }
- dReal getAngularDamping() const
- { return dBodyGetAngularDamping(get_id()); }
- void setAngularDamping(dReal scale)
- { dBodySetAngularDamping(get_id(), scale); }
- void setDamping(dReal linear_scale, dReal angular_scale)
- { dBodySetDamping(get_id(), linear_scale, angular_scale); }
- dReal getLinearDampingThreshold() const
- { return dBodyGetLinearDampingThreshold(get_id()); }
- void setLinearDampingThreshold(dReal threshold) const
- { dBodySetLinearDampingThreshold(get_id(), threshold); }
- dReal getAngularDampingThreshold() const
- { return dBodyGetAngularDampingThreshold(get_id()); }
- void setAngularDampingThreshold(dReal threshold)
- { dBodySetAngularDampingThreshold(get_id(), threshold); }
- void setDampingDefaults()
- { dBodySetDampingDefaults(get_id()); }
- dReal getMaxAngularSpeed() const
- { return dBodyGetMaxAngularSpeed(get_id()); }
- void setMaxAngularSpeed(dReal max_speed)
- { dBodySetMaxAngularSpeed(get_id(), max_speed); }
- bool getGyroscopicMode() const
- { return dBodyGetGyroscopicMode(get_id()) != 0; }
- void setGyroscopicMode(bool mode)
- { dBodySetGyroscopicMode(get_id(), mode); }
- };
- class dJointGroupSimpleIDContainer {
- protected:
- dJointGroupID _id;
- dJointGroupSimpleIDContainer(): _id(0) {}
- ~dJointGroupSimpleIDContainer() { destroy(); }
- void destroy() {
- if (_id) {
- dJointGroupDestroy(_id);
- _id = 0;
- }
- }
- };
- class dJointGroupDynamicIDContainer: public dJointGroupSimpleIDContainer {
- protected:
- virtual ~dJointGroupDynamicIDContainer() {}
- };
- template <class dJointGroupTemplateBase>
- class dJointGroupTemplate: public dJointGroupTemplateBase {
- // intentionally undefined, don't use these
- dJointGroupTemplate (const dJointGroupTemplate<dJointGroupTemplateBase> &);
- void operator= (const dJointGroupTemplate<dJointGroupTemplateBase> &);
- protected:
- dJointGroupID get_id() const { return dJointGroupTemplateBase::_id; }
- void set_id(dJointGroupID value) { dJointGroupTemplateBase::_id = value; }
- void destroy() { dJointGroupTemplateBase::destroy(); }
- public:
- dJointGroupTemplate ()
- { set_id(dJointGroupCreate(0)); }
-
- void create () {
- destroy();
- set_id(dJointGroupCreate(0));
- }
- dJointGroupID id() const
- { return get_id(); }
- operator dJointGroupID() const
- { return get_id(); }
- void empty()
- { dJointGroupEmpty (get_id()); }
- void clear()
- { empty(); }
- };
- class dJointSimpleIDContainer {
- protected:
- dJointID _id;
- dJointSimpleIDContainer(): _id(0) {}
- ~dJointSimpleIDContainer() { destroy(); }
- void destroy() {
- if (_id) {
- dJointDestroy (_id);
- _id = 0;
- }
- }
- };
- class dJointDynamicIDContainer: public dJointSimpleIDContainer {
- protected:
- virtual ~dJointDynamicIDContainer() {}
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dJointTemplate: public dJointTemplateBase {
- private:
- // intentionally undefined, don't use these
- dJointTemplate (const dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &) ;
- void operator= (const dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- dJointID get_id() const { return dJointTemplateBase::_id; }
- void set_id(dJointID value) { dJointTemplateBase::_id = value; }
- void destroy() { dJointTemplateBase::destroy(); }
- protected:
- dJointTemplate() // don't let user construct pure dJointTemplate objects
- { }
- public:
- dJointID id() const
- { return get_id(); }
- operator dJointID() const
- { return get_id(); }
- int getNumBodies() const
- { return dJointGetNumBodies(get_id()); }
- void attach (dBodyID body1, dBodyID body2)
- { dJointAttach (get_id(), body1, body2); }
- void attach (dBodyTemplate<dBodyTemplateBase, dWorldTemplateBase>& body1, dBodyTemplate<dBodyTemplateBase, dWorldTemplateBase>& body2)
- { attach(body1.id(), body2.id()); }
- void enable()
- { dJointEnable (get_id()); }
- void disable()
- { dJointDisable (get_id()); }
- bool isEnabled() const
- { return dJointIsEnabled (get_id()) != 0; }
- void setData (void *data)
- { dJointSetData (get_id(), data); }
- void *getData() const
- { return dJointGetData (get_id()); }
- dJointType getType() const
- { return dJointGetType (get_id()); }
- dBodyID getBody (int index) const
- { return dJointGetBody (get_id(), index); }
- void setFeedback(dJointFeedback *fb)
- { dJointSetFeedback(get_id(), fb); }
- dJointFeedback *getFeedback() const
- { return dJointGetFeedback(get_id()); }
- // If not implemented it will do nothing as describe in the doc
- virtual void setParam (int, dReal) {};
- virtual dReal getParam (int) const { return 0; }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dBallJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dBallJointTemplate (const dBallJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator= (const dBallJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dBallJointTemplate() { }
- dBallJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreateBall(world, group)); }
- dBallJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreateBall(world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreateBall(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void setAnchor (dReal x, dReal y, dReal z)
- { dJointSetBallAnchor (get_id(), x, y, z); }
- void setAnchor (const dVector3 a)
- { setAnchor (a[0], a[1], a[2]); }
- void getAnchor (dVector3 result) const
- { dJointGetBallAnchor (get_id(), result); }
- void getAnchor2 (dVector3 result) const
- { dJointGetBallAnchor2 (get_id(), result); }
- virtual void setParam (int parameter, dReal value)
- { dJointSetBallParam (get_id(), parameter, value); }
- virtual dReal getParam (int parameter) const
- { return dJointGetBallParam (get_id(), parameter); }
- // TODO: expose params through methods
- } ;
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dHingeJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dHingeJointTemplate (const dHingeJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dHingeJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dHingeJointTemplate() { }
- dHingeJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreateHinge(world, group)); }
- dHingeJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreateHinge(world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreateHinge (world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
-
- void setAnchor (dReal x, dReal y, dReal z)
- { dJointSetHingeAnchor (get_id(), x, y, z); }
- void setAnchor (const dVector3 a)
- { setAnchor (a[0], a[1], a[2]); }
- void getAnchor (dVector3 result) const
- { dJointGetHingeAnchor (get_id(), result); }
- void getAnchor2 (dVector3 result) const
- { dJointGetHingeAnchor2 (get_id(), result); }
- void setAxis (dReal x, dReal y, dReal z)
- { dJointSetHingeAxis (get_id(), x, y, z); }
- void setAxis (const dVector3 a)
- { setAxis(a[0], a[1], a[2]); }
- void getAxis (dVector3 result) const
- { dJointGetHingeAxis (get_id(), result); }
- dReal getAngle() const
- { return dJointGetHingeAngle (get_id()); }
- dReal getAngleRate() const
- { return dJointGetHingeAngleRate (get_id()); }
- virtual void setParam (int parameter, dReal value)
- { dJointSetHingeParam (get_id(), parameter, value); }
- virtual dReal getParam (int parameter) const
- { return dJointGetHingeParam (get_id(), parameter); }
- // TODO: expose params through methods
- void addTorque (dReal torque)
- { dJointAddHingeTorque(get_id(), torque); }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dSliderJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dSliderJointTemplate (const dSliderJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dSliderJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dSliderJointTemplate() { }
- dSliderJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreateSlider(world, group)); }
- dSliderJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreateSlider(world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreateSlider(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void setAxis (dReal x, dReal y, dReal z)
- { dJointSetSliderAxis (get_id(), x, y, z); }
- void setAxis (const dVector3 a)
- { setAxis (a[0], a[1], a[2]); }
- void getAxis (dVector3 result) const
- { dJointGetSliderAxis (get_id(), result); }
- dReal getPosition() const
- { return dJointGetSliderPosition (get_id()); }
- dReal getPositionRate() const
- { return dJointGetSliderPositionRate (get_id()); }
- virtual void setParam (int parameter, dReal value)
- { dJointSetSliderParam (get_id(), parameter, value); }
- virtual dReal getParam (int parameter) const
- { return dJointGetSliderParam (get_id(), parameter); }
- // TODO: expose params through methods
- void addForce (dReal force)
- { dJointAddSliderForce(get_id(), force); }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dUniversalJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dUniversalJointTemplate (const dUniversalJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dUniversalJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dUniversalJointTemplate() { }
- dUniversalJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreateUniversal(world, group)); }
- dUniversalJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreateUniversal(world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreateUniversal(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void setAnchor (dReal x, dReal y, dReal z)
- { dJointSetUniversalAnchor (get_id(), x, y, z); }
- void setAnchor (const dVector3 a)
- { setAnchor(a[0], a[1], a[2]); }
- void setAxis1 (dReal x, dReal y, dReal z)
- { dJointSetUniversalAxis1 (get_id(), x, y, z); }
- void setAxis1 (const dVector3 a)
- { setAxis1 (a[0], a[1], a[2]); }
- void setAxis2 (dReal x, dReal y, dReal z)
- { dJointSetUniversalAxis2 (get_id(), x, y, z); }
- void setAxis2 (const dVector3 a)
- { setAxis2 (a[0], a[1], a[2]); }
- void getAnchor (dVector3 result) const
- { dJointGetUniversalAnchor (get_id(), result); }
- void getAnchor2 (dVector3 result) const
- { dJointGetUniversalAnchor2 (get_id(), result); }
- void getAxis1 (dVector3 result) const
- { dJointGetUniversalAxis1 (get_id(), result); }
- void getAxis2 (dVector3 result) const
- { dJointGetUniversalAxis2 (get_id(), result); }
- virtual void setParam (int parameter, dReal value)
- { dJointSetUniversalParam (get_id(), parameter, value); }
- virtual dReal getParam (int parameter) const
- { return dJointGetUniversalParam (get_id(), parameter); }
- // TODO: expose params through methods
-
- void getAngles(dReal *angle1, dReal *angle2) const
- { dJointGetUniversalAngles (get_id(), angle1, angle2); }
- dReal getAngle1() const
- { return dJointGetUniversalAngle1 (get_id()); }
- dReal getAngle1Rate() const
- { return dJointGetUniversalAngle1Rate (get_id()); }
- dReal getAngle2() const
- { return dJointGetUniversalAngle2 (get_id()); }
- dReal getAngle2Rate() const
- { return dJointGetUniversalAngle2Rate (get_id()); }
- void addTorques (dReal torque1, dReal torque2)
- { dJointAddUniversalTorques(get_id(), torque1, torque2); }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dHinge2JointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dHinge2JointTemplate (const dHinge2JointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dHinge2JointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dHinge2JointTemplate() { }
- dHinge2JointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreateHinge2(world, group)); }
- dHinge2JointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreateHinge2(world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreateHinge2(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void setAnchor (dReal x, dReal y, dReal z)
- { dJointSetHinge2Anchor (get_id(), x, y, z); }
- void setAnchor (const dVector3 a)
- { setAnchor(a[0], a[1], a[2]); }
- void setAxes (const dReal *axis1/*=NULL*/, const dReal *axis2/*=NULL*/)
- { dJointSetHinge2Axes (get_id(), axis1, axis2); }
- ODE_API_DEPRECATED void setAxis1 (dReal x, dReal y, dReal z)
- { dVector3 a = { x, y, z }; dJointSetHinge2Axes (get_id(), a, NULL); }
- ODE_API_DEPRECATED void setAxis1 (const dVector3 a)
- { dJointSetHinge2Axes (get_id(), a, NULL); }
- ODE_API_DEPRECATED void setAxis2 (dReal x, dReal y, dReal z)
- { dVector3 a = { x, y, z }; dJointSetHinge2Axes (get_id(), NULL, a); }
- ODE_API_DEPRECATED void setAxis2 (const dVector3 a)
- { dJointSetHinge2Axes (get_id(), NULL, a); }
-
- void getAnchor (dVector3 result) const
- { dJointGetHinge2Anchor (get_id(), result); }
- void getAnchor2 (dVector3 result) const
- { dJointGetHinge2Anchor2 (get_id(), result); }
- void getAxis1 (dVector3 result) const
- { dJointGetHinge2Axis1 (get_id(), result); }
- void getAxis2 (dVector3 result) const
- { dJointGetHinge2Axis2 (get_id(), result); }
- dReal getAngle1() const
- { return dJointGetHinge2Angle1 (get_id()); }
- dReal getAngle1Rate() const
- { return dJointGetHinge2Angle1Rate (get_id()); }
- dReal getAngle2Rate() const
- { return dJointGetHinge2Angle2Rate (get_id()); }
- virtual void setParam (int parameter, dReal value)
- { dJointSetHinge2Param (get_id(), parameter, value); }
- virtual dReal getParam (int parameter) const
- { return dJointGetHinge2Param (get_id(), parameter); }
- // TODO: expose params through methods
- void addTorques(dReal torque1, dReal torque2)
- { dJointAddHinge2Torques(get_id(), torque1, torque2); }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dPRJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dPRJointTemplate (const dPRJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dPRJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dPRJointTemplate() { }
- dPRJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreatePR(world, group)); }
- dPRJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreatePR(world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreatePR(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void setAnchor (dReal x, dReal y, dReal z)
- { dJointSetPRAnchor (get_id(), x, y, z); }
- void setAnchor (const dVector3 a)
- { setAnchor (a[0], a[1], a[2]); }
- void setAxis1 (dReal x, dReal y, dReal z)
- { dJointSetPRAxis1 (get_id(), x, y, z); }
- void setAxis1 (const dVector3 a)
- { setAxis1(a[0], a[1], a[2]); }
- void setAxis2 (dReal x, dReal y, dReal z)
- { dJointSetPRAxis2 (get_id(), x, y, z); }
- void setAxis2 (const dVector3 a)
- { setAxis2(a[0], a[1], a[2]); }
- void getAnchor (dVector3 result) const
- { dJointGetPRAnchor (get_id(), result); }
- void getAxis1 (dVector3 result) const
- { dJointGetPRAxis1 (get_id(), result); }
- void getAxis2 (dVector3 result) const
- { dJointGetPRAxis2 (get_id(), result); }
- dReal getPosition() const
- { return dJointGetPRPosition (get_id()); }
- dReal getPositionRate() const
- { return dJointGetPRPositionRate (get_id()); }
- dReal getAngle() const
- { return dJointGetPRAngle (get_id()); }
- dReal getAngleRate() const
- { return dJointGetPRAngleRate (get_id()); }
- virtual void setParam (int parameter, dReal value)
- { dJointSetPRParam (get_id(), parameter, value); }
- virtual dReal getParam (int parameter) const
- { return dJointGetPRParam (get_id(), parameter); }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dPUJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase>
- {
- private:
- // intentionally undefined, don't use these
- dPUJointTemplate (const dPUJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dPUJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dPUJointTemplate() { }
- dPUJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreatePU(world, group)); }
- dPUJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreatePU(world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0)
- {
- destroy();
- set_id(dJointCreatePU(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void setAnchor (dReal x, dReal y, dReal z)
- { dJointSetPUAnchor (get_id(), x, y, z); }
- void setAnchor (const dVector3 a)
- { setAnchor (a[0], a[1], a[2]); }
- void setAxis1 (dReal x, dReal y, dReal z)
- { dJointSetPUAxis1 (get_id(), x, y, z); }
- void setAxis1 (const dVector3 a)
- { setAxis1(a[0], a[1], a[2]); }
- void setAxis2 (dReal x, dReal y, dReal z)
- { dJointSetPUAxis2 (get_id(), x, y, z); }
- void setAxis3 (dReal x, dReal y, dReal z)
- { dJointSetPUAxis3 (get_id(), x, y, z); }
- void setAxis3 (const dVector3 a)
- { setAxis3(a[0], a[1], a[2]); }
- void setAxisP (dReal x, dReal y, dReal z)
- { dJointSetPUAxis3 (get_id(), x, y, z); }
- void setAxisP (const dVector3 a)
- { setAxisP(a[0], a[1], a[2]); }
- virtual void getAnchor (dVector3 result) const
- { dJointGetPUAnchor (get_id(), result); }
- void getAxis1 (dVector3 result) const
- { dJointGetPUAxis1 (get_id(), result); }
- void getAxis2 (dVector3 result) const
- { dJointGetPUAxis2 (get_id(), result); }
- void getAxis3 (dVector3 result) const
- { dJointGetPUAxis3 (get_id(), result); }
- void getAxisP (dVector3 result) const
- { dJointGetPUAxis3 (get_id(), result); }
- dReal getAngle1() const
- { return dJointGetPUAngle1 (get_id()); }
- dReal getAngle1Rate() const
- { return dJointGetPUAngle1Rate (get_id()); }
- dReal getAngle2() const
- { return dJointGetPUAngle2 (get_id()); }
- dReal getAngle2Rate() const
- { return dJointGetPUAngle2Rate (get_id()); }
- dReal getPosition() const
- { return dJointGetPUPosition (get_id()); }
- dReal getPositionRate() const
- { return dJointGetPUPositionRate (get_id()); }
- virtual void setParam (int parameter, dReal value)
- { dJointSetPUParam (get_id(), parameter, value); }
- virtual dReal getParam (int parameter) const
- { return dJointGetPUParam (get_id(), parameter); }
- // TODO: expose params through methods
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dPistonJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase>
- {
- private:
- // intentionally undefined, don't use these
- dPistonJointTemplate (const dPistonJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dPistonJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dPistonJointTemplate() { }
- dPistonJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreatePiston(world, group)); }
- dPistonJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreatePiston(world, group)); }
- void create (dWorldID world, dJointGroupID group=0)
- {
- destroy();
- set_id(dJointCreatePiston(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void setAnchor (dReal x, dReal y, dReal z)
- { dJointSetPistonAnchor (get_id(), x, y, z); }
- void setAnchor (const dVector3 a)
- { setAnchor (a[0], a[1], a[2]); }
- void getAnchor (dVector3 result) const
- { dJointGetPistonAnchor (get_id(), result); }
- void getAnchor2 (dVector3 result) const
- { dJointGetPistonAnchor2 (get_id(), result); }
- void setAxis (dReal x, dReal y, dReal z)
- { dJointSetPistonAxis (get_id(), x, y, z); }
- void setAxis (const dVector3 a)
- { setAxis(a[0], a[1], a[2]); }
- void getAxis (dVector3 result) const
- { dJointGetPistonAxis (get_id(), result); }
- dReal getPosition() const
- { return dJointGetPistonPosition (get_id()); }
- dReal getPositionRate() const
- { return dJointGetPistonPositionRate (get_id()); }
- virtual void setParam (int parameter, dReal value)
- { dJointSetPistonParam (get_id(), parameter, value); }
- virtual dReal getParam (int parameter) const
- { return dJointGetPistonParam (get_id(), parameter); }
- // TODO: expose params through methods
- void addForce (dReal force)
- { dJointAddPistonForce (get_id(), force); }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dFixedJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase>
- {
- private:
- // intentionally undefined, don't use these
- dFixedJointTemplate (const dFixedJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dFixedJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dFixedJointTemplate() { }
- dFixedJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreateFixed(world, group)); }
- dFixedJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreateFixed(world, group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreateFixed(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void set()
- { dJointSetFixed (get_id()); }
- virtual void setParam (int parameter, dReal value)
- { dJointSetFixedParam (get_id(), parameter, value); }
- virtual dReal getParam (int parameter) const
- { return dJointGetFixedParam (get_id(), parameter); }
- // TODO: expose params through methods
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dContactJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dContactJointTemplate (const dContactJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dContactJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dContactJointTemplate() { }
- dContactJointTemplate (dWorldID world, dJointGroupID group, dContact *contact)
- { set_id(dJointCreateContact(world, group, contact)); }
- dContactJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group, dContact *contact)
- { set_id(dJointCreateContact(world.id(), group, contact)); }
- void create (dWorldID world, dJointGroupID group, dContact *contact) {
- destroy();
- set_id(dJointCreateContact(world, group, contact));
- }
-
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group, dContact *contact)
- { create(world.id(), group, contact); }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dNullJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dNullJointTemplate (const dNullJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dNullJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dNullJointTemplate() { }
- dNullJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreateNull(world, group)); }
- dNullJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreateNull (world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreateNull(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dAMotorJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dAMotorJointTemplate (const dAMotorJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dAMotorJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dAMotorJointTemplate() { }
- dAMotorJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreateAMotor(world, group)); }
- dAMotorJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreateAMotor(world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreateAMotor(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void setMode (int mode)
- { dJointSetAMotorMode (get_id(), mode); }
- int getMode() const
- { return dJointGetAMotorMode (get_id()); }
- void setNumAxes (int num)
- { dJointSetAMotorNumAxes (get_id(), num); }
- int getNumAxes() const
- { return dJointGetAMotorNumAxes (get_id()); }
- void setAxis (int anum, int rel, dReal x, dReal y, dReal z)
- { dJointSetAMotorAxis (get_id(), anum, rel, x, y, z); }
- void setAxis (int anum, int rel, const dVector3 a)
- { setAxis(anum, rel, a[0], a[1], a[2]); }
- void getAxis (int anum, dVector3 result) const
- { dJointGetAMotorAxis (get_id(), anum, result); }
- int getAxisRel (int anum) const
- { return dJointGetAMotorAxisRel (get_id(), anum); }
- void setAngle (int anum, dReal angle)
- { dJointSetAMotorAngle (get_id(), anum, angle); }
- dReal getAngle (int anum) const
- { return dJointGetAMotorAngle (get_id(), anum); }
- dReal getAngleRate (int anum)
- { return dJointGetAMotorAngleRate (get_id(), anum); }
- void setParam (int parameter, dReal value)
- { dJointSetAMotorParam (get_id(), parameter, value); }
- dReal getParam (int parameter) const
- { return dJointGetAMotorParam (get_id(), parameter); }
- // TODO: expose params through methods
- void addTorques(dReal torque1, dReal torque2, dReal torque3)
- { dJointAddAMotorTorques(get_id(), torque1, torque2, torque3); }
- };
- template <class dJointTemplateBase, class dWorldTemplateBase, class dBodyTemplateBase>
- class dLMotorJointTemplate : public dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> {
- private:
- // intentionally undefined, don't use these
- dLMotorJointTemplate (const dLMotorJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- void operator = (const dLMotorJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> &);
- protected:
- typedef dJointTemplate<dJointTemplateBase, dWorldTemplateBase, dBodyTemplateBase> dBaseTemplate;
- dJointID get_id() const { return dBaseTemplate::get_id(); }
- void set_id(dJointID value) { dBaseTemplate::set_id(value); }
- void destroy() { dBaseTemplate::destroy(); }
- public:
- dLMotorJointTemplate() { }
- dLMotorJointTemplate (dWorldID world, dJointGroupID group=0)
- { set_id(dJointCreateLMotor(world, group)); }
- dLMotorJointTemplate (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { set_id(dJointCreateLMotor(world.id(), group)); }
- void create (dWorldID world, dJointGroupID group=0) {
- destroy();
- set_id(dJointCreateLMotor(world, group));
- }
- void create (dWorldTemplate<dWorldTemplateBase>& world, dJointGroupID group=0)
- { create(world.id(), group); }
- void setNumAxes (int num)
- { dJointSetLMotorNumAxes (get_id(), num); }
- int getNumAxes() const
- { return dJointGetLMotorNumAxes (get_id()); }
- void setAxis (int anum, int rel, dReal x, dReal y, dReal z)
- { dJointSetLMotorAxis (get_id(), anum, rel, x, y, z); }
- void setAxis (int anum, int rel, const dVector3 a)
- { setAxis(anum, rel, a[0], a[1], a[2]); }
- void getAxis (int anum, dVector3 result) const
- { dJointGetLMotorAxis (get_id(), anum, result); }
- void setParam (int parameter, dReal value)
- { dJointSetLMotorParam (get_id(), parameter, value); }
- dReal getParam (int parameter) const
- { return dJointGetLMotorParam (get_id(), parameter); }
- // TODO: expose params through methods
- };
- //}
- #if !defined(dODECPP_WORLD_TEMPLATE_BASE)
- #if defined(dODECPP_BODY_TEMPLATE_BASE) || defined(dODECPP_JOINTGROUP_TEMPLATE_BASE) || defined(dODECPP_JOINT_TEMPLATE_BASE)
- #error All the odecpp template bases must be defined or not defined together
- #endif
- #define dODECPP_WORLD_TEMPLATE_BASE dWorldDynamicIDContainer
- #define dODECPP_BODY_TEMPLATE_BASE dBodyDynamicIDContainer
- #define dODECPP_JOINTGROUP_TEMPLATE_BASE dJointGroupDynamicIDContainer
- #define dODECPP_JOINT_TEMPLATE_BASE dJointDynamicIDContainer
- #else // #if defined(dODECPP_WORLD_TEMPLATE_BASE)
- #if !defined(dODECPP_BODY_TEMPLATE_BASE) || !defined(dODECPP_JOINTGROUP_TEMPLATE_BASE) || !defined(dODECPP_JOINT_TEMPLATE_BASE)
- #error All the odecpp template bases must be defined or not defined together
- #endif
- #endif // #if defined(dODECPP_WORLD_TEMPLATE_BASE)
- typedef dWorldTemplate<dODECPP_WORLD_TEMPLATE_BASE> dWorld;
- typedef dBodyTemplate<dODECPP_BODY_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE> dBody;
- typedef dJointGroupTemplate<dODECPP_JOINTGROUP_TEMPLATE_BASE> dJointGroup;
- typedef dJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dJoint;
- typedef dBallJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dBallJoint;
- typedef dHingeJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dHingeJoint;
- typedef dSliderJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dSliderJoint;
- typedef dUniversalJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dUniversalJoint;
- typedef dHinge2JointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dHinge2Joint;
- typedef dPRJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dPRJoint;
- typedef dPUJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dPUJoint;
- typedef dPistonJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dPistonJoint;
- typedef dFixedJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dFixedJoint;
- typedef dContactJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dContactJoint;
- typedef dNullJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dNullJoint;
- typedef dAMotorJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dAMotorJoint;
- typedef dLMotorJointTemplate<dODECPP_JOINT_TEMPLATE_BASE, dODECPP_WORLD_TEMPLATE_BASE, dODECPP_BODY_TEMPLATE_BASE> dLMotorJoint;
- #endif
- #endif
- // Local variables:
- // mode:c++
- // c-basic-offset:2
- // End:
|