Path: blob/master/Resources/taoframework-2.1.0/bin/Tao.Ode.xml
178 views
<?xml version="1.0"?>1<doc>2<assembly>3<name>Tao.Ode</name>4</assembly>5<members>6<member name="T:Tao.Ode.Ode">7<summary>8Open Dynamics Engine (ODE - http://ode.org) bindings for .NET9ODE Version: 0.910</summary>11</member>12<member name="F:Tao.Ode.Ode.ODE_NATIVE_LIBRARY">13<summary>14Specifies the ODE native library used in the bindings15</summary>16<remarks>17The Windows dll is specified here universally - note that18under Mono the non-windows native library can be mapped using19the ".config" file mechanism. Kudos to the Mono team for this20simple yet elegant solution.21</remarks>22</member>23<member name="F:Tao.Ode.Ode.CALLING_CONVENTION">24<summary>25Specifies the calling convention used for the binding.26</summary>27<remarks>28Specifies <see cref="F:System.Runtime.InteropServices.CallingConvention.Cdecl"/>29for the bindings.30</remarks>31</member>32<member name="F:Tao.Ode.Ode.dInfinity">33<summary>34Infinity.3536The maximum value of the current data type for dReal.3738</summary>39<remarks>40dReal can be System.Single or System.Double, based on the41multiple precision levels possible with the ODE library.42</remarks>43</member>44<member name="F:Tao.Ode.Ode.dMaxUserClasses">45<summary>the maximum number of user classes that are supported</summary>46</member>47<member name="M:Tao.Ode.Ode.dWorldCreate">48<summary>49Create a new, empty world and return its ID number.50</summary>51<remarks>52The world object is a container for rigid bodies and joints.53Objects in different worlds can not interact, for example rigid bodies from two different worlds can not collide.54All the objects in a world exist at the same point in time, thus one reason to use separate worlds is to simulate55systems at different rates.5657Most applications will only need one world.58</remarks>59<returns>A dWorldID</returns>60</member>61<member name="M:Tao.Ode.Ode.dInitODE">62<summary>6364</summary>65</member>66<member name="M:Tao.Ode.Ode.dWorldDestroy(System.IntPtr)">67<summary>68Destroy a world and everything in it.69This includes all bodies, and all joints that are not part of a joint group.70Joints that are part of a joint group will be deactivated, and can be destroyed by calling, for example,71dJointGroupEmpty.72</summary>73<param name="world">A dWorldID</param>74</member>75<member name="M:Tao.Ode.Ode.dWorldSetGravity(System.IntPtr,System.Single,System.Single,System.Single)">76<summary>77Set the world's global gravity vector.78The units are m/s/s (meters/second/second), so Earth's gravity vector would79be (0,0,-9.81), assuming that +z is up.80The default is no gravity, i.e. (0,0,0).81</summary>82<param name="world">the world to set</param>83<param name="x">x component of the gravity vector</param>84<param name="y">y component of the gravity vector</param>85<param name="z">z component of the gravity vector</param>86</member>87<member name="M:Tao.Ode.Ode.dWorldGetGravity(System.IntPtr,Tao.Ode.Ode.dVector3@)">88<summary>89Get the world's global gravity vector.90The units are m/s/s (meter/second/second).91</summary>92<param name="world">the world to query</param>93<param name="gravity">A dVector3 containing the world's gravity vector</param>94</member>95<member name="M:Tao.Ode.Ode.dWorldGetGravity(System.IntPtr,System.Single@)">96<summary>9798</summary>99<param name="world"></param>100<param name="X"></param>101</member>102<member name="M:Tao.Ode.Ode.dWorldSetERP(System.IntPtr,System.Single)">103<summary>104Set the global ERP (Error Reduction Parameter) value, which controls how much error105correction is performed in each time step.106Typical values are in the range 0.1--0.8. The default is 0.2.107</summary>108<param name="world">the world to set</param>109<param name="erp">the global ERP value in the range 0.1-0.8 (default 0.2)</param>110</member>111<member name="M:Tao.Ode.Ode.dWorldGetERP(System.IntPtr)">112<summary>113Get the global ERP value, which controls how much error correction is performed in each time step.114Typical values are in the range 0.1--0.8. The default is 0.2.115</summary>116<returns>the ERP (Error Reduction Parameter) for the world. Range 0.1-0.8</returns>117<param name="world">the world to query</param>118</member>119<member name="M:Tao.Ode.Ode.dWorldSetCFM(System.IntPtr,System.Single)">120<summary>121Set the global CFM (constraint force mixing) value.122Typical values are in the range 10^-9 -- 1.123The default is 10^-5 if single precision is being used, or 10^-10 if double precision is being used.124</summary>125<param name="world">the world to set</param>126<param name="cfm">the global CFM value to set. Range 10^-9 to 1</param>127</member>128<member name="M:Tao.Ode.Ode.dWorldGetCFM(System.IntPtr)">129<summary>130Get the global CFM (constraint force mixing) value.131Typical values are in the range 10^-9 -- 1.132The default is 10-5 if single precision is being used, or 10^-10 if double precision is being used.133</summary>134<returns>the current CFM value for the world in the range 10^-9 to 1</returns>135<param name="world">the world to query</param>136</member>137<member name="M:Tao.Ode.Ode.dWorldImpulseToForce(System.IntPtr,System.Single,System.Single,System.Single,System.Single,Tao.Ode.Ode.dVector3@)">138<summary>139Convert linear/angular impulse to a rigid body to a force/torque vector.140141If you want to apply a linear or angular impulse to a rigid body, instead of a force or a torque,142then you can use this function to convert the desired impulse into a force/torque vector before143calling the dBodyAdd... function.144145This function is given the desired impulse as (ix,iy,iz) and puts the force vector in force.146147The current algorithm simply scales the impulse by 1/stepsize, where stepsize is the step size for148the next step that will be taken.149</summary>150<remarks>151This function is given a dWorldID because, in the future, the force computation may depend on integrator152parameters that are set as properties of the world.153</remarks>154<param name="world">the id of the world</param>155<param name="stepsize">stepsize for the next step to be taken</param>156<param name="ix">x component of the impulse</param>157<param name="iy">y component of the impulse</param>158<param name="iz">z component of the impulse</param>159<param name="force">A dVector3 containing the resulting force vector</param>160</member>161<member name="M:Tao.Ode.Ode.dWorldImpulseToForce(System.IntPtr,System.Single,System.Single,System.Single,System.Single,System.Single@)">162<summary>163164</summary>165<param name="world"></param>166<param name="stepsize"></param>167<param name="ix"></param>168<param name="iy"></param>169<param name="iz"></param>170<param name="forceX"></param>171</member>172<member name="M:Tao.Ode.Ode.dWorldStep(System.IntPtr,System.Single)">173<summary>174Step the world.175This uses a "big matrix" method that takes time on the order of m^3 and memory on the order of m^2,176where m is the total number of constraint rows.177178For large systems this will use a lot of memory and can be very slow, but this is currently the179most accurate method.180</summary>181<param name="world">the world to step</param>182<param name="stepsize">the stepsize</param>183</member>184<member name="M:Tao.Ode.Ode.dWorldQuickStep(System.IntPtr,System.Single)">185<summary>186Step the world.187This uses an iterative method that takes time on the order of m*N and memory on the order of m, where188m is the total number of constraint rows and N is the number of iterations.189190For large systems this is a lot faster than dWorldStep, but it is less accurate.191</summary>192<remarks>193QuickStep is great for stacks of objects especially when the auto-disable feature is used as well.194However, it has poor accuracy for near-singular systems. Near-singular systems can occur when using195high-friction contacts, motors, or certain articulated structures.196For example, a robot with multiple legs sitting on the ground may be near-singular.197198There are ways to help overcome QuickStep's inaccuracy problems:199- Increase CFM.200- Reduce the number of contacts in your system (e.g. use the minimum number of contacts for201the feet of a robot or creature).202- Don't use excessive friction in the contacts.203- Use contact slip if appropriate204- Avoid kinematic loops (however, kinematic loops are inevitable in legged creatures).205- Don't use excessive motor strength.206- Use force-based motors instead of velocity-based motors.207208Increasing the number of QuickStep iterations may help a little bit, but it is not going to help much209if your system is really near singular.210</remarks>211<param name="world">the world to step</param>212<param name="stepsize">the stepsize</param>213</member>214<member name="M:Tao.Ode.Ode.dWorldSetQuickStepNumIterations(System.IntPtr,System.Int32)">215<summary>216Set the number of iterations that the QuickStep method performs per step.217218More iterations will give a more accurate solution, but will take longer to compute.219220The default is 20 iterations.221</summary>222<param name="world">the world to step</param>223<param name="num">the iterations per step (default 20)</param>224</member>225<member name="M:Tao.Ode.Ode.dWorldGetQuickStepNumIterations(System.IntPtr)">226<summary>227Get the number of iterations that the QuickStep method performs per step.228229The default is 20 iterations.230</summary>231<returns>the iterations per step (default 20)</returns>232<param name="world">the world to query</param>233</member>234<member name="M:Tao.Ode.Ode.dWorldSetQuickStepW(System.IntPtr,System.Single)">235<summary>236Set the QuickStep SOR over-relaxation parameter237</summary>238<param name="world">the world to set</param>239<param name="over_relaxation">over_relaxation value to use by SOR</param>240</member>241<member name="M:Tao.Ode.Ode.dWorldGetQuickStepW(System.IntPtr)">242<summary>243Get the QuickStep SOR over-relaxation parameter244</summary>245<returns>the world's over relaxation value</returns>246<param name="world">the world to query</param>247</member>248<member name="M:Tao.Ode.Ode.dWorldSetContactMaxCorrectingVel(System.IntPtr,System.Single)">249<summary>250Set maximum correcting velocity that contacts are allowed to generate.251252The default value is infinity (i.e. no limit).253254Reducing this value can help prevent "popping" of deeply embedded objects.255</summary>256<param name="world">the world to set</param>257<param name="vel">the maximum correcting velocity contacts can generate (default is infinity - no limit)</param>258</member>259<member name="M:Tao.Ode.Ode.dWorldGetContactMaxCorrectingVel(System.IntPtr)">260<summary>261Get the maximum correcting velocity that contacts are allowed to generate.262263The default value is infinity (i.e. no limit).264</summary>265<returns>current maximum correcting velocity (default is infinity - no limit)</returns>266<param name="world">the world to query</param>267</member>268<member name="M:Tao.Ode.Ode.dWorldSetContactSurfaceLayer(System.IntPtr,System.Single)">269<summary>270Set the depth of the surface layer around all geometry objects.271272Contacts are allowed to sink into the surface layer up to the given depth before coming to rest.273274The default value is zero.275276Increasing this to some small value (e.g. 0.001) can help prevent jittering problems due to contacts277being repeatedly made and broken.278</summary>279<param name="world">the world to set</param>280<param name="depth">the contact surface layer depth (default 0)</param>281</member>282<member name="M:Tao.Ode.Ode.dWorldGetContactSurfaceLayer(System.IntPtr)">283<summary>284Get the depth of the surface layer around all geometry objects.285286The default value is zero.287</summary>288<returns>the world's contact surface layer (default 0)</returns>289<param name="world">the world to query</param>290</member>291<member name="M:Tao.Ode.Ode.dWorldStepFast1(System.IntPtr,System.Single,System.Int32)">292<summary>293Step the world by stepsize seconds using the StepFast1 algorithm.294The number of iterations to perform is given by maxiterations.295296NOTE: The StepFast algorithm has been superseded by the QuickStep algorithm: see the dWorldQuickStep function.297</summary>298<param name="world">the world to set</param>299<param name="stepsize">the stepsize (in seconds)</param>300<param name="maxiterations">maximum iterations to perform</param>301</member>302<member name="M:Tao.Ode.Ode.dWorldSetAutoEnableDepthSF1(System.IntPtr,System.Int32)">303<summary>304Set the AutoEnableDepth parameter used by the StepFast1 algorithm.305</summary>306<param name="world">the world to set</param>307<param name="autoEnableDepth">the autoenable depth</param>308</member>309<member name="M:Tao.Ode.Ode.dWorldGetAutoEnableDepthSF1(System.IntPtr)">310<summary>311Get the AutoEnableDepth parameter used by the StepFast1 algorithm.312</summary>313<returns>the autoenable depth</returns>314<param name="world">the world to query</param>315</member>316<member name="M:Tao.Ode.Ode.dWorldSetAutoDisableLinearThreshold(System.IntPtr,System.Single)">317<summary>318Set the default auto-disable linear threshold for newly created bodies.319320The default parameter is: AutoDisableLinearThreshold = 0.01321</summary>322<param name="world">A dWorldID</param>323<param name="linear_threshold">A dReal</param>324</member>325<member name="M:Tao.Ode.Ode.dWorldGetAutoDisableLinearThreshold(System.IntPtr)">326<summary>327Get the current auto-disable linear threshold for newly created bodies.328</summary>329<returns>A dReal</returns>330<param name="world">A dWorldID</param>331</member>332<member name="M:Tao.Ode.Ode.dWorldSetAutoDisableAngularThreshold(System.IntPtr,System.Single)">333<summary>334Set the default auto-disable angular threshold for newly created bodies.335336The default parameter is: AutoDisableAngularThreshold = 0.01337</summary>338<param name="world">A dWorldID</param>339<param name="angular_threshold">A dReal</param>340</member>341<member name="M:Tao.Ode.Ode.dWorldGetAutoDisableAngularThreshold(System.IntPtr)">342<summary>343Get the current auto-disable angular threshold for newly created objects344</summary>345<returns>A dReal</returns>346<param name="world">A dWorldID</param>347</member>348<member name="M:Tao.Ode.Ode.dWorldSetAutoDisableSteps(System.IntPtr,System.Int32)">349<summary>350Set the default auto-disable steps for newly created bodies.351352The default parameter is: AutoDisableSteps = 10353</summary>354<param name="world">A dWorldID</param>355<param name="steps">the new auto-disable step setting</param>356</member>357<member name="M:Tao.Ode.Ode.dWorldGetAutoDisableSteps(System.IntPtr)">358<summary>359Get the current auto-disable steps for newly created bodies360</summary>361<returns>number of current auto-disable steps</returns>362<param name="world">the world to query</param>363</member>364<member name="M:Tao.Ode.Ode.dWorldSetAutoDisableTime(System.IntPtr,System.Single)">365<summary>366Set the default auto-disable time for newly created bodies.367368The default parameter is: AutoDisableTime = 0369</summary>370<param name="world">A dWorldID</param>371<param name="time">A dReal</param>372</member>373<member name="M:Tao.Ode.Ode.dWorldGetAutoDisableTime(System.IntPtr)">374<summary>375Get the current auto-disable time for newly created bodies.376</summary>377<returns>A dReal</returns>378<param name="world">A dWorldID</param>379</member>380<member name="M:Tao.Ode.Ode.dWorldSetAutoDisableFlag(System.IntPtr,System.Int32)">381<summary>382Set the default auto-disable flag for newly created bodies.383384The default parameter is: AutoDisableFlag = disabled385</summary>386<param name="world">A dWorldID</param>387<param name="do_auto_disable">An int</param>388</member>389<member name="M:Tao.Ode.Ode.dWorldGetAutoDisableFlag(System.IntPtr)">390<summary>391Get the current auto-disable flag for newly created bodies.392</summary>393<returns>An int</returns>394<param name="world">A dWorldID</param>395</member>396<member name="M:Tao.Ode.Ode.dBodyCreate(System.IntPtr)">397<summary>398Create a body in the given world with default mass parameters at position (0,0,0).399Return its ID (really a handle to the body).400</summary>401<returns>A dBodyID</returns>402<param name="world">A dWorldID</param>403</member>404<member name="M:Tao.Ode.Ode.dBodyDestroy(System.IntPtr)">405<summary>406Destroy a body.407408All joints that are attached to this body will be put into limbo (i.e. unattached and409not affecting the simulation, but they will NOT be deleted)410</summary>411<param name="body">A dBodyID</param>412</member>413<member name="M:Tao.Ode.Ode.dBodySetPosition(System.IntPtr,System.Single,System.Single,System.Single)">414<summary>415Set the position of the body.416417After setting a group of bodies, the outcome of the simulation is undefined if the new configuration418is inconsistent with the joints/constraints that are present.419</summary>420<param name="body">A dBodyID</param>421<param name="x">A dReal</param>422<param name="y">A dReal</param>423<param name="z">A dReal</param>424</member>425<member name="M:Tao.Ode.Ode.dBodySetRotation(System.IntPtr,System.Single[])">426<summary>427Set the rotation of the body.428429After setting a group of bodies, the outcome of the simulation is undefined if the new configuration430is inconsistent with the joints/constraints that are present.431</summary>432<param name="body">the body to set</param>433<param name="R">An array of 12 elements containing the new 3x4 rotation matrix</param>434</member>435<member name="M:Tao.Ode.Ode.dBodySetRotation(System.IntPtr,Tao.Ode.Ode.dMatrix3)">436<summary>437Set the rotation of the body.438439After setting a group of bodies, the outcome of the simulation is undefined if the new configuration440is inconsistent with the joints/constraints that are present.441</summary>442<remarks>443For some reason the dMatrix3 does not marshall correctly, so this function444maintains compatibility with the ODE api by converting the supplied dMatrix3 to445and array and passing that to ODE.446</remarks>447<param name="body">the body to set</param>448<param name="R">A dMatrix3 containing the new rotation matrix</param>449</member>450<member name="M:Tao.Ode.Ode.dBodySetQuaternion(System.IntPtr,Tao.Ode.Ode.dQuaternion@)">451<summary>452Set the orientation on of the body.453454Orientation is represented by a quaternion (qs,qx,qy,qz)455456After setting a group of bodies, the outcome of the simulation is undefined if the new configuration457is inconsistent with the joints/constraints that are present.458</summary>459<param name="body">A dBodyID</param>460<param name="q">A dQuaternion</param>461</member>462<member name="M:Tao.Ode.Ode.dBodySetLinearVel(System.IntPtr,System.Single,System.Single,System.Single)">463<summary>464Set the linear velocity of the body.465466After setting a group of bodies, the outcome of the simulation is undefined if the new configuration467is inconsistent with the joints/constraints that are present.468</summary>469<param name="body">A dBodyID</param>470<param name="x">A dReal</param>471<param name="y">A dReal</param>472<param name="z">A dReal</param>473</member>474<member name="M:Tao.Ode.Ode.dBodySetAngularVel(System.IntPtr,System.Single,System.Single,System.Single)">475<summary>476Set the angular velocity of the body.477478After setting a group of bodies, the outcome of the simulation is undefined if the new configuration479is inconsistent with the joints/constraints that are present.480</summary>481<param name="body">A dBodyID</param>482<param name="x">A dReal</param>483<param name="y">A dReal</param>484<param name="z">A dReal</param>485</member>486<member name="M:Tao.Ode.Ode.dBodyGetPosition(System.IntPtr)">487<summary>488Get the position of the body489490The vector is valid until any changes are made to the rigid body system structure.491</summary>492<returns>A dVector3</returns>493<param name="body">A dBodyID</param>494</member>495<member name="M:Tao.Ode.Ode.dBodyGetRotation(System.IntPtr)">496<summary>497Get the rotation of the body.498499The returned value is a 4x3 rotation matrix.500The matrix is valid until any changes are made to the rigid body system structure.501</summary>502<returns>A dMatrix3</returns>503<param name="body">A dBodyID</param>504</member>505<member name="M:Tao.Ode.Ode.dBodyGetQuaternion(System.IntPtr)">506<summary>507Get the orientation of a body.508509Orientation is represented by a quaternion (qs,qx,qy,qz)510</summary>511<returns>A dQuaternion</returns>512<param name="body">A dBodyID</param>513</member>514<member name="M:Tao.Ode.Ode.dBodyGetLinearVel(System.IntPtr)">515<summary>516Get the linear velocity of a body517518The vector is valid until any changes are made to the rigid body system structure.519</summary>520<returns>A dVector3</returns>521<param name="body">A dBodyID</param>522</member>523<member name="M:Tao.Ode.Ode.dBodyGetAngularVel(System.IntPtr)">524<summary>525Get the angular velocity of a body526527The vector is valid until any changes are made to the rigid body system structure.528</summary>529<returns>A dVector3</returns>530<param name="body">A dBodyID</param>531</member>532<member name="M:Tao.Ode.Ode.dBodySetMass(System.IntPtr,Tao.Ode.Ode.dMass@)">533<summary>534Set the mass of the body (see the mass functions)535</summary>536<param name="body">A dBodyID</param>537<param name="mass">A dMass</param>538</member>539<member name="M:Tao.Ode.Ode.dBodyGetMass(System.IntPtr,Tao.Ode.Ode.dMass@)">540<summary>541Get the mass of the body (see the mass functions)542</summary>543<param name="body">A dBodyID</param>544<param name="mass">A dMass</param>545</member>546<member name="M:Tao.Ode.Ode.dBodyAddForce(System.IntPtr,System.Single,System.Single,System.Single)">547<summary>548Add force to a body using absolute coordinates.549</summary>550<remarks>551Forces are accumulated on to each body, and the accumulators are zeroed after each time step.552553Force is applied at body's center of mass554</remarks>555<param name="body">A dBodyID</param>556<param name="fx">A dReal</param>557<param name="fy">A dReal</param>558<param name="fz">A dReal</param>559</member>560<member name="M:Tao.Ode.Ode.dBodyAddTorque(System.IntPtr,System.Single,System.Single,System.Single)">561<summary>562Add torque to a body using absolute coordinates.563</summary>564<remarks>565Forces are accumulated on to each body, and the accumulators are zeroed after each time step.566567Force is applied at body's center of mass568</remarks>569<param name="body">A dBodyID</param>570<param name="fx">A dReal</param>571<param name="fy">A dReal</param>572<param name="fz">A dReal</param>573</member>574<member name="M:Tao.Ode.Ode.dBodyAddRelForce(System.IntPtr,System.Single,System.Single,System.Single)">575<summary>576Add force to a body using relative coordinates.577578This function takes a force vector that is relative to the body's own frame of reference.579</summary>580<remarks>581Forces are accumulated on to each body, and the accumulators are zeroed after each time step.582583Force is applied at body's center of mass584</remarks>585<param name="body">A dBodyID</param>586<param name="fx">A dReal</param>587<param name="fy">A dReal</param>588<param name="fz">A dReal</param>589</member>590<member name="M:Tao.Ode.Ode.dBodyAddRelTorque(System.IntPtr,System.Single,System.Single,System.Single)">591<summary>592Add torque to a body using relative coordinates.593594This function takes a force vector that is relative to the body's own frame of reference.595</summary>596<remarks>597Forces are accumulated on to each body, and the accumulators are zeroed after each time step.598599Force is applied at body's center of mass600</remarks>601<param name="body">A dBodyID</param>602<param name="fx">A dReal</param>603<param name="fy">A dReal</param>604<param name="fz">A dReal</param>605</member>606<member name="M:Tao.Ode.Ode.dBodyAddForceAtPos(System.IntPtr,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">607<summary>608Add force to a body using absolute coordinates at specified absolute position.609610The supplied position vector specifies the point at which the force is supplied in global coordinates.611</summary>612<remarks>613Forces are accumulated on to each body, and the accumulators are zeroed after each time step.614615Force is applied at specified point.616</remarks>617<param name="body">A dBodyID</param>618<param name="fx">A dReal</param>619<param name="fy">A dReal</param>620<param name="fz">A dReal</param>621<param name="px">A dReal</param>622<param name="py">A dReal</param>623<param name="pz">A dReal</param>624</member>625<member name="M:Tao.Ode.Ode.dBodyAddForceAtRelPos(System.IntPtr,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">626<summary>627Add force to a body using absolute coordinates at specified relative position.628629The supplied position vector specifies the point at which the force is supplied in body-relative coordinates.630</summary>631<remarks>632Forces are accumulated on to each body, and the accumulators are zeroed after each time step.633634Force is applied at specified point.635</remarks>636<param name="body">A dBodyID</param>637<param name="fx">A dReal</param>638<param name="fy">A dReal</param>639<param name="fz">A dReal</param>640<param name="px">A dReal</param>641<param name="py">A dReal</param>642<param name="pz">A dReal</param>643</member>644<member name="M:Tao.Ode.Ode.dBodyAddRelForceAtPos(System.IntPtr,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">645<summary>646Add force to a body using body-relative coordinates at specified absolute position.647648The supplied position vector specifies the point at which the force is supplied in global coordinates.649</summary>650<remarks>651Forces are accumulated on to each body, and the accumulators are zeroed after each time step.652653Force is applied at specified point.654</remarks>655<param name="body">A dBodyID</param>656<param name="fx">A dReal</param>657<param name="fy">A dReal</param>658<param name="fz">A dReal</param>659<param name="px">A dReal</param>660<param name="py">A dReal</param>661<param name="pz">A dReal</param>662</member>663<member name="M:Tao.Ode.Ode.dBodyAddRelForceAtRelPos(System.IntPtr,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">664<summary>665Add force to a body using body-relative coordinates at specified relative position.666667The supplied position vector specifies the point at which the force is supplied in body-relative coordinates.668</summary>669<remarks>670Forces are accumulated on to each body, and the accumulators are zeroed after each time step.671672Force is applied at specified point.673</remarks>674<param name="body">A dBodyID</param>675<param name="fx">A dReal</param>676<param name="fy">A dReal</param>677<param name="fz">A dReal</param>678<param name="px">A dReal</param>679<param name="py">A dReal</param>680<param name="pz">A dReal</param>681</member>682<member name="M:Tao.Ode.Ode.dBodyGetForce(System.IntPtr)">683<summary>684Return the current accumulated force on the body.685</summary>686<remarks>687In ODE, the returned values are pointers to internal data structures, so the vectors are only valid until any688changes are made to the rigid body system.689</remarks>690<returns>A dVector3</returns>691<param name="body">A dBodyID</param>692</member>693<member name="M:Tao.Ode.Ode.dBodyGetTorque(System.IntPtr)">694<summary>695Return the current accumulated torque on the body.696</summary>697<remarks>698In ODE, the returned values are pointers to internal data structures, so the vectors are only valid until any699changes are made to the rigid body system.700</remarks>701<returns>A dVector3</returns>702<param name="body">A dBodyID</param>703</member>704<member name="M:Tao.Ode.Ode.dBodySetForce(System.IntPtr,System.Single,System.Single,System.Single)">705<summary>706Set the body force accumulation vector.707This is mostly useful to zero the force and torque for deactivated bodies before they are reactivated,708in the case where the force-adding functions were called on them while they were deactivated.709</summary>710<param name="b">A dBodyID</param>711<param name="x">A dReal</param>712<param name="y">A dReal</param>713<param name="z">A dReal</param>714</member>715<member name="M:Tao.Ode.Ode.dBodySetTorque(System.IntPtr,System.Single,System.Single,System.Single)">716<summary>717Set the body torque accumulation vector.718This is mostly useful to zero the force and torque for deactivated bodies before they are reactivated,719in the case where the force-adding functions were called on them while they were deactivated.720</summary>721<param name="b">A dBodyID</param>722<param name="x">A dReal</param>723<param name="y">A dReal</param>724<param name="z">A dReal</param>725</member>726<member name="M:Tao.Ode.Ode.dBodyGetRelPointPos(System.IntPtr,System.Single,System.Single,System.Single,Tao.Ode.Ode.dVector3@)">727<summary>728Take a point on a body (px,py,pz) and return that point's position in body-relative coordinates (in result).729</summary>730<param name="body">A dBodyID</param>731<param name="px">A dReal</param>732<param name="py">A dReal</param>733<param name="pz">A dReal</param>734<param name="result">A dVector3</param>735</member>736<member name="M:Tao.Ode.Ode.dBodyGetRelPointVel(System.IntPtr,System.Single,System.Single,System.Single,Tao.Ode.Ode.dVector3@)">737<summary>738Take a point on a body (px,py,pz) and return that point's velocity in body-relative coordinates (in result).739</summary>740<param name="body">A dBodyID</param>741<param name="px">A dReal</param>742<param name="py">A dReal</param>743<param name="pz">A dReal</param>744<param name="result">A dVector3</param>745</member>746<member name="M:Tao.Ode.Ode.dBodyGetPointVel(System.IntPtr,System.Single,System.Single,System.Single,Tao.Ode.Ode.dVector3@)">747<summary>748Take a point on a body (px,py,pz) and return that point's position in absolute coordinates (in result).749</summary>750<param name="body">A dBodyID</param>751<param name="px">A dReal</param>752<param name="py">A dReal</param>753<param name="pz">A dReal</param>754<param name="result">A dVector3</param>755</member>756<member name="M:Tao.Ode.Ode.dBodyGetPosRelPoint(System.IntPtr,System.Single,System.Single,System.Single,Tao.Ode.Ode.dVector3@)">757<summary>758This is the inverse of dBodyGetRelPointPos.759It takes a point in global coordinates (x,y,z) and returns the point's position in body-relative760coordinates (result).761</summary>762<param name="body">A dBodyID</param>763<param name="px">A dReal</param>764<param name="py">A dReal</param>765<param name="pz">A dReal</param>766<param name="result">A dVector3</param>767</member>768<member name="M:Tao.Ode.Ode.dBodyVectorToWorld(System.IntPtr,System.Single,System.Single,System.Single,Tao.Ode.Ode.dVector3@)">769<summary>770Given a vector expressed in the body coordinate system (x,y,z), rotate it to the world coordinate system (result).771</summary>772<param name="body">A dBodyID</param>773<param name="px">A dReal</param>774<param name="py">A dReal</param>775<param name="pz">A dReal</param>776<param name="result">A dVector3</param>777</member>778<member name="M:Tao.Ode.Ode.dBodyVectorFromWorld(System.IntPtr,System.Single,System.Single,System.Single,Tao.Ode.Ode.dVector3@)">779<summary>780Given a vector expressed in the world coordinate system (x,y,z), rotate it to the body coordinate system (result).781</summary>782<param name="body">A dBodyID</param>783<param name="px">A dReal</param>784<param name="py">A dReal</param>785<param name="pz">A dReal</param>786<param name="result">A dVector3</param>787</member>788<member name="M:Tao.Ode.Ode.dBodySetData(System.IntPtr,System.IntPtr)">789<summary>790Set the body's user-data pointer.791792</summary>793<param name="body">A dBodyID</param>794<param name="data">An IntPtr</param>795</member>796<member name="M:Tao.Ode.Ode.dBodyGetData(System.IntPtr)">797<summary>798Get the body's user-data pointer.799</summary>800<returns>An IntPtr</returns>801<param name="body">A dBodyID</param>802</member>803<member name="M:Tao.Ode.Ode.dBodySetFiniteRotationMode(System.IntPtr,System.Int32)">804<summary>805This function controls the way a body's orientation is updated at each time step. The mode argument can be:806807- 0: An ``infinitesimal'' orientation update is used. This is fast to compute, but it can occasionally808cause inaccuracies for bodies that are rotating at high speed, especially when those bodies are809joined to other bodies.810This is the default for every new body that is created.811812- 1: A ``finite'' orientation update is used. This is more costly to compute, but will be more813accurate for high speed rotations. Note however that high speed rotations can result in many814types of error in a simulation, and this mode will only fix one of those sources of error.815</summary>816<param name="body">A dBodyID</param>817<param name="mode">An int</param>818</member>819<member name="M:Tao.Ode.Ode.dBodyGetFiniteRotationMode(System.IntPtr)">820<summary>821Return the current finite rotation mode of a body (0 or 1).822</summary>823<returns>An int</returns>824<param name="body">A dBodyID</param>825</member>826<member name="M:Tao.Ode.Ode.dBodySetFiniteRotationAxis(System.IntPtr,System.Single,System.Single,System.Single)">827<summary>828This sets the finite rotation axis for a body.829This axis only has meaning when the finite rotation mode is set (see dBodySetFiniteRotationMode).830831If this axis is zero (0,0,0), full finite rotations are performed on the body.832833If this axis is nonzero, the body is rotated by performing a partial finite rotation along the axis direction834followed by an infinitesimal rotation along an orthogonal direction.835836This can be useful to alleviate certain sources of error caused by quickly spinning bodies. For example, if a837car wheel is rotating at high speed you can call this function with the wheel's hinge axis as the argument to838try and improve its behavior.839</summary>840<param name="body">A dBodyID</param>841<param name="x">A dReal</param>842<param name="y">A dReal</param>843<param name="z">A dReal</param>844</member>845<member name="M:Tao.Ode.Ode.dBodyGetFiniteRotationAxis(System.IntPtr,Tao.Ode.Ode.dVector3@)">846<summary>847Return the current finite rotation axis of a body.848</summary>849<param name="body">A dBodyID</param>850<param name="result">A dVector3</param>851</member>852<member name="M:Tao.Ode.Ode.dBodyGetNumJoints(System.IntPtr)">853<summary>854Return the number of joints that are attached to this body.855</summary>856<returns>An int</returns>857<param name="b">A dBodyID</param>858</member>859<member name="M:Tao.Ode.Ode.dBodyGetJoint(System.IntPtr,System.Int32)">860<summary>861Return a joint attached to this body, given by index.862863Valid indexes are 0 to n-1 where n is the value returned by dBodyGetNumJoints.864</summary>865<returns>A dJointID</returns>866<param name="body">A dBodyID</param>867<param name="index">An int</param>868</member>869<member name="M:Tao.Ode.Ode.dBodySetGravityMode(System.IntPtr,System.Int32)">870<summary>871Set whether the body is influenced by the world's gravity or not.872873If mode is nonzero it is, if mode is zero, it isn't.874875Newly created bodies are always influenced by the world's gravity.876</summary>877<param name="b">A dBodyID</param>878<param name="mode">An int</param>879</member>880<member name="M:Tao.Ode.Ode.dBodyGetGravityMode(System.IntPtr)">881<summary>882Get whether the body is influenced by the world's gravity or not.883884If mode is nonzero it is, if mode is zero, it isn't.885</summary>886<returns>An int</returns>887<param name="b">A dBodyID</param>888</member>889<member name="M:Tao.Ode.Ode.dBodyEnable(System.IntPtr)">890<summary>891Manually enable a body.892Note that a disabled body that is connected through a joint to an enabled body893will be automatically re-enabled at the next simulation step.894</summary>895<param name="body">A dBodyID</param>896</member>897<member name="M:Tao.Ode.Ode.dBodyDisable(System.IntPtr)">898<summary>899Manually disable a body.900Note that a disabled body that is connected through a joint to an enabled body901will be automatically re-enabled at the next simulation step.902</summary>903<param name="body">A dBodyID</param>904</member>905<member name="M:Tao.Ode.Ode.dBodyIsEnabled(System.IntPtr)">906<summary>907Method dBodyIsEnabled908Return 1 if a body is currently enabled or 0 if it is disabled.909</summary>910<returns>An int</returns>911<param name="body">A dBodyID</param>912</member>913<member name="M:Tao.Ode.Ode.dBodySetAutoDisableFlag(System.IntPtr,System.Int32)">914<summary>915Method dBodySetAutoDisableFlag916Set the auto-disable flag of a body.917918If the do_auto_disable is nonzero the body will be automatically disabled when it has been idle for long enough.919</summary>920<param name="body">A dBodyID</param>921<param name="do_auto_disable">An int</param>922</member>923<member name="M:Tao.Ode.Ode.dBodyGetAutoDisableFlag(System.IntPtr)">924<summary>925Method dBodyGetAutoDisableFlag926Get the auto-disable flag of a body.927928If the do_auto_disable is nonzero the body will be automatically disabled when it has been idle for long enough.929</summary>930<returns>An int</returns>931<param name="body">A dBodyID</param>932</member>933<member name="M:Tao.Ode.Ode.dBodySetAutoDisableLinearThreshold(System.IntPtr,System.Single)">934<summary>935Method dBodySetAutoDisableLinearThreshold936Set a body's linear velocity threshold for automatic disabling.937938The body's linear velocity magnitude must be less than this threshold for939it to be considered idle.940941Set the threshold to dInfinity to prevent the linear velocity from being considered.942</summary>943<param name="body">A dBodyID</param>944<param name="linear_threshold">A dReal</param>945</member>946<member name="M:Tao.Ode.Ode.dBodyGetAutoDisableLinearThreshold(System.IntPtr)">947<summary>948Method dBodyGetAutoDisableLinearThreshold949Get a body's linear velocity threshold for automatic disabling.950951The body's linear velocity magnitude must be less than this threshold for952it to be considered idle.953954Set the threshold to dInfinity to prevent the linear velocity from being considered.955</summary>956<returns>A dReal</returns>957<param name="body">A dBodyID</param>958</member>959<member name="M:Tao.Ode.Ode.dBodySetAutoDisableAngularThreshold(System.IntPtr,System.Single)">960<summary>961Method dBodySetAutoDisableAngularThreshold962Set a body's angular velocity threshold for automatic disabling.963964The body's linear angular magnitude must be less than this threshold for965it to be considered idle.966967Set the threshold to dInfinity to prevent the angular velocity from being considered.968</summary>969<param name="body">A dBodyID</param>970<param name="angular_threshold">A dReal</param>971</member>972<member name="M:Tao.Ode.Ode.dBodyGetAutoDisableAngularThreshold(System.IntPtr)">973<summary>974Method dBodyGetAutoDisableAngularThreshold975Get a body's angular velocity threshold for automatic disabling.976977The body's linear angular magnitude must be less than this threshold for978it to be considered idle.979980Set the threshold to dInfinity to prevent the angular velocity from being considered.981</summary>982<returns>A dReal</returns>983<param name="body">A dBodyID</param>984</member>985<member name="M:Tao.Ode.Ode.dBodySetAutoDisableSteps(System.IntPtr,System.Int32)">986<summary>987Method dBodySetAutoDisableSteps988Set the number of simulation steps that a body must be idle before989it is automatically disabled.990991Set this to zero to disable consideration of the number of steps.992</summary>993<param name="body">A dBodyID</param>994<param name="steps">An int</param>995</member>996<member name="M:Tao.Ode.Ode.dBodyGetAutoDisableSteps(System.IntPtr)">997<summary>998Method dBodyGetAutoDisableSteps999Get the number of simulation steps that a body must be idle before1000it is automatically disabled.10011002If zero, consideration of the number of steps is disabled.1003</summary>1004<returns>An int</returns>1005<param name="body">A dBodyID</param>1006</member>1007<member name="M:Tao.Ode.Ode.dBodySetAutoDisableTime(System.IntPtr,System.Single)">1008<summary>1009Method dBodySetAutoDisableTime1010Set the amount of simulation time that a body must be idle before1011it is automatically disabled.10121013Set this to zero to disable consideration of the amount of simulation time.1014</summary>1015<param name="body">A dBodyID</param>1016<param name="time">A dReal</param>1017</member>1018<member name="M:Tao.Ode.Ode.dBodyGetAutoDisableTime(System.IntPtr)">1019<summary>1020Method dBodyGetAutoDisableTime1021Get the amount of simulation time that a body must be idle before1022it is automatically disabled.10231024If zero, consideration of the amount of simulation time is disabled.1025</summary>1026<returns>A dReal</returns>1027<param name="body">A dBodyID</param>1028</member>1029<member name="M:Tao.Ode.Ode.dBodySetAutoDisableDefaults(System.IntPtr)">1030<summary>1031Method dBodySetAutoDisableDefaults1032Set the auto-disable parameters of the body to the default parameters1033that have been set on the world.1034</summary>1035<param name="body">A dBodyID</param>1036</member>1037<member name="M:Tao.Ode.Ode.dJointCreateBall(System.IntPtr,System.IntPtr)">1038<summary>1039Create a new ball joint.10401041The joint is initially in "limbo" (i.e. it has no effect on the simulation)1042because it does not connect to any bodies.10431044The joint group ID is 0 to allocate the joint normally.1045If it is nonzero the joint is allocated in the given joint group.1046</summary>1047<returns>A dJointID</returns>1048<param name="world">A dWorldID</param>1049<param name="group">A dJointGroupID</param>1050</member>1051<member name="M:Tao.Ode.Ode.dJointCreateHinge(System.IntPtr,System.IntPtr)">1052<summary>1053Create a new hinge joint.10541055The joint is initially in "limbo" (i.e. it has no effect on the simulation)1056because it does not connect to any bodies.10571058The joint group ID is 0 to allocate the joint normally.1059If it is nonzero the joint is allocated in the given joint group.1060</summary>1061<returns>A dJointID</returns>1062<param name="world">A dWorldID</param>1063<param name="group">A dJointGroupID</param>1064</member>1065<member name="M:Tao.Ode.Ode.dJointCreateSlider(System.IntPtr,System.IntPtr)">1066<summary>1067Create a new slider joint.10681069The joint is initially in "limbo" (i.e. it has no effect on the simulation)1070because it does not connect to any bodies.10711072The joint group ID is 0 to allocate the joint normally.1073If it is nonzero the joint is allocated in the given joint group.1074</summary>1075<returns>A dJointID</returns>1076<param name="world">A dWorldID</param>1077<param name="group">A dJointGroupID</param>1078</member>1079<member name="M:Tao.Ode.Ode.dJointCreateContact(System.IntPtr,System.IntPtr,Tao.Ode.Ode.dContact@)">1080<summary>1081Create a new contact joint.10821083The joint is initially in "limbo" (i.e. it has no effect on the simulation)1084because it does not connect to any bodies.10851086The joint group ID is 0 to allocate the joint normally.1087If it is nonzero the joint is allocated in the given joint group.10881089The contact joint will be initialized with the given dContact structure.1090</summary>1091<returns>A dJointID</returns>1092<param name="world">A dWorldID</param>1093<param name="group">A dJointGroupID</param>1094<param name="contact"></param>1095</member>1096<member name="M:Tao.Ode.Ode.dJointCreateHinge2(System.IntPtr,System.IntPtr)">1097<summary>1098Create a new hinge-2 joint.10991100The joint is initially in "limbo" (i.e. it has no effect on the simulation)1101because it does not connect to any bodies.11021103The joint group ID is 0 to allocate the joint normally.1104If it is nonzero the joint is allocated in the given joint group.1105</summary>1106<returns>A dJointID</returns>1107<param name="world">A dWorldID</param>1108<param name="group">A dJointGroupID</param>1109</member>1110<member name="M:Tao.Ode.Ode.dJointCreateUniversal(System.IntPtr,System.IntPtr)">1111<summary>1112Create a new universal joint.11131114The joint is initially in "limbo" (i.e. it has no effect on the simulation)1115because it does not connect to any bodies.11161117The joint group ID is 0 to allocate the joint normally.1118If it is nonzero the joint is allocated in the given joint group.1119</summary>1120<returns>A dJointID</returns>1121<param name="world">A dWorldID</param>1122<param name="group">A dJointGroupID</param>1123</member>1124<member name="M:Tao.Ode.Ode.dJointCreateFixed(System.IntPtr,System.IntPtr)">1125<summary>1126Create a new fixed joint.11271128The joint is initially in "limbo" (i.e. it has no effect on the simulation)1129because it does not connect to any bodies.11301131The joint group ID is 0 to allocate the joint normally.1132If it is nonzero the joint is allocated in the given joint group.1133</summary>1134<returns>A dJointID</returns>1135<param name="world">A dWorldID</param>1136<param name="group">A dJointGroupID</param>1137</member>1138<member name="M:Tao.Ode.Ode.dJointCreateNull(System.IntPtr,System.IntPtr)">1139<summary>1140Create a new "null" joint.11411142There's no discussion of this in the docs or sourcecode.1143The only mention is the following entry in the ODE Changelog:1144114510/11/01 russ11461147* joints can now return m=0 to be "inactive". added a "null" joint1148to test this.11491150This suggests a null joint is mainly useful for testing and should probably1151be ignored by users of the bindings.1152</summary>1153<returns>A dJointID</returns>1154<param name="world">A dWorldID</param>1155<param name="group">A dJointGroupID</param>1156</member>1157<member name="M:Tao.Ode.Ode.dJointCreateAMotor(System.IntPtr,System.IntPtr)">1158<summary>1159Create a new angular motor joint.11601161The joint is initially in "limbo" (i.e. it has no effect on the simulation)1162because it does not connect to any bodies.11631164The joint group ID is 0 to allocate the joint normally.1165If it is nonzero the joint is allocated in the given joint group.1166</summary>1167<returns>A dJointID</returns>1168<param name="world">A dWorldID</param>1169<param name="group">A dJointGroupID</param>1170</member>1171<member name="M:Tao.Ode.Ode.dJointCreateLMotor(System.IntPtr,System.IntPtr)">1172<summary>1173Create a new L-motor joint.11741175The joint is initially in "limbo" (i.e. it has no effect on the simulation)1176because it does not connect to any bodies.11771178The joint group ID is 0 to allocate the joint normally.1179If it is nonzero the joint is allocated in the given joint group.1180</summary>1181<returns>A dJointID</returns>1182<param name="world">A dWorldID</param>1183<param name="group">A dJointGroupID</param>1184</member>1185<member name="M:Tao.Ode.Ode.dJointDestroy(System.IntPtr)">1186<summary>1187Destroy a joint, disconnecting it from its attached bodies and removing it from the world.1188However, if the joint is a member of a group then this function has no effect - to destroy1189that joint the group must be emptied or destroyed.1190</summary>1191<param name="joint">A dJointID</param>1192</member>1193<member name="M:Tao.Ode.Ode.dJointGroupCreate(System.Int32)">1194<summary>1195Create a joint group.11961197NOTE: The max_size argument is no longer used and should be set to 0.1198It is kept for backwards compatibility.1199</summary>1200<returns>A dJointGroupID</returns>1201<param name="max_size">An int</param>1202</member>1203<member name="M:Tao.Ode.Ode.dJointGroupDestroy(System.IntPtr)">1204<summary>1205Destroy a joint group. All joints in the joint group will be destroyed.1206</summary>1207<param name="group">A dJointGroupID</param>1208</member>1209<member name="M:Tao.Ode.Ode.dJointGroupEmpty(System.IntPtr)">1210<summary>1211Empty a joint group.1212All joints in the joint group will be destroyed, but the joint group itself will not be destroyed.1213</summary>1214<param name="group">A dJointGroupID</param>1215</member>1216<member name="M:Tao.Ode.Ode.dJointAttach(System.IntPtr,System.IntPtr,System.IntPtr)">1217<summary>1218Attach the joint to some new bodies.12191220If the joint is already attached, it will be detached from the old bodies first.1221To attach this joint to only one body, set body1 or body2 to zero - a zero body1222refers to the static environment.1223Setting both bodies to zero puts the joint into "limbo", i.e. it will have no1224effect on the simulation.1225Some joints, like hinge-2 need to be attached to two bodies to work.1226</summary>1227<param name="joint">A dJointID</param>1228<param name="body1">A dBodyID</param>1229<param name="body2">A dBodyID</param>1230</member>1231<member name="M:Tao.Ode.Ode.dJointSetData(System.IntPtr,System.IntPtr)">1232<summary>1233Set the joint's user-data pointer.1234</summary>1235<param name="joint">A dJointID</param>1236<param name="data">An IntPtr</param>1237</member>1238<member name="M:Tao.Ode.Ode.dJointGetData(System.IntPtr)">1239<summary>1240Get the joint's user-data pointer.1241</summary>1242<returns>An IntPtr</returns>1243<param name="joint">A dJointID</param>1244</member>1245<member name="M:Tao.Ode.Ode.dJointGetType(System.IntPtr)">1246<summary>1247Get the joint's type.12481249The available joint types are:1250dJointTypeBall: A ball-and-socket joint.1251dJointTypeHinge: A hinge joint.1252dJointTypeSlider: A slider joint.1253dJointTypeContact: A contact joint.1254dJointTypeUniversal: A universal joint.1255dJointTypeHinge2: A hinge-2 joint.1256dJointTypeFixed: A fixed joint.1257dJointTypeAMotor: An angular motor joint.1258dJointTypeLMotor: An L-motor joint.1259</summary>1260<returns>An int</returns>1261<param name="joint">A dJointID</param>1262</member>1263<member name="M:Tao.Ode.Ode.dJointGetBody(System.IntPtr,System.Int32)">1264<summary>1265Return the bodies that this joint connects.12661267If index is 0 the ``first'' body will be returned,1268corresponding to the body1 argument of dJointAttach.1269If index is 1 the ``second'' body will be returned,1270corresponding to the body2 argument of dJointAttach.12711272If one of these returned body IDs is zero, the joint1273connects the other body to the static environment.12741275If both body IDs are zero, the joint is in ``limbo'' and has no effect on the simulation.1276</summary>1277<returns>A dBodyID</returns>1278<param name="joint">A dJointID</param>1279<param name="index">An int</param>1280</member>1281<member name="M:Tao.Ode.Ode.dJointSetFeedback(System.IntPtr,Tao.Ode.Ode.dJointFeedback@)">1282<summary>1283Pass a dJointFeedback structure to the joint to collect information about1284the forces applied by each joint.12851286Notes from the ODE docs:1287During the world time step, the forces that are applied by each joint are computed.1288These forces are added directly to the joined bodies, and the user normally has no1289way of telling which joint contributed how much force.1290If this information is desired then the user can allocate a dJointFeedback structure1291and pass its pointer to the dJointSetFeedback() function.12921293The feedback information structure is defined as follows (NOTE: C# version listed here):1294public struct dJointFeedback {1295public dVector3 f1; /* force that joint applies to body 1 */1296public dVector3 t1; /* torque that joint applies to body 1 */1297public dVector3 f2; /* force that joint applies to body 2 */1298public dVector3 t2; /* torque that joint applies to body 2 */1299};1300During the time step any feedback structures that are attached to joints will be1301filled in with the joint's force and torque information.13021303The dJointGetFeedback() function returns the current feedback structure pointer,1304or 0 if none is used (this is the default).13051306dJointSetFeedback() can be passed 0 to disable feedback for that joint.13071308TODO: Will passing 0 work? Seems as if something else needs to be passed here13091310Now for some API design notes. It might seem strange to require that users perform the1311allocation of these structures. Why not just store the data statically in each joint?1312The reason is that not all users will use the feedback information, and even when it1313is used not all joints will need it. It will waste memory to store it statically,1314especially as this structure could grow to store a lot of extra information in the future.1315Why not have ODE allocate the structure itself, at the user's request? The reason is1316that contact joints (which are created and destroyed every time step) would require a1317lot of time to be spent in memory allocation if feedback is required. Letting the user1318do the allocation means that a better allocation strategy can be provided, e.g simply1319allocating them out of a fixed array.13201321The alternative to this API is to have a joint-force callback. This would work of course,1322but it has a few problems. First, callbacks tend to pollute APIs and sometimes require1323the user to go through unnatural contortions to get the data to the right place.1324Second, this would expose ODE to being changed in the middle of a step (which would have1325bad consequences), and there would have to be some kind of guard against this or a debugging1326check for it - which would complicate things.1327</summary>1328<param name="joint">A dJointID</param>1329<param name="feedback">A dJointFeedback</param>1330</member>1331<member name="M:Tao.Ode.Ode.dJointGetFeedback(System.IntPtr)">1332<summary>1333Get the jointfeedback structure from the joint to get information about1334the forces applied by each joint.13351336The feedback information structure is defined as follows (NOTE: C# version listed here):1337public struct dJointFeedback {1338public dVector3 f1; /* force that joint applies to body 1 */1339public dVector3 t1; /* torque that joint applies to body 1 */1340public dVector3 f2; /* force that joint applies to body 2 */1341public dVector3 t2; /* torque that joint applies to body 2 */1342};13431344The dJointGetFeedback() function returns the current feedback structure pointer,1345or 0 if none is used (this is the default).1346TODO: Will passing 0 work or does something special have to be done?1347</summary>1348<returns>A dJointFeedback</returns>1349<param name="body">A dBodyID</param>1350</member>1351<member name="M:Tao.Ode.Ode.dConnectingJoint(System.IntPtr,System.IntPtr)">1352<summary>1353Undocumented in ODE.13541355Seems to return the first joint connecting the two specified bodies1356</summary>1357<param name="body1">the first body to query</param>1358<param name="body2">the second body to query</param>1359<returns>the id of the first joint found connecting the bodies</returns>1360</member>1361<member name="M:Tao.Ode.Ode.dConnectingJointList(System.IntPtr,System.IntPtr,System.IntPtr[]@)">1362<summary>1363Undocumented in ODE.13641365Seems to return a list of the joints connecting the two specified bodies1366</summary>1367<param name="body1">the first body to query</param>1368<param name="body2">the second body to query</param>1369<param name="connectingJoints">An array of dJointID listing the joints connecting the specified bodies</param>1370<returns>an int specifying the number of connecting joints found</returns>1371</member>1372<member name="M:Tao.Ode.Ode.dAreConnected(System.IntPtr,System.IntPtr)">1373<summary>1374Test if the two specified bodies are connected by a joint.13751376Return 1 if yes, otherwise return 01377</summary>1378<returns>An int</returns>1379<param name="body1">A dBodyID</param>1380<param name="body2">A dBodyID</param>1381</member>1382<member name="M:Tao.Ode.Ode.dAreConnectedExcluding(System.IntPtr,System.IntPtr,System.Int32)">1383<summary>1384Return 1 if the two bodies are connected together by a joint that does not1385have type joint_type, otherwise return 0.1386joint_type is a dJointTypeXXX constant.1387This is useful for deciding whether to add contact joints between two bodies:1388if they are already connected by non-contact joints then it may not be1389appropriate to add contacts, however it is okay to add more contact between1390bodies that already have contacts.1391</summary>1392<returns>An int</returns>1393<param name="body1">A dBodyID</param>1394<param name="body2">A dBodyID</param>1395<param name="joint_type">An int</param>1396</member>1397<member name="M:Tao.Ode.Ode.dJointSetBallAnchor(System.IntPtr,System.Single,System.Single,System.Single)">1398<summary>1399Method dJointSetBallAnchor1400Set the joint anchor point.1401The joint will try to keep this point on each body together.1402The input is specified in world coordinates.1403</summary>1404<param name="joint">A dJointID</param>1405<param name="x">A dReal</param>1406<param name="y">A dReal</param>1407<param name="z">A dReal</param>1408</member>1409<member name="M:Tao.Ode.Ode.dJointSetBallAnchor2(System.IntPtr,System.Single,System.Single,System.Single)">1410<summary>1411Method dJointSetBallAnchor21412Set the joint anchor point.1413The joint will try to keep this point on each body together.1414The input is specified in world coordinates.1415</summary>1416<param name="joint">A dJointID</param>1417<param name="x">A dReal</param>1418<param name="y">A dReal</param>1419<param name="z">A dReal</param>1420</member>1421<member name="M:Tao.Ode.Ode.dJointGetBallAnchor(System.IntPtr,Tao.Ode.Ode.dVector3@)">1422<summary>1423Method dJointGetBallAnchor1424Get the joint anchor point on body 1, in world coordinates.1425If the joint is perfectly satisfied, this will be the same as the point on body 2.1426</summary>1427<param name="joint">A dJointID</param>1428<param name="result">A dVector3</param>1429</member>1430<member name="M:Tao.Ode.Ode.dJointGetBallAnchor2(System.IntPtr,Tao.Ode.Ode.dVector3@)">1431<summary>1432Method dJointGetBallAnchor21433Get the joint anchor point on body 2, in world coordinates.1434You can think of a ball and socket joint as trying to keep the1435result of dJointGetBallAnchor() and dJointGetBallAnchor2() the same.1436If the joint is perfectly satisfied, this function will return the1437same value as dJointGetBallAnchor to within roundoff errors.1438dJointGetBallAnchor2 can be used, along with dJointGetBallAnchor,1439to see how far the joint has come apart.1440</summary>1441<param name="joint">A dJointID</param>1442<param name="result">A dVector3</param>1443</member>1444<member name="M:Tao.Ode.Ode.dJointSetHingeAnchor(System.IntPtr,System.Single,System.Single,System.Single)">1445<summary>1446Set hinge anchor parameters1447</summary>1448<param name="joint">A dJointID</param>1449<param name="x">A dReal</param>1450<param name="y">A dReal</param>1451<param name="z">A dReal</param>1452</member>1453<member name="M:Tao.Ode.Ode.dJointSetHingeAnchorDelta(System.IntPtr,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">1454<summary>1455Set hinge anchor parameters1456</summary>1457<param name="joint">A dJointID</param>1458<param name="x">A dReal</param>1459<param name="y">A dReal</param>1460<param name="z">A dReal</param>1461<param name="ax">A dReal</param>1462<param name="ay">A dReal</param>1463<param name="az">A dReal</param>1464</member>1465<member name="M:Tao.Ode.Ode.dJointSetHingeAxis(System.IntPtr,System.Single,System.Single,System.Single)">1466<summary>1467Set hinge axis parameters1468</summary>1469<param name="joint">A dJointID</param>1470<param name="x">A dReal</param>1471<param name="y">A dReal</param>1472<param name="z">A dReal</param>1473</member>1474<member name="M:Tao.Ode.Ode.dJointGetHingeAnchor(System.IntPtr,Tao.Ode.Ode.dVector3@)">1475<summary>1476Get the joint anchor point, in world coordinates.1477This returns the point on body 1.1478If the joint is perfectly satisfied, this will be the same as the point on body 2.1479</summary>1480<param name="joint">A dJointID</param>1481<param name="result">A dVector3</param>1482</member>1483<member name="M:Tao.Ode.Ode.dJointGetHingeAnchor2(System.IntPtr,Tao.Ode.Ode.dVector3@)">1484<summary>1485Get the joint anchor point, in world coordinates.1486This returns the point on body 2.1487If the joint is perfectly satisfied, this will return the same value as dJointGetHingeAnchor.1488If not, this value will be slightly different.1489This can be used, for example, to see how far the joint has come apart.1490</summary>1491<param name="joint">A dJointID</param>1492<param name="result">A dVector3</param>1493</member>1494<member name="M:Tao.Ode.Ode.dJointGetHingeAxis(System.IntPtr,Tao.Ode.Ode.dVector3@)">1495<summary>1496Get the hinge axis parameter for the joint.1497</summary>1498<param name="joint">A dJointID</param>1499<param name="result">A dVector3</param>1500</member>1501<member name="M:Tao.Ode.Ode.dJointGetHingeAngle(System.IntPtr)">1502<summary>1503Get the hinge angle of the joint.1504The angle is measured between the two bodies, or between the body1505and the static environment.1506The angle will be between -pi..pi.1507When the hinge anchor or axis is set, the current position of the1508attached bodies is examined and that position will be the zero angle.1509</summary>1510<returns>A dReal</returns>1511<param name="joint">A dJointID</param>1512</member>1513<member name="M:Tao.Ode.Ode.dJointGetHingeAngleRate(System.IntPtr)">1514<summary>1515Get the time derivative of the hinge angle of the joint1516</summary>1517<returns>A dReal</returns>1518<param name="joint">A dJointID</param>1519</member>1520<member name="M:Tao.Ode.Ode.dJointSetHingeParam(System.IntPtr,Tao.Ode.Ode.dJointParams,System.Single)">1521<summary>1522Set limit/motor parameters for a hinge joint1523</summary>1524<param name="joint">A dJointID</param>1525<param name="parameter">An int</param>1526<param name="value">A dReal</param>1527</member>1528<member name="M:Tao.Ode.Ode.dJointGetHingeParam(System.IntPtr,Tao.Ode.Ode.dJointParams)">1529<summary>1530Get limit/motor parameters for a hinge joint1531</summary>1532<returns>A dReal</returns>1533<param name="joint">A dJointID</param>1534<param name="parameter">An int</param>1535</member>1536<member name="M:Tao.Ode.Ode.dJointAddHingeTorque(System.IntPtr,System.Single)">1537<summary>1538Applies the torque about the hinge axis.15391540That is, it applies a torque with magnitude torque, in the direction of1541the hinge axis, to body 1, and with the same magnitude but in opposite1542direction to body 2.1543</summary>1544<remarks>1545This function is just a wrapper for dBodyAddTorque1546</remarks>1547<param name="joint">A dJointID</param>1548<param name="torque">A dReal</param>1549</member>1550<member name="M:Tao.Ode.Ode.dJointSetSliderAxis(System.IntPtr,System.Single,System.Single,System.Single)">1551<summary>1552Set the slider axis parameter.1553</summary>1554<param name="joint">A dJointID</param>1555<param name="x">A dReal</param>1556<param name="y">A dReal</param>1557<param name="z">A dReal</param>1558</member>1559<member name="M:Tao.Ode.Ode.dJointSetSliderAxisDelta(System.IntPtr,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">1560<summary>1561Set the slider axis delta.1562</summary>1563<param name="joint">A dJointID</param>1564<param name="x">A dReal</param>1565<param name="y">A dReal</param>1566<param name="z">A dReal</param>1567<param name="ax">A dReal</param>1568<param name="ay">A dReal</param>1569<param name="az">A dReal</param>1570</member>1571<member name="M:Tao.Ode.Ode.dJointGetSliderAxis(System.IntPtr,Tao.Ode.Ode.dVector3@)">1572<summary>1573Get the slider axis parameter1574</summary>1575<param name="joint">A dJointID</param>1576<param name="result">A dVector3</param>1577</member>1578<member name="M:Tao.Ode.Ode.dJointGetSliderPosition(System.IntPtr)">1579<summary>1580Get the slider linear position (i.e. the slider's ``extension'')15811582When the axis is set, the current position of the attached bodies1583is examined and that position will be the zero position.1584</summary>1585<returns>A dReal</returns>1586<param name="joint">A dJointID</param>1587</member>1588<member name="M:Tao.Ode.Ode.dJointGetSliderPositionRate(System.IntPtr)">1589<summary>1590Get the time derivative of the slider linear position.1591</summary>1592<returns>A dReal</returns>1593<param name="joint">A dJointID</param>1594</member>1595<member name="M:Tao.Ode.Ode.dJointSetSliderParam(System.IntPtr,Tao.Ode.Ode.dJointParams,System.Single)">1596<summary>1597Set limit/motor parameters for a slider joint15981599See http://ode.org/ode-latest-userguide.html#sec_7_5_1 for details1600</summary>1601<param name="joint">A dJointID</param>1602<param name="parameter">An int</param>1603<param name="value">A dReal</param>1604</member>1605<member name="M:Tao.Ode.Ode.dJointGetSliderParam(System.IntPtr,Tao.Ode.Ode.dJointParams)">1606<summary>1607Get limit/motor parameters for a slider joint16081609See http://ode.org/ode-latest-userguide.html#sec_7_5_1 for details1610</summary>1611<returns>A dReal</returns>1612<param name="joint">A dJointID</param>1613<param name="parameter">An int</param>1614</member>1615<member name="M:Tao.Ode.Ode.dJointAddSliderForce(System.IntPtr,System.Single)">1616<summary>1617Applies the given force in the slider's direction.1618That is, it applies a force with magnitude force, in the direction1619slider's axis, to body1, and with the same magnitude but opposite1620direction to body2.1621</summary>1622<remarks>1623This function is just a wrapper for dBodyAddForce.1624</remarks>1625<param name="joint">A dJointID</param>1626<param name="force">A dReal</param>1627</member>1628<member name="M:Tao.Ode.Ode.dJointSetHinge2Anchor(System.IntPtr,System.Single,System.Single,System.Single)">1629<summary>1630Set hinge-2 anchor parameters1631</summary>1632<param name="joint">A dJointID</param>1633<param name="x">A dReal</param>1634<param name="y">A dReal</param>1635<param name="z">A dReal</param>1636</member>1637<member name="M:Tao.Ode.Ode.dJointSetHinge2Axis1(System.IntPtr,System.Single,System.Single,System.Single)">1638<summary>1639Set hinge-2 axis 1 parameters16401641Axis 1 and axis 2 must not lie on the same line1642</summary>1643<param name="joint">A dJointID</param>1644<param name="x">A dReal</param>1645<param name="y">A dReal</param>1646<param name="z">A dReal</param>1647</member>1648<member name="M:Tao.Ode.Ode.dJointSetHinge2Axis2(System.IntPtr,System.Single,System.Single,System.Single)">1649<summary>1650Set hinge-2 axis 2 parameters16511652Axis 1 and axis 2 must not lie on the same line1653</summary>1654<param name="joint">A dJointID</param>1655<param name="x">A dReal</param>1656<param name="y">A dReal</param>1657<param name="z">A dReal</param>1658</member>1659<member name="M:Tao.Ode.Ode.dJointGetHinge2Anchor(System.IntPtr,Tao.Ode.Ode.dVector3@)">1660<summary>1661Get the joint anchor point, in world coordinates.1662This returns the point on body 1.1663If the joint is perfectly satisfied, this will be the same as the point on body 2.1664</summary>1665<param name="joint">A dJointID</param>1666<param name="result">A dVector3</param>1667</member>1668<member name="M:Tao.Ode.Ode.dJointGetHinge2Anchor2(System.IntPtr,Tao.Ode.Ode.dVector3@)">1669<summary>1670Get the joint anchor point, in world coordinates.1671This returns the point on body 2.1672If the joint is perfectly satisfied, this will return the same value as dJointGetHinge2Anchor.1673If not, this value will be slightly different.1674This can be used, for example, to see how far the joint has come apart.1675</summary>1676<param name="joint">A dJointID</param>1677<param name="result">A dVector3</param>1678</member>1679<member name="M:Tao.Ode.Ode.dJointGetHinge2Axis1(System.IntPtr,Tao.Ode.Ode.dVector3@)">1680<summary>1681Get hinge-2 axis 1 parameters.1682</summary>1683<param name="joint">A dJointID</param>1684<param name="result">A dVector3</param>1685</member>1686<member name="M:Tao.Ode.Ode.dJointGetHinge2Axis2(System.IntPtr,Tao.Ode.Ode.dVector3@)">1687<summary>1688Get hinge-2 axis 2 parameters.1689</summary>1690<param name="joint">A dJointID</param>1691<param name="result">A dVector3</param>1692</member>1693<member name="M:Tao.Ode.Ode.dJointGetHinge2Angle1(System.IntPtr)">1694<summary>1695Get the hinge-2 angles (around axis 1 and axis 2)16961697When the anchor or axis is set, the current position of the attached bodies1698is examined and that position will be the zero angle.1699</summary>1700<returns>A dReal</returns>1701<param name="joint">A dJointID</param>1702</member>1703<member name="M:Tao.Ode.Ode.dJointGetHinge2Angle1Rate(System.IntPtr)">1704<summary>1705Get the time derivative of hinge-2 angle 11706</summary>1707<returns>A dReal</returns>1708<param name="joint">A dJointID</param>1709</member>1710<member name="M:Tao.Ode.Ode.dJointGetHinge2Angle2Rate(System.IntPtr)">1711<summary>1712Get the time derivative of hinge-2 angle 21713</summary>1714<returns>A dReal</returns>1715<param name="joint">A dJointID</param>1716</member>1717<member name="M:Tao.Ode.Ode.dJointSetHinge2Param(System.IntPtr,Tao.Ode.Ode.dJointParams,System.Single)">1718<summary>1719Set limit/motor parameters for a hinge-2 joint17201721See http://ode.org/ode-latest-userguide.html#sec_7_5_1 for details1722</summary>1723<param name="joint">A dJointID</param>1724<param name="parameter">An int</param>1725<param name="value">A dReal</param>1726</member>1727<member name="M:Tao.Ode.Ode.dJointGetHinge2Param(System.IntPtr,Tao.Ode.Ode.dJointParams)">1728<summary>1729Get limit/motor parameters for a hinge-2 joint17301731See http://ode.org/ode-latest-userguide.html#sec_7_5_1 for details1732</summary>1733<returns>A dReal</returns>1734<param name="joint">A dJointID</param>1735<param name="parameter">An int</param>1736</member>1737<member name="M:Tao.Ode.Ode.dJointAddHinge2Torques(System.IntPtr,System.Single,System.Single)">1738<summary>1739Applies torque1 about the hinge2's axis 1, and torque2 about the hinge2's axis 2.1740This function is just a wrapper for dBodyAddTorque.1741</summary>1742<param name="joint">A dJointID</param>1743<param name="torque1">A dReal</param>1744<param name="torque2">A dReal</param>1745</member>1746<member name="M:Tao.Ode.Ode.dJointSetUniversalAnchor(System.IntPtr,System.Single,System.Single,System.Single)">1747<summary>1748Set universal joint anchor parameters.1749</summary>1750<param name="joint">A dJointID</param>1751<param name="x">A dReal</param>1752<param name="y">A dReal</param>1753<param name="z">A dReal</param>1754</member>1755<member name="M:Tao.Ode.Ode.dJointSetUniversalAxis1(System.IntPtr,System.Single,System.Single,System.Single)">1756<summary>1757Set universal joint axis 1 parameters17581759Axis 1 and axis 2 should be perpendicular to each other.1760</summary>1761<param name="joint">A dJointID</param>1762<param name="x">A dReal</param>1763<param name="y">A dReal</param>1764<param name="z">A dReal</param>1765</member>1766<member name="M:Tao.Ode.Ode.dJointSetUniversalAxis2(System.IntPtr,System.Single,System.Single,System.Single)">1767<summary>1768Set universal joint axis 2 parameters17691770Axis 1 and axis 2 should be perpendicular to each other.1771</summary>1772<param name="joint">A dJointID</param>1773<param name="x">A dReal</param>1774<param name="y">A dReal</param>1775<param name="z">A dReal</param>1776</member>1777<member name="M:Tao.Ode.Ode.dJointGetUniversalAnchor(System.IntPtr,Tao.Ode.Ode.dVector3@)">1778<summary>1779Get the joint anchor point, in world coordinates.1780This returns the point on body 1.1781If the joint is perfectly satisfied, this will be the same as the point on body 2.1782</summary>1783<param name="joint">A dJointID</param>1784<param name="result">A dVector3</param>1785</member>1786<member name="M:Tao.Ode.Ode.dJointGetUniversalAnchor2(System.IntPtr,Tao.Ode.Ode.dVector3@)">1787<summary>1788Get the joint anchor point, in world coordinates.1789This returns the point on body 2.1790You can think of the ball and socket part of a universal joint as trying1791to keep the result of dJointGetBallAnchor() and dJointGetBallAnchor2() the same.1792If the joint is perfectly satisfied, this function will return the same value as1793dJointGetUniversalAnchor to within roundoff errors.1794dJointGetUniversalAnchor2 can be used, along with dJointGetUniversalAnchor, to1795see how far the joint has come apart.1796</summary>1797<param name="joint">A dJointID</param>1798<param name="result">A dVector3</param>1799</member>1800<member name="M:Tao.Ode.Ode.dJointGetUniversalAxis1(System.IntPtr,Tao.Ode.Ode.dVector3@)">1801<summary>1802Get parameters for universal joint axis 11803</summary>1804<param name="joint">A dJointID</param>1805<param name="result">A dVector3</param>1806</member>1807<member name="M:Tao.Ode.Ode.dJointGetUniversalAxis2(System.IntPtr,Tao.Ode.Ode.dVector3@)">1808<summary>1809Get parameters for universal joint axis 21810</summary>1811<param name="joint">A dJointID</param>1812<param name="result">A dVector3</param>1813</member>1814<member name="M:Tao.Ode.Ode.dJointSetUniversalParam(System.IntPtr,Tao.Ode.Ode.dJointParams,System.Single)">1815<summary>1816Set limit/motor parameters for a universal joint18171818See http://ode.org/ode-latest-userguide.html#sec_7_5_1 for details1819</summary>1820<param name="joint">A dJointID</param>1821<param name="parameter">An int</param>1822<param name="value">A dReal</param>1823</member>1824<member name="M:Tao.Ode.Ode.dJointGetUniversalParam(System.IntPtr,Tao.Ode.Ode.dJointParams)">1825<summary>1826Get limit/motor parameters for a universal joint18271828See http://ode.org/ode-latest-userguide.html#sec_7_5_1 for details1829</summary>1830<returns>A dReal</returns>1831<param name="joint">A dJointID</param>1832<param name="parameter">An int</param>1833</member>1834<member name="M:Tao.Ode.Ode.dJointAddUniversalTorques(System.IntPtr,System.Single,System.Single)">1835<summary>1836Applies torque1 about the universal's axis 1, and torque2 about the universal's axis 2.1837</summary>1838<remarks>1839This function is just a wrapper for dBodyAddTorque.1840</remarks>1841<param name="joint">A dJointID</param>1842<param name="torque1">A dReal</param>1843<param name="torque2">A dReal</param>1844</member>1845<member name="M:Tao.Ode.Ode.dJointGetUniversalAngle1(System.IntPtr)">1846<summary>18471848</summary>1849<param name="joint"></param>1850<returns></returns>1851</member>1852<member name="M:Tao.Ode.Ode.dJointGetUniversalAngle2(System.IntPtr)">1853<summary>18541855</summary>1856<param name="joint"></param>1857<returns></returns>1858</member>1859<member name="M:Tao.Ode.Ode.dJointGetUniversalAngle1Rate(System.IntPtr)">1860<summary>18611862</summary>1863<param name="joint"></param>1864<returns></returns>1865</member>1866<member name="M:Tao.Ode.Ode.dJointGetUniversalAngle2Rate(System.IntPtr)">1867<summary>18681869</summary>1870<param name="joint"></param>1871<returns></returns>1872</member>1873<member name="M:Tao.Ode.Ode.dJointSetFixed(System.IntPtr)">1874<summary>1875Call this on the fixed joint after it has been attached to remember the current desired1876relative offset and desired relative rotation between the bodies.1877</summary>1878<remarks>1879The fixed joint maintains a fixed relative position and orientation between two bodies,1880or between a body and the static environment.1881Using this joint is almost never a good idea in practice, except when debugging.1882If you need two bodies to be glued together it is better to represent that as a single body.1883</remarks>1884<param name="joint">A dJointID</param>1885</member>1886<member name="M:Tao.Ode.Ode.dJointSetAMotorMode(System.IntPtr,System.Int32)">1887<summary>1888Set the angular motor mode.1889The mode parameter must be one of the following constants:1890dAMotorUser: The AMotor axes and joint angle settings are entirely controlled by the user.1891This is the default mode.1892dAMotorEuler: Euler angles are automatically computed.1893The axis a1 is also automatically computed.1894The AMotor axes must be set correctly when in this mode, as described below.1895When this mode is initially set the current relative orientations of the1896bodies will correspond to all euler angles at zero.1897</summary>1898<param name="joint">A dJointID</param>1899<param name="mode">An int</param>1900</member>1901<member name="M:Tao.Ode.Ode.dJointGetAMotorMode(System.IntPtr)">1902<summary>1903Get the angular motor mode.1904The mode parameter will be one of the following constants:1905dAMotorUser: The AMotor axes and joint angle settings are entirely controlled by the user.1906This is the default mode.1907dAMotorEuler: Euler angles are automatically computed.1908The axis a1 is also automatically computed.1909The AMotor axes must be set correctly when in this mode, as described below.1910When this mode is initially set the current relative orientations of the1911bodies will correspond to all euler angles at zero.1912</summary>1913<returns>An int</returns>1914<param name="joint">A dJointID</param>1915</member>1916<member name="M:Tao.Ode.Ode.dJointSetAMotorNumAxes(System.IntPtr,System.Int32)">1917<summary>1918Set the number of angular axes that will be controlled by the AMotor.1919The argument num can range from 0 (which effectively deactivates the joint) to 3.1920This is automatically set to 3 in dAMotorEuler mode.1921</summary>1922<param name="joint">A dJointID</param>1923<param name="num">An int</param>1924</member>1925<member name="M:Tao.Ode.Ode.dJointGetAMotorNumAxes(System.IntPtr)">1926<summary>1927Get the number of angular axes controlled by the AMotor.1928The number of axes can range from 0 (which effectively deactivates the joint) to 3.1929This is automatically set to 3 in dAMotorEuler mode.1930</summary>1931<returns>An int</returns>1932<param name="joint">A dJointID</param>1933</member>1934<member name="M:Tao.Ode.Ode.dJointSetAMotorAxis(System.IntPtr,System.Int32,System.Int32,System.Single,System.Single,System.Single)">1935<summary>1936Set the AMotor axes.1937The anum argument selects the axis to change (0,1 or 2).1938Each axis can have one of three ``relative orientation'' modes, selected by rel:1939* 0: The axis is anchored to the global frame.1940* 1: The axis is anchored to the first body.1941* 2: The axis is anchored to the second body.19421943The axis vector (x,y,z) is always specified in global coordinates regardless of the setting of rel.19441945For dAMotorEuler mode:1946* Only axes 0 and 2 need to be set. Axis 1 will be determined automatically at each time step.1947* Axes 0 and 2 must be perpendicular to each other.1948* Axis 0 must be anchored to the first body, axis 2 must be anchored to the second body.1949</summary>1950<param name="joint">A dJointID</param>1951<param name="anum">An int</param>1952<param name="rel">An int</param>1953<param name="x">A dReal</param>1954<param name="y">A dReal</param>1955<param name="z">A dReal</param>1956</member>1957<member name="M:Tao.Ode.Ode.dJointGetAMotorAxis(System.IntPtr,System.Int32,Tao.Ode.Ode.dVector3@)">1958<summary>1959Get the specified AMotor axis.1960The anum argument selects the axis to get (0,1 or 2).1961</summary>1962<param name="joint">A dJointID</param>1963<param name="anum">An int</param>1964<param name="result">A dVector3</param>1965</member>1966<member name="M:Tao.Ode.Ode.dJointGetAMotorAxisRel(System.IntPtr,System.Int32)">1967<summary>1968Get the relative orientation mode for the specified axis1969The anum argument selects the axis to get (0,1 or 2).1970The return value will represent one of three ``relative orientation'' modes:1971* 0: The axis is anchored to the global frame.1972* 1: The axis is anchored to the first body.1973* 2: The axis is anchored to the second body.1974</summary>1975<returns>An int</returns>1976<param name="joint">A dJointID</param>1977<param name="anum">An int</param>1978</member>1979<member name="M:Tao.Ode.Ode.dJointSetAMotorAngle(System.IntPtr,System.Int32,System.Single)">1980<summary>1981Tell the AMotor what the current angle is along axis anum.1982This function should only be called in dAMotorUser mode, because in this mode1983the AMotor has no other way of knowing the joint angles.1984The angle information is needed if stops have been set along the axis,1985but it is not needed for axis motors.1986</summary>1987<param name="joint">A dJointID</param>1988<param name="anum">An int</param>1989<param name="angle">A dReal</param>1990</member>1991<member name="M:Tao.Ode.Ode.dJointGetAMotorAngle(System.IntPtr,System.Int32)">1992<summary>1993Return the current angle for axis anum.1994In dAMotorUser mode this is simply the value that was set with dJointSetAMotorAngle.1995In dAMotorEuler mode this is the corresponding euler angle.1996</summary>1997<returns>A dReal</returns>1998<param name="joint">A dJointID</param>1999<param name="anum">An int</param>2000</member>2001<member name="M:Tao.Ode.Ode.dJointGetAMotorAngleRate(System.IntPtr,System.Int32)">2002<summary>2003Return the current angle rate for axis anum.2004In dAMotorUser mode this is always zero, as not enough information is available.2005In dAMotorEuler mode this is the corresponding euler angle rate.2006</summary>2007<returns>A dReal</returns>2008<param name="joint">A dJointID</param>2009<param name="anum">An int</param>2010</member>2011<member name="M:Tao.Ode.Ode.dJointSetAMotorParam(System.IntPtr,Tao.Ode.Ode.dJointParams,System.Single)">2012<summary>2013Set limit/motor parameters for a an angular motor joint20142015See http://ode.org/ode-latest-userguide.html#sec_7_5_1 for details2016</summary>2017<param name="joint">A dJointID</param>2018<param name="parameter">An int</param>2019<param name="value">A dReal</param>2020</member>2021<member name="M:Tao.Ode.Ode.dJointGetAMotorParam(System.IntPtr,Tao.Ode.Ode.dJointParams)">2022<summary>2023Get limit/motor parameters for a an angular motor joint20242025See http://ode.org/ode-latest-userguide.html#sec_7_5_1 for details2026</summary>2027<returns>A dReal</returns>2028<param name="joint">A dJointID</param>2029<param name="parameter">An int</param>2030</member>2031<member name="M:Tao.Ode.Ode.dJointAddAMotorTorques(System.IntPtr,System.Single,System.Single,System.Single)">2032<summary>2033Applies torque0 about the AMotor's axis 0,2034torque1 about the AMotor's axis 1,2035and torque2 about the AMotor's axis 2.2036If the motor has fewer than three axes, the higher torques are ignored.2037</summary>2038<remarks>2039This function is just a wrapper for dBodyAddTorque.2040</remarks>2041<param name="joint">A dJointID</param>2042<param name="torque1">A dReal</param>2043<param name="torque2">A dReal</param>2044<param name="torque3">A dReal</param>2045</member>2046<member name="M:Tao.Ode.Ode.dJointSetLMotorAxis(System.IntPtr,System.Int32,System.Int32,System.Single,System.Single,System.Single)">2047<summary>20482049</summary>2050<param name="j"></param>2051<param name="anum"></param>2052<param name="rel"></param>2053<param name="x"></param>2054<param name="y"></param>2055<param name="z"></param>2056</member>2057<member name="M:Tao.Ode.Ode.dJointSetLMotorNumAxes(System.IntPtr,System.Int32)">2058<summary>20592060</summary>2061<param name="j"></param>2062<param name="num"></param>2063</member>2064<member name="M:Tao.Ode.Ode.dJointSetLMotorParam(System.IntPtr,System.Int32,System.Single)">2065<summary>20662067</summary>2068<param name="j"></param>2069<param name="parameter"></param>2070<param name="value"></param>2071</member>2072<member name="M:Tao.Ode.Ode.JointSetPlane2DAngleParam(System.IntPtr,System.Int32,System.Single)">2073<summary>20742075</summary>2076<param name="j"></param>2077<param name="parameter"></param>2078<param name="value"></param>2079</member>2080<member name="M:Tao.Ode.Ode.dJointSetPlane2DXParam(System.IntPtr,System.Int32,System.Single)">2081<summary>20822083</summary>2084<param name="j"></param>2085<param name="parameter"></param>2086<param name="value"></param>2087</member>2088<member name="M:Tao.Ode.Ode.dJointSetPlane2DYParam(System.IntPtr,System.Int32,System.Single)">2089<summary>20902091</summary>2092<param name="j"></param>2093<param name="parameter"></param>2094<param name="value"></param>2095</member>2096<member name="M:Tao.Ode.Ode.dJointSetPRAnchor(System.IntPtr,System.Single,System.Single,System.Single)">2097<summary>20982099</summary>2100<param name="j"></param>2101<param name="x"></param>2102<param name="y"></param>2103<param name="z"></param>2104</member>2105<member name="M:Tao.Ode.Ode.dJointSetPRAxis1(System.IntPtr,System.Single,System.Single,System.Single)">2106<summary>21072108</summary>2109<param name="j"></param>2110<param name="x"></param>2111<param name="y"></param>2112<param name="z"></param>2113</member>2114<member name="M:Tao.Ode.Ode.dJointSetPRAxis2(System.IntPtr,System.Single,System.Single,System.Single)">2115<summary>21162117</summary>2118<param name="j"></param>2119<param name="x"></param>2120<param name="y"></param>2121<param name="z"></param>2122</member>2123<member name="M:Tao.Ode.Ode.dJointSetPRParam(System.IntPtr,System.Int32,System.Single)">2124<summary>21252126</summary>2127<param name="j"></param>2128<param name="parameter"></param>2129<param name="value"></param>2130</member>2131<member name="M:Tao.Ode.Ode.dJointGetLMotorAxis(System.IntPtr,System.Int32,Tao.Ode.Ode.dVector3@)">2132<summary>21332134</summary>2135<param name="j"></param>2136<param name="anum"></param>2137<param name="result"></param>2138</member>2139<member name="M:Tao.Ode.Ode.dJointGetLMotorNumAxes(System.IntPtr)">2140<summary>21412142</summary>2143<param name="j"></param>2144<returns></returns>2145</member>2146<member name="M:Tao.Ode.Ode.dJointGetLMotorParam(System.IntPtr,System.Int32)">2147<summary>21482149</summary>2150<param name="j"></param>2151<param name="parameter"></param>2152<returns></returns>2153</member>2154<member name="M:Tao.Ode.Ode.dJointGetPRAnchor(System.IntPtr,Tao.Ode.Ode.dVector3@)">2155<summary>21562157</summary>2158<param name="j"></param>2159<param name="result"></param>2160</member>2161<member name="M:Tao.Ode.Ode.dJointGetPRAxis1(System.IntPtr,Tao.Ode.Ode.dVector3@)">2162<summary>21632164</summary>2165<param name="j"></param>2166<param name="result"></param>2167</member>2168<member name="M:Tao.Ode.Ode.dJointGetPRAxis2(System.IntPtr,Tao.Ode.Ode.dVector3@)">2169<summary>21702171</summary>2172<param name="j"></param>2173<param name="result"></param>2174</member>2175<member name="M:Tao.Ode.Ode.dJointGetPRParam(System.IntPtr,System.Int32)">2176<summary>21772178</summary>2179<param name="j"></param>2180<param name="parameter"></param>2181<returns></returns>2182</member>2183<member name="M:Tao.Ode.Ode.dJointGetPRPosition(System.IntPtr)">2184<summary>21852186</summary>2187<param name="j"></param>2188<returns></returns>2189</member>2190<member name="M:Tao.Ode.Ode.dJointGetUniversalAngles(System.IntPtr,System.Single@,System.Single@)">2191<summary>21922193</summary>2194<param name="j"></param>2195<param name="angle1"></param>2196<param name="angle2"></param>2197</member>2198<member name="M:Tao.Ode.Ode.dJointGetPRPositionRate(System.IntPtr)">2199<summary>22002201</summary>2202<param name="j"></param>2203<returns></returns>2204</member>2205<member name="M:Tao.Ode.Ode.dMassSetZero(Tao.Ode.Ode.dMass@)">2206<summary>2207Set all the mass parameters to zero2208</summary>2209<param name="mass">A reference to a dMass</param>2210</member>2211<member name="M:Tao.Ode.Ode.dMassSetParameters(Tao.Ode.Ode.dMass@,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">2212<summary>2213Set the mass parameters to the given values.2214</summary>2215<remarks>2216The inertia matrix looks like this:2217[ I11 I12 I13 ]2218[ I12 I22 I23 ]2219[ I13 I23 I33 ]2220</remarks>2221<param name="mass">A reference to a dMass</param>2222<param name="themass">the mass of the body</param>2223<param name="cgx">the x coordinate for the center of gravity position in the body frame</param>2224<param name="cgy">the y coordinate for the center of gravity position in the body frame</param>2225<param name="cgz">the z coordinate for the center of gravity position in the body frame</param>2226<param name="I11">An element of the inertia matrix</param>2227<param name="I22">An element of the inertia matrix</param>2228<param name="I33">An element of the inertia matrix</param>2229<param name="I12">An element of the inertia matrix</param>2230<param name="I13">An element of the inertia matrix</param>2231<param name="I23">An element of the inertia matrix</param>2232</member>2233<member name="M:Tao.Ode.Ode.dMassSetSphere(Tao.Ode.Ode.dMass@,System.Single,System.Single)">2234<summary>2235Set the mass parameters to represent a sphere of the given radius and density, with2236the center of mass at (0,0,0) relative to the body.2237</summary>2238<param name="mass">the mass to set</param>2239<param name="density">the density of the sphere</param>2240<param name="radius">the radius of the sphere</param>2241</member>2242<member name="M:Tao.Ode.Ode.dMassSetSphereTotal(Tao.Ode.Ode.dMass@,System.Single,System.Single)">2243<summary>2244Set the mass parameters to represent a sphere of the given total mass and radius, with2245the center of mass at (0,0,0) relative to the body.2246</summary>2247<param name="mass">the mass to set</param>2248<param name="total_mass">the total mass of the sphere</param>2249<param name="radius">the radius of the sphere</param>2250</member>2251<member name="M:Tao.Ode.Ode.dMassSetCapsule(Tao.Ode.Ode.dMass@,System.Single,System.Int32,System.Single,System.Single)">2252<summary>2253Set the mass parameters to represent a capsule of the given parameters and density, with2254the center of mass at (0,0,0) relative to the body.2255</summary>2256<remarks>2257The cylinder's long axis is oriented along the body's x, y or z axis according to the value of direction (1=x, 2=y, 3=z).2258</remarks>2259<param name="mass">the mass to set</param>2260<param name="density">The density of the capsule</param>2261<param name="direction">The orientation of the cylinder's long axis (1=x, 2=y, 3=z)</param>2262<param name="radius">The radius of the cylinder (and the spherical cap)</param>2263<param name="length">The length of the cylinder (not counting the spherical cap)</param>2264</member>2265<member name="M:Tao.Ode.Ode.dMassSetCapsuleTotal(Tao.Ode.Ode.dMass@,System.Single,System.Int32,System.Single,System.Single)">2266<summary>2267Set the mass parameters to represent a capsule of the given parameters and total mass, with2268the center of mass at (0,0,0) relative to the body.2269</summary>2270<remarks>2271The capsule's long axis is oriented along the body's x, y or z axis according to the value of direction (1=x, 2=y, 3=z).2272</remarks>2273<param name="mass">the mass to set</param>2274<param name="total_mass">The total mass of the capsule</param>2275<param name="direction">The orientation of the capsule's long axis (1=x, 2=y, 3=z)</param>2276<param name="radius">The radius of the capsule (and the spherical cap)</param>2277<param name="length">The length of the capsule (not counting the spherical cap)</param>2278</member>2279<member name="M:Tao.Ode.Ode.dMassSetCylinder(Tao.Ode.Ode.dMass@,System.Single,System.Int32,System.Single,System.Single)">2280<summary>2281Set the mass parameters to represent a flat-ended cylinder of the given parameters and density, with2282the center of mass at (0,0,0) relative to the body.2283</summary>2284<remarks>2285The cylinder's long axis is oriented along the body's x, y or z axis according to the value of direction (1=x, 2=y, 3=z).2286</remarks>2287<param name="mass">the mass to set</param>2288<param name="density">the density of the cylinder</param>2289<param name="direction">the orientation of the cylinder</param>2290<param name="radius">The radius of the cylinder</param>2291<param name="length">The length of the cylinder</param>2292</member>2293<member name="M:Tao.Ode.Ode.dMassSetCylinderTotal(Tao.Ode.Ode.dMass@,System.Single,System.Int32,System.Single,System.Single)">2294<summary>2295Set the mass parameters to represent a flat-ended cylinder of the given parameters and total mass, with2296the center of mass at (0,0,0) relative to the body.2297</summary>2298<remarks>2299The cylinder's long axis is oriented along the body's x, y or z axis according to the value of direction (1=x, 2=y, 3=z).2300</remarks>2301<param name="mass">the mass to set</param>2302<param name="total_mass">the total mass of the cylinder</param>2303<param name="direction">the orientation of the cylinder</param>2304<param name="radius">The radius of the cylinder</param>2305<param name="length">The length of the cylinder</param>2306</member>2307<member name="M:Tao.Ode.Ode.dMassSetBox(Tao.Ode.Ode.dMass@,System.Single,System.Single,System.Single,System.Single)">2308<summary>2309Set the mass parameters to represent a box of the given dimensions and density, with2310the center of mass at (0,0,0) relative to the body.2311</summary>2312<param name="mass">the mass to set</param>2313<param name="density">The density of the box</param>2314<param name="lx">The side length of the box along the x axis</param>2315<param name="ly">The side length of the box along the y axis</param>2316<param name="lz">The side length of the box along the z axis</param>2317</member>2318<member name="M:Tao.Ode.Ode.dMassSetBoxTotal(Tao.Ode.Ode.dMass@,System.Single,System.Single,System.Single,System.Single)">2319<summary>2320Set the mass parameters to represent a box of the given dimensions and total mass, with2321the center of mass at (0,0,0) relative to the body.2322</summary>2323<param name="mass">the mass to set</param>2324<param name="total_mass">The total mass of the box</param>2325<param name="lx">The side length of the box along the x axis</param>2326<param name="ly">The side length of the box along the y axis</param>2327<param name="lz">The side length of the box along the z axis</param>2328</member>2329<member name="M:Tao.Ode.Ode.dMassAdjust(Tao.Ode.Ode.dMass@,System.Single)">2330<summary>2331Given mass parameters for some object, adjust them so the total mass is now newmass2332</summary>2333<remarks>2334This is useful when using the "mass set" functions to set the mass parameters for2335certain objects - they take the object density, not the total mass.2336</remarks>2337<param name="mass">the mass parameters to adjust</param>2338<param name="newmass">the new total mass</param>2339</member>2340<member name="M:Tao.Ode.Ode.dMassTranslate(Tao.Ode.Ode.dMass@,System.Single,System.Single,System.Single)">2341<summary>2342Given mass parameters for some object, adjust them to represent the object displaced2343by (x,y,z) relative to the body frame.2344</summary>2345<param name="mass">the mass parameters to translate</param>2346<param name="x">The displacement along the x axis</param>2347<param name="y">The displacement along the y axis</param>2348<param name="z">The displacement along the z axis</param>2349</member>2350<member name="M:Tao.Ode.Ode.dMassRotate(Tao.Ode.Ode.dMass@,System.Single[])">2351<summary>2352Given mass parameters for some object, adjust them to represent the object rotated by R relative to the body frame.2353</summary>2354<param name="mass">the mass to rotate</param>2355<param name="R">An array of 12 elements containing a 3x4 rotation matrix</param>2356</member>2357<member name="M:Tao.Ode.Ode.dMassRotate(Tao.Ode.Ode.dMass@,Tao.Ode.Ode.dMatrix3)">2358<summary>2359Given mass parameters for some object, adjust them to represent the object rotated by R relative to the body frame.2360</summary>2361<param name="mass">A dMass</param>2362<param name="R">A dMatrix3</param>2363</member>2364<member name="M:Tao.Ode.Ode.dMassAdd(Tao.Ode.Ode.dMass@,Tao.Ode.Ode.dMass)">2365<summary>2366Add the mass b to the mass a.2367</summary>2368<remarks>2369mass a is modified to represent the combined mass2370</remarks>2371<param name="a">id of mass a</param>2372<param name="b">id of mass b</param>2373</member>2374<member name="M:Tao.Ode.Ode.dMassSetTrimesh(Tao.Ode.Ode.dMass@,System.Single,System.IntPtr)">2375<summary>23762377</summary>2378<param name="mass"></param>2379<param name="density"></param>2380<param name="g"></param>2381</member>2382<member name="M:Tao.Ode.Ode.dGeomDestroy(System.IntPtr)">2383<summary>2384Destroy a geom, removing it from any space it is in first.2385This one function destroys a geom of any type, but to create a geom you2386must call a creation function for that type.2387When a space is destroyed, if its cleanup mode is 1 (the default) then2388all the geoms in that space are automatically destroyed as well.2389</summary>2390<param name="geom">A dGeomID</param>2391</member>2392<member name="M:Tao.Ode.Ode.dGeomSetData(System.IntPtr,System.IntPtr)">2393<summary>2394Set the user-defined data pointer stored in the geom.23952396WARNING: It is unclear from the ODE source and the documentation what the nature of2397user-data is.2398This function is here for the sake of completeness because it is part of ODE's public API, but2399has NOT been tested in any way.24002401Use at own risk.2402</summary>2403<param name="geom">A dGeomID</param>2404<param name="data">An IntPtr</param>2405</member>2406<member name="M:Tao.Ode.Ode.dGeomGetData(System.IntPtr)">2407<summary>2408Get the user-defined data pointer stored in the geom.24092410WARNING: It is unclear from the ODE source and the documentation what the nature of2411user-data is.2412This function is here for the sake of completeness because it is part of ODE's public API, but2413has NOT been tested in any way.24142415Use at own risk.2416</summary>2417<returns>A void*</returns>2418<param name="geom">A dGeomID</param>2419</member>2420<member name="M:Tao.Ode.Ode.dGeomSetBody(System.IntPtr,System.IntPtr)">2421<summary>2422Set the body associated with a placeable geom.24232424Setting a body on a geom automatically combines the position vector and2425rotation matrix of the body and geom, so that setting the position or2426orientation of one will set the value for both objects.2427Setting a body ID of zero gives the geom its own position and rotation,2428independent from any body.2429If the geom was previously connected to a body then its new independent2430position/rotation is set to the current position/rotation of the body.24312432Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.2433</summary>2434<param name="geom">A dGeomID</param>2435<param name="body">A dBodyID</param>2436</member>2437<member name="M:Tao.Ode.Ode.dGeomGetBody(System.IntPtr)">2438<summary>2439Get the body associated with a placeable geom.2440</summary>2441<returns>A dBodyID</returns>2442<param name="geom">A dGeomID</param>2443</member>2444<member name="M:Tao.Ode.Ode.dGeomSetPosition(System.IntPtr,System.Single,System.Single,System.Single)">2445<summary>2446Set the position vector of a placeable geom.24472448This function is analogous to dBodySetPosition.24492450If the geom is attached to a body, the body's position will also be changed.24512452Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.2453</summary>2454<param name="geom">dGeomID of the geom to set</param>2455<param name="x">the new X coordinate</param>2456<param name="y">the new Y coordinate</param>2457<param name="z">the new Z coordinate</param>2458</member>2459<member name="M:Tao.Ode.Ode.dGeomSetRotation(System.IntPtr,System.Single[])">2460<summary>2461Set the rotation matrix of a placeable geom.24622463This function is analogous to dBodySetRotation.24642465If the geom is attached to a body, the body's rotation will also be changed.24662467Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.2468</summary>2469<param name="geom">the geom to set</param>2470<param name="R">An array of 12 elements containing the new 3x4 rotation matrix</param>2471</member>2472<member name="M:Tao.Ode.Ode.dGeomSetRotation(System.IntPtr,Tao.Ode.Ode.dMatrix3)">2473<summary>2474Set the rotation matrix of a placeable geom.24752476This function is analogous to dBodySetRotation.24772478If the geom is attached to a body, the body's rotation will also be changed.24792480Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.2481</summary>2482<param name="geom">the geom to set</param>2483<param name="R">dMatrix3 containing the new rotation matrix</param>2484</member>2485<member name="M:Tao.Ode.Ode.dGeomSetQuaternion(System.IntPtr,Tao.Ode.Ode.dQuaternion)">2486<summary>2487Set the rotation of a placeable geom.24882489This function is analogous to dBodySetQuaternion.24902491If the geom is attached to a body, the body's rotation will also be changed.24922493Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.2494</summary>2495<param name="geom">the geom to set</param>2496<param name="q">the new rotation</param>2497</member>2498<member name="M:Tao.Ode.Ode.dGeomSetQuaternion(System.IntPtr,System.Single@)">2499<summary>25002501</summary>2502<param name="geom"></param>2503<param name="w"></param>2504</member>2505<member name="M:Tao.Ode.Ode.dGeomGetPosition_(System.IntPtr)">2506<summary>25072508</summary>2509<param name="geom"></param>2510<returns></returns>2511</member>2512<member name="M:Tao.Ode.Ode.dGeomGetPosition(System.IntPtr)">2513<summary>2514Return the geom's position vector.25152516In native ODE, the returned values are pointers to internal data2517structures, so the vectors are valid until any changes are made to the2518geom.25192520If the geom is attached to a body, the body's position vector will be2521returned, i.e. the result will be identical to calling dBodyGetPosition25222523dGeomGetQuaternion copies the geom's quaternion into the space provided.2524If the geom is attached to a body, the body's quaternion will be returned,2525i.e. the resulting quaternion will be the same as the result of calling dBodyGetQuaternion.25262527Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.2528</summary>2529<returns>the geom's position vector</returns>2530<param name="geom">the geom to query</param>2531</member>2532<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildByte(System.IntPtr,System.Byte[],System.Int32,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2533<summary>25342535</summary>2536<param name="d"></param>2537<param name="pHeightData"></param>2538<param name="bCopyHeightData"></param>2539<param name="width"></param>2540<param name="depth"></param>2541<param name="widthSamples"></param>2542<param name="depthSamples"></param>2543<param name="scale"></param>2544<param name="offset"></param>2545<param name="thickness"></param>2546<param name="bWrap"></param>2547</member>2548<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildByte(System.IntPtr,System.IntPtr,System.Int32,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2549<summary>25502551</summary>2552<param name="d"></param>2553<param name="pHeightData"></param>2554<param name="bCopyHeightData"></param>2555<param name="width"></param>2556<param name="depth"></param>2557<param name="widthSamples"></param>2558<param name="depthSamples"></param>2559<param name="scale"></param>2560<param name="offset"></param>2561<param name="thickness"></param>2562<param name="bWrap"></param>2563</member>2564<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildCallback(System.IntPtr,System.IntPtr,Tao.Ode.Ode.dHeightfieldGetHeight,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2565<summary>25662567</summary>2568<param name="d"></param>2569<param name="pUserData"></param>2570<param name="pCallback"></param>2571<param name="width"></param>2572<param name="depth"></param>2573<param name="widthSamples"></param>2574<param name="depthSamples"></param>2575<param name="scale"></param>2576<param name="offset"></param>2577<param name="thickness"></param>2578<param name="bWrap"></param>2579</member>2580<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildShort(System.IntPtr,System.UInt16[],System.Int32,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2581<summary>25822583</summary>2584<param name="d"></param>2585<param name="pHeightData"></param>2586<param name="bCopyHeightData"></param>2587<param name="width"></param>2588<param name="depth"></param>2589<param name="widthSamples"></param>2590<param name="depthSamples"></param>2591<param name="scale"></param>2592<param name="offset"></param>2593<param name="thickness"></param>2594<param name="bWrap"></param>2595</member>2596<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildShort(System.IntPtr,System.Int16[],System.Int32,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2597<summary>25982599</summary>2600<param name="d"></param>2601<param name="pHeightData"></param>2602<param name="bCopyHeightData"></param>2603<param name="width"></param>2604<param name="depth"></param>2605<param name="widthSamples"></param>2606<param name="depthSamples"></param>2607<param name="scale"></param>2608<param name="offset"></param>2609<param name="thickness"></param>2610<param name="bWrap"></param>2611</member>2612<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildShort(System.IntPtr,System.IntPtr,System.Int32,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2613<summary>26142615</summary>2616<param name="d"></param>2617<param name="pHeightData"></param>2618<param name="bCopyHeightData"></param>2619<param name="width"></param>2620<param name="depth"></param>2621<param name="widthSamples"></param>2622<param name="depthSamples"></param>2623<param name="scale"></param>2624<param name="offset"></param>2625<param name="thickness"></param>2626<param name="bWrap"></param>2627</member>2628<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildSingle(System.IntPtr,System.Single[],System.Int32,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2629<summary>26302631</summary>2632<param name="d"></param>2633<param name="pHeightData"></param>2634<param name="bCopyHeightData"></param>2635<param name="width"></param>2636<param name="depth"></param>2637<param name="widthSamples"></param>2638<param name="depthSamples"></param>2639<param name="scale"></param>2640<param name="offset"></param>2641<param name="thickness"></param>2642<param name="bWrap"></param>2643</member>2644<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildSingle(System.IntPtr,System.IntPtr,System.Int32,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2645<summary>26462647</summary>2648<param name="d"></param>2649<param name="pHeightData"></param>2650<param name="bCopyHeightData"></param>2651<param name="width"></param>2652<param name="depth"></param>2653<param name="widthSamples"></param>2654<param name="depthSamples"></param>2655<param name="scale"></param>2656<param name="offset"></param>2657<param name="thickness"></param>2658<param name="bWrap"></param>2659</member>2660<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildDouble(System.IntPtr,System.Double[],System.Int32,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2661<summary>26622663</summary>2664<param name="d"></param>2665<param name="pHeightData"></param>2666<param name="bCopyHeightData"></param>2667<param name="width"></param>2668<param name="depth"></param>2669<param name="widthSamples"></param>2670<param name="depthSamples"></param>2671<param name="scale"></param>2672<param name="offset"></param>2673<param name="thickness"></param>2674<param name="bWrap"></param>2675</member>2676<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataBuildDouble(System.IntPtr,System.IntPtr,System.Int32,System.Single,System.Single,System.Int32,System.Int32,System.Single,System.Single,System.Single,System.Int32)">2677<summary>26782679</summary>2680<param name="d"></param>2681<param name="pHeightData"></param>2682<param name="bCopyHeightData"></param>2683<param name="width"></param>2684<param name="depth"></param>2685<param name="widthSamples"></param>2686<param name="depthSamples"></param>2687<param name="scale"></param>2688<param name="offset"></param>2689<param name="thickness"></param>2690<param name="bWrap"></param>2691</member>2692<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataCreate">2693<summary>26942695</summary>2696<returns></returns>2697</member>2698<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataDestroy(System.IntPtr)">2699<summary>27002701</summary>2702<param name="d"></param>2703</member>2704<member name="M:Tao.Ode.Ode.dGeomHeightfieldDataSetBounds(System.IntPtr,System.Single,System.Single)">2705<summary>27062707</summary>2708<param name="d"></param>2709<param name="minHeight"></param>2710<param name="maxHeight"></param>2711</member>2712<member name="M:Tao.Ode.Ode.dGeomHeightfieldGetHeightfieldData(System.IntPtr)">2713<summary>27142715</summary>2716<param name="g"></param>2717<returns></returns>2718</member>2719<member name="M:Tao.Ode.Ode.dGeomHeightfieldSetHeightfieldData(System.IntPtr,System.IntPtr)">2720<summary>27212722</summary>2723<param name="g"></param>2724<param name="d"></param>2725</member>2726<member name="M:Tao.Ode.Ode.dGeomGetRotation_(System.IntPtr)">2727<summary>27282729</summary>2730<param name="geom"></param>2731<returns></returns>2732</member>2733<member name="M:Tao.Ode.Ode.dGeomGetRotation(System.IntPtr)">2734<summary>2735Get the rotation matrix of a placeable geom.27362737In native ODE, the returned values are pointers to internal data2738structures, so the matrices are valid until any changes are made to the2739geom.27402741If the geom is attached to a body, the body's rotation matrix will be2742returned, i.e. the result will be identical to calling dBodyGetRotation.27432744Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.2745</summary>2746<returns>the geom's rotation matrix</returns>2747<param name="geom">the geom to query</param>2748</member>2749<member name="M:Tao.Ode.Ode.dGeomGetQuaternion(System.IntPtr,Tao.Ode.Ode.dQuaternion@)">2750<summary>2751Get the rotation quaternion of a placeable geom.27522753dGeomGetQuaternion copies the geom's quaternion into the structure provided.27542755If the geom is attached to a body, the body's quaternion will be returned,2756i.e. the resulting quaternion will be the same as the result of calling dBodyGetQuaternion.27572758Calling this function on a non-placeable geom results in a runtime error in the debug build of ODE.2759</summary>2760<param name="geom">the geom to query</param>2761<param name="result">a copy of the rotation quaternion.</param>2762</member>2763<member name="M:Tao.Ode.Ode.dGeomGetAABB(System.IntPtr,Tao.Ode.Ode.Aabb@)">2764<summary>2765Return in aabb an axis aligned bounding box that surrounds the given geom.27662767The aabb array has elements (minx, maxx, miny, maxy, minz, maxz).27682769If the geom is a space, a bounding box that surrounds all contained geoms is returned.27702771This function may return a pre-computed cached bounding box, if it can2772determine that the geom has not moved since the last time the bounding box was computed.2773</summary>2774<param name="geom">the geom to query</param>2775<param name="aabb">the returned bounding box</param>2776</member>2777<member name="M:Tao.Ode.Ode.dGeomGetAABB(System.IntPtr,System.Single@)">2778<summary>27792780</summary>2781<param name="geom"></param>2782<param name="minX"></param>2783</member>2784<member name="M:Tao.Ode.Ode.dGeomIsSpace(System.IntPtr)">2785<summary>2786Determine if a geom is a space.2787</summary>2788<returns>An int, non-zero if the given geom is a space, zero otherwise.</returns>2789<param name="geom">The geom to query</param>2790</member>2791<member name="M:Tao.Ode.Ode.dGeomGetSpace(System.IntPtr)">2792<summary>2793Query for the space containing the specified geom.2794</summary>2795<returns>The space containing the geom, or NULL if the geom is not contained by a space.</returns>2796<param name="geom">the geom to query</param>2797</member>2798<member name="M:Tao.Ode.Ode.dGeomGetClass(System.IntPtr)">2799<summary>2800Given a geom, this returns its class number. The standard class numbers are:2801dSphereClass Sphere2802dBoxClass Box2803dCylinderClass Regular flat-ended cylinder2804dCapsuleClass Capped cylinder2805dPlaneClass Infinite plane (non-placeable)2806dRayClass Ray2807dConvexClass Convex class2808dGeomTransformClass Geometry transform2809dTriMeshClass Triangle mesh2810dSimpleSpaceClass Simple space2811dHashSpaceClass Hash table based space2812dQuadTreeSpaceClass Quad-tree based space2813dFirstUserClass First user class2814dLastUserClass Last user class28152816User defined classes will return their own numbers.2817</summary>2818<returns>The geom class ID.</returns>2819<param name="geom">the geom to query</param>2820</member>2821<member name="M:Tao.Ode.Ode.dGeomSetCategoryBits(System.IntPtr,System.UInt64)">2822<summary>2823Set the "category" bitfield for the given geom.2824This bitfield is used by spaces to govern which geoms will interact2825with each other.28262827The bitfield is guaranteed to be at least 32 bits wide.28282829The default category and collide values for newly created geoms have all bits set.28302831Note this is NOT CLS-compliant (due to the use of ulong to hold the 32-bit bitfield)2832TODO: Implement a CLS-compliant work-around or justify why not2833</summary>2834<param name="geom">the geom to set</param>2835<param name="bits">the new bitfield value</param>2836</member>2837<member name="M:Tao.Ode.Ode.dGeomSetCollideBits(System.IntPtr,System.UInt64)">2838<summary>2839Set the "collide" bitfield for the given geom.28402841This bitfield is used by spaces to govern which geoms will interact2842with each other.28432844The bitfield is guaranteed to be at least 32 bits wide.28452846The default category and collide values for newly created geoms have all bits set.28472848Note this is NOT CLS-compliant (due to the use of ulong to hold the 32-bit bitfield)2849TODO: Implement a CLS-compliant work-around or justify why not2850</summary>2851<param name="geom">the geom to set</param>2852<param name="bits">the new bitfield value</param>2853</member>2854<member name="M:Tao.Ode.Ode.dGeomGetCategoryBits(System.IntPtr)">2855<summary>2856Get the "category" bitfield for the given geom.2857This bitfield is used by spaces to govern which geoms will interact2858with each other.28592860The bitfield is guaranteed to be at least 32 bits wide.28612862The default category and collide values for newly created geoms have all bits set.28632864Note this is NOT CLS-compliant (due to the use of ulong to hold the 32-bit bitfield)2865TODO: Implement a CLS-compliant work-around or justify why not2866</summary>2867<returns>the current bitfield value</returns>2868<param name="geom">the geom to query</param>2869</member>2870<member name="M:Tao.Ode.Ode.dGeomGetCollideBits(System.IntPtr)">2871<summary>2872Get the "collide" bitfield for the given geom.2873This bitfield is used by spaces to govern which geoms will interact2874with each other.28752876The bitfield is guaranteed to be at least 32 bits wide.28772878The default category and collide values for newly created geoms have all bits set.28792880Note this is NOT CLS-compliant (due to the use of ulong to hold the 32-bit bitfield)2881TODO: Implement a CLS-compliant work-around or justify why not2882</summary>2883<returns>the current bitfield</returns>2884<param name="geom">the geom to query</param>2885</member>2886<member name="M:Tao.Ode.Ode.dGeomEnable(System.IntPtr)">2887<summary>2888Enable a geom.28892890Disabled geoms are completely ignored by dSpaceCollide and dSpaceCollide2,2891although they can still be members of a space.28922893New geoms are created in the enabled state.2894</summary>2895<param name="geom">the geom to enable</param>2896</member>2897<member name="M:Tao.Ode.Ode.dGeomDisable(System.IntPtr)">2898<summary>2899Disable a geom.29002901Disabled geoms are completely ignored by dSpaceCollide and dSpaceCollide2,2902although they can still be members of a space.29032904New geoms are created in the enabled state.2905</summary>2906<param name="geom">the geom to disable</param>2907</member>2908<member name="M:Tao.Ode.Ode.dGeomIsEnabled(System.IntPtr)">2909<summary>2910Check if a geom is enabled.29112912New geoms are created in the enabled state.2913</summary>2914<returns>Returns non-zero if a geom is enabled, zero otherwise.</returns>2915<param name="geom">the geom to query</param>2916</member>2917<member name="M:Tao.Ode.Ode.dGeomSetOffsetPosition(System.IntPtr,System.Single,System.Single,System.Single)">2918<summary>2919Geom Offset Overview2920Geom offsets allow geom objects to be offset from a body's position.2921This is useful for cases where an object has an offset centre of mass,2922or is made up out of several geoms each with their own local position.2923Native support for geom offsets means that the geomTransform container is now obselete.29242925The real advantage over geomTransform is that there is a much easier interface for2926setting, getting, and modifying a geom's offset from its body.2927The elimination of geomTransform simplifies callbacks which no longer have to2928special case that geom class type.2929In terms of performance, the new code has a negligible performance difference2930and a memory improvement compared to using a geomTransform.29312932Geom Offset and Bodies2933An offset only makes sense for geoms which are connected to bodies.2934It is an error to attempt to set an offset for a geom which is not connected to a body.2935When a geom is disconnected from a body, any offset will be automatically eliminated.2936Thus, the possible states a geom can be in are:2937* Geom2938* Geom on body2939* Geom on body, with an offset2940To create an offset, just call one of the geomSetOffset functions.2941The offset will be automatically created if it does not yet exist.2942Geom offsets are normally set by specifying the offset in local coordinates.2943An extra set of functions are provided to allow an offset to be determined by2944providing world coordinates and subtracting them from the current body position.2945These second set of functions, geomSetOffsetWorldPosition(),etc, allow the user to2946essentially say "keep the body where it is, and move its geom to this position in the world".2947Set the local offset position of a geom from its body.29482949After this call, the geom will be at a new position determined from the2950body's position and the offset.2951The geom must be attached to a body.2952If the geom did not have an offset, it is automatically created.2953</summary>2954<param name="geom">the geom to set</param>2955<param name="x">the new X coordinate</param>2956<param name="y">the new Y coordinate</param>2957<param name="z">the new Z coordinate</param>2958</member>2959<member name="M:Tao.Ode.Ode.dGeomSetOffsetRotation(System.IntPtr,Tao.Ode.Ode.dMatrix3)">2960<summary>2961Set the local offset rotation matrix of a geom from its body.29622963Sets the geom's rotational offset in local coordinates.2964After this call, the geom will be at a new position determined from the2965body's position and the offset.2966The geom must be attached to a body.2967If the geom did not have an offset, it is automatically created.2968</summary>2969<param name="geom">the geom to set.</param>2970<param name="R">the new rotation matrix.</param>2971</member>2972<member name="M:Tao.Ode.Ode.dGeomSetOffsetQuaternion(System.IntPtr,Tao.Ode.Ode.dQuaternion)">2973<summary>2974Set the local offset rotation of a geom from its body.29752976Sets the geom's rotational offset in local coordinates.2977After this call, the geom will be at a new position determined from the2978body's position and the offset.2979The geom must be attached to a body.2980If the geom did not have an offset, it is automatically created.2981</summary>2982<param name="geom">the geom to set.</param>2983<param name="Q">the new rotation.</param>2984</member>2985<member name="M:Tao.Ode.Ode.dGeomSetOffsetQuaternion(System.IntPtr,System.Single@)">2986<summary>29872988</summary>2989<param name="geom"></param>2990<param name="X"></param>2991</member>2992<member name="M:Tao.Ode.Ode.dGeomSetOffsetWorldPosition(System.IntPtr,System.Single,System.Single,System.Single)">2993<summary>2994Set the offset position of a geom from its body.29952996Sets the geom's positional offset to move it to the new world2997coordinates.2998After this call, the geom will be at the world position passed in,2999and the offset will be the difference from the current body position.3000The geom must be attached to a body.3001If the geom did not have an offset, it is automatically created.3002</summary>3003<param name="geom">the geom to set.</param>3004<param name="x">the new X coordinate.</param>3005<param name="y">the new Y coordinate.</param>3006<param name="z">the new Z coordinate.</param>3007</member>3008<member name="M:Tao.Ode.Ode.dGeomSetOffsetWorldRotation(System.IntPtr,Tao.Ode.Ode.dMatrix3)">3009<summary>3010Set the offset rotation of a geom from its body.30113012Sets the geom's rotational offset to orient it to the new world3013rotation matrix.3014After this call, the geom will be at the world orientation passed in,3015and the offset will be the difference from the current body orientation.3016The geom must be attached to a body.3017If the geom did not have an offset, it is automatically created.3018</summary>3019<param name="geom">the geom to set.</param>>3020<param name="R">the new rotation matrix.</param>>3021</member>3022<member name="M:Tao.Ode.Ode.dGeomSetOffsetWorldRotation(System.IntPtr,System.Single@)">3023<summary>30243025</summary>3026<param name="geom"></param>3027<param name="M00"></param>3028</member>3029<member name="M:Tao.Ode.Ode.dGeomSetOffsetWorldQuaternion(System.IntPtr,Tao.Ode.Ode.dQuaternion)">3030<summary>3031Set the offset rotation of a geom from its body.30323033Sets the geom's rotational offset to orient it to the new world3034rotation matrix.3035After this call, the geom will be at the world orientation passed in,3036and the offset will be the difference from the current body orientation.3037The geom must be attached to a body.3038If the geom did not have an offset, it is automatically created.3039</summary>3040<param name="geom">the geom to set.</param>3041<param name="Q">the new rotation.</param>3042</member>3043<member name="M:Tao.Ode.Ode.dGeomSetOffsetWorldQuaternion(System.IntPtr,System.Single@)">3044<summary>30453046</summary>3047<param name="geom"></param>3048<param name="X"></param>3049</member>3050<member name="M:Tao.Ode.Ode.dGeomClearOffset(System.IntPtr)">3051<summary>3052Clear any offset from the geom.30533054If the geom has an offset, it is eliminated and the geom is3055repositioned at the body's position. If the geom has no offset,3056this function does nothing.3057This is more efficient than calling dGeomSetOffsetPosition(zero)3058and dGeomSetOffsetRotation(identiy), because this function actually3059eliminates the offset, rather than leaving it as the identity transform.3060</summary>3061<param name="geom">the geom to have its offset destroyed.</param>3062</member>3063<member name="M:Tao.Ode.Ode.dGeomIsOffset(System.IntPtr)">3064<summary>3065Check to see whether the geom has an offset.30663067This function will return non-zero if the offset has been created.3068Note that there is a difference between a geom with no offset,3069and a geom with an offset that is the identity transform.3070In the latter case, although the observed behaviour is identical,3071there is a unnecessary computation involved because the geom will3072be applying the transform whenever it needs to recalculate its world3073position.3074</summary>3075<param name="geom">the geom to query.</param>3076<returns>Non-zero if the geom has an offset, zero otherwise.</returns>3077</member>3078<member name="M:Tao.Ode.Ode.dGeomGetOffsetPosition(System.IntPtr)">3079<summary>3080Get the offset position vector of a geom.30813082Returns the positional offset of the geom in local coordinates.3083If the geom has no offset, this function returns the zero vector.3084</summary>3085<param name="geom">the geom to query.</param>3086<returns>A pointer to the geom's offset vector.</returns>3087<remarks>3088The returned value is a pointer to the geom's internal3089data structure. It is valid until any changes are made3090to the geom.3091</remarks>3092</member>3093<member name="M:Tao.Ode.Ode.dGeomGetOffsetRotation(System.IntPtr)">3094<summary>3095Get the offset rotation matrix of a geom.30963097Returns the rotational offset of the geom as a matrix.3098If the geom has no offset, this function returns ????3099FIXME - ODE docs incorrect.3100</summary>3101<param name="geom">the geom to query</param>3102<returns>A pointer to the geom's offset rotation matrix.</returns>3103<remarks>3104The returned value is a pointer to the geom's internal3105data structure. It is valid until any changes are made3106to the geom.3107</remarks>3108</member>3109<member name="M:Tao.Ode.Ode.dGeomGetOffsetQuaternion(System.IntPtr,Tao.Ode.Ode.dQuaternion@)">3110<summary>3111Get the offset rotation quaternion of a geom.31123113Returns the rotation offset of the geom as a quaternion.3114If the geom has no offset, the identity quaternion is returned.3115</summary>3116<param name="geom">the geom to query</param>3117<param name="result">a copy of the rotation quaternion</param>3118</member>3119<member name="M:Tao.Ode.Ode.dCollide(System.IntPtr,System.IntPtr,System.Int32,Tao.Ode.Ode.dContactGeom[],System.Int32)">3120<summary>3121Given two geoms o1 and o2 that potentially intersect, generate contact3122information for them.31233124Internally, this just calls the correct class-specific collision functions3125for o1 and o2.31263127"flags" specifies how contacts should be generated if the geoms touch. The3128lower 16 bits of flags is an integer that specifies the maximum number3129of contact points to generate. Note that if this number is zero, this3130function just pretends that it is one - in other words you can not ask3131for zero contacts. All other bits in flags must be zero.3132In the future the other bits may be used to select from different contact3133generation strategies.31343135"contacts" points to an array of dContactGeom structures. The array must3136be able to hold at least the maximum number of contacts. These3137dContactGeom structures may be embedded within larger structures in the3138array - the skip parameter is the byte offset from one dContactGeom to3139the next in the array. If skip is sizeof(dContactGeom) then contact3140points to a normal (C-style) array. It is an error for skip to be smaller3141than sizeof(dContactGeom).31423143If the geoms intersect, this function returns the number of contact points3144generated (and updates the contact array), otherwise it returns 0 (and the3145contact array is not touched).31463147If a space is passed as o1 or o2 then this function will collide all3148objects contained in o1 with all objects contained in o2, and return3149the resulting contact points. This method for colliding spaces with3150geoms (or spaces with spaces) provides no user control over the3151individual collisions. To get that control, use dSpaceCollide or3152dSpaceCollide2 instead.31533154If o1 and o2 are the same geom then this function will do nothing and3155return 0. Technically speaking an object intersects with itself, but3156it is not useful to find contact points in this case.31573158This function does not care if o1 and o2 are in the same space or not3159(or indeed if they are in any space at all).3160</summary>3161<returns>An int</returns>3162<param name="o1">A dGeomID</param>3163<param name="o2">A dGeomID</param>3164<param name="flags">An int</param>3165<param name="contacts">A dContactGeom[]</param>3166<param name="skip">An int</param>3167</member>3168<member name="M:Tao.Ode.Ode.dSpaceCollide(System.IntPtr,System.IntPtr,Tao.Ode.Ode.dNearCallback)">3169<summary>3170This determines which pairs of geoms in a space may potentially intersect,3171and calls the callback function with each candidate pair.31723173The callback function is of type dNearCallback, which is defined as:3174typedef void dNearCallback (void *data, dGeomID o1, dGeomID o2);31753176The data argument is passed from dSpaceCollide directly to the callback3177function. Its meaning is user defined.3178The o1 and o2 arguments are the geoms that may be near each other.3179The callback function can call dCollide on o1 and o2 to generate contact3180points between each pair. Then these contact points may be added to the3181simulation as contact joints. The user's callback function can of course3182chose not to call dCollide for any pair, e.g. if the user decides that3183those pairs should not interact.31843185Other spaces that are contained within the colliding space are not treated3186specially, i.e. they are not recursed into. The callback function may be3187passed these contained spaces as one or both geom arguments.31883189dSpaceCollide() is guaranteed to pass all intersecting geom pairs to the3190callback function, but it may also make mistakes and pass non-intersecting3191pairs. The number of mistaken calls depends on the internal algorithms3192used by the space. Thus you should not expect that dCollide will return3193contacts for every pair passed to the callback.3194</summary>3195<param name="space">A dSpaceID</param>3196<param name="data">An IntPtr</param>3197<param name="callback">A dNearCallback</param>3198</member>3199<member name="M:Tao.Ode.Ode.dSpaceCollide2(System.IntPtr,System.IntPtr,System.IntPtr,Tao.Ode.Ode.dNearCallback)">3200<summary>3201This function is similar to dSpaceCollide, except that it is passed two3202geoms (or spaces) as arguments. It calls the callback for all3203potentially intersecting pairs that contain one geom from o1 and one geom3204from o2.32053206The exact behavior depends on the types of o1 and o2:3207If one argument is a non-space geom and the other is a space, the3208callback is called with all potential intersections between the geom and3209the objects in the space.3210If both o1 and o2 are spaces then this calls the callback for all potentially3211intersecting pairs that contain one geom from o1 and one geom from o2. The3212algorithm that is used depends on what kinds of spaces are being collided.3213If no optimized algorithm can be selected then this function will resort3214to one of the following two strategies:32151. All the geoms in o1 are tested one-by-one against o2.32162. All the geoms in o2 are tested one-by-one against o1.3217The strategy used may depend on a number of rules, but in general the3218space with less objects has its geoms examined one-by-one.3219- If both arguments are the same space, this is equivalent to calling3220dSpaceCollide on that space.3221- If both arguments are non-space geoms, this simply calls the callback3222once with these arguments.32233224If this function is given a space and an geom X in that same space, this3225case is not treated specially. In this case the callback will always be3226called with the pair (X,X), because an objects always intersects with3227itself. The user may either test for this case and ignore it, or just3228pass the pair (X,X) to dCollide (which will be guaranteed to return 0).3229</summary>3230<param name="o1">A dGeomID</param>3231<param name="o2">A dGeomID</param>3232<param name="data">An IntPtr</param>3233<param name="callback">A dNearCallback</param>3234</member>3235<member name="M:Tao.Ode.Ode.dCreateSphere(System.IntPtr,System.Single)">3236<summary>3237Create a sphere geom of the given radius, and return its ID. If space is3238nonzero, insert it into that space. The point of reference for a sphere3239is its center.3240</summary>3241<returns>A dGeomID</returns>3242<param name="space">A dSpaceID</param>3243<param name="radius">A dReal</param>3244</member>3245<member name="M:Tao.Ode.Ode.dGeomSphereSetRadius(System.IntPtr,System.Single)">3246<summary>3247Set the radius of the given sphere.3248</summary>3249<param name="sphere">A dGeomID</param>3250<param name="radius">A dReal</param>3251</member>3252<member name="M:Tao.Ode.Ode.dGeomSphereGetRadius(System.IntPtr)">3253<summary>3254Return the radius of the given sphere.3255</summary>3256<returns>A dReal</returns>3257<param name="sphere">A dGeomID</param>3258</member>3259<member name="M:Tao.Ode.Ode.dGeomSpherePointDepth(System.IntPtr,System.Single,System.Single,System.Single)">3260<summary>3261Return the depth of the point (x,y,z) in the given sphere.32623263Points inside the geom will have positive depth, points outside it will3264have negative depth, and points on the surface will have zero depth.3265</summary>3266<returns>A dReal</returns>3267<param name="sphere">A dGeomID</param>3268<param name="x">A dReal</param>3269<param name="y">A dReal</param>3270<param name="z">A dReal</param>3271</member>3272<member name="M:Tao.Ode.Ode.dGeomSetConvex(System.IntPtr,System.Single[],System.Int32,System.Single[],System.Int32,System.Int32[])">3273<summary>32743275</summary>3276<param name="geom"></param>3277<param name="planes"></param>3278<param name="planeCount"></param>3279<param name="points"></param>3280<param name="pointCount"></param>3281<param name="polygons"></param>3282<returns></returns>3283</member>3284<member name="M:Tao.Ode.Ode.dCreateConvex(System.IntPtr,System.Single[],System.Int32,System.Single[],System.Int32,System.Int32[])">3285<summary>32863287</summary>3288<param name="space"></param>3289<param name="planes"></param>3290<param name="planeCount"></param>3291<param name="points"></param>3292<param name="pointCount"></param>3293<param name="polygons"></param>3294<returns></returns>3295</member>3296<member name="M:Tao.Ode.Ode.dCreateBox(System.IntPtr,System.Single,System.Single,System.Single)">3297<summary>3298Create a box geom of the given x/y/z side lengths (lx,ly,lz), and return3299its ID.33003301If space is nonzero, insert it into that space. The point of reference3302for a box is its center.3303</summary>3304<returns>A dGeomID</returns>3305<param name="space">the space the box should be inserted to</param>3306<param name="lx">length of the x side</param>3307<param name="ly">length of the y side</param>3308<param name="lz">length of the z side</param>3309</member>3310<member name="M:Tao.Ode.Ode.dGeomBoxSetLengths(System.IntPtr,System.Single,System.Single,System.Single)">3311<summary>3312Set the side lengths of the given box.3313</summary>3314<param name="box">the box to be set</param>3315<param name="lx">length of the x side</param>3316<param name="ly">length of the y side</param>3317<param name="lz">length of the z side</param>3318</member>3319<member name="M:Tao.Ode.Ode.dGeomBoxGetLengths(System.IntPtr,Tao.Ode.Ode.dVector3@)">3320<summary>3321Return in result the side lengths of the given box.3322</summary>3323<param name="box">the box to query</param>3324<param name="result">vector3 containing the side lengths</param>3325</member>3326<member name="M:Tao.Ode.Ode.dGeomBoxGetLengths(System.IntPtr,System.Single@)">3327<summary>33283329</summary>3330<param name="geom"></param>3331<param name="x"></param>3332</member>3333<member name="M:Tao.Ode.Ode.dGeomCopyOffsetPosition(System.IntPtr,Tao.Ode.Ode.dVector3@)">3334<summary>33353336</summary>3337<param name="geom"></param>3338<param name="pos"></param>3339<returns></returns>3340</member>3341<member name="M:Tao.Ode.Ode.dGeomCopyOffsetPosition(System.IntPtr,System.Single@)">3342<summary>33433344</summary>3345<param name="geom"></param>3346<param name="X"></param>3347<returns></returns>3348</member>3349<member name="M:Tao.Ode.Ode.dGeomCopyOffsetRotation(System.IntPtr,Tao.Ode.Ode.dMatrix3@)">3350<summary>33513352</summary>3353<param name="geom"></param>3354<param name="R"></param>3355<returns></returns>3356</member>3357<member name="M:Tao.Ode.Ode.dGeomCopyOffsetRotation(System.IntPtr,System.Single@)">3358<summary>33593360</summary>3361<param name="geom"></param>3362<param name="M00"></param>3363<returns></returns>3364</member>3365<member name="M:Tao.Ode.Ode.dGeomCopyPosition(System.IntPtr,Tao.Ode.Ode.dVector3@)">3366<summary>33673368</summary>3369<param name="geom"></param>3370<param name="pos"></param>3371</member>3372<member name="M:Tao.Ode.Ode.dGeomCopyPosition(System.IntPtr,System.Single@)">3373<summary>33743375</summary>3376<param name="geom"></param>3377<param name="X"></param>3378</member>3379<member name="M:Tao.Ode.Ode.dGeomCopyRotation(System.IntPtr,Tao.Ode.Ode.dMatrix3@)">3380<summary>33813382</summary>3383<param name="geom"></param>3384<param name="R"></param>3385</member>3386<member name="M:Tao.Ode.Ode.dGeomCopyRotation(System.IntPtr,System.Single@)">3387<summary>33883389</summary>3390<param name="geom"></param>3391<param name="M00"></param>3392</member>3393<member name="M:Tao.Ode.Ode.dGeomBoxPointDepth(System.IntPtr,System.Single,System.Single,System.Single)">3394<summary>3395Return the depth of the point (x,y,z) in the given box.33963397Points inside the geom will have positive depth, points outside it will3398have negative depth, and points on the surface will have zero depth.3399</summary>3400<returns>the depth of the point</returns>3401<param name="box">the box to query</param>3402<param name="x">the x-coordinate of the point</param>3403<param name="y">the y-coordinate of the point</param>3404<param name="z">the z-coordinate of the point</param>3405</member>3406<member name="M:Tao.Ode.Ode.dCreatePlane(System.IntPtr,System.Single,System.Single,System.Single,System.Single)">3407<summary>3408Create a plane geom of the given parameters, and return its ID.34093410If space is nonzero, insert it into that space. The plane equation is3411a*x+b*y+c*z = d34123413The plane's normal vector is (a,b,c), and it must have length 1.34143415Planes are non-placeable geoms. This means that, unlike placeable geoms,3416planes do not have an assigned position and rotation. This means that3417the parameters (a,b,c,d) are always in global coordinates. In other words3418it is assumed that the plane is always part of the static environment and3419not tied to any movable object.3420</summary>3421<returns>the plane</returns>3422<param name="space">the space to insert the plane into</param>3423<param name="a">the a parameter of the plane</param>3424<param name="b">the b parameter of the plane</param>3425<param name="c">the c parameter of the plane</param>3426<param name="d">the d parameter of the plane</param>3427</member>3428<member name="M:Tao.Ode.Ode.dGeomPlaneSetParams(System.IntPtr,System.Single,System.Single,System.Single,System.Single)">3429<summary>3430Set the parameters of the given plane.3431</summary>3432<param name="plane">the plane to set</param>3433<param name="a">the a parameter to set</param>3434<param name="b">the b parameter to set</param>3435<param name="c">the c parameter to set</param>3436<param name="d">the d parameter to set</param>3437</member>3438<member name="M:Tao.Ode.Ode.dGeomPlaneGetParams(System.IntPtr,Tao.Ode.Ode.dVector4@)">3439<summary>3440Return in result the parameters of the given plane.3441</summary>3442<param name="plane">the plane to query</param>3443<param name="result">A dVector4 containing the plane's parameters</param>3444</member>3445<member name="M:Tao.Ode.Ode.dGeomPlanePointDepth(System.IntPtr,System.Single,System.Single,System.Single)">3446<summary>3447Return the depth of the point (x,y,z) in the given plane.34483449Points inside the geom will have positive depth, points outside it will3450have negative depth, and points on the surface will have zero depth.3451</summary>3452<returns>the depth of the point as a dReal</returns>3453<param name="plane">the plane to query</param>3454<param name="x">the x coordinate of the point</param>3455<param name="y">the y coordinate of the point</param>3456<param name="z">the z coordinate of the point</param>3457</member>3458<member name="M:Tao.Ode.Ode.dCreateCapsule(System.IntPtr,System.Single,System.Single)">3459<summary>3460Create a capsule geom of the given parameters, and return its ID.3461If space is nonzero, insert it into that space.34623463A capsule is like a normal cylinder except it has half-sphere3464caps at its ends. This feature makes the internal collision detection3465code particularly fast and accurate. The cylinder's length, not counting3466the caps, is given by length. The cylinder is aligned along the geom's3467local Z axis. The radius of the caps, and of the cylinder itself, is3468given by radius.3469</summary>3470<returns>the capsule</returns>3471<param name="space">the space to add the capsule to</param>3472<param name="radius">the radius of the capsule</param>3473<param name="length">the length of the capsule</param>3474</member>3475<member name="M:Tao.Ode.Ode.dGeomCapsuleSetParams(System.IntPtr,System.Single,System.Single)">3476<summary>3477Set the parameters of the given capsule.3478</summary>3479<param name="capsule">the capsule to manipulate</param>3480<param name="radius">the new radius</param>3481<param name="length">the new length</param>3482</member>3483<member name="M:Tao.Ode.Ode.dGeomCapsuleGetParams(System.IntPtr,System.Single@,System.Single@)">3484<summary>3485Return in radius and length the parameters of the given capsule.3486</summary>3487<param name="capsule">the capsule to query</param>3488<param name="radius">a reference to the dReal variable to hold the returned radius</param>3489<param name="length">a reference to the dReal variable to hold the returned length</param>3490</member>3491<member name="M:Tao.Ode.Ode.dGeomCapsulePointDepth(System.IntPtr,System.Single,System.Single,System.Single)">3492<summary>3493Return the depth of the point (x,y,z) in the given capsule.34943495Points inside the geom will have positive depth, points outside it will3496have negative depth, and points on the surface will have zero depth.3497</summary>3498<returns>the depth of the point</returns>3499<param name="capsule">the capsule to query</param>3500<param name="x">the x coordinate of the point</param>3501<param name="y">the y coordinate of the point</param>3502<param name="z">the z coordinate of the point</param>3503</member>3504<member name="M:Tao.Ode.Ode.dCreateCylinder(System.IntPtr,System.Single,System.Single)">3505<summary>3506Create a (flat-ended) cylinder geom of the given parameters, and return its ID.3507If space is nonzero, insert it into that space.35083509The cylinder's length is given by length. The cylinder is aligned along the geom's3510local Z axis.3511The radius of the cylinder is given by radius.3512</summary>3513<returns>the cylinder id</returns>3514<param name="space">the space to add the cylinder to</param>3515<param name="radius">the radius of the cylinder</param>3516<param name="length">the length of the cylinder</param>3517</member>3518<member name="M:Tao.Ode.Ode.dGeomCylinderSetParams(System.IntPtr,System.Single,System.Single)">3519<summary>3520Set the parameters of the given cylinder.3521</summary>3522<param name="cylinder">the cylinder to manipulate</param>3523<param name="radius">the new radius</param>3524<param name="length">the new length</param>3525</member>3526<member name="M:Tao.Ode.Ode.dGeomCylinderGetParams(System.IntPtr,System.Single@,System.Single@)">3527<summary>3528Return in radius and length the parameters of the given cylinder.3529</summary>3530<param name="cylinder">the cylinder to query</param>3531<param name="radius">a reference to the dReal variable to hold the returned radius</param>3532<param name="length">a reference to the dReal variable to hold the returned length</param>3533</member>3534<member name="M:Tao.Ode.Ode.dCreateRay(System.IntPtr,System.Single)">3535<summary>3536Create a ray geom of the given length, and return its ID.35373538If space is nonzero, insert it into that space.3539</summary>3540<remarks>3541A ray is different from all the other geom classes in that it does not3542represent a solid object. It is an infinitely thin line that starts from3543the geom's position and extends in the direction of the geom's local Z-axis.35443545Calling dCollide between a ray and another geom will result in at most one3546contact point. Rays have their own conventions for the contact information3547in the dContactGeom structure (thus it is not useful to create contact3548joints from this information):35493550pos - This is the point at which the ray intersects the surface of the3551other geom, regardless of whether the ray starts from inside or3552outside the geom.3553normal - This is the surface normal of the other geom at the contact point.3554if dCollide is passed the ray as its first geom then the normal3555will be oriented correctly for ray reflection from that surface3556(otherwise it will have the opposite sign).3557depth - This is the distance from the start of the ray to the contact point.35583559Rays are useful for things like visibility testing, determining the path of3560projectiles or light rays, and for object placement.3561</remarks>3562<returns>the id of the new ray</returns>3563<param name="space">the space to add the ray to</param>3564<param name="length">the length of the ray</param>3565</member>3566<member name="M:Tao.Ode.Ode.dGeomRaySetLength(System.IntPtr,System.Single)">3567<summary>3568Set the length of the given ray.3569</summary>3570<param name="ray">the ray to change</param>3571<param name="length">the new length of the ray</param>3572</member>3573<member name="M:Tao.Ode.Ode.dGeomRayGetLength(System.IntPtr)">3574<summary>3575Get the length of the given ray.3576</summary>3577<returns>the length of the ray</returns>3578<param name="ray">the ray to query</param>3579</member>3580<member name="M:Tao.Ode.Ode.dGeomRaySet(System.IntPtr,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">3581<summary>3582Set the starting position (px,py,pz) and direction (dx,dy,dz) of the given ray.3583The ray's rotation matrix will be adjusted so that the local Z-axis is aligned3584with the direction.35853586Note that this does not adjust the ray's length.3587</summary>3588<param name="ray">the ray to set</param>3589<param name="px">x-coordinate of the starting position</param>3590<param name="py">y-coordinate of the starting position</param>3591<param name="pz">z-coordinate of the starting position</param>3592<param name="dx">x-coordinate of the direction</param>3593<param name="dy">y-coordinate of the direction</param>3594<param name="dz">z-coordinate of the direction</param>3595</member>3596<member name="M:Tao.Ode.Ode.dGeomRayGet(System.IntPtr,Tao.Ode.Ode.dVector3@,Tao.Ode.Ode.dVector3@)">3597<summary>3598Get the starting position (start) and direction (dir) of the ray.3599The returned direction will be a unit length vector.3600</summary>3601<param name="ray">the ray to query</param>3602<param name="start">dVector3 containing the returned start position</param>3603<param name="dir">dVector3 containing the returned direction</param>3604</member>3605<member name="M:Tao.Ode.Ode.dGeomRayGet(System.IntPtr,System.Single@,System.Single@)">3606<summary>36073608</summary>3609<param name="ray"></param>3610<param name="startX"></param>3611<param name="dirX"></param>3612</member>3613<member name="M:Tao.Ode.Ode.dGeomRaySetParams(System.IntPtr,System.Int32,System.Int32)">3614<summary>3615Set ray flags that influence ray collision detection.36163617These flags are currently only noticed by the trimesh collider, because they can make a major difference there.3618</summary>3619<param name="g">the ray to set</param>3620<param name="FirstContact">An int representing first contact - undocumented in ODE</param>3621<param name="BackfaceCull">An int representing backface cull - undocumented in ODE</param>3622</member>3623<member name="M:Tao.Ode.Ode.dGeomRayGetParams(System.IntPtr,System.Int32@,System.Int32@)">3624<summary>3625Get ray flags that influence ray collision detection.3626</summary>3627<param name="g">the ray to query</param>3628<param name="FirstContact">An int representing first contact - undocumented in ODE</param>3629<param name="BackfaceCull">An int representing backface cull - undocumented in ODE</param>3630</member>3631<member name="M:Tao.Ode.Ode.dGeomRayGetParams(System.IntPtr,System.Int32[],System.Int32[])">3632<summary>3633Get ray flags that influence ray collision detection.3634TODO: Document me - Not documented in ODE3635</summary>3636<param name="g">the ray to query</param>3637<param name="FirstContact">An int[]</param>3638<param name="BackfaceCull">An int[]</param>3639</member>3640<member name="M:Tao.Ode.Ode.dGeomRaySetClosestHit(System.IntPtr,System.Int32)">3641<summary>3642Set the closest hit parameter for a ray3643TODO: Document me - not documented in ODE3644</summary>3645<param name="g">the ray to set</param>3646<param name="closestHit">An int representing closest hit - not documented in ODE</param>3647</member>3648<member name="M:Tao.Ode.Ode.dGeomRayGetClosestHit(System.IntPtr)">3649<summary>3650Get the closest hit parameter for a ray3651TODO: Document me - not documented in ODE3652</summary>3653<returns>An int representing the closest hit parameter</returns>3654<param name="g">the ray to query</param>3655</member>3656<member name="M:Tao.Ode.Ode.dCreateGeomTransform(System.IntPtr)">3657<summary>3658Create a new geometry transform object, and return its ID.3659NOTE: The new Geometry offset API is favored over transforms.36603661If space is nonzero, insert it into that space.3662On creation the encapsulated geometry is set to 0.3663</summary>3664<remarks>3665A geometry transform `T' is a geom that encapsulates another geom `E',3666allowing E to be positioned and rotated arbitrarily with respect to3667its point of reference.3668Most placeable geoms (like the sphere and box) have their point of3669reference corresponding to their center of mass, allowing them to be3670easily connected to dynamics objects. Transform objects give you more3671flexibility - for example, you can offset the center of a sphere, or3672rotate a cylinder so that its axis is something other than the default.3673T mimics the object E that it encapsulates: T is inserted into a space3674and attached to a body as though it was E. E itself must not be inserted3675into a space or attached to a body. E's position and rotation are set to3676constant values that say how it is transformed relative to T. If E's3677position and rotation are left at their default values, T will behave3678exactly like E would have if you had used it directly.3679</remarks>3680<returns>A dGeomID</returns>3681<param name="space">A dSpaceID</param>3682</member>3683<member name="M:Tao.Ode.Ode.dGeomTransformSetGeom(System.IntPtr,System.IntPtr)">3684<summary>3685Set the geom that the geometry transform g encapsulates. The object obj3686must not be inserted into any space, and must not be associated with any body.36873688If g has its clean-up mode turned on, and it already encapsulates an object,3689the old object will be destroyed before it is replaced with the new one.3690</summary>3691<param name="g">A dGeomID</param>3692<param name="obj">A dGeomID</param>3693</member>3694<member name="M:Tao.Ode.Ode.dGeomTransformGetGeom(System.IntPtr)">3695<summary>3696Get the geom that the geometry transform g encapsulates.3697</summary>3698<returns>A dGeomID</returns>3699<param name="g">A dGeomID</param>3700</member>3701<member name="M:Tao.Ode.Ode.dGeomTransformSetCleanup(System.IntPtr,System.Int32)">3702<summary>3703Set the clean-up mode of geometry transform g.37043705If the clean-up mode is 1, then the encapsulated object will be destroyed3706when the geometry transform is destroyed.3707If the clean-up mode is 0 this does not happen.37083709The default clean-up mode is 0.3710</summary>3711<param name="g">A dGeomID</param>3712<param name="mode">An int</param>3713</member>3714<member name="M:Tao.Ode.Ode.dGeomTransformGetCleanup(System.IntPtr)">3715<summary>3716Get the clean-up mode of geometry transform g.37173718If the clean-up mode is 1, then the encapsulated object will be destroyed3719when the geometry transform is destroyed.3720If the clean-up mode is 0 this does not happen.37213722The default clean-up mode is 0.3723</summary>3724<returns>An int</returns>3725<param name="g">A dGeomID</param>3726</member>3727<member name="M:Tao.Ode.Ode.dGeomTransformSetInfo(System.IntPtr,System.Int32)">3728<summary>3729Set and get the "information" mode of geometry transform g.37303731The mode can be 0 or 1. The default mode is 0.3732With mode 0, when a transform object is collided with another object3733(using dCollide (tx_geom,other_geom,...)), the g1 field of the3734dContactGeom structure is set to the geom that is encapsulated by the3735transform object. This value of g1 allows the caller to interrogate the3736type of the geom that is transformed, but it does not allow the caller3737to determine the position in global coordinates or the associated body,3738as both of these properties are used differently for encapsulated geoms.3739With mode 1, the g1 field of the dContactGeom structure is set to the3740transform object itself. This makes the object appear just like any other3741kind of geom, as dGeomGetBody will return the attached body, and3742dGeomGetPosition will return the global position.3743To get the actual type of the encapsulated geom in this case,3744dGeomTransformGetGeom must be used.3745</summary>3746<param name="g">A dGeomID</param>3747<param name="mode">An int</param>3748</member>3749<member name="M:Tao.Ode.Ode.dGeomTransformGetInfo(System.IntPtr)">3750<summary>3751Set and get the "information" mode of geometry transform g.37523753The mode can be 0 or 1. The default mode is 0.3754</summary>3755<returns>An int</returns>3756<param name="g">A dGeomID</param>3757</member>3758<member name="M:Tao.Ode.Ode.dCreateGeomClass(Tao.Ode.Ode.dGeomClass)">3759<summary>3760Create a custom (user) geom class and register with ODE.3761Note ODE limits the number of custom geom classes that can be generated.37623763NOTE also that this is untested and may need modification/clarification before3764being considered stable.3765</summary>3766<param name="customclass">the custom class object</param>3767<returns>a class number for the new custom geom class</returns>3768</member>3769<member name="M:Tao.Ode.Ode.dGeomGetClassData(System.IntPtr)">3770<summary>Return a class data for a custom user defined geom</summary>3771<param name="geom"></param>3772</member>3773<member name="M:Tao.Ode.Ode.dCreateGeom(System.Int32)">3774<summary>3775Create an instance of a custom user-defined geom class.3776</summary>3777<param name="classnum">the class number of the custom geom, generated by dCreateGeomClass</param>3778<returns>the id (handle) of the new geom instance</returns>3779</member>3780<member name="M:Tao.Ode.Ode.dClosestLineSegmentPoints(Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3@,Tao.Ode.Ode.dVector3@)">3781<summary>3782Given two line segments A and B with endpoints a1-a2 and b1-b2, return3783the points on A and B that are closest to each other (in cp1 and cp2).37843785In the case of parallel lines where there are multiple solutions, a3786solution involving the endpoint of at least one line will be returned.3787This will work correctly for zero length lines, e.g. if a1==a2 and/or b1==b2.3788</summary>3789<param name="a1">A dVector3 containing endpoint 1 of line segment A</param>3790<param name="a2">A dVector3 containing endpoint 2 of line segment A</param>3791<param name="b1">A dVector3 containing endpoint 1 of line segment B</param>3792<param name="b2">A dVector3 containing endpoint 2 of line segment B</param>3793<param name="cp1">A dVector3 returning the closest point on A</param>3794<param name="cp2">A dVector3 returning the closest point on B</param>3795</member>3796<member name="M:Tao.Ode.Ode.dBoxTouchesBox(Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dMatrix3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dMatrix3,Tao.Ode.Ode.dVector3)">3797<summary>3798Given boxes (p1,R1,side1) and (p2,R2,side2), return 1 if they intersect3799or 0 if not. p is the center of the box, R is the rotation matrix for3800the box, and side is a vector of x/y/z side lengths.3801</summary>3802<returns>1 if the boxes intersect, 0 if they do not</returns>3803<param name="_p1">A dVector3 containing the center coordinates for box 1</param>3804<param name="R1">A dMatrix3 containing the rotation matrix for box 1</param>3805<param name="side1">A dVector3 containing the side lengths (x/y/z) for box 1</param>3806<param name="_p2">A dVector3 containing the center coordinates for box 2</param>3807<param name="R2">A dMatrix3 containing the rotation matrix for box 2</param>3808<param name="side2">A dVector3 containing the side lengths (x/y/z) for box 2</param>3809</member>3810<member name="M:Tao.Ode.Ode.dBoxBox(Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dMatrix3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dMatrix3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3@,System.Single@,System.Int32@,System.Int32,Tao.Ode.Ode.dContactGeom[]@,System.Int32)">3811<summary>3812given two boxes (p1,R1,side1) and (p2,R2,side2), collide them together and3813generate contact points. this returns 0 if there is no contact otherwise3814it returns the number of contacts generated.3815`normal' returns the contact normal.3816`depth' returns the maximum penetration depth along that normal.3817`return_code' returns a number indicating the type of contact that was3818detected:38191,2,3 = box 2 intersects with a face of box 138204,5,6 = box 1 intersects with a face of box 238217..15 = edge-edge contact3822`maxc' is the maximum number of contacts allowed to be generated, i.e.3823the size of the `contact' array.3824`contact' and `skip' are the contact array information provided to the3825collision functions.38263827this function only fills in the position and depth fields.3828</summary>3829TODO: Needs testing.3830<param name="p1">A dVector3 containing the center coordinates for box 1</param>3831<param name="R1">A dMatrix3 containing the rotation matrix for box 1</param>3832<param name="side1">A dVector3 containing the side lengths (x/y/z) for box 1</param>3833<param name="p2">A dVector3 containing the center coordinates for box 2</param>3834<param name="R2">A dMatrix3 containing the rotation matrix for box 2</param>3835<param name="side2">A dVector3 containing the side lengths (x/y/z) for box 1</param>3836<param name="normal">returns the value of the contact normal</param>3837<param name="depth">returns the maximum penetration along the contact normal</param>3838<param name="return_code">returns the type of contact detected</param>3839<param name="maxc">specifies the maximum number of contacts allowed (should match size of contact array)</param>3840<param name="contact">an array of ContactGeoms returning the contact information</param>3841<param name="skip">contact array information provided to collision functions. Size of contact geom?</param>3842<returns>the number of contacts generated</returns>3843</member>3844<member name="M:Tao.Ode.Ode.dInfiniteAABB(System.IntPtr,Tao.Ode.Ode.Aabb@)">3845<summary>3846This function can be used as the AABB-getting function in a geometry class,3847if you don't want to compute tight bounds for the AABB.3848It returns +/- infinity in each direction.3849</summary>3850<param name="geom">the geom</param>3851<param name="aabb">the returned Aabb with all positions set to +/- infinity</param>3852</member>3853<member name="M:Tao.Ode.Ode.dCloseODE">3854<summary>3855This deallocates some extra memory used by ODE that can not be deallocated using the normal destroy functions,3856e.g. dWorldDestroy.3857You can use this function at the end of your application to prevent memory leak checkers from complaining about ODE.3858</summary>3859</member>3860<member name="M:Tao.Ode.Ode.dSimpleSpaceCreate(System.IntPtr)">3861<summary>3862Create a simple space.38633864If space is nonzero, insert the new space into that space.3865</summary>3866<returns>A dSpaceID</returns>3867<param name="space">A dSpaceID</param>3868</member>3869<member name="M:Tao.Ode.Ode.dHashSpaceCreate(System.IntPtr)">3870<summary>3871Create a multi-resolution hash table space.38723873If space is nonzero, insert the new space into that space.3874</summary>3875<returns>A dSpaceID</returns>3876<param name="space">A dSpaceID</param>3877</member>3878<member name="M:Tao.Ode.Ode.dQuadTreeSpaceCreate(System.IntPtr,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3,System.Int32)">3879<summary>3880Creates a quadtree space.3881If space is nonzero, insert the new space into that space.38823883Center and Extents define the size of the root block.3884Depth sets the depth of the tree - the number of blocks that are created is 4^Depth3885</summary>3886<returns>A dSpaceID</returns>3887<param name="space">handle of space to replace</param>3888<param name="Center">center of root block</param>3889<param name="Extents">extents of root block</param>3890<param name="Depth">depth of tree</param>3891</member>3892<member name="M:Tao.Ode.Ode.dQuadTreeSpaceCreate(System.IntPtr,System.Single@,System.Single@,System.Int32)">3893<summary>38943895</summary>3896<param name="space"></param>3897<param name="centerX"></param>3898<param name="extentsX"></param>3899<param name="depth"></param>3900<returns></returns>3901</member>3902<member name="M:Tao.Ode.Ode.dSpaceDestroy(System.IntPtr)">3903<summary>3904This destroys a space.3905It functions exactly like dGeomDestroy except that it takes a dSpaceID argument.3906When a space is destroyed, if its cleanup mode is 1 (the default) then all the3907geoms in that space are automatically destroyed as well.3908</summary>3909<param name="space">the space to destroy</param>3910</member>3911<member name="M:Tao.Ode.Ode.dHashSpaceSetLevels(System.IntPtr,System.Int32,System.Int32)">3912<summary>3913Sets some parameters for a multi-resolution hash table space.39143915The smallest and largest cell sizes used in the hash table will be39162^minlevel and 2^maxlevel respectively.39173918minlevel must be less than or equal to maxlevel.3919</summary>3920<param name="space">the space to modify</param>3921<param name="minlevel">minimum level (determines smallest cell size).</param>3922<param name="maxlevel">maximum level (determines largest cell size)</param>3923</member>3924<member name="M:Tao.Ode.Ode.dHashSpaceGetLevels(System.IntPtr,System.Int32@,System.Int32@)">3925<summary>3926Get some parameters for a multi-resolution hash table space.39273928The smallest and largest cell sizes used in the hash table will be39292^minlevel and 2^maxlevel respectively.39303931minlevel must be less than or equal to maxlevel.39323933The minimum and maximum levels are returned through pointers.3934If a pointer is zero then it is ignored and no argument is returned.3935</summary>3936<param name="space">the space to query</param>3937<param name="minlevel">returns current minlevel</param>3938<param name="maxlevel">returns current maxlevel</param>3939</member>3940<member name="M:Tao.Ode.Ode.dSpaceSetCleanup(System.IntPtr,System.Int32)">3941<summary>3942Set the clean-up mode of the space.39433944If the clean-up mode is 1, then the contained geoms will be destroyed3945when the space is destroyed.3946If the clean-up mode is 0 this does not happen.39473948The default clean-up mode for new spaces is 1.3949</summary>3950<param name="space">the space to set</param>3951<param name="mode">the cleanup mode</param>3952</member>3953<member name="M:Tao.Ode.Ode.dSpaceGetCleanup(System.IntPtr)">3954<summary>3955Get the clean-up mode of the space.3956</summary>3957<returns>the current cleanup mode for the space</returns>3958<param name="space">the space to query</param>3959</member>3960<member name="M:Tao.Ode.Ode.dSpaceAdd(System.IntPtr,System.IntPtr)">3961<summary>3962Add a geom to a space.39633964This does nothing if the geom is already in the space.39653966This function can be called automatically if a space argument is given to3967a geom creation function.3968</summary>3969<param name="space">the space to add the geom to</param>3970<param name="geom">the geom to be added</param>3971</member>3972<member name="M:Tao.Ode.Ode.dSpaceRemove(System.IntPtr,System.IntPtr)">3973<summary>3974Remove a geom from a space.39753976This does nothing if the geom is not actually in the space.39773978This function is called automatically by dGeomDestroy if the geom is in a space.3979</summary>3980<param name="space">the space containing the geom</param>3981<param name="geom">the geom to be removed</param>3982</member>3983<member name="M:Tao.Ode.Ode.dSpaceQuery(System.IntPtr,System.IntPtr)">3984<summary>3985Return 1 if the given geom is in the given space, or return 0 if it is not.3986</summary>3987<returns>An int</returns>3988<param name="space">the space to query</param>3989<param name="geom">the geom to query</param>3990</member>3991<member name="M:Tao.Ode.Ode.dSpaceClean(System.IntPtr)">3992<summary>3993Cleans the space3994</summary>3995<param name="space">the space to clean</param>3996</member>3997<member name="M:Tao.Ode.Ode.dSpaceGetNumGeoms(System.IntPtr)">3998<summary>3999Return the number of geoms contained within a space.4000</summary>4001<returns>the number of geoms in the space</returns>4002<param name="space">the space to query</param>4003</member>4004<member name="M:Tao.Ode.Ode.dSpaceGetGeom(System.IntPtr,System.Int32)">4005<summary>4006Return the i'th geom contained within the space.40074008i must range from 0 to dSpaceGetNumGeoms()-1.40094010If any change is made to the space (including adding and deleting geoms)4011then no guarantee can be made about how the index number of any4012particular geom will change. Thus no space changes should be made while4013enumerating the geoms.4014This function is guaranteed to be fastest when the geoms are accessed in4015the order 0,1,2,etc. Other non-sequential orders may result in slower4016access, depending on the internal implementation.4017</summary>4018<returns>a handle to the geom</returns>4019<param name="space">the space to query</param>4020<param name="i">the index number of the geom to get</param>4021</member>4022<member name="M:Tao.Ode.Ode.dGeomTriMeshDataCreate">4023<summary>4024Create a dTriMeshData object which is used to store mesh data.4025</summary>4026<returns>the id of the new trimesh data object</returns>4027</member>4028<member name="M:Tao.Ode.Ode.dGeomTriMeshDataDestroy(System.IntPtr)">4029<summary>4030Destroy a dTriMeshData object.4031</summary>4032<param name="g">the id of the trimesh data object to destroy</param>4033</member>4034<member name="M:Tao.Ode.Ode.dGeomTriMeshDataSet(System.IntPtr,System.Int32,System.IntPtr@)">4035<summary>4036In order to efficiently resolve collisions, dCollideTTL needs the4037positions of the colliding trimeshes in the previous timestep. This is4038used to calculate an estimated velocity of each colliding triangle, which4039is used to find the direction of impact, contact normals, etc. This4040requires the user to update these variables at every timestep. This update4041is performed outside of ODE, so it is not included in ODE itself.4042The code to do this looks something like this:4043const double *DoubleArrayPtr =4044Bodies[BodyIndex].TransformationMatrix->GetArray();4045dGeomTriMeshDataSet( TriMeshData,4046TRIMESH_LAST_TRANSFORMATION,4047(void *) DoubleArrayPtr );40484049The transformation matrix is the standard 4x4 homogeneous transform matrix,4050and the "DoubleArray" is the standard flattened array of the 16 matrix values.4051</summary>4052<param name="g">the trimesh dataset handle</param>4053<param name="data_id">data id, like TRIMESH_LAST_TRANSFORMATION</param>4054<param name="data">a reference to the "DoubleArray"</param>4055</member>4056<member name="M:Tao.Ode.Ode.dGeomTriMeshDataUpdate(System.IntPtr)">4057<summary>40584059</summary>4060<param name="g"></param>4061</member>4062<member name="M:Tao.Ode.Ode.dGeomTriMeshGetData(System.IntPtr)">4063<summary>40644065</summary>4066<param name="g"></param>4067<returns></returns>4068</member>4069<member name="M:Tao.Ode.Ode.dGeomTriMeshGetLastTransformUnsafe(System.IntPtr)">4070<summary>40714072</summary>4073<param name="geom"></param>4074<returns></returns>4075</member>4076<member name="M:Tao.Ode.Ode.dGeomTriMeshGetLastTransform(System.IntPtr)">4077<summary>40784079</summary>4080<param name="geom"></param>4081<returns></returns>4082</member>4083<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildSingle(System.IntPtr,Tao.Ode.Ode.dVector3[],System.Int32,System.Int32,System.Int32[],System.Int32,System.Int32)">4084<summary>4085Build Trimesh data with single precision used in vertex data.4086</summary>4087<remarks>4088Applies to all the dGeomTriMeshDataBuild single and double versions.40894090(From http://ode.org/ode-latest-userguide.html#sec_10_7_6)40914092Used for filling a dTriMeshData object with data.40934094No data is copied here, so the pointers passed into this function must4095remain valid.4096This is how the strided data works:4097struct StridedVertex {4098dVector3 Vertex; // 4th component can be left out, reducing memory usage4099// Userdata4100};4101int VertexStride = sizeof (StridedVertex);41024103struct StridedTri {4104int Indices[3];4105// Userdata4106};4107int TriStride = sizeof (StridedTri);41084109The Normals argument is optional: the normals of the faces of each4110trimesh object. For example,4111dTriMeshDataID TriMeshData;4112TriMeshData = dGeomTriMeshGetTriMeshDataID (4113Bodies[BodyIndex].GeomID);41144115// as long as dReal == floats4116dGeomTriMeshDataBuildSingle (TriMeshData,4117// Vertices4118Bodies[BodyIndex].VertexPositions,41193*sizeof(dReal), (int) numVertices,4120// Faces4121Bodies[BodyIndex].TriangleIndices,4122(int) NumTriangles, 3*sizeof(unsigned int),4123// Normals4124Bodies[BodyIndex].FaceNormals);41254126This pre-calculation saves some time during evaluation of the contacts,4127but isn't necessary. If you don't want to calculate the face normals4128before construction (or if you have enormous trimeshes and know that4129only very few faces will be touching and want to save time), just pass4130a "NULL" for the Normals argument, and dCollideTTL will take care of the4131normal calculations itself.4132</remarks>4133<param name="g">A dTriMeshDataID</param>4134<param name="Vertices">A dVector3[]</param>4135<param name="VertexStride">An int</param>4136<param name="VertexCount">An int</param>4137<param name="Indices">An int[]</param>4138<param name="IndexCount">An int</param>4139<param name="TriStride">An int</param>4140</member>4141<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildSingle1(System.IntPtr,Tao.Ode.Ode.dVector3[],System.Int32,System.Int32,System.Int32[],System.Int32,System.Int32,Tao.Ode.Ode.dVector3[])">4142<summary>4143Build Trimesh data with single precision used in vertex data.4144This function takes a normals array which is used as a trimesh-trimesh4145optimization.4146</summary>4147<param name="g">A dTriMeshDataID</param>4148<param name="Vertices">A dVector3[]</param>4149<param name="VertexStride">An int</param>4150<param name="VertexCount">An int</param>4151<param name="Indices">An int[]</param>4152<param name="IndexCount">An int</param>4153<param name="TriStride">An int</param>4154<param name="Normals">A dVector3[]</param>4155</member>4156<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildDouble(System.IntPtr,Tao.Ode.Ode.dVector3,System.Int32,System.Int32,System.Int32[],System.Int32,System.Int32)">4157<summary>4158Build Trimesh data with double precision used in vertex data.4159</summary>4160<param name="g">A dTriMeshDataID</param>4161<param name="Vertices">A dVector3</param>4162<param name="VertexStride">An int</param>4163<param name="VertexCount">An int</param>4164<param name="Indices">An int[]</param>4165<param name="IndexCount">An int</param>4166<param name="TriStride">An int</param>4167</member>4168<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildDouble1(System.IntPtr,Tao.Ode.Ode.dVector3[],System.Int32,System.Int32,System.Int32[],System.Int32,System.Int32,Tao.Ode.Ode.dVector3[])">4169<summary>4170Build Trimesh data with double precision used in vertex data.4171This function takes a normals array which is used as a trimesh-trimesh4172optimization.4173</summary>4174<param name="g">A dTriMeshDataID</param>4175<param name="Vertices">A dVector3[]</param>4176<param name="VertexStride">An int</param>4177<param name="VertexCount">An int</param>4178<param name="Indices">An int[]</param>4179<param name="IndexCount">An int</param>4180<param name="TriStride">An int</param>4181<param name="Normals">A dVector3[]</param>4182</member>4183<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildDouble(System.IntPtr,System.IntPtr,System.Int32,System.Int32,System.IntPtr,System.Int32,System.Int32,System.IntPtr)">4184<summary>41854186</summary>4187<param name="g"></param>4188<param name="vertices"></param>4189<param name="vertexStride"></param>4190<param name="vertexCount"></param>4191<param name="indices"></param>4192<param name="indexCount"></param>4193<param name="triStride"></param>4194<param name="normals"></param>4195</member>4196<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildDouble(System.IntPtr,System.IntPtr,System.Int32,System.Int32,System.IntPtr,System.Int32,System.Int32)">4197<summary>41984199</summary>4200<param name="g"></param>4201<param name="vertices"></param>4202<param name="vertexStride"></param>4203<param name="vertexCount"></param>4204<param name="indices"></param>4205<param name="indexCount"></param>4206<param name="triStride"></param>4207</member>4208<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildSimple(System.IntPtr,Tao.Ode.Ode.dVector3[],System.Int32,System.Int32[],System.Int32)">4209<summary>4210Simple trimesh build function provided for convenience.42114212Uses single/double precision vertices and normals depending on the4213current value of the dReal alias.4214The precision to use depends on which version of the ODE library is being4215used - single or double precision. Depends on whether dSINGLE or dDOUBLE is4216defined during ODE compilation.4217</summary>4218<param name="g">A dTriMeshDataID</param>4219<param name="Vertices">A dVector3[]</param>4220<param name="VertexCount">An int</param>4221<param name="Indices">An int[]</param>4222<param name="IndexCount">An int</param>4223</member>4224<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildSingle(System.IntPtr,System.IntPtr,System.Int32,System.Int32,System.IntPtr,System.Int32,System.Int32)">4225<summary>42264227</summary>4228<param name="g"></param>4229<param name="vertices"></param>4230<param name="vertexStride"></param>4231<param name="vertexCount"></param>4232<param name="indices"></param>4233<param name="indexCount"></param>4234<param name="triStride"></param>4235</member>4236<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildSimple1(System.IntPtr,Tao.Ode.Ode.dVector3[],System.Int32,System.Int32[],System.Int32,Tao.Ode.Ode.dVector3[])">4237<summary>4238Simple trimesh build function provided for convenience.4239This version takes a normals array to use for trimesh-trimesh optimization.42404241Uses single/double precision vertices and normals depending on the4242current value of the dReal alias.4243The precision to use depends on which version of the ODE library is being4244used - single or double precision. Depends on whether dSINGLE or dDOUBLE is4245defined during ODE compilation.4246</summary>4247<param name="g">A dTriMeshDataID</param>4248<param name="Vertices">A dVector3[]</param>4249<param name="VertexCount">An int</param>4250<param name="Indices">An int[]</param>4251<param name="IndexCount">An int</param>4252<param name="Normals">A dVector3[]</param>4253</member>4254<member name="M:Tao.Ode.Ode.dGeomTriMeshDataBuildSingle1(System.IntPtr,System.IntPtr,System.Int32,System.Int32,System.IntPtr,System.Int32,System.Int32,System.IntPtr)">4255<summary>42564257</summary>4258<param name="g"></param>4259<param name="vertices"></param>4260<param name="vertexStride"></param>4261<param name="vertexCount"></param>4262<param name="indices"></param>4263<param name="indexCount"></param>4264<param name="triStride"></param>4265<param name="normals"></param>4266</member>4267<member name="M:Tao.Ode.Ode.dGeomTriMeshSetCallback(System.IntPtr,Tao.Ode.Ode.dTriCallback)">4268<summary>4269Set per triangle callback for specified trimesh.4270</summary>4271<param name="g">A dGeomID</param>4272<param name="Callback">A dTriCallback</param>4273</member>4274<member name="M:Tao.Ode.Ode.dGeomTriMeshGetCallback(System.IntPtr)">4275<summary>4276Get per triangle callback for specified trimesh.4277</summary>4278<returns>A dTriCallback</returns>4279<param name="g">A dGeomID</param>4280</member>4281<member name="M:Tao.Ode.Ode.dGeomTriMeshSetArrayCallback(System.IntPtr,Tao.Ode.Ode.dTriArrayCallback)">4282<summary>4283Set per object callback for specified trimesh.4284</summary>4285<param name="g">A dGeomID</param>4286<param name="ArrayCallback">A dTriArrayCallback</param>4287</member>4288<member name="M:Tao.Ode.Ode.dGeomTriMeshGetArrayCallback(System.IntPtr)">4289<summary>4290Get per object callback for specified trimesh4291</summary>4292<returns>A dTriArrayCallback</returns>4293<param name="g">A dGeomID</param>4294</member>4295<member name="M:Tao.Ode.Ode.dGeomTriMeshSetRayCallback(System.IntPtr,Tao.Ode.Ode.dTriRayCallback)">4296<summary>4297Set ray callback for specified trimesh.4298</summary>4299<param name="g">A dGeomID</param>4300<param name="Callback">A dTriRayCallback</param>4301</member>4302<member name="M:Tao.Ode.Ode.dGeomTriMeshGetRayCallback(System.IntPtr)">4303<summary>4304Get ray callback for specified trimesh.4305</summary>4306<returns>A dTriRayCallback</returns>4307<param name="g">A dGeomID</param>4308</member>4309<member name="M:Tao.Ode.Ode.dCreateTriMesh(System.IntPtr,System.IntPtr,Tao.Ode.Ode.dTriCallback,Tao.Ode.Ode.dTriArrayCallback,Tao.Ode.Ode.dTriRayCallback)">4310<summary>4311Trimesh class constructor.43124313The Data member defines the vertex data the newly created triangle mesh will use.43144315Callbacks are optional.4316</summary>4317<returns>A dGeomID</returns>4318<param name="space">A dSpaceID</param>4319<param name="Data">A dTriMeshDataID</param>4320<param name="Callback">A dTriCallback</param>4321<param name="ArrayCallback">A dTriArrayCallback</param>4322<param name="RayCallback">A dTriRayCallback</param>4323</member>4324<member name="M:Tao.Ode.Ode.dGeomTriMeshSetData(System.IntPtr,System.IntPtr)">4325<summary>4326Replaces the current vertex data.4327</summary>4328<param name="g">A dGeomID</param>4329<param name="Data">A dTriMeshDataID</param>4330</member>4331<member name="M:Tao.Ode.Ode.dGeomTriMeshEnableTC(System.IntPtr,System.Int32,System.Int32)">4332<summary>4333Enable/disable the use of temporal coherence during tri-mesh collision checks.4334Temporal coherence can be enabled/disabled per tri-mesh instance/geom class pair,4335currently it works for spheres and boxes. The default for spheres and boxes is 'false'.4336The 'enable' param should be 1 for true, 0 for false.4337Temporal coherence is optional because allowing it can cause subtle efficiency problems4338in situations where a tri-mesh may collide with many different geoms during its lifespan.4339If you enable temporal coherence on a tri-mesh then these problems can be eased by4340intermittently calling dGeomTriMeshClearTCCache for it.4341</summary>4342<param name="g">A dGeomID</param>4343<param name="geomClass">An int</param>4344<param name="enable">An int</param>4345</member>4346<member name="M:Tao.Ode.Ode.dGeomTriMeshIsTCEnabled(System.IntPtr,System.Int32)">4347<summary>4348Checks whether the use of temporal coherence during tri-mesh collision checks is enabled.43494350Returns 1 if enabled, 0 if not enabled.4351</summary>4352<returns>An int</returns>4353<param name="g">A dGeomID</param>4354<param name="geomClass">An int</param>4355</member>4356<member name="M:Tao.Ode.Ode.dGeomTriMeshClearTCCache(System.IntPtr)">4357<summary>4358Clears the internal temporal coherence caches. When a geom has its4359collision checked with a trimesh once, data is stored inside the trimesh.4360With large worlds with lots of seperate objects this list could get huge.4361</summary>4362<param name="g">A dGeomID</param>4363</member>4364<member name="M:Tao.Ode.Ode.dGeomTriMeshDataGet(System.IntPtr,System.Int32)">4365<summary>43664367</summary>4368<param name="g"></param>4369<param name="data_id"></param>4370<returns></returns>4371</member>4372<member name="M:Tao.Ode.Ode.dGeomTriMeshDataPreprocess(System.IntPtr)">4373<summary>43744375</summary>4376<param name="g"></param>4377</member>4378<member name="M:Tao.Ode.Ode.dGeomTriMeshGetTriMeshDataID(System.IntPtr)">4379<summary>4380Returns the TriMeshDataID for the specified geom.4381</summary>4382<returns>A dTriMeshDataID</returns>4383<param name="g">A dGeomID</param>4384</member>4385<member name="M:Tao.Ode.Ode.dGeomTriMeshSetLastTransform(System.IntPtr,Tao.Ode.Ode.dMatrix4@)">4386<summary>43874388</summary>4389<param name="d"></param>4390<param name="last_trans"></param>4391</member>4392<member name="M:Tao.Ode.Ode.dGeomTriMeshSetLastTransform(System.IntPtr,System.Single@)">4393<summary>43944395</summary>4396<param name="d"></param>4397<param name="M00"></param>4398</member>4399<member name="M:Tao.Ode.Ode.dGeomTriMeshGetTriangle(System.IntPtr,System.Int32,Tao.Ode.Ode.dVector3@,Tao.Ode.Ode.dVector3@,Tao.Ode.Ode.dVector3@)">4400<summary>4401Retrieves a triangle in object space. The v0, v1 and v2 arguments are optional.4402</summary>4403<param name="g">A dGeomID</param>4404<param name="Index">An int</param>4405<param name="v0">A dVector3</param>4406<param name="v1">A dVector3</param>4407<param name="v2">A dVector3</param>4408</member>4409<member name="M:Tao.Ode.Ode.dGeomTriMeshGetPoint(System.IntPtr,System.Int32,System.Single,System.Single,Tao.Ode.Ode.dVector3@)">4410<summary>4411Retrieves a position on the requested triangle and the given4412barycentric coordinates4413</summary>4414<param name="g">A dGeomID</param>4415<param name="Index">An int</param>4416<param name="u">A dReal</param>4417<param name="v">A dReal</param>4418<param name="Out">A dVector3</param>4419</member>4420<member name="M:Tao.Ode.Ode.dGeomTriMeshGetTriangleCount(System.IntPtr)">4421<summary>44224423</summary>4424<param name="d"></param>4425<returns></returns>4426</member>4427<member name="M:Tao.Ode.Ode.dRSetIdentity(Tao.Ode.Ode.dMatrix3@)">4428<summary>4429Set R to the identity matrix (i.e. no rotation).4430</summary>4431<param name="R">A dMatrix3</param>4432</member>4433<member name="M:Tao.Ode.Ode.dRFromAxisAndAngle(Tao.Ode.Ode.dMatrix3@,System.Single,System.Single,System.Single,System.Single)">4434<summary>4435Compute the rotation matrix R as a rotation of angle radians along the axis (ax,ay,az).4436</summary>4437<param name="R">A dMatrix3</param>4438<param name="ax">A dReal</param>4439<param name="ay">A dReal</param>4440<param name="az">A dReal</param>4441<param name="angle">A dReal</param>4442</member>4443<member name="M:Tao.Ode.Ode.dRFromEulerAngles(Tao.Ode.Ode.dMatrix3@,System.Single,System.Single,System.Single)">4444<summary>4445Compute the rotation matrix R from the three Euler rotation angles.4446</summary>4447<param name="R">A dMatrix3</param>4448<param name="phi">A dReal</param>4449<param name="theta">A dReal</param>4450<param name="psi">A dReal</param>4451</member>4452<member name="M:Tao.Ode.Ode.dRFrom2Axes(Tao.Ode.Ode.dMatrix3@,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">4453<summary>4454Compute the rotation matrix R from the two vectors `a' (ax,ay,az) and `b' (bx,by,bz). `a' and `b' are the desired x and y axes of the rotated coordinate system. If necessary, `a' and `b' will be made unit length, and `b' will be projected so that it is perpendicular to `a'. The desired z axis is the cross product of `a' and `b'.4455</summary>4456<param name="R">A dMatrix3</param>4457<param name="ax">A dReal</param>4458<param name="ay">A dReal</param>4459<param name="az">A dReal</param>4460<param name="bx">A dReal</param>4461<param name="by">A dReal</param>4462<param name="bz">A dReal</param>4463</member>4464<member name="M:Tao.Ode.Ode.dRFromZAxis(System.Single[],System.Single,System.Single,System.Single)">4465<summary>4466TODO: Document Me4467</summary>4468<param name="R"></param>4469<param name="ax"></param>4470<param name="ay"></param>4471<param name="az"></param>4472</member>4473<member name="M:Tao.Ode.Ode.dRFromZAxis(Tao.Ode.Ode.dMatrix3,System.Single,System.Single,System.Single)">4474<summary>4475ODE API compatability function due to dMatrix3 marshalling errors4476</summary>4477<param name="R"></param>4478<param name="ax"></param>4479<param name="ay"></param>4480<param name="az"></param>4481</member>4482<member name="M:Tao.Ode.Ode.dQSetIdentity(Tao.Ode.Ode.dQuaternion@)">4483<summary>4484Set q to the identity rotation (i.e. no rotation).4485</summary>4486<param name="q">A dQuaternion</param>4487</member>4488<member name="M:Tao.Ode.Ode.dQFromAxisAndAngle(Tao.Ode.Ode.dQuaternion@,System.Single,System.Single,System.Single,System.Single)">4489<summary>4490Compute q as a rotation of angle radians along the axis (ax,ay,az).4491</summary>4492<param name="q">A dQuaternion</param>4493<param name="ax">A dReal</param>4494<param name="ay">A dReal</param>4495<param name="az">A dReal</param>4496<param name="angle">A dReal</param>4497</member>4498<member name="M:Tao.Ode.Ode.dQMultiply0(Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dQuaternion@)">4499<summary>4500Set qa = qb*qc. This is that same as qa = rotation qc followed by rotation qb. The 0/1/2 versions are analogous to the multiply functions, i.e. 1 uses the inverse of qb, and 2 uses the inverse of qc. Option 3 uses the inverse of both.4501</summary>4502<param name="qa">A dQuaternion</param>4503<param name="qb">A returning dQuaternion</param>4504<param name="qc">A returning dQuaternion</param>4505</member>4506<member name="M:Tao.Ode.Ode.dQMultiply1(Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dQuaternion@)">4507<summary>4508Set qa = qb*qc. This is that same as qa = rotation qc followed by rotation qb. The 0/1/2 versions are analogous to the multiply functions, i.e. 1 uses the inverse of qb, and 2 uses the inverse of qc. Option 3 uses the inverse of both.4509</summary>4510<param name="qa">A dQuaternion</param>4511<param name="qb">A returning dQuaternion</param>4512<param name="qc">A returning dQuaternion</param>4513</member>4514<member name="M:Tao.Ode.Ode.dQMultiply2(Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dQuaternion@)">4515<summary>4516Set qa = qb*qc. This is that same as qa = rotation qc followed by rotation qb. The 0/1/2 versions are analogous to the multiply functions, i.e. 1 uses the inverse of qb, and 2 uses the inverse of qc. Option 3 uses the inverse of both.4517</summary>4518<param name="qa">A dQuaternion</param>4519<param name="qb">A returning dQuaternion</param>4520<param name="qc">A returning dQuaternion</param>4521</member>4522<member name="M:Tao.Ode.Ode.dQMultiply3(Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dQuaternion@)">4523<summary>4524Set qa = qb*qc. This is that same as qa = rotation qc followed by rotation qb. The 0/1/2 versions are analogous to the multiply functions, i.e. 1 uses the inverse of qb, and 2 uses the inverse of qc. Option 3 uses the inverse of both.4525</summary>4526<param name="qa">A dQuaternion</param>4527<param name="qb">A returning dQuaternion</param>4528<param name="qc">A returning dQuaternion</param>4529</member>4530<member name="M:Tao.Ode.Ode.dQtoR(Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dMatrix3@)">4531<summary>4532Convert quaternion q to rotation matrix R.4533</summary>4534<param name="q">A dQuaternion</param>4535<param name="R">A dMatrix3</param>4536</member>4537<member name="M:Tao.Ode.Ode.dRtoQ(Tao.Ode.Ode.dMatrix3@,Tao.Ode.Ode.dQuaternion@)">4538<summary>4539Convert rotation matrix R to quaternion q.4540</summary>4541<param name="R">A dMatrix3</param>4542<param name="q">A dQuaternion</param>4543</member>4544<member name="M:Tao.Ode.Ode.dWtoDQ(Tao.Ode.Ode.dVector3@,Tao.Ode.Ode.dQuaternion@,Tao.Ode.Ode.dVector4@)">4545<summary>4546Given an existing orientation q and an angular velocity vector w, return in dq the resulting dq/dt.4547</summary>4548<param name="w">A dVector3</param>4549<param name="q">A dQuaternion</param>4550<param name="dq">A dVector4</param>4551</member>4552<member name="M:Tao.Ode.Ode.dBodyCopyPosition(System.IntPtr,Tao.Ode.Ode.dVector3@)">4553<summary>45544555</summary>4556<param name="body"></param>4557<param name="pos"></param>4558</member>4559<member name="M:Tao.Ode.Ode.dBodyCopyPosition(System.IntPtr,System.Single@)">4560<summary>45614562</summary>4563<param name="body"></param>4564<param name="X"></param>4565</member>4566<member name="M:Tao.Ode.Ode.dBodyCopyQuaternion(System.IntPtr,Tao.Ode.Ode.dQuaternion@)">4567<summary>45684569</summary>4570<param name="body"></param>4571<param name="quat"></param>4572</member>4573<member name="M:Tao.Ode.Ode.dBodyCopyQuaternion(System.IntPtr,System.Single@)">4574<summary>45754576</summary>4577<param name="body"></param>4578<param name="X"></param>4579</member>4580<member name="M:Tao.Ode.Ode.dBodyCopyRotation(System.IntPtr,Tao.Ode.Ode.dMatrix3@)">4581<summary>45824583</summary>4584<param name="body"></param>4585<param name="R"></param>4586</member>4587<member name="M:Tao.Ode.Ode.dBodyCopyRotation(System.IntPtr,System.Single@)">4588<summary>45894590</summary>4591<param name="body"></param>4592<param name="M00"></param>4593</member>4594<member name="M:Tao.Ode.Ode.dCreateHeightfield(System.IntPtr,System.IntPtr,System.Int32)">4595<summary>45964597</summary>4598<param name="space"></param>4599<param name="data"></param>4600<param name="bPlaceable"></param>4601<returns></returns>4602</member>4603<member name="M:Tao.Ode.Ode.dSetZero(System.Single@,System.Int32)">4604<summary>46054606</summary>4607<param name="a"></param>4608<param name="n"></param>4609</member>4610<member name="M:Tao.Ode.Ode.dSetValue(System.Single@,System.Int32)">4611<summary>46124613</summary>4614<param name="a"></param>4615<param name="n"></param>4616</member>4617<member name="M:Tao.Ode.Ode.dDot(System.Single@,System.Single@,System.Int32)">4618<summary>46194620</summary>4621<param name="X0"></param>4622<param name="X1"></param>4623<param name="n"></param>4624<returns></returns>4625</member>4626<member name="M:Tao.Ode.Ode.dJointCreatePlane2D(System.IntPtr,System.IntPtr)">4627<summary>46284629</summary>4630<param name="world"></param>4631<param name="group"></param>4632<returns></returns>4633</member>4634<member name="M:Tao.Ode.Ode.dJointCreatePR(System.IntPtr,System.IntPtr)">4635<summary>46364637</summary>4638<param name="world"></param>4639<param name="group"></param>4640<returns></returns>4641</member>4642<member name="M:Tao.Ode.Ode.dJointAddPRTorque(System.IntPtr,System.Single)">4643<summary>46444645</summary>4646<param name="joint"></param>4647<param name="torque"></param>4648</member>4649<member name="M:Tao.Ode.Ode.dFactorCholesky(System.Single@,System.Int32)">4650<summary>46514652</summary>4653<param name="A00"></param>4654<param name="n"></param>4655<returns></returns>4656</member>4657<member name="M:Tao.Ode.Ode.dSolveCholesky(System.Single@,System.Single@,System.Int32)">4658<summary>46594660</summary>4661<param name="L"></param>4662<param name="b"></param>4663<param name="n"></param>4664</member>4665<member name="M:Tao.Ode.Ode.dInvertPDMatrix(System.Single@,System.Single@,System.Int32)">4666<summary>46674668</summary>4669<param name="A"></param>4670<param name="Ainv"></param>4671<param name="n"></param>4672<returns></returns>4673</member>4674<member name="M:Tao.Ode.Ode.dIsPositiveDefinite(System.Single@,System.Int32)">4675<summary>46764677</summary>4678<param name="A"></param>4679<param name="n"></param>4680<returns></returns>4681</member>4682<member name="M:Tao.Ode.Ode.dFactorLDLT(System.Single@,System.Single@,System.Int32,System.Int32)">4683<summary>46844685</summary>4686<param name="A"></param>4687<param name="d"></param>4688<param name="n"></param>4689<param name="nskip"></param>4690</member>4691<member name="M:Tao.Ode.Ode.dSolveL1T(System.Single@,System.Single@,System.Int32,System.Int32)">4692<summary>46934694</summary>4695<param name="L"></param>4696<param name="b"></param>4697<param name="n"></param>4698<param name="nskip"></param>4699</member>4700<member name="M:Tao.Ode.Ode.dVectorScale(System.Single@,System.Single@,System.Int32)">4701<summary>47024703</summary>4704<param name="a"></param>4705<param name="d"></param>4706<param name="n"></param>4707</member>4708<member name="M:Tao.Ode.Ode.dLDLTAddTL(System.Single@,System.Single@,System.Single@,System.Int32,System.Int32)">4709<summary>47104711</summary>4712<param name="L"></param>4713<param name="d"></param>4714<param name="a"></param>4715<param name="n"></param>4716<param name="nskip"></param>4717</member>4718<member name="M:Tao.Ode.Ode.dRandReal">4719<summary>47204721</summary>4722<returns></returns>4723</member>4724<member name="T:Tao.Ode.Ode.dError">4725<summary>47264727</summary>4728</member>4729<member name="F:Tao.Ode.Ode.dError.d_ERR_UNKNOWN">4730<summary>47314732</summary>4733</member>4734<member name="F:Tao.Ode.Ode.dError.d_ERR_IASSERT">4735<summary>47364737</summary>4738</member>4739<member name="F:Tao.Ode.Ode.dError.d_ERR_UASSERT">4740<summary>47414742</summary>4743</member>4744<member name="F:Tao.Ode.Ode.dError.d_ERR_LCP">4745<summary>47464747</summary>4748</member>4749<member name="T:Tao.Ode.Ode.dJointTypes">4750<summary>47514752</summary>4753</member>4754<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeNone">4755<summary>47564757</summary>4758</member>4759<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeBall">4760<summary>47614762</summary>4763</member>4764<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeHinge">4765<summary>47664767</summary>4768</member>4769<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeSlider">4770<summary>47714772</summary>4773</member>4774<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeContact">4775<summary>47764777</summary>4778</member>4779<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeUniversal">4780<summary>47814782</summary>4783</member>4784<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeHinge2">4785<summary>47864787</summary>4788</member>4789<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeFixed">4790<summary>47914792</summary>4793</member>4794<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeNull">4795<summary>47964797</summary>4798</member>4799<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeAMotor">4800<summary>48014802</summary>4803</member>4804<member name="F:Tao.Ode.Ode.dJointTypes.dJointTypeLMotor">4805<summary>48064807</summary>4808</member>4809<member name="T:Tao.Ode.Ode.dJointParams">4810<summary>4811Definition of Joint limit and motor parameter names4812If a particular parameter is not implemented by a given joint, setting it will have no effect.48134814These parameter names can be optionally followed by a digit (2 or 3) to indicate the second or third set of parameters, e.g. for the second axis in a hinge-2 joint, or the third axis in an AMotor joint. A constant dParamGroup is also defined such that: dParamXi = dParamX + dParamGroup * (i-1)4815</summary>4816<remarks>4817Implemented via a macro in Ode's common.h4818Translated into actual constants here following inspection of common.h4819A change in the Ode macro could require these values to be updated4820</remarks>4821</member>4822<member name="F:Tao.Ode.Ode.dJointParams.dParamLoStop">4823<summary>4824Low stop angle or position. Setting this to -dInfinity (the default value) turns off the low stop. For rotational joints, this stop must be greater than - pi to be effective.4825</summary>4826</member>4827<member name="F:Tao.Ode.Ode.dJointParams.dParamHiStop">4828<summary>4829High stop angle or position. Setting this to dInfinity (the default value) turns off the high stop. For rotational joints, this stop must be less than pi to be effective. If the high stop is less than the low stop then both stops will be ineffective.4830</summary>4831</member>4832<member name="F:Tao.Ode.Ode.dJointParams.dParamVel">4833<summary>4834Desired motor velocity (this will be an angular or linear velocity).4835</summary>4836</member>4837<member name="F:Tao.Ode.Ode.dJointParams.dParamFMax">4838<summary>4839The maximum force or torque that the motor will use to achieve the desired velocity. This must always be greater than or equal to zero. Setting this to zero (the default value) turns off the motor.4840</summary>4841</member>4842<member name="F:Tao.Ode.Ode.dJointParams.dParamFudgeFactor">4843<summary>4844The current joint stop/motor implementation has a small problem: when the joint is at one stop and the motor is set to move it away from the stop, too much force may be applied for one time step, causing a ``jumping'' motion. This fudge factor is used to scale this excess force. It should have a value between zero and one (the default value). If the jumping motion is too visible in a joint, the value can be reduced. Making this value too small can prevent the motor from being able to move the joint away from a stop.4845</summary>4846</member>4847<member name="F:Tao.Ode.Ode.dJointParams.dParamBounce">4848<summary>4849The bouncyness of the stops. This is a restitution parameter in the range 0..1. 0 means the stops are not bouncy at all, 1 means maximum bouncyness.4850</summary>4851</member>4852<member name="F:Tao.Ode.Ode.dJointParams.dParamCFM">4853<summary>4854The constraint force mixing (CFM) value used when not at a stop.4855</summary>4856</member>4857<member name="F:Tao.Ode.Ode.dJointParams.dParamStopERP">4858<summary>4859The error reduction parameter (ERP) used by the stops.4860</summary>4861</member>4862<member name="F:Tao.Ode.Ode.dJointParams.dParamStopCFM">4863<summary>4864The constraint force mixing (CFM) value used by the stops. Together with the ERP value this can be used to get spongy or soft stops. Note that this is intended for unpowered joints, it does not really work as expected when a powered joint reaches its limit.4865</summary>4866</member>4867<member name="F:Tao.Ode.Ode.dJointParams.dParamSuspensionERP">4868<summary>4869Suspension error reduction parameter (ERP). Currently this is only implemented on the hinge-2 joint.4870</summary>4871</member>4872<member name="F:Tao.Ode.Ode.dJointParams.dParamSuspensionCFM">4873<summary>4874Suspension constraint force mixing (CFM) value. Currently this is only implemented on the hinge-2 joint.4875</summary>4876</member>4877<member name="F:Tao.Ode.Ode.dJointParams.dParamLoStop2">4878<summary>48794880</summary>4881</member>4882<member name="F:Tao.Ode.Ode.dJointParams.dParamHiStop2">4883<summary>48844885</summary>4886</member>4887<member name="F:Tao.Ode.Ode.dJointParams.dParamVel2">4888<summary>48894890</summary>4891</member>4892<member name="F:Tao.Ode.Ode.dJointParams.dParamFMax2">4893<summary>48944895</summary>4896</member>4897<member name="F:Tao.Ode.Ode.dJointParams.dParamFudgeFactor2">4898<summary>48994900</summary>4901</member>4902<member name="F:Tao.Ode.Ode.dJointParams.dParamBounce2">4903<summary>49044905</summary>4906</member>4907<member name="F:Tao.Ode.Ode.dJointParams.dParamCFM2">4908<summary>49094910</summary>4911</member>4912<member name="F:Tao.Ode.Ode.dJointParams.dParamStopERP2">4913<summary>49144915</summary>4916</member>4917<member name="F:Tao.Ode.Ode.dJointParams.dParamStopCFM2">4918<summary>49194920</summary>4921</member>4922<member name="F:Tao.Ode.Ode.dJointParams.dParamSuspensionERP2">4923<summary>49244925</summary>4926</member>4927<member name="F:Tao.Ode.Ode.dJointParams.dParamSuspensionCFM2">4928<summary>49294930</summary>4931</member>4932<member name="F:Tao.Ode.Ode.dJointParams.dParamLoStop3">4933<summary>49344935</summary>4936</member>4937<member name="F:Tao.Ode.Ode.dJointParams.dParamHiStop3">4938<summary>49394940</summary>4941</member>4942<member name="F:Tao.Ode.Ode.dJointParams.dParamVel3">4943<summary>49444945</summary>4946</member>4947<member name="F:Tao.Ode.Ode.dJointParams.dParamFMax3">4948<summary>49494950</summary>4951</member>4952<member name="F:Tao.Ode.Ode.dJointParams.dParamFudgeFactor3">4953<summary>49544955</summary>4956</member>4957<member name="F:Tao.Ode.Ode.dJointParams.dParamBounce3">4958<summary>49594960</summary>4961</member>4962<member name="F:Tao.Ode.Ode.dJointParams.dParamCFM3">4963<summary>49644965</summary>4966</member>4967<member name="F:Tao.Ode.Ode.dJointParams.dParamStopERP3">4968<summary>49694970</summary>4971</member>4972<member name="F:Tao.Ode.Ode.dJointParams.dParamStopCFM3">4973<summary>49744975</summary>4976</member>4977<member name="F:Tao.Ode.Ode.dJointParams.dParamSuspensionERP3">4978<summary>49794980</summary>4981</member>4982<member name="F:Tao.Ode.Ode.dJointParams.dParamSuspensionCFM3">4983<summary>49844985</summary>4986</member>4987<member name="T:Tao.Ode.Ode.dAMotorMode">4988<summary>49894990</summary>4991</member>4992<member name="F:Tao.Ode.Ode.dAMotorMode.dAMotorUser">4993<summary>49944995</summary>4996</member>4997<member name="F:Tao.Ode.Ode.dAMotorMode.dAMotorEuler">4998<summary>49995000</summary>5001</member>5002<member name="T:Tao.Ode.Ode.dClassNumbers">5003<summary>5004class numbers - each geometry object needs a unique number5005</summary>5006</member>5007<member name="F:Tao.Ode.Ode.dClassNumbers.dSphereClass">5008<summary>50095010</summary>5011</member>5012<member name="F:Tao.Ode.Ode.dClassNumbers.dBoxClass">5013<summary>50145015</summary>5016</member>5017<member name="F:Tao.Ode.Ode.dClassNumbers.dCapsuleClass">5018<summary>50195020</summary>5021</member>5022<member name="F:Tao.Ode.Ode.dClassNumbers.dCylinderClass">5023<summary>50245025</summary>5026</member>5027<member name="F:Tao.Ode.Ode.dClassNumbers.dPlaneClass">5028<summary>50295030</summary>5031</member>5032<member name="F:Tao.Ode.Ode.dClassNumbers.dRayClass">5033<summary>50345035</summary>5036</member>5037<member name="F:Tao.Ode.Ode.dClassNumbers.dConvexClass">5038<summary>50395040</summary>5041</member>5042<member name="F:Tao.Ode.Ode.dClassNumbers.dGeomTransformClass">5043<summary>50445045</summary>5046</member>5047<member name="F:Tao.Ode.Ode.dClassNumbers.dTriMeshClass">5048<summary>50495050</summary>5051</member>5052<member name="F:Tao.Ode.Ode.dClassNumbers.dFirstSpaceClass">5053<summary>50545055</summary>5056</member>5057<member name="F:Tao.Ode.Ode.dClassNumbers.dSimpleSpaceClass">5058<summary>50595060</summary>5061</member>5062<member name="F:Tao.Ode.Ode.dClassNumbers.dHashSpaceClass">5063<summary>50645065</summary>5066</member>5067<member name="F:Tao.Ode.Ode.dClassNumbers.dQuadTreeSpaceClass">5068<summary>50695070</summary>5071</member>5072<member name="F:Tao.Ode.Ode.dClassNumbers.dLastSpaceClass">5073<summary>50745075</summary>5076</member>5077<member name="F:Tao.Ode.Ode.dClassNumbers.dFirstUserClass">5078<summary>50795080</summary>5081</member>5082<member name="F:Tao.Ode.Ode.dClassNumbers.dLastUserClass">5083<summary>50845085</summary>5086</member>5087<member name="F:Tao.Ode.Ode.dClassNumbers.dGeomNumClasses">5088<summary>50895090</summary>5091</member>5092<member name="T:Tao.Ode.Ode.dBodyFlags">5093<summary>5094some body flags5095ODE source location: objects.h Ln 375096</summary>5097</member>5098<member name="F:Tao.Ode.Ode.dBodyFlags.dxBodyFlagFiniteRotation">5099<summary>5100use finite rotations5101</summary>5102</member>5103<member name="F:Tao.Ode.Ode.dBodyFlags.dxBodyFlagFiniteRotationAxis">5104<summary>5105use finite rotations only along axis5106</summary>5107</member>5108<member name="F:Tao.Ode.Ode.dBodyFlags.dxBodyDisabled">5109<summary>5110body is disabled5111</summary>5112</member>5113<member name="F:Tao.Ode.Ode.dBodyFlags.dxBodyNoGravity">5114<summary>5115body is not influenced by gravity5116</summary>5117</member>5118<member name="F:Tao.Ode.Ode.dBodyFlags.dxBodyAutoDisable">5119<summary>5120enable auto-disable on body5121</summary>5122</member>5123<member name="T:Tao.Ode.Ode.dContactFlags">5124<summary>51255126</summary>5127</member>5128<member name="F:Tao.Ode.Ode.dContactFlags.dContactMu2">5129<summary>51305131</summary>5132</member>5133<member name="F:Tao.Ode.Ode.dContactFlags.dContactFDir1">5134<summary>51355136</summary>5137</member>5138<member name="F:Tao.Ode.Ode.dContactFlags.dContactBounce">5139<summary>51405141</summary>5142</member>5143<member name="F:Tao.Ode.Ode.dContactFlags.dContactSoftERP">5144<summary>51455146</summary>5147</member>5148<member name="F:Tao.Ode.Ode.dContactFlags.dContactSoftCFM">5149<summary>51505151</summary>5152</member>5153<member name="F:Tao.Ode.Ode.dContactFlags.dContactMotion1">5154<summary>51555156</summary>5157</member>5158<member name="F:Tao.Ode.Ode.dContactFlags.dContactMotion2">5159<summary>51605161</summary>5162</member>5163<member name="F:Tao.Ode.Ode.dContactFlags.dContactSlip1">5164<summary>51655166</summary>5167</member>5168<member name="F:Tao.Ode.Ode.dContactFlags.dContactSlip2">5169<summary>51705171</summary>5172</member>5173<member name="F:Tao.Ode.Ode.dContactFlags.dContactApprox0">5174<summary>51755176</summary>5177</member>5178<member name="F:Tao.Ode.Ode.dContactFlags.dContactApprox1_1">5179<summary>51805181</summary>5182</member>5183<member name="F:Tao.Ode.Ode.dContactFlags.dContactApprox1_2">5184<summary>51855186</summary>5187</member>5188<member name="F:Tao.Ode.Ode.dContactFlags.dContactApprox1">5189<summary>51905191</summary>5192</member>5193<member name="T:Tao.Ode.Ode.GeometryClass">5194<summary>51955196</summary>5197</member>5198<member name="F:Tao.Ode.Ode.GeometryClass.dSphereClass">5199<summary>52005201</summary>5202</member>5203<member name="F:Tao.Ode.Ode.GeometryClass.dBoxClass">5204<summary>52055206</summary>5207</member>5208<member name="F:Tao.Ode.Ode.GeometryClass.dCapsuleClass">5209<summary>52105211</summary>5212</member>5213<member name="F:Tao.Ode.Ode.GeometryClass.dCylinderClass">5214<summary>52155216</summary>5217</member>5218<member name="F:Tao.Ode.Ode.GeometryClass.dPlaneClass">5219<summary>52205221</summary>5222</member>5223<member name="F:Tao.Ode.Ode.GeometryClass.dRayClass">5224<summary>52255226</summary>5227</member>5228<member name="F:Tao.Ode.Ode.GeometryClass.dConvexClass">5229<summary>52305231</summary>5232</member>5233<member name="F:Tao.Ode.Ode.GeometryClass.dGeomTransformClass">5234<summary>52355236</summary>5237</member>5238<member name="F:Tao.Ode.Ode.GeometryClass.dTriMeshClass">5239<summary>52405241</summary>5242</member>5243<member name="F:Tao.Ode.Ode.GeometryClass.dHeightfieldClass">5244<summary>52455246</summary>5247</member>5248<member name="F:Tao.Ode.Ode.GeometryClass.dFirstSpaceClass">5249<summary>52505251</summary>5252</member>5253<member name="F:Tao.Ode.Ode.GeometryClass.dSimpleSpaceClass">5254<summary>52555256</summary>5257</member>5258<member name="F:Tao.Ode.Ode.GeometryClass.dHashSpaceClass">5259<summary>52605261</summary>5262</member>5263<member name="F:Tao.Ode.Ode.GeometryClass.dQuadTreeSpaceClass">5264<summary>52655266</summary>5267</member>5268<member name="F:Tao.Ode.Ode.GeometryClass.dLastSpaceClass">5269<summary>52705271</summary>5272</member>5273<member name="F:Tao.Ode.Ode.GeometryClass.dFirstUserClass">5274<summary>52755276</summary>5277</member>5278<member name="F:Tao.Ode.Ode.GeometryClass.dLastUserClass">5279<summary>52805281</summary>5282</member>5283<member name="F:Tao.Ode.Ode.GeometryClass.dGeomNumClasses">5284<summary>52855286</summary>5287</member>5288<member name="F:Tao.Ode.Ode.GeometryClass.dMaxUserClasses">5289<summary>52905291</summary>5292</member>5293<member name="T:Tao.Ode.Ode.dMass">5294<summary>5295Describes the mass parameters of a rigid body5296</summary>5297<remarks>5298mass - the total mass of the rigid body5299c - center of gravity position in body frame (x,y,z)5300I - 3x3 inertia tensor in body frame, about POR5301</remarks>5302</member>5303<member name="M:Tao.Ode.Ode.dMass.#ctor(System.Single,Tao.Ode.Ode.dVector4,Tao.Ode.Ode.dMatrix3)">5304<summary>53055306</summary>5307<param name="_mass"></param>5308<param name="_c"></param>5309<param name="_I"></param>5310</member>5311<member name="F:Tao.Ode.Ode.dMass.mass">5312<summary>53135314</summary>5315</member>5316<member name="F:Tao.Ode.Ode.dMass.c">5317<summary>53185319</summary>5320</member>5321<member name="F:Tao.Ode.Ode.dMass.I">5322<summary>53235324</summary>5325</member>5326<member name="T:Tao.Ode.Ode.dContactGeom">5327<summary>5328Contact info set by collision functions5329</summary>5330</member>5331<member name="F:Tao.Ode.Ode.dContactGeom.pos">5332<summary>5333The contact position in global coordinates.5334</summary>5335</member>5336<member name="F:Tao.Ode.Ode.dContactGeom.normal">5337<summary>5338A unit length vector that is, generally speaking, perpendicular to the contact surface.5339</summary>5340</member>5341<member name="F:Tao.Ode.Ode.dContactGeom.depth">5342<summary>5343The depth to which the two bodies inter-penetrate each other.5344If the depth is zero then the two bodies have a grazing contact,5345i.e. they "only just" touch. However, this is rare - the simulation is5346not perfectly accurate and will often step the bodies too far so that5347the depth is nonzero.5348</summary>5349</member>5350<member name="F:Tao.Ode.Ode.dContactGeom.g1">5351<summary>5352The geometry objects that collided.5353</summary>5354</member>5355<member name="F:Tao.Ode.Ode.dContactGeom.g2">5356<summary>5357The geometry objects that collided.5358</summary>5359</member>5360<member name="F:Tao.Ode.Ode.dContactGeom.side1">5361<summary>5362(to be documented) - verbatim from the ODE source.5363</summary>5364</member>5365<member name="F:Tao.Ode.Ode.dContactGeom.side2">5366<summary>5367(to be documented) - verbatim from the ODE source.5368</summary>5369</member>5370<member name="T:Tao.Ode.Ode.dSurfaceParameters">5371<summary>5372Defines the properties of the colliding surfaces5373</summary>5374</member>5375<member name="M:Tao.Ode.Ode.dSurfaceParameters.#ctor(System.Int32,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">5376<summary>53775378</summary>5379</member>5380<member name="F:Tao.Ode.Ode.dSurfaceParameters.mode">5381<summary>5382Contact flags. This must always be set. This is a combination of one or more of the following flags:53835384dContactMu2 If not set, use mu for both friction directions.5385If set, use mu for friction direction 1, use mu2 for friction direction 2.5386dContactFDir1 If set, take fdir1 as friction direction 1, otherwise automatically compute5387friction direction 1 to be perpendicular to the contact normal (in which5388case its resulting orientation is unpredictable).5389dContactBounce If set, the contact surface is bouncy, in other words the bodies will5390bounce off each other. The exact amount of bouncyness is controlled by5391the bounce parameter.5392dContactSoftERP If set, the error reduction parameter of the contact normal can be set5393with the soft_erp parameter. This is useful to make surfaces soft.5394dContactSoftCFM If set, the constraint force mixing parameter of the contact normal5395can be set with the soft_cfm parameter. This is useful to make surfaces soft.5396dContactMotion1 If set, the contact surface is assumed to be moving independently of the5397motion of the bodies. This is kind of like a conveyor belt running over5398the surface. When this flag is set, motion1 defines the surface velocity5399in friction direction 1.5400dContactMotion2 The same thing as above, but for friction direction 2.5401dContactSlip1 Force-dependent-slip (FDS) in friction direction 1.5402dContactSlip2 Force-dependent-slip (FDS) in friction direction 2.5403dContactApprox0 TODO: Document me5404dContactApprox1_1 Use the friction pyramid approximation for friction direction 1. If this is5405not specified then the constant-force-limit approximation is used (and mu is5406a force limit).5407dContactApprox1_2 Use the friction pyramid approximation for friction direction 2. If this is5408not specified then the constant-force-limit approximation is used (and mu is5409a force limit).5410dContactApprox1 Equivalent to both dContactApprox1_1 and dContactApprox1_2.5411</summary>5412</member>5413<member name="F:Tao.Ode.Ode.dSurfaceParameters.mu">5414<summary>5415Coulomb friction coefficient.5416This must be in the range 0 to dInfinity.54170 results in a frictionless contact, and dInfinity results in a contact that never slips.5418Note that frictionless contacts are less time consuming to compute than ones with friction,5419and infinite friction contacts can be cheaper than contacts with finite friction.54205421This must always be set.5422</summary>5423</member>5424<member name="F:Tao.Ode.Ode.dSurfaceParameters.mu2">5425<summary>5426Optional Coulomb friction coefficient for friction direction 2 (0..dInfinity).54275428This is only set if the corresponding flag is set in mode.5429</summary>5430</member>5431<member name="F:Tao.Ode.Ode.dSurfaceParameters.bounce">5432<summary>5433Restitution parameter (0..1).54340 means the surfaces are not bouncy at all, 1 is maximum bouncyness.54355436This is only set if the corresponding flag is set in mode.5437</summary>5438</member>5439<member name="F:Tao.Ode.Ode.dSurfaceParameters.bounce_vel">5440<summary>5441Restitution parameter (0..1).54420 means the surfaces are not bouncy at all, 1 is maximum bouncyness.54435444This is only set if the corresponding flag is set in mode.5445</summary>5446</member>5447<member name="F:Tao.Ode.Ode.dSurfaceParameters.soft_erp">5448<summary>5449Contact normal ``softness'' parameter.54505451This is only set if the corresponding flag is set in mode.5452</summary>5453</member>5454<member name="F:Tao.Ode.Ode.dSurfaceParameters.soft_cfm">5455<summary>5456Contact normal ``softness'' parameter.54575458This is only set if the corresponding flag is set in mode.5459</summary>5460</member>5461<member name="F:Tao.Ode.Ode.dSurfaceParameters.motion1">5462<summary>5463Surface velocity in friction directions 1 (in m/s).54645465Only set if the corresponding flags are set in mode.5466</summary>5467</member>5468<member name="F:Tao.Ode.Ode.dSurfaceParameters.motion2">5469<summary>5470Surface velocity in friction directions 1 (in m/s).54715472Only set if the corresponding flags are set in mode.5473</summary>5474</member>5475<member name="F:Tao.Ode.Ode.dSurfaceParameters.slip1">5476<summary>5477The coefficients of force-dependent-slip (FDS) for friction directions 1 and 2.54785479These are only set if the corresponding flags are set in mode.54805481FDS is an effect that causes the contacting surfaces to side past each other with a5482velocity that is proportional to the force that is being applied tangentially to that surface.54835484Consider a contact point where the coefficient of friction mu is infinite. Normally, if a5485force f is applied to the two contacting surfaces, to try and get them to slide past each5486other, they will not move. However, if the FDS coefficient is set to a positive value k5487then the surfaces will slide past each other, building up to a steady velocity of k*f5488relative to each other.54895490Note that this is quite different from normal frictional effects: the force does not5491cause a constant acceleration of the surfaces relative to each other - it causes a5492brief acceleration to achieve the steady velocity.54935494This is useful for modeling some situations, in particular tires. For example consider5495a car at rest on a road. Pushing the car in its direction of travel will cause it to5496start moving (i.e. the tires will start rolling). Pushing the car in the perpendicular5497direction will have no effect, as the tires do not roll in that direction. However - if5498the car is moving at a velocity v, applying a force f in the perpendicular direction will5499cause the tires to slip on the road with a velocity proportional to f*v (Yes, this really5500happens).55015502To model this in ODE set the tire-road contact parameters as follows: set friction direction 15503in the direction that the tire is rolling in, and set the FDS slip coefficient in friction5504direction 2 to k*v, where v is the tire rolling velocity and k is a tire parameter that you can5505choose based on experimentation.55065507Note that FDS is quite separate from the sticking/slipping effects of Coulomb friction - both5508modes can be used together at a single contact point.5509</summary>5510</member>5511<member name="F:Tao.Ode.Ode.dSurfaceParameters.slip2">5512<summary>5513The coefficients of force-dependent-slip (FDS) for friction directions 1 and 2.55145515These are only set if the corresponding flags are set in mode.55165517FDS is an effect that causes the contacting surfaces to side past each other with a5518velocity that is proportional to the force that is being applied tangentially to that surface.55195520Consider a contact point where the coefficient of friction mu is infinite. Normally, if a5521force f is applied to the two contacting surfaces, to try and get them to slide past each5522other, they will not move. However, if the FDS coefficient is set to a positive value k5523then the surfaces will slide past each other, building up to a steady velocity of k*f5524relative to each other.55255526Note that this is quite different from normal frictional effects: the force does not5527cause a constant acceleration of the surfaces relative to each other - it causes a5528brief acceleration to achieve the steady velocity.55295530This is useful for modeling some situations, in particular tires. For example consider5531a car at rest on a road. Pushing the car in its direction of travel will cause it to5532start moving (i.e. the tires will start rolling). Pushing the car in the perpendicular5533direction will have no effect, as the tires do not roll in that direction. However - if5534the car is moving at a velocity v, applying a force f in the perpendicular direction will5535cause the tires to slip on the road with a velocity proportional to f*v (Yes, this really5536happens).55375538To model this in ODE set the tire-road contact parameters as follows: set friction direction 15539in the direction that the tire is rolling in, and set the FDS slip coefficient in friction5540direction 2 to k*v, where v is the tire rolling velocity and k is a tire parameter that you can5541choose based on experimentation.55425543Note that FDS is quite separate from the sticking/slipping effects of Coulomb friction - both5544modes can be used together at a single contact point.5545</summary>5546</member>5547<member name="T:Tao.Ode.Ode.dContact">5548<summary>5549Contact structure used by contact joint5550</summary>5551</member>5552<member name="M:Tao.Ode.Ode.dContact.#ctor(Tao.Ode.Ode.dSurfaceParameters,Tao.Ode.Ode.dContactGeom,Tao.Ode.Ode.dVector3)">5553<summary>55545555</summary>5556<param name="_surface"></param>5557<param name="_geom"></param>5558<param name="_fdir1"></param>5559</member>5560<member name="F:Tao.Ode.Ode.dContact.surface">5561<summary>55625563</summary>5564</member>5565<member name="F:Tao.Ode.Ode.dContact.geom">5566<summary>55675568</summary>5569</member>5570<member name="F:Tao.Ode.Ode.dContact.fdir1">5571<summary>55725573</summary>5574</member>5575<member name="T:Tao.Ode.Ode.dVector3">5576<summary>55775578</summary>5579</member>5580<member name="M:Tao.Ode.Ode.dVector3.#ctor(System.Single,System.Single,System.Single)">5581<summary>55825583</summary>5584<param name="x"></param>5585<param name="y"></param>5586<param name="z"></param>5587</member>5588<member name="F:Tao.Ode.Ode.dVector3.X">5589<summary>55905591</summary>5592</member>5593<member name="F:Tao.Ode.Ode.dVector3.Y">5594<summary>55955596</summary>5597</member>5598<member name="F:Tao.Ode.Ode.dVector3.Z">5599<summary>56005601</summary>5602</member>5603<member name="F:Tao.Ode.Ode.dVector3.SIMD_PADDING">5604<summary>5605In ODE's common.h: typedef dReal dVector3[4];56065607From ODE mailing list:5608dVector3 is a dReal[4] to allow for future SIMD extension (the dMatrix3 is5609similarily defined).56105611However, there may already be a speed difference by defining it as a5612dReal[4]; the reason is that properly alligned memory data can be accessed5613more efficiently by the CPU. You should go to great lengths to ensure that5614every instance of dVector3 in your projects are atleast 4-byte aligned5615(virtually default), 16-byte alignments are better still and usually need to5616be enforced.56175618This ensures that memory access (read/write) can be performed just a little5619bit faster.56205621For example:5622You'll notice that if you used dReal[3] for an array of dVector3, then not5623every vector would fall onto a 16-byte boundary (provided that the first5624vector was properly alligned). Whereas it is guaranteed with dReal[4]5625(provided that the first vector was properly alligned).5626</summary>5627</member>5628<member name="M:Tao.Ode.Ode.dVector3.ToArray">5629<summary>56305631</summary>5632<returns></returns>5633</member>5634<member name="P:Tao.Ode.Ode.dVector3.Item(System.Int32)">5635<summary>5636Indexer to support use of array syntax as found in ODE examples5637X = 0, Y = 1, Z = 25638</summary>5639</member>5640<member name="T:Tao.Ode.Ode.dVector4">5641<summary>56425643</summary>5644</member>5645<member name="M:Tao.Ode.Ode.dVector4.#ctor(System.Single,System.Single,System.Single,System.Single)">5646<summary>56475648</summary>5649<param name="x"></param>5650<param name="y"></param>5651<param name="z"></param>5652<param name="w"></param>5653</member>5654<member name="F:Tao.Ode.Ode.dVector4.X">5655<summary>56565657</summary>5658</member>5659<member name="F:Tao.Ode.Ode.dVector4.Y">5660<summary>56615662</summary>5663</member>5664<member name="F:Tao.Ode.Ode.dVector4.Z">5665<summary>56665667</summary>5668</member>5669<member name="F:Tao.Ode.Ode.dVector4.W">5670<summary>56715672</summary>5673</member>5674<member name="M:Tao.Ode.Ode.dVector4.ToArray">5675<summary>56765677</summary>5678<returns></returns>5679</member>5680<member name="P:Tao.Ode.Ode.dVector4.Item(System.Int32)">5681<summary>5682Indexer to support use of array syntax as found in ODE examples5683X = 0, Y = 1, Z = 2, W = 35684</summary>5685</member>5686<member name="T:Tao.Ode.Ode.dQuaternion">5687<summary>56885689</summary>5690</member>5691<member name="M:Tao.Ode.Ode.dQuaternion.#ctor(System.Single,System.Single,System.Single,System.Single)">5692<summary>56935694</summary>5695<param name="x"></param>5696<param name="y"></param>5697<param name="z"></param>5698<param name="w"></param>5699</member>5700<member name="F:Tao.Ode.Ode.dQuaternion.W">5701<summary>57025703</summary>5704</member>5705<member name="F:Tao.Ode.Ode.dQuaternion.X">5706<summary>57075708</summary>5709</member>5710<member name="F:Tao.Ode.Ode.dQuaternion.Y">5711<summary>57125713</summary>5714</member>5715<member name="F:Tao.Ode.Ode.dQuaternion.Z">5716<summary>57175718</summary>5719</member>5720<member name="M:Tao.Ode.Ode.dQuaternion.ToArray">5721<summary>57225723</summary>5724<returns></returns>5725</member>5726<member name="P:Tao.Ode.Ode.dQuaternion.Item(System.Int32)">5727<summary>5728Indexer to support use of array syntax as found in ODE examples5729X = 0, Y = 1, Z = 2, W = 35730</summary>5731</member>5732<member name="T:Tao.Ode.Ode.Aabb">5733<summary>57345735</summary>5736</member>5737<member name="M:Tao.Ode.Ode.Aabb.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)">5738<summary>57395740</summary>5741<param name="_minx"></param>5742<param name="_maxx"></param>5743<param name="_miny"></param>5744<param name="_maxy"></param>5745<param name="_minz"></param>5746<param name="_maxz"></param>5747</member>5748<member name="F:Tao.Ode.Ode.Aabb.minx">5749<summary>57505751</summary>5752</member>5753<member name="F:Tao.Ode.Ode.Aabb.maxx">5754<summary>57555756</summary>5757</member>5758<member name="F:Tao.Ode.Ode.Aabb.miny">5759<summary>57605761</summary>5762</member>5763<member name="F:Tao.Ode.Ode.Aabb.maxy">5764<summary>57655766</summary>5767</member>5768<member name="F:Tao.Ode.Ode.Aabb.minz">5769<summary>57705771</summary>5772</member>5773<member name="F:Tao.Ode.Ode.Aabb.maxz">5774<summary>57755776</summary>5777</member>5778<member name="T:Tao.Ode.Ode.dMatrix3">5779<summary>57805781</summary>5782</member>5783<member name="M:Tao.Ode.Ode.dMatrix3.#ctor(System.Single[])">5784<summary>57855786</summary>5787<param name="values"></param>5788</member>5789<member name="F:Tao.Ode.Ode.dMatrix3.M00">5790<summary>57915792</summary>5793</member>5794<member name="F:Tao.Ode.Ode.dMatrix3.M01">5795<summary>57965797</summary>5798</member>5799<member name="F:Tao.Ode.Ode.dMatrix3.M02">5800<summary>58015802</summary>5803</member>5804<member name="F:Tao.Ode.Ode.dMatrix3.M03">5805<summary>58065807</summary>5808</member>5809<member name="F:Tao.Ode.Ode.dMatrix3.M10">5810<summary>58115812</summary>5813</member>5814<member name="F:Tao.Ode.Ode.dMatrix3.M11">5815<summary>58165817</summary>5818</member>5819<member name="F:Tao.Ode.Ode.dMatrix3.M12">5820<summary>58215822</summary>5823</member>5824<member name="F:Tao.Ode.Ode.dMatrix3.M13">5825<summary>58265827</summary>5828</member>5829<member name="F:Tao.Ode.Ode.dMatrix3.M20">5830<summary>58315832</summary>5833</member>5834<member name="F:Tao.Ode.Ode.dMatrix3.M21">5835<summary>58365837</summary>5838</member>5839<member name="F:Tao.Ode.Ode.dMatrix3.M22">5840<summary>58415842</summary>5843</member>5844<member name="F:Tao.Ode.Ode.dMatrix3.M23">5845<summary>58465847</summary>5848</member>5849<member name="M:Tao.Ode.Ode.dMatrix3.ToArray">5850<summary>58515852</summary>5853<returns></returns>5854</member>5855<member name="P:Tao.Ode.Ode.dMatrix3.Item(System.Int32)">5856<summary>58575858</summary>5859<param name="index"></param>5860<returns></returns>5861</member>5862<member name="P:Tao.Ode.Ode.dMatrix3.Item(System.Int32,System.Int32)">5863<summary>58645865</summary>5866<param name="x"></param>5867<param name="y"></param>5868<returns></returns>5869</member>5870<member name="T:Tao.Ode.Ode.dMatrix4">5871<summary>58725873</summary>5874</member>5875<member name="M:Tao.Ode.Ode.dMatrix4.#ctor(System.Single[])">5876<summary>58775878</summary>5879<param name="values"></param>5880</member>5881<member name="F:Tao.Ode.Ode.dMatrix4.M00">5882<summary>58835884</summary>5885</member>5886<member name="F:Tao.Ode.Ode.dMatrix4.M01">5887<summary>58885889</summary>5890</member>5891<member name="F:Tao.Ode.Ode.dMatrix4.M02">5892<summary>58935894</summary>5895</member>5896<member name="F:Tao.Ode.Ode.dMatrix4.M03">5897<summary>58985899</summary>5900</member>5901<member name="F:Tao.Ode.Ode.dMatrix4.M10">5902<summary>59035904</summary>5905</member>5906<member name="F:Tao.Ode.Ode.dMatrix4.M11">5907<summary>59085909</summary>5910</member>5911<member name="F:Tao.Ode.Ode.dMatrix4.M12">5912<summary>59135914</summary>5915</member>5916<member name="F:Tao.Ode.Ode.dMatrix4.M13">5917<summary>59185919</summary>5920</member>5921<member name="F:Tao.Ode.Ode.dMatrix4.M20">5922<summary>59235924</summary>5925</member>5926<member name="F:Tao.Ode.Ode.dMatrix4.M21">5927<summary>59285929</summary>5930</member>5931<member name="F:Tao.Ode.Ode.dMatrix4.M22">5932<summary>59335934</summary>5935</member>5936<member name="F:Tao.Ode.Ode.dMatrix4.M23">5937<summary>59385939</summary>5940</member>5941<member name="F:Tao.Ode.Ode.dMatrix4.M30">5942<summary>59435944</summary>5945</member>5946<member name="F:Tao.Ode.Ode.dMatrix4.M31">5947<summary>59485949</summary>5950</member>5951<member name="F:Tao.Ode.Ode.dMatrix4.M32">5952<summary>59535954</summary>5955</member>5956<member name="F:Tao.Ode.Ode.dMatrix4.M33">5957<summary>59585959</summary>5960</member>5961<member name="M:Tao.Ode.Ode.dMatrix4.ToArray">5962<summary>59635964</summary>5965<returns></returns>5966</member>5967<member name="P:Tao.Ode.Ode.dMatrix4.Item(System.Int32)">5968<summary>59695970</summary>5971<param name="index"></param>5972<returns></returns>5973</member>5974<member name="P:Tao.Ode.Ode.dMatrix4.Item(System.Int32,System.Int32)">5975<summary>59765977</summary>5978<param name="x"></param>5979<param name="y"></param>5980<returns></returns>5981</member>5982<member name="T:Tao.Ode.Ode.dJointFeedback">5983<summary>5984During the world time step, the forces that are applied by each joint are computed.5985These forces are added directly to the joined bodies, and the user normally has no5986way of telling which joint contributed how much force.59875988If this information is desired then the user can allocate a dJointFeedback structure5989and pass its pointer to the dJointSetFeedback() function.59905991The feedback information structure is defined as follows:59925993typedef struct dJointFeedback {5994dVector3 f1; // force that joint applies to body 15995dVector3 t1; // torque that joint applies to body 15996dVector3 f2; // force that joint applies to body 25997dVector3 t2; // torque that joint applies to body 25998} dJointFeedback;59996000During the time step any feedback structures that are attached to joints will be filled in with the6001joint's force and torque information. The dJointGetFeedback() function returns the current feedback6002structure pointer, or 0 if none is used (this is the default). dJointSetFeedback() can be passed 06003to disable feedback for that joint.60046005Now for some API design notes. It might seem strange to require that users perform the allocation6006of these structures. Why not just store the data statically in each joint? The reason is that not6007all users will use the feedback information, and even when it is used not all joints will need it.6008It will waste memory to store it statically, especially as this structure could grow to store a6009lot of extra information in the future.60106011Why not have ODE allocate the structure itself, at the user's request? The reason is that contact6012joints (which are created and destroyed every time step) would require a lot of time to be spent6013in memory allocation if feedback is required. Letting the user do the allocation means that a6014better allocation strategy can be provided, e.g simply allocating them out of a fixed array.60156016The alternative to this API is to have a joint-force callback. This would work of course, but6017it has a few problems. First, callbacks tend to pollute APIs and sometimes require the user6018to go through unnatural contortions to get the data to the right place. Second, this would6019expose ODE to being changed in the middle of a step (which would have bad consequences), and6020there would have to be some kind of guard against this or a debugging check for it - which6021would complicate things.6022</summary>6023</member>6024<member name="M:Tao.Ode.Ode.dJointFeedback.#ctor(Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3,Tao.Ode.Ode.dVector3)">6025<summary>60266027</summary>6028</member>6029<member name="F:Tao.Ode.Ode.dJointFeedback.f1">6030<summary>Force applied to body 1</summary>6031</member>6032<member name="F:Tao.Ode.Ode.dJointFeedback.t1">6033<summary>Torque applied to body 1</summary>6034</member>6035<member name="F:Tao.Ode.Ode.dJointFeedback.f2">6036<summary>Force applied to body 2</summary>6037</member>6038<member name="F:Tao.Ode.Ode.dJointFeedback.t2">6039<summary>Torque applied to body 2</summary>6040</member>6041<member name="T:Tao.Ode.Ode.dNearCallback">6042<summary>6043Callback function for dSpaceCollide and dSpaceCollide26044</summary>6045</member>6046<member name="T:Tao.Ode.Ode.TriMeshNumbers">6047<summary>60486049</summary>6050</member>6051<member name="F:Tao.Ode.Ode.TriMeshNumbers.TRIMESH_FACE_NORMALS">6052<summary>60536054</summary>6055</member>6056<member name="F:Tao.Ode.Ode.TriMeshNumbers.TRIMESH_LAST_TRANSFORMATION">6057<summary>60586059</summary>6060</member>6061<member name="T:Tao.Ode.Ode.dTriCallback">6062<summary>6063Per triangle callback.6064Allows user to state if a collision with a particular triangle is wanted6065If the return value is zero no contact will be generated.6066</summary>6067</member>6068<member name="T:Tao.Ode.Ode.dTriArrayCallback">6069<summary>6070Per object callback.6071Allows user to get the list of all intersecting triangles in one shot.6072</summary>6073</member>6074<member name="T:Tao.Ode.Ode.dTriRayCallback">6075<summary>6076Ray callback.6077Allows the user to determine if a ray collides with a triangle based on6078the barycentric coordinates of an intersection. The user can for example6079sample a bitmap to determine if a collision should occur.6080</summary>6081</member>6082<member name="T:Tao.Ode.Ode.dAABBTestFn">6083<summary>60846085</summary>6086<param name="o1"></param>6087<param name="o2"></param>6088<param name="aabb"></param>6089<returns></returns>6090</member>6091<member name="T:Tao.Ode.Ode.dColliderFn">6092<summary>60936094</summary>6095<param name="o1"></param>6096<param name="o2"></param>6097<param name="flags"></param>6098<param name="contact"></param>6099<param name="skip"></param>6100<returns></returns>6101</member>6102<member name="T:Tao.Ode.Ode.dGetAABBFn">6103<summary>61046105</summary>6106<param name="geom"></param>6107<param name="aabb"></param>6108</member>6109<member name="T:Tao.Ode.Ode.dGetColliderFnFn">6110<summary>61116112</summary>6113<param name="num"></param>6114<returns></returns>6115</member>6116<member name="T:Tao.Ode.Ode.dGeomDtorFn">6117<summary>61186119</summary>6120<param name="o"></param>6121</member>6122<member name="T:Tao.Ode.Ode.dHeightfieldGetHeight">6123<summary>61246125</summary>6126<param name="p_user_data"></param>6127<param name="x"></param>6128<param name="z"></param>6129<returns></returns>6130</member>6131<member name="T:Tao.Ode.Ode.dGeomClass">6132<summary>61336134</summary>6135</member>6136<member name="F:Tao.Ode.Ode.dGeomClass.bytes">6137<summary>61386139</summary>6140</member>6141<member name="F:Tao.Ode.Ode.dGeomClass.collider">6142<summary>61436144</summary>6145</member>6146<member name="F:Tao.Ode.Ode.dGeomClass.aabb">6147<summary>61486149</summary>6150</member>6151<member name="F:Tao.Ode.Ode.dGeomClass.aabb_test">6152<summary>61536154</summary>6155</member>6156<member name="F:Tao.Ode.Ode.dGeomClass.dtor">6157<summary>61586159</summary>6160</member>6161</members>6162</doc>616361646165