--- a +++ b/Tests/ModelUtilities/test_CreateCoMRefNodeclass.any @@ -0,0 +1,120 @@ +#include "../libdef.any" +#include "<ANYBODY_PATH_MODELUTILS>/SegmentCoM/CreateCoMRefNode.any" + +// Definitions that allow to run the demo with different parameters +#ifndef BOXSIZES +#define BOXSIZES {2, 5, 1}*0.1 +#endif +#ifndef COM +#define COM {1, 1, 1}*0.2 +#endif +#ifndef ROTATIONS +#define ROTATIONS {20, 10, 10} * (pi/180.0) +#endif + + +Main = { + // Definitions to beused below + AnyVec3 BoxSizes = BOXSIZES; + AnyVar BoxMass = 2.0; + AnyVec3 CoM = COM; + AnyVec3 rotations = ROTATIONS; + AnyMat33 RotMatrix = RotMat(rotations[0],x) * RotMat(rotations[1],y) * RotMat(rotations[2],z); + + AnyFixedRefFrame GlobalRef = { + viewRefFrame.Visible = On; + }; + + AnySeg seg_stl = { + viewInertia.Visible = On; + UseInertiaObjects = On; + + // Create a reference node at the center of mass with the axes aligned with the + // principal axes of inertia of the segment. + CreateCoMRefNode CoMNode() = { + viewRefFrame.Visible = On; + viewRefFrame.ScaleXYZ = 2*{1,1,1}; + }; + + AnyInertiaSolid inertia_stl = { + AnyVar Weight = Main.BoxMass; + Density = Weight / Volume; + sRel = Main.CoM; + ARel = Main.RotMatrix; + viewRefFrame.Visible = On; + viewRefFrame.ScaleXYZ = 1.9*{1,1,1}; + AnySurfSTL box = { + FileName = "box"; + viewSurface.Visible = On; + + ScaleXYZ = Main.BoxSizes / 2; + AnyVec3 BoxSizes = Main.BoxSizes; + }; + + }; + + }; + + AnySeg seg_stl_symmetric2 = { + viewInertia.Visible = On; + UseInertiaObjects = On; + + // Create a reference node at the center of mass with the axes aligned with the + // principal axes of inertia of the segment. + // The moment of inertia is symmetric about two axes, and therefore, it results + // in 2 equal Eigen values. The two axes can't be uniquely defined. The notice is suppressed. + CreateCoMRefNode CoMNode(SUPPRESS_SYMMETRY_NOTICE = "On") = { + viewRefFrame.Visible = On; + viewRefFrame.ScaleXYZ = 2*{1,1,1}; + }; + + AnyInertiaSolid inertia_stl = { + AnyVar Weight = Main.BoxMass; + Density = Weight / Volume; + sRel = {1,1,3}*0.2; + ARel = Main.RotMatrix; + viewRefFrame.Visible = On; + viewRefFrame.ScaleXYZ = 1.9*{1,1,1}; + AnySurfSTL box = { + FileName = "box"; + viewSurface.Visible = On; + + ScaleXYZ = BoxSizes / 2; + AnyVec3 BoxSizes = {1, 2, 1}*0.1; + }; + + }; + }; + + AnySeg seg_stl_symmetric3 = { + viewInertia.Visible = On; + UseInertiaObjects = On; + + // Create a reference node at the center of mass with the axes aligned with the + // principal axes of inertia of the segment. + // The moment of inertia is symmetric about the 3 axes, and therefore, it results + // in 3 equal Eigen values. The three axes can't be uniquely defined. The notice is suppressed. + CreateCoMRefNode CoMNode(SUPPRESS_SYMMETRY_NOTICE = "On") = { + viewRefFrame.Visible = On; + viewRefFrame.ScaleXYZ = 2*{1,1,1}; + }; + + AnyInertiaSolid inertia_stl = { + AnyVar Weight = Main.BoxMass; + Density = Weight / Volume; + sRel = {1,1,4}*0.2; + ARel = Main.RotMatrix; + viewRefFrame.Visible = On; + viewRefFrame.ScaleXYZ = 1.9*{1,1,1}; + AnySurfSTL box = { + FileName = "box"; + viewSurface.Visible = On; + + ScaleXYZ = BoxSizes / 2; + AnyVec3 BoxSizes = {1, 1, 1}*0.1; + }; + + }; + }; + +};