[38ba34]: / Body / AAUHuman / LegTLEM1 / HipNodes.any

Download this file

436 lines (332 with data), 20.5 kB

AnyRefNode HipJoint = {
  AnyVec3 sRel0 = .LegAttachmentNodes.sRel0+(.LegAttachmentNodes.ARel*.LegAttachmentNodes.StdPar.HipJoint')';
  // The Hip Joint is positioned based on the data in the cadaver data set 
  sRel = .Scale( sRel0 );
};


/// All muscle attachment nodes from the leg is placed inside
/// their own node (coordinate system). The reason for using
/// this procedure instead of putting the nodes directly on the 
/// pelvis segment, is that it makes it possible to have the
/// leg as a selfcontained block. The nodes in this folder is
/// used by the LegTLEM model for muscle attachements on pelvis.
AnyRefNode LegAttachmentNodes= {
  
  /// Folder with cadaver parameters for pelvis in the LegTLEM model 
  AnyFolder &StdPar = ..CadaverParameters.Pelvis;
  
  /// Rotation of the Pelvis Anatomical Frame relative to lab frame of the Cadaver dataset
  AnyMat33 CadaverPelvisAnatomicalFrame_ARel = RotMat(0.5*(StdPar.PsisIpsilateral+StdPar.PsisColateral),
                          0.5*(StdPar.AsisIpsilateral+StdPar.AsisColateral) ,
                          0.5*(StdPar.PsisIpsilateral+StdPar.PsisColateral)+..Sign*(StdPar.AsisIpsilateral-StdPar.AsisColateral) )*RotMat(-pi/2,x);
  /// Position of the Pelvis Anatomical Coordinate system relative to the lab  frame of the Cadaver dataset
  AnyVec3 CadaverPelvisAnatomicalFrame_sRel  = 0.5*(StdPar.AsisIpsilateral+StdPar.AsisColateral);
  /// Rotation of the Pelvis Anatomical Coordinate system relative to the Pelvis Segment coordinate system
  AnyMat33 PelvisAnatomicalFrame_ARel = ..Trunk.SegmentsLumbar.PelvisSeg.PelvisAnatomicalFrame.ARelUnscaled;
  /// Position of the Pelvis Anatomical Coordinate system relative to the Pelvis Segment coordinate system
  AnyVec3 PelvisAnatomicalFramePos =  ..Trunk.SegmentsLumbar.PelvisSeg.PelvisAnatomicalFrame.sRelUnscaled;
  
  
  /// The ARel rotates the LegTLEM dataset to match the generic pelvis in the AnyBody repository. 
  /// This is done by alligning the anatomically defined coordinate systems
  ARel = PelvisAnatomicalFrame_ARel *CadaverPelvisAnatomicalFrame_ARel';
  /// The sRel aligns the LegTLEM dataset to match the generic pelvis in the AnyBody repository. 
  /// This is done by alligning the anatomically defined coordinate systems 
  AnyVec3 sRel0 = PelvisAnatomicalFramePos - CadaverPelvisAnatomicalFrame_sRel*ARel';
  sRel = .Scale(sRel0);



AnyFunTransform3DLin Scale = {
  AnyFunTransform3DLin Transform_HipNode = {
    // The -24 degree rotation is added to allign the muscles origins from the LegTLEM data set
    // with the generic AnyBody pelvic bone. 
    ScaleMat = ..ARel;
    Offset = ..sRel0*..ARel;
  };
  
  PreTransforms = {
    &Transform_HipNode,
    &...Scaling.GeometricalScaling.PelvisSeg.ScaleFunction
  };
  ScaleMat = .ARel';
  Offset = -.sRel;
};


AnyVec3 HipOffset = {0.035, -0.117, .Sign*0.088};//{0.03, -0.10, 0.08*.Sign};

AnyVec3 v1 = {0.068+0.01,-0.1201+0.01,(0.056+0.015)*.Sign}-HipOffset;
//
AnyRefNode IliopubicEminenceEndNode = {
  sRel = .Scale(.v1+.HipOffset) - .Scale(.HipOffset); 
}; //Via point for Psoas Major, will first be used as end point.



//unscaled cylcenter
AnyRefNode P1 ={
  sRel=0.01*{ -1.27,	0.97,..Sign*-1.75};
  ARel=RotMat(sRel,.P2.sRel,{0.0,0.0,0.0})*RotMat(0.5*pi,y);
  //    AnyDrawRefFrame drw={RGB={1,0,0};};
};

//unscaled second point on cyl axis 
AnyRefNode P2 ={
  sRel= (0.1*{0.21,	-0.14	,..Sign*-0.79})+.P1.sRel;
  //    AnyDrawRefFrame drw={RGB={1,0,0};};
};  

//unscaled point on cyl surf
AnyRefNode P3={
  sRel = .P1.sRel+{0.0,0.04,..Sign*0.0}*.P1.ARel';//*RotMat(pi*0.5,x);
  //    AnyDrawRefFrame drw={RGB={1,0,0};};
};

//Scale cyl center
AnyRefNode P1_scaled ={
  sRel=.Scale(.P1.sRel);
  ARel= RotMat(sRel,.P2_scaled.sRel,{0.0,0.0,0.0})*RotMat(0.5*pi,y);
  //    AnyDrawRefFrame drw={RGB={1,0,1};};
};

//unscaled second point on cyl axis 
AnyRefNode P2_scaled ={
  sRel= .Scale(.P2.sRel);
  //    AnyDrawRefFrame drw={RGB={1,0,1};};
};  


//unscaled point on cyl surf
AnyRefNode P3_scaled={
  sRel =.Scale(.P3.sRel);
  //   AnyDrawRefFrame drw={RGB={1,0,1};};
};


AnyRefNode IliacusWrapSurf = {
  AnyFloat p = .Scale(.StdPar.IliacusWrapLandmarks);
  AnyFloat lengthscalefactor = 1.8;
  AnyFloat radiusscalefactor = 1;

  AnyInt Sign = ..Sign;
 
  AnyVar Z_rotation =0;

  #include "<ANYBODY_PATH_MODELUTILS>/WrappingSurfaces/WrappingCylinder5PointFit.any"
  cyl = {
    //AnyDrawParamSurf drw={RGB={1,0,0};};
  };
};

AnyRefNode pecent_ossis_pubis={
  sRel=.P1_scaled.sRel; 
  ARel=.P1_scaled.ARel;
  
  
  AnyRefNode Translate ={
    sRel=..Scale({0,0,-0.05});
    AnySurfCylinder cyl2 = { 
      Radius=((..sRel[0]-...P3_scaled.sRel[0])^2+(..sRel[1]-...P3_scaled.sRel[1])^2+(..sRel[2]-...P3_scaled.sRel[2])^2)^0.5;
      //This radius is a little more accurate but causes an error, to be fixed.
      //Radius= ...HipJointRightTD.pecent_ossis_pubis.cyl.Radius;
      //The lenght are extended by 25% too improve wrapping stability in extreme cases
      Length= 1.5*((..sRel[0]-...P2_scaled.sRel[0])^2+(..sRel[1]-...P2_scaled.sRel[1])^2+(..sRel[2]-...P2_scaled.sRel[2])^2)^0.5;
//      AnyDrawParamSurf drw={RGB={0,1,0};};
    };
    
//    AnyRefNode Q1 = {
//      AnyVar h = .cyl2.Length*0.22;
//      AnyVar theta = .Q2.theta;
//      sRel = ...Scale({.cyl2.Radius*cos(theta)*....Sign, .cyl2.Radius*sin(theta), h});
//      AnyDrawNode drw ={ScaleXYZ = 0.005*{1,1,1};};
//      AnyFloat rglob = ( sRel*.ARel'+.sRel )*..ARel'+..sRel;
//    };
//    
//    AnyRefNode Q2 = {
//      AnyVar h = .cyl2.Length;
//      AnyVar theta = pi*0.12;
//      sRel = ...Scale({.cyl2.Radius*cos(theta)*....Sign, .cyl2.Radius*sin(theta), h});
//      AnyDrawNode drw ={ScaleXYZ = 0.005*{1,1,1};};
//      AnyFloat rglob = ( sRel*.ARel'-.sRel )*..ARel'-..sRel;
//    };
//    
//    AnyRefNode Q3 = {
//      AnyVar h = .cyl2.Length*0.4;
//      AnyVar theta = pi*-0.03;
//      sRel = ...Scale({.cyl2.Radius*cos(theta)*....Sign, .cyl2.Radius*sin(theta), h});
//      AnyDrawNode drw ={ScaleXYZ = 0.005*{1,1,1};};
//      AnyFloat rglob = ( sRel*.ARel'+.sRel )*..ARel'+..sRel;
//    };
//    
//    AnyRefNode Q4 = {
//      AnyVar h = .cyl2.Length*0.37;
//      AnyVar theta = pi*0.15;
//      sRel = ...Scale({.cyl2.Radius*cos(theta)*....Sign, .cyl2.Radius*sin(theta), h});
//      AnyDrawNode drw ={ScaleXYZ = 0.005*{1,1,1};};
//      AnyFloat rglob = ( sRel*.ARel'+.sRel )*..ARel'+..sRel;
//    };
//    
//    AnyRefNode Q5 = {
//      AnyVar h = .cyl2.Length*0.34;
//      AnyVar theta = pi*0.32;
//      sRel = ...Scale({.cyl2.Radius*cos(theta)*....Sign, .cyl2.Radius*sin(theta), h});
//      AnyDrawNode drw ={ScaleXYZ = 0.005*{1,1,1};};
//      AnyFloat rglob = ( sRel*.ARel'+.sRel )*..ARel'+..sRel;
//    };
  };
  
  
};


// Origin points on the Pelvis

AnyRefNode AdductorBrevisProximal1Node = {sRel = .Scale( .StdPar.AdductorBrevisProximal1Node );};
AnyRefNode AdductorBrevisProximal2Node = {sRel = .Scale( .StdPar.AdductorBrevisProximal2Node );};
AnyRefNode AdductorBrevisMid1Node = {sRel = .Scale( .StdPar.AdductorBrevisMid1Node );};
AnyRefNode AdductorBrevisMid2Node = {sRel = .Scale( .StdPar.AdductorBrevisMid2Node );};
AnyRefNode AdductorBrevisDistal1Node = {sRel = .Scale( .StdPar.AdductorBrevisDistal1Node );};
AnyRefNode AdductorBrevisDistal2Node = {sRel = .Scale( .StdPar.AdductorBrevisDistal2Node );};

AnyRefNode AdductorLongus1Node = {sRel = .Scale( .StdPar.AdductorLongus1Node );};
AnyRefNode AdductorLongus2Node = {sRel = .Scale( .StdPar.AdductorLongus2Node );};
AnyRefNode AdductorLongus3Node = {sRel = .Scale( .StdPar.AdductorLongus3Node );};
AnyRefNode AdductorLongus4Node = {sRel = .Scale( .StdPar.AdductorLongus4Node );};
AnyRefNode AdductorLongus5Node = {sRel = .Scale( .StdPar.AdductorLongus5Node );};
AnyRefNode AdductorLongus6Node = {sRel = .Scale( .StdPar.AdductorLongus6Node );};

AnyRefNode AdductorMagnusDistal1Node = {sRel = .Scale( .StdPar.AdductorMagnusDistal1Node );};
AnyRefNode AdductorMagnusDistal2Node = {sRel = .Scale( .StdPar.AdductorMagnusDistal2Node );};
AnyRefNode AdductorMagnusDistal3Node = {sRel = .Scale( .StdPar.AdductorMagnusDistal3Node );};

AnyRefNode AdductorMagnusMid1Node = {sRel = .Scale( .StdPar.AdductorMagnusMid1Node );};
AnyRefNode AdductorMagnusMid2Node = {sRel = .Scale( .StdPar.AdductorMagnusMid2Node );};
AnyRefNode AdductorMagnusMid3Node = {sRel = .Scale( .StdPar.AdductorMagnusMid3Node );};
AnyRefNode AdductorMagnusMid4Node = {sRel = .Scale( .StdPar.AdductorMagnusMid4Node );};
AnyRefNode AdductorMagnusMid5Node = {sRel = .Scale( .StdPar.AdductorMagnusMid5Node );};
AnyRefNode AdductorMagnusMid6Node = {sRel = .Scale( .StdPar.AdductorMagnusMid6Node );};

AnyRefNode AdductorMagnusProximal1Node = {sRel = .Scale( .StdPar.AdductorMagnusProximal1Node );};
AnyRefNode AdductorMagnusProximal2Node = {sRel = .Scale( .StdPar.AdductorMagnusProximal2Node );};
AnyRefNode AdductorMagnusProximal3Node = {sRel = .Scale( .StdPar.AdductorMagnusProximal3Node );};
AnyRefNode AdductorMagnusProximal4Node = {sRel = .Scale( .StdPar.AdductorMagnusProximal4Node );};

AnyRefNode BicepsFemorisCaputLongum1Node = {sRel = .Scale( .StdPar.BicepsFemorisCaputLongum1Node );};

AnyRefNode GemellusInferior1Node = {sRel = .Scale( .StdPar.GemellusInferior1Node );};

AnyRefNode GemellusSuperior1Node = {sRel = .Scale( .StdPar.GemellusSuperior1Node );};

AnyRefNode GluteusMaximusSuperior1Node = {sRel = .Scale( .StdPar.GluteusMaximusSuperior1Node );};
AnyRefNode GluteusMaximusSuperior2Node = {sRel = .Scale( .StdPar.GluteusMaximusSuperior2Node );};
AnyRefNode GluteusMaximusSuperior3Node = {sRel = .Scale( .StdPar.GluteusMaximusSuperior3Node );};
AnyRefNode GluteusMaximusSuperior4Node = {sRel = .Scale( .StdPar.GluteusMaximusSuperior4Node );};
AnyRefNode GluteusMaximusSuperior5Node = {sRel = .Scale( .StdPar.GluteusMaximusSuperior5Node );};
AnyRefNode GluteusMaximusSuperior6Node = {sRel = .Scale( .StdPar.GluteusMaximusSuperior6Node );};

AnyRefNode GluteusMaximusInferior1Node = {sRel = .Scale( .StdPar.GluteusMaximusInferior1Node );};
AnyRefNode GluteusMaximusInferior2Node = {sRel = .Scale( .StdPar.GluteusMaximusInferior2Node );};
AnyRefNode GluteusMaximusInferior3Node = {sRel = .Scale( .StdPar.GluteusMaximusInferior3Node );};
AnyRefNode GluteusMaximusInferior4Node = {sRel = .Scale( .StdPar.GluteusMaximusInferior4Node );};
AnyRefNode GluteusMaximusInferior5Node = {sRel = .Scale( .StdPar.GluteusMaximusInferior5Node );};
AnyRefNode GluteusMaximusInferior6Node = {sRel = .Scale( .StdPar.GluteusMaximusInferior6Node );};

AnyRefNode GluteusMediusAnterior1Node = {sRel = .Scale( .StdPar.GluteusMediusAnterior1Node );};
AnyRefNode GluteusMediusAnterior2Node = {sRel = .Scale( .StdPar.GluteusMediusAnterior2Node );};
AnyRefNode GluteusMediusAnterior3Node = {sRel = .Scale( .StdPar.GluteusMediusAnterior3Node );};
AnyRefNode GluteusMediusAnterior4Node = {sRel = .Scale( .StdPar.GluteusMediusAnterior4Node );};
AnyRefNode GluteusMediusAnterior5Node = {sRel = .Scale( .StdPar.GluteusMediusAnterior5Node );};
AnyRefNode GluteusMediusAnterior6Node = {sRel = .Scale( .StdPar.GluteusMediusAnterior6Node );};

AnyRefNode GluteusMediusPosterior1Node = {sRel = .Scale( .StdPar.GluteusMediusPosterior1Node );};
AnyRefNode GluteusMediusPosterior2Node = {sRel = .Scale( .StdPar.GluteusMediusPosterior2Node );};
AnyRefNode GluteusMediusPosterior3Node = {sRel = .Scale( .StdPar.GluteusMediusPosterior3Node );};
AnyRefNode GluteusMediusPosterior4Node = {sRel = .Scale( .StdPar.GluteusMediusPosterior4Node );};
AnyRefNode GluteusMediusPosterior5Node = {sRel = .Scale( .StdPar.GluteusMediusPosterior5Node );};
AnyRefNode GluteusMediusPosterior6Node = {sRel =.Scale( .StdPar.GluteusMediusPosterior6Node );};


AnyRefNode GluteusMinimusAnterior1Node = {sRel = .Scale( .StdPar.GluteusMinimusAnterior1Node );};

AnyRefNode GluteusMinimusMid1Node = {sRel = .Scale( .StdPar.GluteusMinimusMid1Node );};

AnyRefNode GluteusMinimusPosterior1Node = {sRel = .Scale( .StdPar.GluteusMinimusPosterior1Node );};

AnyRefNode Gracilis1Node = {sRel = .Scale( .StdPar.Gracilis1Node );};
AnyRefNode Gracilis2Node = {sRel = .Scale( .StdPar.Gracilis2Node );};

AnyRefNode IliacusLateralis1Node = {sRel = .Scale( .StdPar.IliacusLateralis1Node );};
AnyRefNode IliacusLateralis2Node = {sRel = .Scale( .StdPar.IliacusLateralis2Node );};
AnyRefNode IliacusLateralis3Node = {sRel = .Scale( .StdPar.IliacusLateralis3Node );};
AnyRefNode IliacusLateralisViaNode1 = {sRel = .Scale( .StdPar.IliacusLateralisViaNode1 );};

AnyRefNode IliacusMid1Node = {sRel = .Scale( .StdPar.IliacusMid1Node );};
AnyRefNode IliacusMid2Node = {sRel = .Scale( .StdPar.IliacusMid2Node );};
AnyRefNode IliacusMid3Node = {sRel = .Scale( .StdPar.IliacusMid3Node );};
AnyRefNode IliacusMidViaNode1 = {sRel = .Scale( .StdPar.IliacusMidViaNode1 );};

AnyRefNode IliacusMedialis1Node = {sRel =.Scale( .StdPar.IliacusMedialis1Node );};
AnyRefNode IliacusMedialis2Node = {sRel = .Scale( .StdPar.IliacusMedialis2Node );};
AnyRefNode IliacusMedialis3Node = {sRel = .Scale( .StdPar.IliacusMedialis3Node );}; 
AnyRefNode IliacusMedialisViaNode1 = {sRel = .Scale( .StdPar.IliacusMedialisViaNode1 );};

AnyRefNode ObturatorExternusInferior1Node = {sRel = .Scale( .StdPar.ObturatorExternusInferior1Node );};
AnyRefNode ObturatorExternusInferior2Node = {sRel =.Scale( .StdPar.ObturatorExternusInferior2Node );};

AnyRefNode ObturatorExternusSuperior1Node = {sRel = .Scale( .StdPar.ObturatorExternusSuperior1Node );};
AnyRefNode ObturatorExternusSuperior2Node = {sRel = .Scale( .StdPar.ObturatorExternusSuperior2Node );};
AnyRefNode ObturatorExternusSuperior3Node = {sRel = .Scale( .StdPar.ObturatorExternusSuperior3Node );};
AnyRefNode ObturatorExternusSuperiorViaNode1 = {sRel = .Scale( .StdPar.ObturatorExternusSuperiorViaNode1 );};

AnyRefNode ObturatorInternus1Node = {sRel = .Scale( .StdPar.ObturatorInternus1Node );};
AnyRefNode ObturatorInternus2Node = {sRel = .Scale( .StdPar.ObturatorInternus2Node );};
AnyRefNode ObturatorInternus3Node = {sRel = .Scale( .StdPar.ObturatorInternus3Node );};
AnyRefNode ObturatorInternusViaNode1 = {sRel = .Scale( .StdPar.ObturatorInternusViaNode1 );};

AnyRefNode Pectineus1Node = {sRel = .Scale( .StdPar.Pectineus1Node );};
AnyRefNode Pectineus2Node = {sRel = .Scale( .StdPar.Pectineus2Node );};
AnyRefNode Pectineus3Node = {sRel = .Scale( .StdPar.Pectineus3Node );};
AnyRefNode Pectineus4Node = {sRel = .Scale( .StdPar.Pectineus4Node );};

AnyRefNode Piriformis1Node = {sRel = .Scale( .StdPar.Piriformis1Node );};

AnyRefNode PsoasMinor1Node = {sRel = .Scale( .StdPar.PsoasMinor1Node );};
AnyRefNode PsoasMinorViaNode1 = {sRel = .Scale( .StdPar.PsoasMinorViaNode1 );};
// The PsoasMinor does not have a viapoint according to the Klein Horsman dataset. However, since it uses the
// Psoas Major insertion point (see comments in Thigh segment) it needs this via point in order to wrap around
// the cylinder in the right direction. 

AnyRefNode PsoasMajor1Node = {sRel = .Scale( .StdPar.PsoasMajor1Node );};
AnyRefNode PsoasMajor2Node = {sRel = .Scale( .StdPar.PsoasMajor2Node );};
AnyRefNode PsoasMajor3Node = {sRel = .Scale( .StdPar.PsoasMajor3Node );};
AnyRefNode PsoasMajorViaNode1 = {sRel = .Scale( .StdPar.PsoasMajorViaNode1 );};


AnyRefNode QuadratusFemoris1Node	= {sRel = .Scale( .StdPar.QuadratusFemoris1Node );};
AnyRefNode QuadratusFemoris2Node	= {sRel = .Scale( .StdPar.QuadratusFemoris2Node );};
AnyRefNode QuadratusFemoris3Node	= {sRel = .Scale( .StdPar.QuadratusFemoris3Node );};
AnyRefNode QuadratusFemoris4Node	= {sRel = .Scale( .StdPar.QuadratusFemoris4Node );};

AnyRefNode RectusFemoris1Node = {sRel = .Scale( .StdPar.RectusFemoris1Node );};
AnyRefNode RectusFemoris2Node = {sRel = .Scale( .StdPar.RectusFemoris2Node );};

AnyRefNode SartoriusProximal1Node = {sRel = .Scale( .StdPar.SartoriusProximal1Node );};
AnyRefNode SartoriusDistal1Node = {sRel = .Scale( .StdPar.SartoriusDistal1Node );};

AnyRefNode Semimembranosus1Node = {sRel = .Scale( .StdPar.Semimembranosus1Node );};

AnyRefNode Semitendinosus1Node = {sRel = .Scale( .StdPar.Semitendinosus1Node );};

AnyRefNode TensorFasciaeLatae1Node = {sRel =.Scale( .StdPar.TensorFasciaeLatae1Node );};
AnyRefNode TensorFasciaeLatae2Node = {sRel = .Scale( .StdPar.TensorFasciaeLatae2Node );};


//Ligament origin nodes from Klein-Horseman
AnyRefNode IlioFemAntOrig = {sRel = .Scale( .StdPar.IlioFemAntOrig );};
AnyRefNode IlioFemLatOrig = {sRel = .Scale( .StdPar.IlioFemLatOrig );}; 
AnyRefNode PuboFemOrig = {sRel = .Scale( .StdPar.PuboFemOrig );}; //updated coordinates
AnyRefNode IschioFemOrig = {sRel = .Scale( .StdPar.IschioFemOrig );};
//end ligament origin nodes




#ifdef GLUTEUS_MAX_WRAPPING_BETA


//Added SC 04/05/2012 (for gluteus wrapping)

//  Unscaled original cylinder for matrix p

//  AnyRefNode GluteusCylSuperior = { 
//    sRel = .Scale({-0.05, -0.06, ..Sign*-0.10}); 
//    AnyDrawRefFrame drws = {};
//    ARel = RotMat(..Sign*-25*pi/180,x)*RotMat(..Sign*20*pi/180,y);
//        
//    AnySurfCylinder cyl = {
//      Radius = 0.065;//ScaledRadius[1];
//      Length = ...Sign*0.3; 
//      AnyDrawParamSurf drv = {
//        Opacity = 0.1;
//      }; 
//    };
//  }; 
  
//  AnyRefNode Q1 = { sRel = .Scale({-0.05, -0.06, 0.10}); AnyDrawRefFrame drws = {}; };
//  AnyRefNode Q2 = { sRel = .Q1.sRel + {0, 0, -0.3}*.GluteusCylSuperior.ARel'; AnyDrawRefFrame drws = {}; };
//  AnyRefNode Q3 = { sRel = .Q1.sRel + {0, 0.065, -0.3}*.GluteusCylSuperior.ARel'; AnyDrawRefFrame drws = {}; };
//  AnyRefNode Q4 = { sRel = .Q1.sRel + {0.065, 0, -0.3}*.GluteusCylSuperior.ARel'; AnyDrawRefFrame drws = {}; };
//  AnyRefNode Q5 = { sRel = .Q1.sRel + {0, -0.065, -0.15}*.GluteusCylSuperior.ARel'; AnyDrawRefFrame drws = {}; };
  
  
  
  AnyRefNode GluteusCylSuperior = {
    
//    AnyMatrix p = {{-0.0491935, -0.05903219, ..Sign*-0.09090909},
//                  {0.05341255, 0.06010718, ..Sign*0.1645861},
//                  {0.05341255, 0.1190172, ..Sign*0.1371159},
//                  {0.1144926, 0.05071183, ..Sign*0.1444377},
//                  {0.002109526, -0.05837251, ..Sign*0.06430871}};
    AnyMatrix p = .Scale(.StdPar.GluteusSuperiorWrapLandmarks);
    AnyFloat lengthscalefactor = 1;
    AnyFloat radiusscalefactor = 1;

  
    AnyVar Z_rotation =0;

    #include "<ANYBODY_PATH_MODELUTILS>/WrappingSurfaces/WrappingCylinder5PointFit.any"
    cyl = {
      //AnyDrawParamSurf draw={Opacity = 0.1;};
    };
  };
  
  
  
  
//  Unscaled original cylinder for matrix p

//    AnyRefNode GluteusCylInferior = { 
//    sRel = .Scale({-0.01, -0.06, ..Sign*-0.10}); 
//    AnyDrawRefFrame drws = {};
//    ARel = RotMat(..Sign*-20*pi/180,x);
//        
//    AnySurfCylinder cyl = {
//      Radius = 0.065;//ScaledRadius[1];
//      Length = ...Sign*0.3; 
//      AnyDrawParamSurf drv = {
//        Opacity = 0.1;
//      }; 
//    };
//  }; 
  
//  AnyRefNode Q1 = { sRel = .Scale({-0.01, -0.06, 0.10}); AnyDrawRefFrame drws = {}; };
//  AnyRefNode Q2 = { sRel = .Q1.sRel + {0, 0, -0.3}*.GluteusCylInferior.ARel'; AnyDrawRefFrame drws = {}; };
//  AnyRefNode Q3 = { sRel = .Q1.sRel + {0, 0.065, -0.3}*.GluteusCylInferior.ARel'; AnyDrawRefFrame drws = {}; };
//  AnyRefNode Q4 = { sRel = .Q1.sRel + {0.065, 0, -0.3}*.GluteusCylInferior.ARel'; AnyDrawRefFrame drws = {}; };
//  AnyRefNode Q5 = { sRel = .Q1.sRel + {0, -0.065, -0.15}*.GluteusCylInferior.ARel'; AnyDrawRefFrame drws = {}; };
  
  
  
  AnyRefNode GluteusCylInferior = {
    
//    AnyMatrix p = {{-0.009838699, -0.05903219, ..Sign*-0.09090909},
//                  {-0.009838699, 0.04357385, ..Sign*0.1909987},
//                  {-0.009838699, 0.1046539, ..Sign*0.1687674},
//                  {0.0551613, 0.04357385, ..Sign*0.1909987},
//                  {-0.009838699, -0.06880919, ..Sign*0.07227611}};
    AnyMatrix p = .Scale(.StdPar.GluteusInferiorWrapLandmarks);
    AnyFloat lengthscalefactor = 1;
    AnyFloat radiusscalefactor = 1;
   
  
    AnyVar Z_rotation =0;

    #include "<ANYBODY_PATH_MODELUTILS>/WrappingSurfaces/WrappingCylinder5PointFit.any"
    cyl = {
      //AnyDrawParamSurf draw={Opacity = 0.1;};
    };
  };

  #endif

}; // End HipLegData