Switch to side-by-side view

--- a
+++ b/Tools/ModelUtilities/WrappingSurfaces/SphereCylinder_template.any
@@ -0,0 +1,231 @@
+
+#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  
+};
\ No newline at end of file