108 lines (87 with data), 4.3 kB
#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);
};