Switch to side-by-side view

--- a
+++ b/Tools/ModelUtilities/Widgets/TripodOnPlane.any
@@ -0,0 +1,180 @@
+#class_template TripodOnPlane (AnyRefFrame &Base,AnyMechOpr &Study,LinOnOffX,LinOnOffY,LinOnOffZ,RotOnOffX,RotOnOffY,RotOnOffZ){
+  
+  
+  
+  
+  
+  #var AnyVec3 GlobalPos ;  // Variable with obligatory initialization
+  #var AnyVec3 GlobalRotZYX ;  // Variable with obligatory initialization
+  #var AnyVec3 LocalPos ;  // Variable with obligatory initialization
+  #var AnyVec3 LocalRotZYX ;  // Variable with obligatory initialization
+  #var AnyVar TripodSize;// Variable with obligatory initialization
+  
+  AnyDrawWidgetLin DrwWidget1 = {
+    RefFrame = &.Main.Model.EnvironmentModel.GlobalRef;
+    Target = &.Box.Origin;
+    AxisOnOff = {.LinOnOffX ,.LinOnOffY ,.LinOnOffZ };
+    UpdateEvent = OnMouseRelease;
+    Operation = &.Study;
+    MaxDrawSize=0.15;
+    AnyVec3 tt=.Box.BoxRot.CenterOfBox.sRel;
+    RelPos=&tt;
+    Opacity=0.5;
+    
+  };
+  
+  AnyDrawWidgetRot DrwWidget2 = {
+    RefFrame = &.Box;
+    Target = &.Box.BoxRot.ARel;
+    AxisOnOff = {.RotOnOffX ,.RotOnOffY ,.RotOnOffZ };
+    UpdateEvent = OnMouseRelease;
+    Operation = &.Study;
+    MaxDrawSize=0.05;
+    Opacity=0.5;
+    
+    
+    
+    
+  };
+  
+  AnyFixedRefFrame  Box ={
+    Origin =.GlobalPos;
+    
+    AnyRefNode BoxRot={
+      
+      ARel=RotMat(..GlobalRotZYX[0]*pi/180,z)*RotMat(..GlobalRotZYX[1]*pi/180,y)*RotMat(..GlobalRotZYX[2]*pi/180,x);
+      
+      AnyRefNode CenterContactNode ={
+        AnyDrawNode drw1={  RGB={1,0,0};    ScaleXYZ=0.01*{1,1,1};};
+        sRel={-0.5*...TripodSize,0,0};
+        
+      }; 
+      
+      AnyRefNode MedialContactNode ={
+        sRel={0.5*...TripodSize,-0.5*...TripodSize,0};
+        AnyDrawNode drw1={  RGB={1,0,0};    ScaleXYZ=0.01*{1,1,1};};
+      };
+      
+      AnyRefNode LateralContactNode ={
+        sRel={0.5*...TripodSize,0.5*...TripodSize,0};
+        AnyDrawNode drw1={  RGB={1,0,0};    ScaleXYZ=0.01*{1,1,1};};
+      };
+
+      AnyKinPLine Line  ={
+         AnyRefNode &ref1= .CenterContactNode ;
+         AnyRefNode &ref2= .MedialContactNode ;
+          AnyRefNode &ref3= .LateralContactNode;
+         AnyRefNode &ref4= .CenterContactNode ;
+      
+       AnyDrawPLine drw={Thickness=.001; RGB={1,0,0};};
+       };
+      
+      AnyRefNode CenterOfBox ={
+        sRel={0,0,0};
+      };
+
+      
+      
+//      AnyRefNode BoxNode ={
+//        sRel={...TripodSize*0.5,0,0}-{DrwBox.ScaleXYZ[0]*0.5,0,-0.5*DrwBox.ScaleXYZ[2] };
+////        AnyDrawSurf DrwBox = {
+////          FileName = "UnityBox";
+////          RGB = 0.45*{1,1,1};
+////          ScaleXYZ={....TripodSize,....TripodSize,....TripodSize*0.1};
+////          Opacity =0.15;
+////          Face=-1;
+////        };
+//        
+//      };
+    };
+  };
+  
+  //  AnySeg &Base=Main.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand;
+  
+  Base={
+    AnyRefNode CenterContactNode  ={
+      sRel=..LocalPos;
+      ARel=RotMat(..LocalRotZYX[0]*pi/180,z)*RotMat(..LocalRotZYX[1]*pi/180,y)*RotMat(..LocalRotZYX[2]*pi/180,x);
+      AnyDrawNode node={          ScaleXYZ=0.01*{1,1,1}; RGB={0,0,1};};
+      AnyDrawRefFrame drw2={       RGB = 0.45*{1,1,1};      ScaleXYZ=0.05*{1,1,1};    };
+      
+    };
+    
+    AnyRefNode MedialContactNode  ={
+      AnyDrawNode drw2={          ScaleXYZ=0.01*{1,1,1}; RGB={0,0,1};};
+      sRel={-..TripodSize,0.5*..TripodSize,0}*ARel+.CenterContactNode.sRel;
+      ARel=.CenterContactNode.ARel;
+    };
+    AnyRefNode LateralContactNode  ={
+      AnyDrawNode drw2={          ScaleXYZ=0.01*{1,1,1}; RGB={0,0,1};};
+      sRel={-..TripodSize,-0.5*..TripodSize,0}*ARel+.CenterContactNode.sRel;
+      ARel=.CenterContactNode.ARel;
+    };
+    
+  };
+  
+  AnyKinEqSimpleDriver CenterNode ={
+    AnyKinLinear Lin={
+      Ref=0;
+      AnyRefNode &ref1=..Base.CenterContactNode ;
+      AnyRefNode &ref2=..Box.BoxRot.CenterContactNode;
+    };
+    
+    
+    DriverPos={0,0,0};
+    DriverVel={0,0,0};
+    Reaction.Type={Off,Off,Off};
+    CType={Soft,Soft,Soft};
+  };
+  
+  AnyKinPLine CenterNodeLine ={
+    AnyRefFrame &ref1=.CenterNode.Lin.ref1;
+    AnyRefFrame &ref2=.CenterNode.Lin.ref2;
+    AnyDrawPLine drw={Thickness=0.001; RGB={0,0,1};};
+  };
+  
+  
+  
+  AnyKinEqSimpleDriver MedialContactNode ={
+    AnyKinLinear Lin={
+      Ref=0;
+      AnyRefNode &ref1=..Base.MedialContactNode ;
+      AnyRefNode &ref2=..Box.BoxRot.MedialContactNode ;
+    };
+    
+    
+    DriverPos={0,0,0};
+    DriverVel={0,0,0};
+    Reaction.Type={Off,Off,Off};
+    CType={Soft,Soft,Soft};
+  };
+  
+  AnyKinPLine MedialContactNodeLine ={
+    AnyRefFrame &ref1=.MedialContactNode.Lin.ref1;
+    AnyRefFrame &ref2=.MedialContactNode.Lin.ref2;
+    AnyDrawPLine drw={Thickness=0.001; RGB={0,0,1};};
+  };
+  
+  
+  AnyKinEqSimpleDriver LateralContactNode ={
+    AnyKinLinear Lin={
+      Ref=0;
+      AnyRefNode &ref1=..Base.LateralContactNode ;
+      AnyRefNode &ref2=..Box.BoxRot.LateralContactNode ;
+    };
+    
+    
+    DriverPos={0,0,0};
+    DriverVel={0,0,0};
+    Reaction.Type={Off,Off,Off};
+    CType={Soft,Soft,Soft};
+  };
+  AnyKinPLine LateralContactNodeLine ={
+    AnyRefFrame &ref1=.LateralContactNode.Lin.ref1;
+    AnyRefFrame &ref2=.LateralContactNode.Lin.ref2;
+    AnyDrawPLine drw={Thickness=0.0001; RGB={0,0,1};};
+  };
+  
+  
+  
+};