[38ba34]: / Tools / ModelUtilities / WrappingSurfaces / SphereCylinder_template.any

Download this file

231 lines (201 with data), 8.2 kB

#define MULTIWRAPSURFS_CYLINDER 1
#define MULTIWRAPSURFS_ELIPSOID 2

#class_template MultiWrapSurfs_SINGLE (AnyFolder& REF, NUMBER, _TYPE = 1, DEBUG = 0) {
  
    #var AnyVar angle = .Angles[NUMBER-1]*pi/180;
    AnyVec3 Tangent_sRel = {.RadiusX*sin(angle), 0, .RadiusZ*cos(angle)};  
    
    AnyVec3 normal_vector = vnorm(Tangent_sRel)*{
      .RadiusZ*sin(angle)/sqrt( (.RadiusX *cos(angle))^2 +  (.RadiusZ*sin(angle))^2 ),
      0,
     .RadiusX*cos(angle)/sqrt( (.RadiusX *cos(angle))^2 +  (.RadiusZ*sin(angle))^2 ) 
    };
    AnyMat33 Tangent_ARel = RotMat({0,0,0},normal_vector,{0,1,0});
           
    REF = 
    {
      AnyRefNode Wrapping_##NUMBER = 
      {
      
      // TYPE == CYLINDER
      #if _TYPE == 1
      
//        sRel = (1-...RadiusHeight/vnorm(..Tangent_sRel)) *..Tangent_sRel +
//                ...WrapSurfLength*{0,0,-0.5}*..Tangent_ARel';
        AnyVec3 CylinderOffset = ...WrapSurfLength*{0, 0, -0.5};
        sRel =  ..Tangent_sRel - ..normal_vector + CylinderOffset*..Tangent_ARel';
        ARel = ..Tangent_ARel;
        AnySurfCylinder Surf =
        {
          AnyFloat Sizes = {vnorm(...Tangent_sRel),....RadiusHeight,  ....WrapSurfLength/2};
          Radius = min({Sizes[0], Sizes[1]});
          Length = Sizes[2]*2;
          #if DEBUG
          AnyDrawParamSurf drw=
          {
             RGB={0,0,1};
             Opacity = 0.3;
             #var Visible = .....Visibility[NUMBER-1];
          };
          #endif
        };
        AnyRefNode Center = {sRel = -.CylinderOffset; };  
      #endif
      
      
      // TYPE == ELIPSOID
      #if _TYPE == 2
        sRel =  ..Tangent_sRel - ..normal_vector;// (1-...RadiusHeight/vnorm(..Tangent_sRel)) *..Tangent_sRel +
        //        ...WrapSurfLength*{0,0,-0.5}*..Tangent_ARel';

        ARel = ..Tangent_ARel;
        AnySurfEllipsoid Surf =
        {
          AnyFloat Sizes = {vnorm(...Tangent_sRel),....RadiusHeight,  ....WrapSurfLength/2};
          Radius = Sizes;
          #if DEBUG
          AnyDrawParamSurf drw=
          {
             RGB={0,0,1};
             Opacity = 0.3;
             #var Visible = .....Visibility[NUMBER-1];
          };
          #endif
        };
        AnyRefNode Center = {};  
      #endif
      
      };
      
     
      
     #if DEBUG
      AnyRefNode Tangent##NUMBER = 
      {
        sRel = ..Tangent_sRel;
        ARel = ..Tangent_ARel;
        AnyDrawNode drw = {
          ScaleXYZ=0.03*....RadiusHeight*{1,1,1};
          Visible = Off;
          //#var Visible = ....Visibility[NUMBER-1];
        };
        AnyDrawLine Tangent = 
        {
          p0 = {0,0, 0.5*....RadiusZ};
          p1 = -{0,0, 0.5*....RadiusZ};
          GlobalCoord = Off;
          //#var Visible = ....Visibility[NUMBER-1];
          Line = 
          {
            Style = Line3DStyleFull;
            Thickness = 0.001;
            RGB = {0.0, 0.0, 0.0};
          };
        };
      };    
    #endif
    };
    
};





