--- a +++ b/Tools/ModelUtilities/FootConnections/CreateFootPrintClass.any @@ -0,0 +1,165 @@ +//First 3 points will be used for the construction of the new coordinate system. +#ifndef FOOTPRINT_NODE_NAME_1 + #define FOOTPRINT_NODE_NAME_1 ToeMedialContactNode +#endif +#ifndef FOOTPRINT_NODE_NAME_2 + #define FOOTPRINT_NODE_NAME_2 ToeLateralContactNode +#endif +#ifndef FOOTPRINT_NODE_NAME_3 + #define FOOTPRINT_NODE_NAME_3 HeelContactNodeLow +#endif +#ifndef FOOTPRINT_NODE_NAME_4 + #define FOOTPRINT_NODE_NAME_4 BigToeNode +#endif + +#class_template FootPrint(AnyRefFrame& BaseNode, FootPrintSubNodeName, AnyRefFrame& Limb) +{ + #var AnySwitch FootPrintVisible = On; + #var AnyVar FootPrintDrawingSize = 0.005; + #var AnyVec3 FootPrintDrawingColor = {1, 1, 1}; + + AnyRefFrame& FootPrintSubNode = BaseNode.FootPrintSubNodeName; + + AnyRefNode& FOOTPRINT_NODE_NAME_1 = BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_1; + AnyRefNode& FOOTPRINT_NODE_NAME_2 = BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_2; + AnyRefNode& FOOTPRINT_NODE_NAME_3 = BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_3; + AnyRefNode& FOOTPRINT_NODE_NAME_4 = BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_4; + + AnyFolder InternalInfo = + { + AnyRefNode& RefSource1 = .Limb.FOOTPRINT_NODE_NAME_1; + AnyRefNode& RefSource2 = .Limb.FOOTPRINT_NODE_NAME_2; + AnyRefNode& RefSource3 = .Limb.FOOTPRINT_NODE_NAME_3; + AnyRefNode& RefSource4 = .Limb.FOOTPRINT_NODE_NAME_4; + + //AnyRefNode& CoordSysPoint1 = Limb.BigToeNode; + AnyRefNode& CoordSysPoint1 = RefSource1; + AnyRefNode& CoordSysPoint2 = RefSource2; + AnyRefNode& CoordSysPoint3 = RefSource3; + + //AnyVec3 NewPoint_sRel = (refPoint1.sRel + refPoint2.sRel + refPoint3.sRel)/3; + //AnyVec3 NewCoordSys_sRel = CoordSysPoint3.sRel; + AnyVec3 NewCoordSys_sRel = CoordSysPoint1.sRel; + AnyMat33 NewCoordSys_ARel = RotMat(CoordSysPoint3.sRel, CoordSysPoint1.sRel, CoordSysPoint2.sRel) * RotMat(.Limb.Sign*(-pi/2), x); + + // Limb = + // { + // AnyRefNode TestNode = + // { + // sRel = ..NewCoordSys_sRel; + // ARel = ..NewCoordSys_ARel; + // + // AnyDrawRefFrame DrwFrame = + // { + // RGB = {1, 0, 1}; + // ScaleXYZ = 0.2*{1, 1, 1}; + // }; + // }; + // }; + + AnyMat33 ProjectionMat = {{1, 0, 0}, {0, 0, 0}, {0, 0, 1}}; // Projection to XZ plane! + + // AnyVec3 PlanePoint = NewCoordSys_sRel; + // AnyVec3 PlaneNormalVec = {0, 1, 0} * NewCoordSys_ARel'; + // AnyVar PlaneConstantTerm = (-1)*PlaneNormalVec*NewCoordSys_sRel' ; + // + // AnyVar refSource1_Dis = (-1)*(PlaneNormalVec*refSource1.sRel'+PlaneConstantTerm)/(PlaneNormalVec*PlaneNormalVec'); + // AnyVec3 refTarget1_sRel_FootCoordSys = refSource1.sRel + PlaneNormalVec * refSource1_Dis; + // AnyVec3 retTarget1_sRel_NewCoordSys = (refTarget1_sRel_FootCoordSys - PlanePoint) * NewCoordSys_ARel; + // + // AnyVar refSource2_Dis = (-1)*(PlaneNormalVec*refSource2.sRel'+PlaneConstantTerm)/(PlaneNormalVec*PlaneNormalVec'); + // AnyVec3 refTarget2_sRel_FootCoordSys = refSource2.sRel + PlaneNormalVec * refSource2_Dis; + // AnyVec3 retTarget2_sRel_NewCoordSys = (refTarget2_sRel_FootCoordSys - PlanePoint) * NewCoordSys_ARel; + // + // AnyVar refSource3_Dis = (-1)*(PlaneNormalVec*refSource3.sRel'+PlaneConstantTerm)/(PlaneNormalVec*PlaneNormalVec'); + // AnyVec3 refTarget3_sRel_FootCoordSys = refSource3.sRel + PlaneNormalVec * refSource3_Dis; + // AnyVec3 retTarget3_sRel_NewCoordSys = (refTarget3_sRel_FootCoordSys - PlanePoint) * NewCoordSys_ARel; + // + // AnyVar refSource4_Dis = (-1)*(PlaneNor malVec*refSource4.sRel'+PlaneConstantTerm)/(PlaneNormalVec*PlaneNormalVec'); + // AnyVec3 refTarget4_sRel_FootCoordSys = refSource4.sRel + PlaneNormalVec * refSource4_Dis; + // AnyVec3 retTarget4_sRel_NewCoordSys = (refTarget4_sRel_FootCoordSys - PlanePoint) * NewCoordSys_ARel; + + AnyVec3 Target1_sRel_NewCoordSys = ((RefSource1.sRel - NewCoordSys_sRel) * NewCoordSys_ARel) * ProjectionMat; + AnyVec3 Target2_sRel_NewCoordSys = ((RefSource2.sRel - NewCoordSys_sRel) * NewCoordSys_ARel) * ProjectionMat; + AnyVec3 Target3_sRel_NewCoordSys = ((RefSource3.sRel - NewCoordSys_sRel) * NewCoordSys_ARel) * ProjectionMat; + AnyVec3 Target4_sRel_NewCoordSys = ((RefSource4.sRel - NewCoordSys_sRel) * NewCoordSys_ARel) * ProjectionMat; + + AnyRefFrame& RefBaseNode = .BaseNode; + RefBaseNode = + { + AnyRefNode FootPrintSubNodeName = + { + AnyRefNode FOOTPRINT_NODE_NAME_1 = + { + sRel = ...Target1_sRel_NewCoordSys ; + AnyDrawNode DrwNode = + { + Visible = .....FootPrintVisible ; + RGB = .....FootPrintDrawingColor; + ScaleXYZ = .....FootPrintDrawingSize *{1, 1, 1}; + }; + }; + + AnyRefNode FOOTPRINT_NODE_NAME_2 = + { + sRel = ...Target2_sRel_NewCoordSys ; + AnyDrawNode DrwNode = + { + Visible = .....FootPrintVisible ; + RGB = .....FootPrintDrawingColor; + ScaleXYZ = .....FootPrintDrawingSize *{1, 1, 1}; + }; + }; + + AnyRefNode FOOTPRINT_NODE_NAME_3 = + { + sRel = ...Target3_sRel_NewCoordSys ; + AnyDrawNode DrwNode = + { + Visible = .....FootPrintVisible ; + RGB = .....FootPrintDrawingColor; + ScaleXYZ = .....FootPrintDrawingSize *{1, 1, 1}; + }; + }; + + AnyRefNode FOOTPRINT_NODE_NAME_4 = + { + sRel = ...Target4_sRel_NewCoordSys ; + AnyDrawNode DrwNode = + { + Visible = .....FootPrintVisible ; + RGB = .....FootPrintDrawingColor; + ScaleXYZ = .....FootPrintDrawingSize *{1, 1, 1}; + }; + }; + };//FootPrintSubNodeName + };//BaseNode + + AnyRefNode& RefTarget1 = .BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_1; + AnyRefNode& RefTarget2 = .BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_2; + AnyRefNode& RefTarget3 = .BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_3; + AnyRefNode& RefTarget4 = .BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_4; + + AnyFolder Source = + { + AnyRefNode& FOOTPRINT_NODE_NAME_1 = ..Limb.FOOTPRINT_NODE_NAME_1; + AnyRefNode& FOOTPRINT_NODE_NAME_2 = ..Limb.FOOTPRINT_NODE_NAME_2; + AnyRefNode& FOOTPRINT_NODE_NAME_3 = ..Limb.FOOTPRINT_NODE_NAME_3; + AnyRefNode& FOOTPRINT_NODE_NAME_4 = ..Limb.FOOTPRINT_NODE_NAME_4; + }; + + AnyFolder Target = + { + AnyRefNode& FOOTPRINT_NODE_NAME_1 = ..BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_1; + AnyRefNode& FOOTPRINT_NODE_NAME_2 = ..BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_2; + AnyRefNode& FOOTPRINT_NODE_NAME_3 = ..BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_3; + AnyRefNode& FOOTPRINT_NODE_NAME_4 = ..BaseNode.FootPrintSubNodeName.FOOTPRINT_NODE_NAME_4; + }; + }; + +}; + +//#undef FOOTPRINT_NODE_NAME_1 +//#undef FOOTPRINT_NODE_NAME_2 +//#undef FOOTPRINT_NODE_NAME_3 +//#undef FOOTPRINT_NODE_NAME_4 \ No newline at end of file