Switch to side-by-side view

--- a
+++ b/Application/Examples/AirlinePassenger/Model/Environment.any
@@ -0,0 +1,537 @@
+//---------------------------------------------------------------
+// Chair package
+//---------------------------------------------------------------
+
+// AnyFolder &RefPP = Main.PackageParameters;
+
+//------------------------------------------------------
+// Global Reference Frame
+//------------------------------------------------------ 
+
+
+
+AnyFixedRefFrame GlobalRef = {
+  
+  AnyFolder &Dim = .Seg.ChairDimensions;
+  
+  AnyRefNode GroundNode = {
+    sRel = {1/2*.Dim.SeatLength, -.Dim.BackRestHeight, 0};
+  };  
+  
+  
+  /*
+  AnyRefNode CoMNode = {
+  sRel = {0.069568, -0.589986, -0.000000};
+  AnyDrawRefFrame DrwRef = {
+  RGB = {0, 1, 0};
+  ScaleXYZ = {0.3, 0.3, 0.3};
+  };  
+  };
+  */
+  
+};  // Global reference frame
+
+//-----------------------------------------------------
+// Segments
+//-----------------------------------------------------
+
+AnyFolder Seg = {
+  
+  AnyFolder ChairDimensions = {
+    
+    AnyVar FootRestLength = 0.50;
+    AnyVar FootRestWidth = 0.40;
+    AnyVar FootRestThickness = 0.05;
+    AnyVar BackRestHeight = 0.90;
+    AnyVar BackRestWidth = 0.40;
+    AnyVar BackRestThickness = 0.05;
+    AnyVar SeatLength = 0.50;
+    AnyVar SeatWidth = 0.40;
+    AnyVar SeatThickness = 0.05;
+    AnyVar HeadRestHeight = 0.2;
+    AnyVar HeadRestWidth = 0.2;
+    AnyVar HeadRestThickness = 0.05;
+    AnyVar LegRestLength = 0.6;
+    AnyVar LegRestWidth = 0.3;
+    AnyVar LegRestThickness = 0.05;
+    AnyVar ArmRestX = 0.30;
+    AnyVar ArmRestY = 0.3;
+    AnyVar ArmRestZ = 0.05;      
+    AnyVar ArmRestHeight = 0.32;    
+  }; // ChairDimensions  
+  
+  //--------------------------------------------------------
+  // BackRest
+  //--------------------------------------------------------
+  
+  AnySeg BackRest = {
+    
+    AnyFolder &Dim = .ChairDimensions;
+    Mass = 0.0;
+    AnyVar Ixx = 1/12*(Dim.BackRestHeight^2+Dim.BackRestWidth^2);
+    AnyVar Iyy = 1/12*(Dim.BackRestThickness^2+Dim.BackRestWidth^2);
+    AnyVar Izz = 1/12*(Dim.BackRestHeight^2+Dim.BackRestThickness^2);
+    Jii = {Ixx, Iyy, Izz};
+
+    AnyRefNode BackRestSeatJntNode = {
+      sRel = {0, -1/2*.Dim.BackRestHeight, 0};
+    };
+    
+    AnyRefNode BackRestHeadRestJntNode = {
+      sRel = {0, 1/2*.Dim.BackRestHeight, 0};
+    };
+     AnyRefNode BackRestSupportNode = {
+      sRel = {-0.2, -0.2, 0};
+    };
+    
+    AnyRefNode BackArmRestRightJntNode = {
+      sRel = {0, .Dim.ArmRestHeight-1/2*.Dim.BackRestHeight, 1/2*.Dim.BackRestWidth};
+    };
+    
+    AnyRefNode BackArmRestLeftJntNode = {
+      sRel = {0, .Dim.ArmRestHeight-1/2*.Dim.BackRestHeight, -1/2*.Dim.BackRestWidth};
+    };
+        
+    AnyDrawSTL BackRest = {
+      FileName = "../Input/BackRest.stl";
+      RGB = {0, 0, 1};
+      Opacity = 0.2;
+        AnyStyleDrawMaterial1 style = 
+        {
+          EnableCreasing = On;
+          CreasingAngle = 0.524;
+          SpecularRGB = 0.05*{1,1,1};
+        };      
+    };
+  }; // BackRest        
+  
+  //--------------------------------------------------------
+  // Seat
+  //--------------------------------------------------------
+  
+  AnySeg Seat = {
+    
+    AnyFolder &Dim = .ChairDimensions;
+    Mass = 0.0;
+    AnyVar Ixx = 1/12*(Dim.SeatWidth^2+Dim.SeatThickness^2);
+    AnyVar Iyy = 1/12*(Dim.SeatLength^2+Dim.SeatWidth^2);
+    AnyVar Izz = 1/12*(Dim.SeatLength^2+Dim.SeatThickness^2);
+    Jii = {Ixx, Iyy, Izz};
+    AnyRefNode SeatNode = {
+      sRel = {0, 0, 0};
+      ARel = {{0, 1, 0}, {-1, 0, 0}, {0, 0, 1}};
+      
+      AnyDrawSTL Seat = {
+        FileName = "../Input/Seat.stl";
+        RGB = {0, 0, 1};
+        Opacity = 0.2;
+        AnyStyleDrawMaterial1 style = 
+        {
+          EnableCreasing = On;
+          CreasingAngle = 0.524;
+          SpecularRGB = 0.05*{1,1,1};
+        };
+      };
+      
+    };
+    
+    AnyRefNode SeatBackRestJntNode = {
+      sRel = {0, 1/2*.Dim.SeatLength, 0};
+    };
+    
+    AnyRefNode SeatAdjNode = {
+      sRel = {0, 0, 0};
+    };
+    
+    AnyRefNode SeatLegRestJntNode = {
+      sRel = {0, -1/2*.Dim.SeatLength, 0};
+    };    
+  }; // Seat 
+  
+  //-----------------------------------------------------
+  // HeadRest
+  //-----------------------------------------------------
+  
+  AnySeg HeadRest = {
+    
+    AnyFolder &Dim = .ChairDimensions;
+    Mass = 0.0;
+    AnyVar Ixx = 1/12*(Dim.HeadRestHeight^2+Dim.HeadRestWidth^2);
+    AnyVar Iyy = 1/12*(Dim.HeadRestWidth^2+Dim.HeadRestThickness^2);
+    AnyVar Izz = 1/12*(Dim.HeadRestHeight^2+Dim.HeadRestThickness^2);
+    Jii = {Ixx, Iyy, Izz};
+    
+    AnyRefNode HeadRestBackRestJntNode = {
+      sRel = {0, -1/2*.Dim.HeadRestHeight, 0};
+      // AnyDrawNode DrwNode = {};
+    };
+    
+    // AnyDrawSeg HeadRest = {};
+    /*
+    AnyDrawSTL HeadRest = {
+    FileName = "../Input/HeadRest.stl";
+    RGB = {0, 0, 1};
+    Opacity = 0.4;      
+    };
+    */
+  }; // HeadRest
+  
+  //-------------------------------------------------------
+  // LegRest
+  //-------------------------------------------------------
+  
+  AnySeg LegRest = {
+    AnyFolder &Dim = .ChairDimensions;
+    Mass = 0.0;
+    AnyVar Ixx = 1/12*(Dim.LegRestLength^2+Dim.LegRestWidth^2);
+    AnyVar Iyy = 1/12*(Dim.LegRestWidth^2+Dim.LegRestThickness^2);
+    AnyVar Izz = 1/12*(Dim.LegRestLength^2+Dim.LegRestThickness^2);
+    Jii = {Ixx, Iyy, Izz};
+    
+    AnyRefNode LegRestSeatJntNode = {
+      sRel = {0, 1/2*.Dim.LegRestLength, 0};
+    };
+          
+    AnyRefNode LegRestFootRestJntNode = {
+      sRel = {0, -1/2*.Dim.LegRestLength, 0};
+    };    
+    
+    AnyDrawSTL LegRest = {
+      FileName = "../Input/LegRest.stl";       
+      RGB = {0, 0, 1};
+      Opacity = 0.2;
+        AnyStyleDrawMaterial1 style = 
+        {
+          EnableCreasing = On;
+          CreasingAngle = 0.524;
+          SpecularRGB = 0.05*{1,1,1};
+        };      
+    };
+    
+  }; // LegRest 
+  
+  //---------------------------------------------------
+  // FootRest
+  //---------------------------------------------------
+  
+  AnySeg FootRest = {
+    
+    AnyFolder &Dim = .ChairDimensions;
+    Mass = 5.0;
+    AnyVar Ixx = 1/12*(Dim.FootRestThickness^2+Dim.FootRestWidth^2);
+    AnyVar Iyy = 1/12*(Dim.FootRestLength^2+Dim.FootRestWidth^2);
+    AnyVar Izz = 1/12*(Dim.FootRestLength^2+Dim.FootRestThickness^2);
+    Jii = {Ixx, Iyy, Izz};     
+    
+    AnyRefNode FootRestLegRestJntNode = {
+      sRel = {0, 1/2*.Dim.FootRestLength, 0};
+      ARel = {{0, 1, 0}, {-1, 0, 0}, {0, 0, 1}};
+      /*
+      AnyDrawRefFrame DrwRefFrame = {
+      RGB = {1, 1, 0};
+      ScaleXYZ = {0.3, 0.3, 0.3};
+      };
+      */
+    };
+    // AnyDrawSeg DrwSeg = {};
+    
+    AnyDrawSTL DrwSTL = {
+      FileName = "../Input/FootRest2.stl";
+      RGB = {0,0, 1};
+      Opacity = 0.2;
+        AnyStyleDrawMaterial1 style = 
+        {
+          EnableCreasing = On;
+          CreasingAngle = 0.524;
+          SpecularRGB = 0.05*{1,1,1};
+        };      
+    };
+    
+  }; // FootRest    
+  
+//  //---------------------------------------------------
+//  // ArmRestRight
+//  //---------------------------------------------------
+//  
+//  AnyFolder Right = {
+//    
+//    AnySeg ArmRest = {
+//      
+//      AnyFolder &Dim = ..ChairDimensions;
+//      Mass = 1.0;
+//      AnyVar Ixx = 1/12*(Dim.ArmRestZ^2+Dim.ArmRestX^2);
+//      AnyVar Iyy = 1/12*(Dim.ArmRestY^2+Dim.ArmRestX^2);
+//      AnyVar Izz = 1/12*(Dim.ArmRestY^2+Dim.ArmRestZ^2);
+//      Jii = {Ixx, Iyy, Izz};     
+//      
+//      AnyRefNode BackArmRestJntNode = {
+//        sRel = {0, .Dim.ArmRestX, -1/2*.Dim.ArmRestZ};       
+//      };
+//
+//      AnyRefNode ArmRestUlnaJntNodeFront = {
+//        sRel = {0, -1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
+//      };
+//
+//      AnyRefNode ArmRestUlnaJntNodeBack = {
+//        sRel = {0, 1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
+//      };
+//
+////      AnyDrawSeg DrwSeg = {};
+//      
+//      AnyRefNode STLholder = {
+//        sRel = {-0.45, 0, 0};
+//        AnyDrawSTL DrwSTL = {
+//          FileName = "../Input/ArmRest3.stl";
+//          RGB = {0, 0, 1};
+//          Opacity = 0.2;
+//        };
+//      };     
+//    }; // ArmRest    
+//    
+//  }; // Right
+//  
+//  AnyFolder Left = {
+//    
+//    AnySeg ArmRest = {
+//      
+//      AnyFolder &Dim = ..ChairDimensions;
+//      Mass = 1.0;
+//      AnyVar Ixx = 1/12*(Dim.ArmRestZ^2+Dim.ArmRestX^2);
+//      AnyVar Iyy = 1/12*(Dim.ArmRestY^2+Dim.ArmRestX^2);
+//      AnyVar Izz = 1/12*(Dim.ArmRestY^2+Dim.ArmRestZ^2);
+//      Jii = {Ixx, Iyy, Izz};     
+//      
+//      AnyRefNode BackArmRestJntNode = {
+//        sRel = {0, .Dim.ArmRestX, -1/2*.Dim.ArmRestZ};       
+//      };
+//
+//      AnyRefNode ArmRestUlnaJntNodeFront = {
+//        sRel = {0, -1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
+//      };
+//
+//      AnyRefNode ArmRestUlnaJntNodeBack = {
+//        sRel = {0, 1/2*.Dim.ArmRestY, 0};//-1/2*.Dim.ArmRestZ};
+//      };
+//
+////      AnyDrawSeg DrwSeg = {};
+//      
+//      AnyRefNode STLholder = {
+//        sRel = {-0.45, 0, 0};
+//        AnyDrawSTL DrwSTL = {
+//          FileName = "../Input/ArmRest3.stl";
+//          RGB = {0, 0, 1};
+//          Opacity = 0.2;
+//        };
+//      };     
+//    }; // ArmRest    
+//    
+//  }; // Left
+  
+}; // Seg
+
+//--------------------------------------
+// Joints
+//--------------------------------------
+
+AnyFolder Jnt = {
+  
+  AnyKinLinear SeatGlobalLinMeasure = {
+    AnyRefNode &SegNode = ..Seg.Seat.SeatAdjNode;
+    AnyRefNode &GroundNode = ..GlobalRef.GroundNode;
+  };        
+  
+  AnyKinRotational SeatGlobalRotMeasure = {
+    AnyRefNode &SegNode = ..Seg.Seat.SeatAdjNode;
+    AnyRefNode &GroundNode = ..GlobalRef.GroundNode;
+    Type = RotVector;
+  };        
+  
+  AnyKinEq SeatGlobalConst = {
+    AnyKinLinear &LinMeasure = .SeatGlobalLinMeasure;
+    AnyKinRotational &RotMeasure = .SeatGlobalRotMeasure;
+    MeasureOrganizer = {0, 2, 3, 4};
+    Reaction.Type = {Off, Off, Off, Off};
+  };
+  
+  // Create reaction forces between the seat and the environment
+  AnyReacForce SeatSupport = {
+    AnyKinLinear SeatGlobalLinMeasure = {
+      AnyRefFrame &Seat = ...Seg.Seat;
+      AnyRefFrame &Ground = ...GlobalRef;
+      Ref = 0;  // In the seat reference frame
+    };
+    AnyKinRotational &Rot = .SeatGlobalRotMeasure;
+  };
+  
+  
+  AnyRevoluteJoint SeatBackRestJnt = {
+    Axis = z;
+    AnyRefNode &Seatnode = ..Seg.Seat.SeatBackRestJntNode;  
+    AnyRefNode &BackRestNode = ..Seg.BackRest.BackRestSeatJntNode;
+    Constraints.Reaction.Type = {Off, Off, Off, Off, Off};
+  }; // SeatBackRestLink
+  
+  AnyRevoluteJoint BackRestHeadRestJnt = {
+    Axis = z;
+    AnyRefNode &BackRestNode = ..Seg.BackRest.BackRestHeadRestJntNode;
+    AnyRefNode &HeadRestNode = ..Seg.HeadRest.HeadRestBackRestJntNode;
+  }; // BackRestHeadRestLink
+  
+  AnyRevoluteJoint SeatLegRestJnt = {
+    Axis = z; 
+    AnyRefNode &LegRestNode = ..Seg.LegRest.LegRestSeatJntNode;
+    AnyRefNode &SeatNode = ..Seg.Seat.SeatLegRestJntNode;
+    Constraints.Reaction.Type = {Off, Off, Off, Off, Off};    
+  }; // SeatLegRestLink
+  
+  AnyPrismaticJoint LegRestFootRestJnt = {
+    Axis = y;
+    Ref = 1;
+    AnyRefNode &LegRestNode = ..Seg.LegRest.LegRestFootRestJntNode;
+    AnyRefNode &FootRestNode = ..Seg.FootRest.FootRestLegRestJntNode;
+  };
+  
+  // Additional reactions to tie the backrest and legrest to ground
+  AnyReacForce BackRestGrounding = {
+    AnyKinLinear Lin = {
+      AnyRefFrame &Ground = ...GlobalRef;
+      AnyRefFrame &BackRest = ...Seg.BackRest;
+    };
+    AnyKinRotational Rot = {
+      AnyRefFrame &Ground = ...GlobalRef;
+      AnyRefFrame &BackRest = ...Seg.BackRest;
+      Type = RotAxesAngles;
+    };
+  };
+
+  AnyReacForce LegRestGrounding = {
+    AnyKinLinear Lin = {
+      AnyRefFrame &Ground = ...GlobalRef;
+      AnyRefFrame &LegRest = ...Seg.LegRest;
+    };
+    AnyKinRotational Rot = {
+      AnyRefFrame &Ground = ...GlobalRef;
+      AnyRefFrame &LegRest = ...Seg.LegRest;
+      Type = RotAxesAngles;
+    };
+  };
+  
+  // Arm rests  
+//  AnyFolder Right = {
+//    
+//    AnyRevoluteJoint BackArmRestJoint = {
+//      AnyRefNode &BackNode = ...Seg.BackRest.BackArmRestRightJntNode;
+//      AnyRefNode &ArmRestNode = ...Seg.Right.ArmRest.BackArmRestJntNode;
+//      Ref = 1;
+//    };        
+//    
+//    AnyKinRotational GlobalArmRestRotMeasure = {
+//      AnyRefFrame &Global = Main.Model.EnvironmentModel.GlobalRef;
+//      AnyRefNode &ArmRestNode = ...Seg.Right.ArmRest.BackArmRestJntNode;
+//      Type = RotVector;
+//    };        
+//    
+//    AnyKinEqSimpleDriver GlobalArmRestAngle = {
+//      AnyKinRotational &RotMeasure = .GlobalArmRestRotMeasure;
+//      MeasureOrganizer = {2};
+//      DriverPos = {90*pi/180};
+//      DriverVel = {0};
+//    };
+//            
+//  }; // Right
+//  
+//  AnyFolder Left = {
+//    
+//    AnyRevoluteJoint BackArmRestJoint = {
+//      AnyRefNode &BackNode = ...Seg.BackRest.BackArmRestLeftJntNode;
+//      AnyRefNode &ArmRestNode = ...Seg.Left.ArmRest.BackArmRestJntNode;
+//      Ref = 1;
+//    };        
+//    
+//    AnyKinRotational GlobalArmRestRotMeasure = {
+//      AnyRefFrame &Global = Main.Model.EnvironmentModel.GlobalRef;
+//      AnyRefNode &ArmRestNode = ...Seg.Left.ArmRest.BackArmRestJntNode;
+//      Type = RotVector;
+//    };        
+//    
+//    AnyKinEqSimpleDriver GlobalArmRestAngle = {
+//      AnyKinRotational &RotMeasure = .GlobalArmRestRotMeasure;
+//      MeasureOrganizer = {2};
+//      DriverPos = {90*pi/180};
+//      DriverVel = {0};
+//    };
+//  }; // Left    
+  
+}; // Joints
+
+
+AnyFolder Drivers={
+ 
+
+  AnyFolder &DrvPos = Main.DrvPos;
+  AnyFolder &DrvVel = Main.DrvVel;
+  
+  
+//--------------------------------------------------------
+  // Drivers - Chair adjustments
+  //--------------------------------------------------------
+  
+//  AnyKinEqSimpleDriver SeatBackRestDrv = {
+//    AnyRevoluteJoint &Jnt = ..Jnt.SeatBackRestJnt;
+//    DriverPos = {.DrvPos.SeatBackRestRotZPos};
+//    DriverVel = {.DrvVel.SeatBackRestRotZVel};
+//    Reaction.Type = {On};
+//  };
+  
+  AnyKinEqSimpleDriver GlobalBackRestDrv = {
+    AnyKinRotational rot = {
+      AnyRefFrame &Back = Main.Model.EnvironmentModel.Seg.BackRest;
+      Type = RotAxesAngles;
+    };
+    MeasureOrganizer = {0};
+    DriverPos = {.DrvPos.GlobalBackRestRotZPos*pi/180};
+    DriverVel = {.DrvVel.GlobalBackRestRotZVel*pi/180};
+    Reaction.Type = {Off};
+  };  
+  
+  AnyKinEqSimpleDriver SeatGlobalDrv = {
+    AnyKinLinear &LinMeasure = ..Jnt.SeatGlobalLinMeasure;
+    AnyKinRotational &RotMeasure = ..Jnt.SeatGlobalRotMeasure;
+    MeasureOrganizer = {1,5};
+    DriverPos = {.DrvPos.SeatGlobalLinYPos,(-90+.DrvPos.SeatGlobalRotZPos)*pi/180};
+    DriverVel = {.DrvVel.SeatGlobalLinYVel,.DrvVel.SeatGlobalRotZVel*pi/180};
+    Reaction.Type = {Off,Off};
+  };
+  
+  AnyKinEqSimpleDriver BackRestHeadRestDrv = {
+    AnyRevoluteJoint &Jnt = ..Jnt.BackRestHeadRestJnt;
+    DriverPos = {.DrvPos.BackRestHeadResRotZPos*pi/180};
+    DriverVel = {0};
+    Reaction.Type = {On};
+  };  
+  
+//  AnyKinEqSimpleDriver SeatLegRestDrv = {
+//    AnyRevoluteJoint &Jnt = ..Jnt.SeatLegRestJnt;
+//    DriverPos = {.DrvPos.SeatLegRestRotZPos};
+//    DriverVel = {.DrvVel.SeatLegRestRotZVel};
+//    Reaction.Type = {On};
+//  };
+
+  AnyKinEqSimpleDriver GlobalLegRestDrv = {
+    AnyKinRotational rot = {
+      AnyRefFrame &LegRest = Main.Model.EnvironmentModel.Seg.LegRest;
+      Type = RotAxesAngles;
+    };
+    MeasureOrganizer = {0};
+    DriverPos = {.DrvPos.GlobalLegRestRotZPos*pi/180};
+    DriverVel = {.DrvVel.GlobalLegRestRotZVel*pi/180};
+    Reaction.Type = {Off};
+  };
+  
+  AnyKinEqSimpleDriver LegRestFootRestDrv = {
+    AnyPrismaticJoint &Jnt = ..Jnt.LegRestFootRestJnt;
+    DriverPos = {.DrvPos.LegRestFootRestLinYPos};
+    DriverVel = {.DrvVel.LegRestFootRestLinYVel};
+    Reaction.Type = {On};
+  };
+};