#class_template MultiWrapSurfs (
AnyRefFrame& BASE_FRAME,
NUMBER_OF_CYLINDERS = 10,
TYPE = 1,
DEBUG=1
) 
{
  #var AnyVar Radius = 0.05;
  /// Radius of the sphere (elipsoid) in the z directions
  #var AnyVar RadiusZ = Radius;
  
  /// Radius of the sphere (elipsoid) in the x directions
  #var AnyVar RadiusX = Radius;
  
  /// Radius of the sphere (elipsoid) in the y directions
  #var AnyVar RadiusHeight = Radius;
  
  AnyInt NumberOfCylinders = NUMBER_OF_CYLINDERS;
  
  #var AnyVar WrapSurfLength = 8*RadiusZ;
  
  #var AnyVector Angles = linspace(0,90,NUMBER_OF_CYLINDERS);
  #var AnySwitch Visibility = repmat(NUMBER_OF_CYLINDERS, On);
  
  AnyFolder ErrorCheck = {
     AnyInt check1 = assert( gteqfun( NumElemOf(.Visibility), NUMBER_OF_CYLINDERS), 
            "Visibility variables must have at least" + strval(NUMBER_OF_CYLINDERS) + " elements.");
     AnyInt check2 = assert( gteqfun( NumElemOf(.Angles), NUMBER_OF_CYLINDERS), 
            "Angles variables must have at least" + strval(NUMBER_OF_CYLINDERS) + " elements.");
  };
  BASE_FRAME = 
  {
     AnyDrawRefFrame drw = {  
       RGB = {1,0,0};
       ScaleXYZ = {0.1, 0.1, 0.1};
       Visible = DEBUG;
     };        
     AnySurfEllipsoid Sph =
     {
       Radius = {..RadiusX, ..RadiusHeight, ..RadiusZ}; //this parameter should be dependent 
       #if DEBUG
       AnyDrawParamSurf drw = { WireFrameOnOff = On;}; 
       #endif
       
     };
    
  };
      

  #if NUMBER_OF_CYLINDERS >= 1
  MultiWrapSurfs_SINGLE WrapSurf1(REF = .BASE_FRAME, NUMBER = 1, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif
  #if NUMBER_OF_CYLINDERS >= 2
  MultiWrapSurfs_SINGLE WrapSurf2(REF = .BASE_FRAME, NUMBER = 2, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif
  #if NUMBER_OF_CYLINDERS >= 3
  MultiWrapSurfs_SINGLE WrapSurf3(REF = .BASE_FRAME, NUMBER = 3, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 4
  MultiWrapSurfs_SINGLE WrapSurf4(REF = .BASE_FRAME, NUMBER = 4, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 5
  MultiWrapSurfs_SINGLE WrapSurf5(REF = .BASE_FRAME, NUMBER = 5, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 6
  MultiWrapSurfs_SINGLE WrapSurf6(REF = .BASE_FRAME, NUMBER = 6, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 7
  MultiWrapSurfs_SINGLE WrapSurf7(REF = .BASE_FRAME, NUMBER = 7, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 8
  MultiWrapSurfs_SINGLE WrapSurf8(REF = .BASE_FRAME, NUMBER = 8, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 9
  MultiWrapSurfs_SINGLE WrapSurf9(REF = .BASE_FRAME, NUMBER = 9, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif
  #if NUMBER_OF_CYLINDERS >= 10
  MultiWrapSurfs_SINGLE WrapSurf10(REF = .BASE_FRAME, NUMBER = 10, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 11
  MultiWrapSurfs_SINGLE WrapSurf11(REF = .BASE_FRAME, NUMBER = 11, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 12
  MultiWrapSurfs_SINGLE WrapSurf12(REF = .BASE_FRAME, NUMBER = 12, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 13
  MultiWrapSurfs_SINGLE WrapSurf13(REF = .BASE_FRAME, NUMBER = 13, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 14
  MultiWrapSurfs_SINGLE WrapSurf14(REF = .BASE_FRAME, NUMBER = 14, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 15
  MultiWrapSurfs_SINGLE WrapSurf15REF = .BASE_FRAME, NUMBER = 15, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 16
  MultiWrapSurfs_SINGLE WrapSurf16(REF = .BASE_FRAME, NUMBER = 16, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 17
  MultiWrapSurfs_SINGLE WrapSurf17(REF = .BASE_FRAME, NUMBER = 17, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 18
  MultiWrapSurfs_SINGLE WrapSurf18(REF = .BASE_FRAME, NUMBER = 18, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 19
  MultiWrapSurfs_SINGLE WrapSurf19(REF = .BASE_FRAME, NUMBER = 19, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 20
  MultiWrapSurfs_SINGLE WrapSurf20(REF = .BASE_FRAME, NUMBER = 20, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 21
  MultiWrapSurfs_SINGLE WrapSurf21(REF = .BASE_FRAME, NUMBER = 21, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 22
  MultiWrapSurfs_SINGLE WrapSurf22(REF = .BASE_FRAME, NUMBER = 22, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 23
  MultiWrapSurfs_SINGLE WrapSurf23(REF = .BASE_FRAME, NUMBER = 23, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 24
  MultiWrapSurfs_SINGLE WrapSurf24(REF = .BASE_FRAME, NUMBER = 24, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
  #if NUMBER_OF_CYLINDERS >= 25
  MultiWrapSurfs_SINGLE WrapSurf25(REF = .BASE_FRAME, NUMBER = 25, _TYPE=TYPE, DEBUG=DEBUG ) = {};
  #endif  
};