--- a +++ b/Tools/GRFPrediction/CreateFootNodes.any @@ -0,0 +1,108 @@ +#ifdef __CREATE_CC_NODE__ +#undef __CREATE_CC_NODE__ +#endif + +#define __CREATE_CC_NODE__(IDX) NodesBaseFrame = { AnyRefNode Node##IDX = {sRel = ..Targets[IDX]; AnyDrawNode Drw = { Visible=...NodesVisible; RGB = ...NodesRGB; ScaleXYZ= ...NodesScale; Opacity = ...NodesOpacity; }; };}; AnyRefNode &Node##IDX = NodesBaseFrame.Node##IDX + + + + +#class_template CreateFootContactNodes25 (AnySeg &foot_ref, + NAME = "", + CONTACT_POINT_OFFSET_DIST = 0) +{ + #var AnySwitchVar NodesVisible = On; + #var AnyInt NodesRGB = {1, 0, 1}; + #var AnyVec3 NodesScale = 0.005*{1, 1, 1}; + #var AnyVar NodesOpacity = 1; + + AnyVec3 NewCoordSys_sRel = foot_ref.HeelContactNodeLow.sRel; + AnyMat33 NewCoordSys_ARel = RotMat(foot_ref.HeelContactNodeLow.sRel, + foot_ref.ToeMedialContactNode.sRel, + foot_ref.ToeLateralContactNode.sRel) + * RotMat(-pi/2*foot_ref.Sign, x); + AnyMat33 ProjectionMat = {{1, 0, 0}, {0, 0, 0}, {0, 0, 1}}; // Projection to XZ plane! + AnyVar Offset_Dist = CONTACT_POINT_OFFSET_DIST; + AnyVec3 Offset_Vec = {0, -1, 0}; + + AnyFloat Sources = + { + foot_ref.HeelContactNodeLow.sRel, + foot_ref.ToeMedialContactNode.sRel, + foot_ref.ToeLateralContactNode.sRel, + foot_ref.BigToeNode.sRel, + foot_ref.MedialMalleolus.sRel, + foot_ref.LateralMalleolus.sRel, + foot_ref.SubTalarJoint.sRel, + foot_ref.MetatarsalJoint1Node.sRel, + foot_ref.MetatarsalJoint2Node.sRel, + foot_ref.MetatarsalJoint3Node.sRel, + foot_ref.MetatarsalJoint4Node.sRel, + foot_ref.MetatarsalJoint5Node.sRel, + foot_ref.Scale((5*foot_ref.StdPar.ToeMedialContactNode+5*foot_ref.StdPar.BigToeNode)/10), + foot_ref.Scale((5*foot_ref.StdPar.ToeLateralContactNode+5*foot_ref.StdPar.BigToeNode)/10), + foot_ref.Scale((5*foot_ref.StdPar.HeelContactNodeLow+5*foot_ref.StdPar.ToeMedialContactNode)/10), + foot_ref.Scale((2.5*foot_ref.StdPar.HeelContactNodeLow+7.5*foot_ref.StdPar.ToeMedialContactNode)/10), + foot_ref.Scale((5*foot_ref.StdPar.HeelContactNodeLow+5*foot_ref.StdPar.ToeLateralContactNode)/10), + foot_ref.Scale((2.5*foot_ref.StdPar.HeelContactNodeLow+7.5*foot_ref.StdPar.ToeLateralContactNode)/10), + foot_ref.Scale((7.5*foot_ref.StdPar.HeelContactNodeLow+2.5*foot_ref.StdPar.ToeLateralContactNode)/10), + foot_ref.Scale((8.5*foot_ref.StdPar.HeelContactNodeLow+1.5*foot_ref.StdPar.ToeLateralContactNode)/10), + foot_ref.Scale((-1.5*foot_ref.StdPar.HeelContactNodeLow+11.5*foot_ref.StdPar.ToeLateralContactNode)/10), + foot_ref.Scale((4*foot_ref.StdPar.HeelContactNodeLow+6*foot_ref.StdPar.BigToeNode)/10), + foot_ref.FlexorHallucisLongusViaNode7.sRel, + foot_ref.FlexorDigitorumLongusViaNode8.sRel, + foot_ref.ExtensorDigitorumLongus1Node.sRel + }; + AnyInt Sources_Sizes = SizesOf(Sources); + AnyFloat Unit_Array = iarr(1, Sources_Sizes[0])*0 + 1 ; + + AnyFloat Targets = + ( Sources - (NewCoordSys_sRel'*{Unit_Array})')* NewCoordSys_ARel * ProjectionMat + + (Offset_Dist*Offset_Vec'*{Unit_Array})'; + + foot_ref = { + AnyRefNode ConditionalContact_Nodes##NAME = + { + sRel = ..NewCoordSys_sRel ; + ARel = ..NewCoordSys_ARel ; + }; + }; + + + + AnyFolder &NodesBaseFrame = foot_ref.ConditionalContact_Nodes##NAME; + + __CREATE_CC_NODE__(0 ); + __CREATE_CC_NODE__(1 ); + __CREATE_CC_NODE__(2 ); + __CREATE_CC_NODE__(3 ); + __CREATE_CC_NODE__(4 ); + __CREATE_CC_NODE__(5 ); + __CREATE_CC_NODE__(6 ); + __CREATE_CC_NODE__(7 ); + __CREATE_CC_NODE__(8 ); + __CREATE_CC_NODE__(9 ); + __CREATE_CC_NODE__(10); + __CREATE_CC_NODE__(11); + __CREATE_CC_NODE__(12); + __CREATE_CC_NODE__(13); + __CREATE_CC_NODE__(14); + __CREATE_CC_NODE__(15); + __CREATE_CC_NODE__(16); + __CREATE_CC_NODE__(17); + __CREATE_CC_NODE__(18); + __CREATE_CC_NODE__(19); + __CREATE_CC_NODE__(20); + __CREATE_CC_NODE__(21); + __CREATE_CC_NODE__(22); + __CREATE_CC_NODE__(23); + __CREATE_CC_NODE__(24); + + +}; + + + + + + \ No newline at end of file