Download this file

396 lines (337 with data), 12.2 kB

AnyFolder Segs = {
  AnySeg Femur = {
    Mass = 0;
    Jii = {0, 0, 0};
    r0 = {0, 0.5, 0};
    
    AnyDrawSurf DrwFemur = {
      FileName = "..\Input\STL_New\Femur.stl" ;
      RGB = Main.DrawSettings.Colors.AnyBodyPaleYellow;
      Opacity = 0.5;
      ScaleXYZ = 0.001*{1, 1, 1};
    };
    
    AnyDrawSurf DrwFemoralComponent = {
      FileName = "..\Input\STL_New\Femoral Component_scaled.stl";
      ScaleXYZ = {1, 1, 1};
      RGB = {192,192,192}/255.0;
      Opacity = 0.5;
    };       
    
    AnyRefNode PrincipalAxesNode = {
      sRel =  0.001 * {18.829176, 182.386520, -12.663239};
      ARel = {{ 0.132059, 0.990246, -0.044418 },
        { 0.186276, -0.068804, -0.980085},
        {-0.973582, 0.121155, -0.193546 }}' * RotMat(-pi/2, y);
      
      AnyRefNode OffsetNode = {
        ARel = RotMat(pi/2, z);
        sRel = {0.05, 0, 0};    
        
        AnyDrawSurf DrwSTL = {
          FileName = PATH_STL_UNIT_BOX ;
          RGB = {0.65, 0.65, 0.65};
          ScaleXYZ = {0.045, 0.02, 0.04};
          Opacity = 0.5;
        };
      };
    };      
    
    AnyFolder Femoral_Head_Points_Picked = {
      AnyInputXML XMLObject = {
        FileName = "..\Input\STL_New\Femur_picked_points_femoral_head.pp";    
      };
      AnyFloat xptr0 = Obj2Num(ObjSelect("XMLObject.Contents.PickedPoints.point*.active", "==1", ".x_*"));
      AnyFloat yptr0 = Obj2Num(ObjSelect("XMLObject.Contents.PickedPoints.point*.active", "==1", ".y_*"));
      AnyFloat zptr0 = Obj2Num(ObjSelect("XMLObject.Contents.PickedPoints.point*.active", "==1", ".z_*"));
      AnyString PointNames = Obj2Str(ObjSelect("XMLObject.Contents.PickedPoints.point*.active", "==1", ".name")) ;      
      AnyFloat Points_Original = {xptr0',yptr0',zptr0'}'; 
      AnyFloat Points_Scaled = 0.001 * Points_Original ;
    };
    
    AnySurfEllipsoidFit HipJointFittingNode = {
      Points = .Femoral_Head_Points_Picked.Points_Scaled ;
      Spherical = On;
      AnyDrawParamSurf Drw = {
        Visible=Off;
        RGB = {0, 1, 0};
        Opacity = 0.5;
      };
    };        
    
    AnyRefNode LateralEpicondyle = { 
      sRel = 0.001 * {10.7594, 1.21095, -44.6209};
      //AnyDrawNode Drw = { RGB = {1, 0, 0}; ScaleXYZ = 0.0025*{1, 1, 1}; };
    };
    
    AnyRefNode MedialEpicondyle = {
      sRel = 0.001 * {10.7594, 1.21095, 43.7668};
      //AnyDrawNode Drw = { RGB = {1, 0, 0}; ScaleXYZ = 0.0025*{1, 1, 1}; };        
    };        
    
    AnyRefNode KJC_A = {
      sRel = {-0.004858753, -0.002610163, -0.005625471};
      //AnyDrawNode Drw = { RGB = {1, 0, 0}; ScaleXYZ = 0.0025*{1, 1, 1}; };
    };
    
    AnyRefNode KJC_E = {
      sRel = {0.00439332, -0.008256942, -0.0006075123};
      //AnyDrawNode Drw = { RGB = {1, 0, 0}; ScaleXYZ = 0.0025*{1, 1, 1}; };
    };
    
    AnyRefNode KJC_P = {
      sRel = {0.01, -0.01, -2.669848e-18};
      //AnyDrawNode Drw = { RGB = {1, 0, 0}; ScaleXYZ = 0.0025*{1, 1, 1}; };
    };
    
    AnyRefNode HipJointRef = {
      sRel = .HipJointFittingNode.sRel ;
    };
    
    AnyRefNode& KneeJoint = KneeJointNew;
    
    AnyRefNode KneeJointNew = {
      sRel = (.LateralEpicondyle.sRel + .MedialEpicondyle.sRel)*0.5 ;
      ARel = RotMat( sRel, .LateralEpicondyle.sRel, .HipJointRef.sRel ) * RotMat(pi/2, y);
    };      
    
    AnyRefNode PatellaJoint = {
      sRel = {(.KJC_E.sRel[0] + .KJC_A.sRel[0])/2, .KJC_A.sRel[1], (.KJC_E.sRel[2] + .KJC_A.sRel[2])/2}  ;
      ARel = .KneeJointNew.ARel ;
    };
    
    AnyRefNode HipJoint = {
      sRel = .HipJointRef.sRel ;
      ARel = .KneeJointNew.ARel ;
      
      AnySurfCylinder Cyl = {
        Radius = 0.025;
        Length = 0.05;
        CapRatio = 0;
        AnyDrawParamSurf Drw  ={
          Visible=Off;
          RGB = {0.65, 0.65, 0.65};
          Opacity = 0.3;
        };
      };          
    };
    
    AnyRefNode AnatomicalFrame = {
      sRel = .KJC_E.sRel;
      ARel = RotMat(sRel, .HipJointRef.sRel, .LateralEpicondyle.sRel) *RotMat(pi/2, y)*RotMat(pi/2, z);
    };
    
    AnyVar Length = vnorm(KneeJointNew.sRel - HipJoint.sRel);    
  };//Femur  
  
  AnySeg FemurMass = {
    r0 = .Femur.r0 + .Femur.PrincipalAxesNode.sRel * .Femur.Axes0';
    Axes0 = .Femur.Axes0 * .Femur.PrincipalAxesNode.ARel;
    
    AnyVar Cyl_Radius = 0.055;
    AnyVar Cyl_Height = 0.475;    
    
    Mass = BODY_MASS * FEMUR_MASS_RATIO;
    Jii = Mass*{(3*pow(Cyl_Radius,2)+pow(Cyl_Height,2))/12,
      (3*pow(Cyl_Radius,2)+pow(Cyl_Height,2))/12, 
      pow(Cyl_Radius,2)/2};
    
    AnyRefNode CylNode = {
      sRel = {0, 0, -.Cyl_Height/2};
      AnySurfCylinder Surf = 
      {
        Radius = ..Cyl_Radius;
        Length = ..Cyl_Height;
        CapRatio = 0.0;
        AnyDrawParamSurf DrwSurf = 
        {
          Visible=Off;
          RGB = {1, 1, 0};
          Opacity = 0.5;
        };
      };
    };      
  };//FemurMass
  
  AnySeg FemurHipDummy = {
    Mass = 0;
    Jii = {0, 0, 0};
    r0 = .Femur.r0 + .Femur.HipJoint.sRel * .Femur.Axes0';
    Axes0 = .Femur.Axes0 * .Femur.HipJoint.ARel;
    
    AnyDrawSurf DrwSTL = {
      FileName = PATH_STL_UNIT_BOX ;
      RGB = {0.65, 0.65, 0.65};
      ScaleXYZ = 0.05*{1, 1, 1};
      Opacity = 0.5;
    };    
    
    AnyDrawRefFrame Drw = {
      RGB = {0.65, 0.65, 0.65};
      ScaleXYZ = 0.05 * {1, 1, 1};
    };  
  };//FemurHipDummy
  
  AnySeg Tibia = {
    Mass = 0;
    Jii = {0, 0, 0};
    
    r0 = .Femur.r0 + {5/1000, -41/1000, 0} * .Femur.Axes0';
    Axes0 = .Femur.Axes0;    
    
    AnyDrawSurf DrwTibia = {
      FileName = "..\Input\STL_New\Tibia.stl";
      RGB = Main.DrawSettings.Colors.AnyBodyPaleYellow;
      Opacity = 0.5;
      ScaleXYZ = 0.001*{1, 1, 1};
    };
    AnyDrawSurf DrwFibula = {
      FileName = "..\Input\STL_New\Fibula.stl";
      RGB = Main.DrawSettings.Colors.AnyBodyPaleYellow;
      Opacity = 0.5;
      ScaleXYZ = 0.001*{1, 1, 1};
    };         
    
    AnyDrawSurf DrwTibialInsert = {
      FileName = "..\Input\STL_New\Tibial Insert_scaled_remeshed.stl";
      ScaleXYZ = {1, 1, 1};
      RGB = {192,192,192}/255.0;
      Opacity = 0.5;
    };    
    
    AnyDrawSurf TibialTray = {
      FileName = "..\Input\STL_New\Tibial Tray_scaled_remeshed.stl";
      ScaleXYZ = 1*{1, 1, 1};
      RGB = 0.2 *{1, 1, 1};
      Opacity = 1;          
    };    
    
    AnyRefNode KneeJointNew = {
      sRel = ..Femur.KneeJointNew.sRel - {5/1000, -41/1000, 0} ;
      ARel = ..Femur.KneeJointNew.ARel ;
    };  
    
    AnyRefNode PrincipalAxesNode = {
      sRel =  {-0.009742, -0.154347, -0.002264};
      ARel = {
        { 0.034021, 0.997491, 0.062081 },
        { -0.490013, 0.070787, -0.868836 },
        { -0.871051, -0.000862, 0.491192 }
      }' * RotMat(-pi/2, y);     
    };
    
    AnyRefNode& KneeJoint = KneeJointNew;
    
    AnyFolder Ankle_Points_Picked = {
      AnyInputXML XMLObject = {
        FileName = "..\Input\STL_New\Tibia_picked_points_ankle.pp";    
      };
      AnyFloat xptr0 = Obj2Num(ObjSelect("XMLObject.Contents.PickedPoints.point*.active", "==1", ".x_*"));
      AnyFloat yptr0 = Obj2Num(ObjSelect("XMLObject.Contents.PickedPoints.point*.active", "==1", ".y_*"));
      AnyFloat zptr0 = Obj2Num(ObjSelect("XMLObject.Contents.PickedPoints.point*.active", "==1", ".z_*"));
      AnyString PointNames = Obj2Str(ObjSelect("XMLObject.Contents.PickedPoints.point*.active", "==1", ".name")) ;      
      AnyFloat Points_Original = {xptr0',yptr0',zptr0'}'; 
      AnyFloat Points_Scaled = 0.001 * Points_Original ;
    };
    
    AnySurfEllipsoidFit AnkleJointFittingNode = {
      Points = .Ankle_Points_Picked.Points_Scaled ;
      Spherical = On;
      AnyDrawParamSurf Drw = {
        Visible = Off;
        RGB = {0, 1, 0};
        Opacity = 0.5;
      };
    };      
    
    AnyRefNode AnkleJoint = {
      sRel = .AnkleJointFittingNode.sRel ;
      ARel = .KneeJointNew.ARel;
      AnyDrawRefFrame Drw = {
        RGB = Main.DrawSettings.Colors.AnyBodyPaleYellow;
        ScaleXYZ = 0.15 * {1, 1, 1};
      }; 
    };  
    
    AnyRefNode AnatomicalFrame = {
      sRel = ..Femur.AnatomicalFrame.sRel;
      ARel = ..Femur.AnatomicalFrame.ARel;     
    };
    
    AnyVar Length = vnorm(KneeJointNew.sRel - AnkleJoint.sRel);
  }; //Tibia
  
  AnySeg TibiaMass = {
    r0 = .Tibia.r0 + .Tibia.PrincipalAxesNode.sRel * .Tibia.Axes0';
    Axes0 = .Tibia.Axes0 * .Tibia.PrincipalAxesNode.ARel;
    
    AnyVar Cyl_Radius = 0.05;
    AnyVar Cyl_Height = 0.4;    
    
    Mass = BODY_MASS * TIBIA_MASS_RATIO;
    Jii = Mass*{(3*pow(Cyl_Radius,2)+pow(Cyl_Height,2))/12,
      (3*pow(Cyl_Radius,2)+pow(Cyl_Height,2))/12, 
      pow(Cyl_Radius,2)/2};
    
    AnyRefNode CylNode = {
      sRel = {0, 0, -.Cyl_Height/2};
      AnySurfCylinder Surf = {
        Radius = ..Cyl_Radius;
        Length = ..Cyl_Height;
        CapRatio = 0.0;
        AnyDrawParamSurf DrwSurf = {
          Visible = Off;
          RGB = {1, 1, 0};
          Opacity = 0.5;
        };
      };
    };    
  };//TibiaMass
  
  AnySeg TibiaAnkleConnect1 = {
    Mass = 0;
    Jii = {0, 0, 0};
    r0 = .Tibia.r0 + .Tibia.AnkleJoint.sRel * .Tibia.Axes0';
    Axes0 = .Tibia.Axes0 * .Tibia.AnkleJoint.ARel; 
    AnyVar len_x = 0.1;
    AnyVar len_y = 0.01;
    AnyVar len_z = 0.05;
    
    AnyDrawRefFrame Drw = {
      RGB = .DrwSTL.RGB;
      ScaleXYZ = 0.05 * {1, 1, 1};
    };    
    AnyDrawSurf DrwSTL = {
      FileName = PATH_STL_UNIT_BOX ;
      RGB = {1, 0.65, 0.65};
      ScaleXYZ = {.len_x, .len_y, .len_z};
      Opacity = 0.5;
    };    
  };//TibiaAnkleConnect1
  
  AnySeg TibiaAnkleConnect2 = {
    Mass = 0;
    Jii = {0, 0, 0};
    r0 = .Tibia.r0 + .Tibia.AnkleJoint.sRel * .Tibia.Axes0';
    Axes0 = .Tibia.Axes0 * .Tibia.AnkleJoint.ARel; 
    AnyVar len_x = sqrt(2)/2/10;
    AnyVar len_y = 0.01;
    AnyVar len_z = sqrt(2)/2/10;    
    
    AnyDrawRefFrame Drw = {
      RGB = .DrwSurf.RGB;
      ScaleXYZ = 0.05 * {1, 1, 1};
    };    
    AnyDrawSurf DrwSurf = {
      FileName = PATH_STL_UNIT_BOX ;
      RGB = {0.65, 0.65, 1};
      ScaleXYZ = {.len_x, .len_y, .len_z};
      Opacity = 0.2;
    };    
  };//TibiaAnkleConnect2     
  
  AnySeg TibiaAnkleDummy = {
    Mass = 0;
    Jii = {0, 0, 0};
    r0 = .Tibia.r0 + .Tibia.AnkleJoint.sRel * .Tibia.Axes0';
    Axes0 = .Tibia.Axes0 * .Tibia.AnkleJoint.ARel; 
    AnyVar len_x = 0.05;
    AnyVar len_y = 0.01;
    AnyVar len_z = 0.1;    
    
    AnyDrawRefFrame Drw = {
      RGB = {0.65, 0.65, 0.65};
      ScaleXYZ = 0.05 * {1, 1, 1};
    };    
    AnyDrawSurf DrwSTL = {
      FileName = PATH_STL_UNIT_BOX ;
      RGB = {0.65, 0.65, 0.65};
      ScaleXYZ = {.len_x, .len_y, .len_z};
      Opacity = 0.5;
    };      
  };//TibiaAnkleDummy  
  
  AnySeg Patella = {
    Mass = 0;
    Jii = {0, 0, 0}; 
    r0 = .Femur.r0 + {-0.038, 0, -0.00275} * .Femur.Axes0';
    Axes0 = .Femur.Axes0;
    
    AnyDrawSurf DrwPatella = {
      FileName = "..\Input\STL_New\Patella.stl";
      ScaleXYZ = 0.001*{1, 1, 1};
      RGB = 	Main.DrawSettings.Colors.AnyBodyPaleYellow;
      Opacity = 0.5;
    };    
    
    AnyDrawSurf DrwPatellaButton = {
      FileName = "..\Input\STL_New\Patellar Button_scaled_remeshed.stl";
      ScaleXYZ = 1.0*{1, 1, 1};
      RGB = {192,192,192}/255.0;
      Opacity = 0.5;
    };      
    
    AnyRefNode PatellaJoint = {
      sRel = ..Femur.PatellaJoint.sRel - {-0.038, 0, -0.00275};
      ARel = ..Femur.PatellaJoint.ARel;     
    }; 
    
    AnyRefNode QTNode = {
      sRel = {-0.001798878, 0.02028166, 0.0007074652};
      AnyDrawNode Drw = {
        RGB = {1, 0, 0};
        Opacity = 0.5;
        ScaleXYZ = 0.0025*{1, 1, 1};
      };
    };
    
    AnyRefNode AnatomicalFrame = {
      sRel = ..Femur.AnatomicalFrame.sRel ; 
      ARel = ..Femur.AnatomicalFrame.ARel ;
    };  
  };//Patella 
};