--- 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