[Opal-commits] opal/samples/simple_objects ragdoll.xml,NONE,1.1 main.cpp,1.20,1.21 simple_objects.vc
Status: Inactive
Brought to you by:
tylerstreeter
|
From: tylerstreeter <tyl...@us...> - 2005-03-01 05:05:01
|
Update of /cvsroot/opal/opal/samples/simple_objects In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21242/samples/simple_objects Modified Files: main.cpp simple_objects.vcproj Added Files: ragdoll.xml Log Message: fixed bugs in xml blueprint loading; added ragdoll xml file to sample app Index: main.cpp =================================================================== RCS file: /cvsroot/opal/opal/samples/simple_objects/main.cpp,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** main.cpp 26 Feb 2005 10:22:22 -0000 1.20 --- main.cpp 1 Mar 2005 05:04:19 -0000 1.21 *************** *** 10,13 **** --- 10,14 ---- #include "../src/BoxObject.h" #include "../src/SphereObject.h" + #include "../src/CapsuleObject.h" #include "../src/CarObject.h" #include "../src/Timer.h" *************** *** 32,36 **** Timer gTimer; opal::Solid* gGround=NULL; ! opal::real gGroundParams[4] = {0.0, 1.0, 0.0, -5.0}; // Output stats every gPerfOutputPeriod seconds. --- 33,38 ---- Timer gTimer; opal::Solid* gGround=NULL; ! opal::real gGroundParams[4] = {0.0, 1.0, 0.0, -0.5}; ! opal::Blueprint gRagdollBP; // Output stats every gPerfOutputPeriod seconds. *************** *** 62,65 **** --- 64,69 ---- void InitializeVariables(); void MainLoop(); + void setupVisualShapes(opal::Solid* s); + void makeRagdoll(); int main(int argc, char **argv) *************** *** 68,76 **** gCameraRotX = 0; gCameraRotY = 0; ! gCameraZoom = -20; gCameraYPos = 0; gSimulator = opal::createSimulator(); gSimulator->setGravity(opal::Vec3r(0, (opal::real)-9.81, 0)); ! //gSimulator->setAccuracy(opal::ACCURACY_VERY_HIGH); //gSimulator->setDefaultLinearDamping(0.5); //gSimulator->setDefaultAngularDamping(0.5); --- 72,80 ---- gCameraRotX = 0; gCameraRotY = 0; ! gCameraZoom = -10; gCameraYPos = 0; gSimulator = opal::createSimulator(); gSimulator->setGravity(opal::Vec3r(0, (opal::real)-9.81, 0)); ! //gSimulator->setSolverAccuracy(opal::SOLVER_ACCURACY_HIGH); //gSimulator->setDefaultLinearDamping(0.5); //gSimulator->setDefaultAngularDamping(0.5); *************** *** 104,111 **** //std::cout << "Current ground material is wood" << std::endl; ! opal::Blueprint bp; ! opal::loadFile(bp, "example.xml"); ! opal::BlueprintInstance instance; ! gSimulator->instantiateBlueprint(instance, bp); InitSDL(); --- 108,113 ---- //std::cout << "Current ground material is wood" << std::endl; ! // Load the ragdoll Blueprint. ! opal::loadFile(gRagdollBP, "ragdoll.xml"); InitSDL(); *************** *** 124,127 **** --- 126,227 ---- } + void makeRagdoll() + { + // Instantiate the Blueprint. + opal::BlueprintInstance instance; + gSimulator->instantiateBlueprint(instance, gRagdollBP); + + // Setup various components of the Blueprint. + opal::Solid* s = NULL; + s = instance.getSolid("left foot"); + setupVisualShapes(s); + s = instance.getSolid("right foot"); + setupVisualShapes(s); + s = instance.getSolid("lower left leg"); + setupVisualShapes(s); + s = instance.getSolid("lower right leg"); + setupVisualShapes(s); + s = instance.getSolid("upper left leg"); + setupVisualShapes(s); + s = instance.getSolid("upper right leg"); + setupVisualShapes(s); + s = instance.getSolid("pelvis"); + setupVisualShapes(s); + s = instance.getSolid("lower torso"); + setupVisualShapes(s); + s = instance.getSolid("upper torso"); + setupVisualShapes(s); + s = instance.getSolid("upper left arm"); + setupVisualShapes(s); + s = instance.getSolid("lower left arm"); + setupVisualShapes(s); + s = instance.getSolid("left hand"); + setupVisualShapes(s); + s = instance.getSolid("upper right arm"); + setupVisualShapes(s); + s = instance.getSolid("lower right arm"); + setupVisualShapes(s); + s = instance.getSolid("right hand"); + setupVisualShapes(s); + s = instance.getSolid("head"); + setupVisualShapes(s); + } + + void setupVisualShapes(opal::Solid* s) + { + const opal::SolidData& data = s->getData(); + int i=0; + for (i=0; i<data.getNumShapes(); ++i) + { + opal::ShapeData* shapeData = data.getShapeData(i); + Base3DObject* newObject = NULL; + + switch(shapeData->getType()) + { + case opal::BOX_SHAPE: + { + opal::Vec3r dim = ((opal::BoxShapeData*)shapeData)->dimensions; + newObject = new BoxObject(gSimulator, s, dim); + break; + } + case opal::SPHERE_SHAPE: + { + opal::real rad = ((opal::SphereShapeData*)shapeData)->radius; + newObject = new SphereObject(gSimulator, s, rad); + break; + } + case opal::CAPSULE_SHAPE: + { + opal::real rad = ((opal::CapsuleShapeData*)shapeData)->radius; + opal::real len = ((opal::CapsuleShapeData*)shapeData)->length; + newObject = new CapsuleObject(gSimulator, s, rad, len); + break; + } + case opal::PLANE_SHAPE: + { + // Not implemented; + break; + } + case opal::RAY_SHAPE: + { + // Not implemented; + break; + } + case opal::MESH_SHAPE: + { + // Not implemented; + break; + } + default: + assert(false); + } + + if (newObject) + { + gObjects.push_back(newObject); + } + } + } + void InitializeVariables() { *************** *** 401,407 **** case SDLK_1: { ! BoxObject* newBox = new BoxObject(gSimulator, false, ! opal::Vec3r((opal::real)0.1, (opal::real)0.1, (opal::real)0.1), ! gObjectMaterial); gObjects.push_back(newBox); break; --- 501,515 ---- case SDLK_1: { ! // Create and setup the Solid. ! opal::Solid* s = gSimulator->createSolid(); ! ! // Add a Box Shape to the Solid. ! opal::BoxShapeData boxData; ! boxData.material = gObjectMaterial; ! boxData.dimensions = opal::Vec3r((opal::real)0.05, ! (opal::real)0.05, (opal::real)0.05); ! s->addShape(boxData); ! BoxObject* newBox = new BoxObject(gSimulator, s, ! boxData.dimensions); gObjects.push_back(newBox); break; *************** *** 409,415 **** case SDLK_2: { ! BoxObject* newBox = new BoxObject(gSimulator, false, ! opal::Vec3r((opal::real)0.4, (opal::real)0.4, (opal::real)0.4), ! gObjectMaterial); gObjects.push_back(newBox); break; --- 517,531 ---- case SDLK_2: { ! // Create and setup the Solid. ! opal::Solid* s = gSimulator->createSolid(); ! ! // Add a Box Shape to the Solid. ! opal::BoxShapeData boxData; ! boxData.material = gObjectMaterial; ! boxData.dimensions = opal::Vec3r((opal::real)0.1, ! (opal::real)0.1, (opal::real)0.1); ! s->addShape(boxData); ! BoxObject* newBox = new BoxObject(gSimulator, s, ! boxData.dimensions); gObjects.push_back(newBox); break; *************** *** 417,423 **** case SDLK_3: { ! BoxObject* newBox = new BoxObject(gSimulator, false, ! opal::Vec3r((opal::real)1.5, (opal::real)1.5, (opal::real)1.5), ! gObjectMaterial); gObjects.push_back(newBox); break; --- 533,547 ---- case SDLK_3: { ! // Create and setup the Solid. ! opal::Solid* s = gSimulator->createSolid(); ! ! // Add a Box Shape to the Solid. ! opal::BoxShapeData boxData; ! boxData.material = gObjectMaterial; ! boxData.dimensions = opal::Vec3r((opal::real)0.4, ! (opal::real)0.4, (opal::real)0.4); ! s->addShape(boxData); ! BoxObject* newBox = new BoxObject(gSimulator, s, ! boxData.dimensions); gObjects.push_back(newBox); break; *************** *** 425,430 **** case SDLK_4: { ! BoxObject* newBox = new BoxObject(gSimulator, false, ! opal::Vec3r(5, 1, 1), gObjectMaterial); gObjects.push_back(newBox); break; --- 549,563 ---- case SDLK_4: { ! // Create and setup the Solid. ! opal::Solid* s = gSimulator->createSolid(); ! ! // Add a Box Shape to the Solid. ! opal::BoxShapeData boxData; ! boxData.material = gObjectMaterial; ! boxData.dimensions = opal::Vec3r((opal::real)5, ! (opal::real)1, (opal::real)1); ! s->addShape(boxData); ! BoxObject* newBox = new BoxObject(gSimulator, s, ! boxData.dimensions); gObjects.push_back(newBox); break; *************** *** 432,438 **** case SDLK_5: { ! BoxObject* newBox = new BoxObject(gSimulator, false, ! opal::Vec3r(5, (opal::real)0.05, 5), ! gObjectMaterial); gObjects.push_back(newBox); break; --- 565,579 ---- case SDLK_5: { ! // Create and setup the Solid. ! opal::Solid* s = gSimulator->createSolid(); ! ! // Add a Box Shape to the Solid. ! opal::BoxShapeData boxData; ! boxData.material = gObjectMaterial; ! boxData.dimensions = opal::Vec3r((opal::real)5, ! (opal::real)0.05, (opal::real)5); ! s->addShape(boxData); ! BoxObject* newBox = new BoxObject(gSimulator, s, ! boxData.dimensions); gObjects.push_back(newBox); break; *************** *** 440,445 **** case SDLK_6: { ! SphereObject* newSphere = new SphereObject(gSimulator, false, ! (opal::real)0.1, gObjectMaterial); gObjects.push_back(newSphere); break; --- 581,594 ---- case SDLK_6: { ! // Create and setup the Solid. ! opal::Solid* s = gSimulator->createSolid(); ! ! // Add a Sphere Shape to the Solid. ! opal::SphereShapeData sphereData; ! sphereData.material = gObjectMaterial; ! sphereData.radius = (opal::real)0.1; ! s->addShape(sphereData); ! SphereObject* newSphere = new SphereObject(gSimulator, s, ! sphereData.radius); gObjects.push_back(newSphere); break; *************** *** 447,452 **** case SDLK_7: { ! SphereObject* newSphere = new SphereObject(gSimulator, false, ! (opal::real)0.4, gObjectMaterial); gObjects.push_back(newSphere); break; --- 596,609 ---- case SDLK_7: { ! // Create and setup the Solid. ! opal::Solid* s = gSimulator->createSolid(); ! ! // Add a Sphere Shape to the Solid. ! opal::SphereShapeData sphereData; ! sphereData.material = gObjectMaterial; ! sphereData.radius = (opal::real)0.4; ! s->addShape(sphereData); ! SphereObject* newSphere = new SphereObject(gSimulator, s, ! sphereData.radius); gObjects.push_back(newSphere); break; *************** *** 454,465 **** case SDLK_8: { ! SphereObject* newSphere = new SphereObject(gSimulator, false, ! (opal::real)0.8, gObjectMaterial); ! gObjects.push_back(newSphere); break; } case SDLK_9: { ! CarObject* newCar = new CarObject(gSimulator, (opal::real)1.0); gObjects.push_back(newCar); break; --- 611,621 ---- case SDLK_8: { ! makeRagdoll(); break; } case SDLK_9: { ! CarObject* newCar = ! new CarObject(gSimulator, (opal::real)1.0); gObjects.push_back(newCar); break; *************** *** 481,485 **** gAspectRatio = (float)gWindowWidth/(float)gWindowHeight; ! SDL_SetVideoMode(gWindowWidth, gWindowHeight, 0, SDL_OPENGL|SDL_RESIZABLE); InitOpenGL(); --- 637,642 ---- gAspectRatio = (float)gWindowWidth/(float)gWindowHeight; ! SDL_SetVideoMode(gWindowWidth, gWindowHeight, ! 0, SDL_OPENGL|SDL_RESIZABLE); InitOpenGL(); Index: simple_objects.vcproj =================================================================== RCS file: /cvsroot/opal/opal/samples/simple_objects/simple_objects.vcproj,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** simple_objects.vcproj 9 Feb 2005 07:12:45 -0000 1.9 --- simple_objects.vcproj 1 Mar 2005 05:04:20 -0000 1.10 *************** *** 126,129 **** --- 126,132 ---- </File> <File + RelativePath="..\src\CapsuleObject.cpp"> + </File> + <File RelativePath="..\src\CarObject.cpp"> </File> *************** *** 149,152 **** --- 152,158 ---- </File> <File + RelativePath="..\src\CapsuleObject.h"> + </File> + <File RelativePath="..\src\CarObject.h"> </File> --- NEW FILE: ragdoll.xml --- <?xml version="1.0" ?> <OpalBlueprint> <Solid> <Name value="head"/> <Offset> <Transform type="translate" x="0.0" y="1.02" z="0.0"/> <Transform type="rotate" angle="90.0" x="1.0" y="0.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.065" length="0.02"/> </Shape> </Solid> <Joint> <Name value="neck"/> <Type value="hinge"/> <References solid0="upper torso" solid1="head"/> <Anchor x="0.0" y="0.95" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-45.0"/> <LimitHigh value="45.0"/> </Axis> </Joint> <Solid> <Name value="upper torso"/> <Offset> <Transform type="translate" x="0.0" y="0.9" z="0.0"/> <Transform type="rotate" angle="90.0" x="0.0" y="1.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.045" length="0.25"/> </Shape> </Solid> <Joint> <Name value="left shoulder"/> <Type value="universal"/> <References solid0="upper left arm" solid1="upper torso"/> <Anchor x="0.16" y="0.9" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-160.0"/> <LimitHigh value="80.0"/> </Axis> <Axis> <AxisNum value="1"/> <Direction x="0.0" y="0.0" z="1.0"/> <LimitsEnabled value="true"/> <LimitLow value="-45.0"/> <LimitHigh value="170.0"/> </Axis> </Joint> <Solid> <Name value="upper left arm"/> <Offset> <Transform type="translate" x="0.16" y="0.8" z="0.0"/> <Transform type="rotate" angle="90.0" x="1.0" y="0.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.03" length="0.2"/> </Shape> </Solid> <Joint> <Name value="left elbow"/> <Type value="hinge"/> <References solid0="lower left arm" solid1="upper left arm"/> <Anchor x="0.16" y="0.7" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-120.0"/> <LimitHigh value="0.0"/> </Axis> </Joint> <Solid> <Name value="lower left arm"/> <Offset> <Transform type="translate" x="0.16" y="0.6" z="0.0"/> <Transform type="rotate" angle="90.0" x="1.0" y="0.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.027" length="0.2"/> </Shape> </Solid> <Joint> <Name value="left wrist"/> <Type value="hinge"/> <References solid0="left hand" solid1="lower left arm"/> <Anchor x="0.16" y="0.5" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="0.0" y="0.0" z="1.0"/> <LimitsEnabled value="true"/> <LimitLow value="-85.0"/> <LimitHigh value="85.0"/> </Axis> </Joint> <Solid> <Name value="left hand"/> <Offset> <Transform type="translate" x="0.16" y="0.45" z="0.0"/> </Offset> <Shape type="box"> <Dimensions x="0.02" y="0.09" z="0.06"/> </Shape> </Solid> <Joint> <Name value="right shoulder"/> <Type value="universal"/> <References solid0="upper right arm" solid1="upper torso"/> <Anchor x="-0.16" y="0.9" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-160.0"/> <LimitHigh value="80.0"/> </Axis> <Axis> <AxisNum value="1"/> <Direction x="0.0" y="0.0" z="1.0"/> <LimitsEnabled value="true"/> <LimitLow value="-170.0"/> <LimitHigh value="45.0"/> </Axis> </Joint> <Solid> <Name value="upper right arm"/> <Offset> <Transform type="translate" x="-0.16" y="0.8" z="0.0"/> <Transform type="rotate" angle="90.0" x="1.0" y="0.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.03" length="0.2"/> </Shape> </Solid> <Joint> <Name value="right elbow"/> <Type value="hinge"/> <References solid0="lower right arm" solid1="upper right arm"/> <Anchor x="-0.16" y="0.7" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-120.0"/> <LimitHigh value="0.0"/> </Axis> </Joint> <Solid> <Name value="lower right arm"/> <Offset> <Transform type="translate" x="-0.16" y="0.6" z="0.0"/> <Transform type="rotate" angle="90.0" x="1.0" y="0.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.027" length="0.2"/> </Shape> </Solid> <Joint> <Name value="right wrist"/> <Type value="hinge"/> <References solid0="right hand" solid1="lower right arm"/> <Anchor x="-0.16" y="0.5" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="0.0" y="0.0" z="1.0"/> <LimitsEnabled value="true"/> <LimitLow value="-85.0"/> <LimitHigh value="85.0"/> </Axis> </Joint> <Solid> <Name value="right hand"/> <Offset> <Transform type="translate" x="-0.16" y="0.45" z="0.0"/> </Offset> <Shape type="box"> <Dimensions x="0.02" y="0.09" z="0.06"/> </Shape> </Solid> <Joint> <Name value="chest joint"/> <Type value="universal"/> <References solid0="lower torso" solid1="upper torso"/> <Anchor x="0.0" y="0.86" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="0.0" y="0.0" z="1.0"/> <LimitsEnabled value="true"/> <LimitLow value="-15.0"/> <LimitHigh value="15.0"/> </Axis> <Axis> <AxisNum value="1"/> <Direction x="0.0" y="1.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-15.0"/> <LimitHigh value="15.0"/> </Axis> </Joint> <Solid> <Name value="lower torso"/> <Offset> <Transform type="translate" x="0.0" y="0.75" z="0.0"/> </Offset> <Shape type="box"> <Dimensions x="0.18" y="0.27" z="0.04"/> </Shape> </Solid> <Joint> <Name value="waist joint"/> <Type value="hinge"/> <References solid0="pelvis" solid1="lower torso"/> <Anchor x="0.0" y="0.58" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="0.0" y="1.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-20.0"/> <LimitHigh value="20.0"/> </Axis> </Joint> <Solid> <Name value="pelvis"/> <Offset> <Transform type="translate" x="0.0" y="0.58" z="0.0"/> <Transform type="rotate" angle="90.0" x="0.0" y="1.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.05" length="0.15"/> </Shape> </Solid> <Joint> <Name value="left hip"/> <Type value="universal"/> <References solid0="upper left leg" solid1="pelvis"/> <Anchor x="0.08" y="0.58" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-135.0"/> <LimitHigh value="45.0"/> </Axis> <Axis> <AxisNum value="1"/> <Direction x="0.0" y="0.0" z="1.0"/> <LimitsEnabled value="true"/> <LimitLow value="-30.0"/> <LimitHigh value="30.0"/> </Axis> </Joint> <Solid> <Name value="upper left leg"/> <Offset> <Transform type="translate" x="0.08" y="0.43" z="0.0"/> <Transform type="rotate" angle="90.0" x="1.0" y="0.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.04" length="0.26"/> </Shape> </Solid> <Joint> <Name value="right hip"/> <Type value="universal"/> <References solid0="upper right leg" solid1="pelvis"/> <Anchor x="-0.08" y="0.58" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-135.0"/> <LimitHigh value="45.0"/> </Axis> <Axis> <AxisNum value="1"/> <Direction x="0.0" y="0.0" z="1.0"/> <LimitsEnabled value="true"/> <LimitLow value="-30.0"/> <LimitHigh value="30.0"/> </Axis> </Joint> <Solid> <Name value="upper right leg"/> <Offset> <Transform type="translate" x="-0.08" y="0.43" z="0.0"/> <Transform type="rotate" angle="90.0" x="1.0" y="0.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.04" length="0.26"/> </Shape> </Solid> <Joint> <Name value="left knee"/> <Type value="hinge"/> <References solid0="lower left leg" solid1="upper left leg"/> <Anchor x="0.08" y="0.3" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="0.0"/> <LimitHigh value="165.0"/> </Axis> </Joint> <Solid> <Name value="lower left leg"/> <Offset> <Transform type="translate" x="0.08" y="0.17" z="0.0"/> <Transform type="rotate" angle="90.0" x="1.0" y="0.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.03" length="0.26"/> </Shape> </Solid> <Joint> <Name value="right knee"/> <Type value="hinge"/> <References solid0="lower right leg" solid1="upper right leg"/> <Anchor x="-0.08" y="0.3" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="0.0"/> <LimitHigh value="165.0"/> </Axis> </Joint> <Solid> <Name value="lower right leg"/> <Offset> <Transform type="translate" x="-0.08" y="0.17" z="0.0"/> <Transform type="rotate" angle="90.0" x="1.0" y="0.0" z="0.0"/> </Offset> <Shape type="capsule"> <Dimensions radius="0.03" length="0.26"/> </Shape> </Solid> <Joint> <Name value="left ankle"/> <Type value="hinge"/> <References solid0="left foot" solid1="lower left leg"/> <Anchor x="0.08" y="0.04" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-45.0"/> <LimitHigh value="60.0"/> </Axis> </Joint> <Solid> <Name value="left foot"/> <Offset> <Transform type="translate" x="0.08" y="0.02" z="0.045"/> </Offset> <Shape type="box"> <Dimensions x="0.075" y="0.04" z="0.15"/> </Shape> </Solid> <Joint> <Name value="right ankle"/> <Type value="hinge"/> <References solid0="right foot" solid1="lower right leg"/> <Anchor x="-0.08" y="0.04" z="0.0"/> <Axis> <AxisNum value="0"/> <Direction x="1.0" y="0.0" z="0.0"/> <LimitsEnabled value="true"/> <LimitLow value="-45.0"/> <LimitHigh value="60.0"/> </Axis> </Joint> <Solid> <Name value="right foot"/> <Offset> <Transform type="translate" x="-0.08" y="0.02" z="0.045"/> </Offset> <Shape type="box"> <Dimensions x="0.075" y="0.04" z="0.15"/> </Shape> </Solid> </OpalBlueprint> |