a b/Tools/ModelUtilities/WrappingSurfaces/SphereCylinder_template.any
1
2
#define MULTIWRAPSURFS_CYLINDER 1
3
#define MULTIWRAPSURFS_ELIPSOID 2
4
5
#class_template MultiWrapSurfs_SINGLE (AnyFolder& REF, NUMBER, _TYPE = 1, DEBUG = 0) {
6
  
7
    #var AnyVar angle = .Angles[NUMBER-1]*pi/180;
8
    AnyVec3 Tangent_sRel = {.RadiusX*sin(angle), 0, .RadiusZ*cos(angle)};  
9
    
10
    AnyVec3 normal_vector = vnorm(Tangent_sRel)*{
11
      .RadiusZ*sin(angle)/sqrt( (.RadiusX *cos(angle))^2 +  (.RadiusZ*sin(angle))^2 ),
12
      0,
13
     .RadiusX*cos(angle)/sqrt( (.RadiusX *cos(angle))^2 +  (.RadiusZ*sin(angle))^2 ) 
14
    };
15
    AnyMat33 Tangent_ARel = RotMat({0,0,0},normal_vector,{0,1,0});
16
           
17
    REF = 
18
    {
19
      AnyRefNode Wrapping_##NUMBER = 
20
      {
21
      
22
      // TYPE == CYLINDER
23
      #if _TYPE == 1
24
      
25
//        sRel = (1-...RadiusHeight/vnorm(..Tangent_sRel)) *..Tangent_sRel +
26
//                ...WrapSurfLength*{0,0,-0.5}*..Tangent_ARel';
27
        AnyVec3 CylinderOffset = ...WrapSurfLength*{0, 0, -0.5};
28
        sRel =  ..Tangent_sRel - ..normal_vector + CylinderOffset*..Tangent_ARel';
29
        ARel = ..Tangent_ARel;
30
        AnySurfCylinder Surf =
31
        {
32
          AnyFloat Sizes = {vnorm(...Tangent_sRel),....RadiusHeight,  ....WrapSurfLength/2};
33
          Radius = min({Sizes[0], Sizes[1]});
34
          Length = Sizes[2]*2;
35
          #if DEBUG
36
          AnyDrawParamSurf drw=
37
          {
38
             RGB={0,0,1};
39
             Opacity = 0.3;
40
             #var Visible = .....Visibility[NUMBER-1];
41
          };
42
          #endif
43
        };
44
        AnyRefNode Center = {sRel = -.CylinderOffset; };  
45
      #endif
46
      
47
      
48
      // TYPE == ELIPSOID
49
      #if _TYPE == 2
50
        sRel =  ..Tangent_sRel - ..normal_vector;// (1-...RadiusHeight/vnorm(..Tangent_sRel)) *..Tangent_sRel +
51
        //        ...WrapSurfLength*{0,0,-0.5}*..Tangent_ARel';
52
53
        ARel = ..Tangent_ARel;
54
        AnySurfEllipsoid Surf =
55
        {
56
          AnyFloat Sizes = {vnorm(...Tangent_sRel),....RadiusHeight,  ....WrapSurfLength/2};
57
          Radius = Sizes;
58
          #if DEBUG
59
          AnyDrawParamSurf drw=
60
          {
61
             RGB={0,0,1};
62
             Opacity = 0.3;
63
             #var Visible = .....Visibility[NUMBER-1];
64
          };
65
          #endif
66
        };
67
        AnyRefNode Center = {};  
68
      #endif
69
      
70
      };
71
      
72
     
73
      
74
     #if DEBUG
75
      AnyRefNode Tangent##NUMBER = 
76
      {
77
        sRel = ..Tangent_sRel;
78
        ARel = ..Tangent_ARel;
79
        AnyDrawNode drw = {
80
          ScaleXYZ=0.03*....RadiusHeight*{1,1,1};
81
          Visible = Off;
82
          //#var Visible = ....Visibility[NUMBER-1];
83
        };
84
        AnyDrawLine Tangent = 
85
        {
86
          p0 = {0,0, 0.5*....RadiusZ};
87
          p1 = -{0,0, 0.5*....RadiusZ};
88
          GlobalCoord = Off;
89
          //#var Visible = ....Visibility[NUMBER-1];
90
          Line = 
91
          {
92
            Style = Line3DStyleFull;
93
            Thickness = 0.001;
94
            RGB = {0.0, 0.0, 0.0};
95
          };
96
        };
97
      };    
98
    #endif
99
    };
100
    
101
};
102
103
104
105
106
107
#class_template MultiWrapSurfs (
108
AnyRefFrame& BASE_FRAME,
109
NUMBER_OF_CYLINDERS = 10,
110
TYPE = 1,
111
DEBUG=1
112
) 
113
{
114
  #var AnyVar Radius = 0.05;
115
  /// Radius of the sphere (elipsoid) in the z directions
116
  #var AnyVar RadiusZ = Radius;
117
  
118
  /// Radius of the sphere (elipsoid) in the x directions
119
  #var AnyVar RadiusX = Radius;
120
  
121
  /// Radius of the sphere (elipsoid) in the y directions
122
  #var AnyVar RadiusHeight = Radius;
123
  
124
  AnyInt NumberOfCylinders = NUMBER_OF_CYLINDERS;
125
  
126
  #var AnyVar WrapSurfLength = 8*RadiusZ;
127
  
128
  #var AnyVector Angles = linspace(0,90,NUMBER_OF_CYLINDERS);
129
  #var AnySwitch Visibility = repmat(NUMBER_OF_CYLINDERS, On);
130
  
131
  AnyFolder ErrorCheck = {
132
     AnyInt check1 = assert( gteqfun( NumElemOf(.Visibility), NUMBER_OF_CYLINDERS), 
133
            "Visibility variables must have at least" + strval(NUMBER_OF_CYLINDERS) + " elements.");
134
     AnyInt check2 = assert( gteqfun( NumElemOf(.Angles), NUMBER_OF_CYLINDERS), 
135
            "Angles variables must have at least" + strval(NUMBER_OF_CYLINDERS) + " elements.");
136
  };
137
  BASE_FRAME = 
138
  {
139
     AnyDrawRefFrame drw = {  
140
       RGB = {1,0,0};
141
       ScaleXYZ = {0.1, 0.1, 0.1};
142
       Visible = DEBUG;
143
     };        
144
     AnySurfEllipsoid Sph =
145
     {
146
       Radius = {..RadiusX, ..RadiusHeight, ..RadiusZ}; //this parameter should be dependent 
147
       #if DEBUG
148
       AnyDrawParamSurf drw = { WireFrameOnOff = On;}; 
149
       #endif
150
       
151
     };
152
    
153
  };
154
      
155
156
  #if NUMBER_OF_CYLINDERS >= 1
157
  MultiWrapSurfs_SINGLE WrapSurf1(REF = .BASE_FRAME, NUMBER = 1, _TYPE=TYPE, DEBUG=DEBUG ) = {};
158
  #endif
159
  #if NUMBER_OF_CYLINDERS >= 2
160
  MultiWrapSurfs_SINGLE WrapSurf2(REF = .BASE_FRAME, NUMBER = 2, _TYPE=TYPE, DEBUG=DEBUG ) = {};
161
  #endif
162
  #if NUMBER_OF_CYLINDERS >= 3
163
  MultiWrapSurfs_SINGLE WrapSurf3(REF = .BASE_FRAME, NUMBER = 3, _TYPE=TYPE, DEBUG=DEBUG ) = {};
164
  #endif  
165
  #if NUMBER_OF_CYLINDERS >= 4
166
  MultiWrapSurfs_SINGLE WrapSurf4(REF = .BASE_FRAME, NUMBER = 4, _TYPE=TYPE, DEBUG=DEBUG ) = {};
167
  #endif  
168
  #if NUMBER_OF_CYLINDERS >= 5
169
  MultiWrapSurfs_SINGLE WrapSurf5(REF = .BASE_FRAME, NUMBER = 5, _TYPE=TYPE, DEBUG=DEBUG ) = {};
170
  #endif  
171
  #if NUMBER_OF_CYLINDERS >= 6
172
  MultiWrapSurfs_SINGLE WrapSurf6(REF = .BASE_FRAME, NUMBER = 6, _TYPE=TYPE, DEBUG=DEBUG ) = {};
173
  #endif  
174
  #if NUMBER_OF_CYLINDERS >= 7
175
  MultiWrapSurfs_SINGLE WrapSurf7(REF = .BASE_FRAME, NUMBER = 7, _TYPE=TYPE, DEBUG=DEBUG ) = {};
176
  #endif  
177
  #if NUMBER_OF_CYLINDERS >= 8
178
  MultiWrapSurfs_SINGLE WrapSurf8(REF = .BASE_FRAME, NUMBER = 8, _TYPE=TYPE, DEBUG=DEBUG ) = {};
179
  #endif  
180
  #if NUMBER_OF_CYLINDERS >= 9
181
  MultiWrapSurfs_SINGLE WrapSurf9(REF = .BASE_FRAME, NUMBER = 9, _TYPE=TYPE, DEBUG=DEBUG ) = {};
182
  #endif
183
  #if NUMBER_OF_CYLINDERS >= 10
184
  MultiWrapSurfs_SINGLE WrapSurf10(REF = .BASE_FRAME, NUMBER = 10, _TYPE=TYPE, DEBUG=DEBUG ) = {};
185
  #endif  
186
  #if NUMBER_OF_CYLINDERS >= 11
187
  MultiWrapSurfs_SINGLE WrapSurf11(REF = .BASE_FRAME, NUMBER = 11, _TYPE=TYPE, DEBUG=DEBUG ) = {};
188
  #endif  
189
  #if NUMBER_OF_CYLINDERS >= 12
190
  MultiWrapSurfs_SINGLE WrapSurf12(REF = .BASE_FRAME, NUMBER = 12, _TYPE=TYPE, DEBUG=DEBUG ) = {};
191
  #endif  
192
  #if NUMBER_OF_CYLINDERS >= 13
193
  MultiWrapSurfs_SINGLE WrapSurf13(REF = .BASE_FRAME, NUMBER = 13, _TYPE=TYPE, DEBUG=DEBUG ) = {};
194
  #endif  
195
  #if NUMBER_OF_CYLINDERS >= 14
196
  MultiWrapSurfs_SINGLE WrapSurf14(REF = .BASE_FRAME, NUMBER = 14, _TYPE=TYPE, DEBUG=DEBUG ) = {};
197
  #endif  
198
  #if NUMBER_OF_CYLINDERS >= 15
199
  MultiWrapSurfs_SINGLE WrapSurf15REF = .BASE_FRAME, NUMBER = 15, _TYPE=TYPE, DEBUG=DEBUG ) = {};
200
  #endif  
201
  #if NUMBER_OF_CYLINDERS >= 16
202
  MultiWrapSurfs_SINGLE WrapSurf16(REF = .BASE_FRAME, NUMBER = 16, _TYPE=TYPE, DEBUG=DEBUG ) = {};
203
  #endif  
204
  #if NUMBER_OF_CYLINDERS >= 17
205
  MultiWrapSurfs_SINGLE WrapSurf17(REF = .BASE_FRAME, NUMBER = 17, _TYPE=TYPE, DEBUG=DEBUG ) = {};
206
  #endif  
207
  #if NUMBER_OF_CYLINDERS >= 18
208
  MultiWrapSurfs_SINGLE WrapSurf18(REF = .BASE_FRAME, NUMBER = 18, _TYPE=TYPE, DEBUG=DEBUG ) = {};
209
  #endif  
210
  #if NUMBER_OF_CYLINDERS >= 19
211
  MultiWrapSurfs_SINGLE WrapSurf19(REF = .BASE_FRAME, NUMBER = 19, _TYPE=TYPE, DEBUG=DEBUG ) = {};
212
  #endif  
213
  #if NUMBER_OF_CYLINDERS >= 20
214
  MultiWrapSurfs_SINGLE WrapSurf20(REF = .BASE_FRAME, NUMBER = 20, _TYPE=TYPE, DEBUG=DEBUG ) = {};
215
  #endif  
216
  #if NUMBER_OF_CYLINDERS >= 21
217
  MultiWrapSurfs_SINGLE WrapSurf21(REF = .BASE_FRAME, NUMBER = 21, _TYPE=TYPE, DEBUG=DEBUG ) = {};
218
  #endif  
219
  #if NUMBER_OF_CYLINDERS >= 22
220
  MultiWrapSurfs_SINGLE WrapSurf22(REF = .BASE_FRAME, NUMBER = 22, _TYPE=TYPE, DEBUG=DEBUG ) = {};
221
  #endif  
222
  #if NUMBER_OF_CYLINDERS >= 23
223
  MultiWrapSurfs_SINGLE WrapSurf23(REF = .BASE_FRAME, NUMBER = 23, _TYPE=TYPE, DEBUG=DEBUG ) = {};
224
  #endif  
225
  #if NUMBER_OF_CYLINDERS >= 24
226
  MultiWrapSurfs_SINGLE WrapSurf24(REF = .BASE_FRAME, NUMBER = 24, _TYPE=TYPE, DEBUG=DEBUG ) = {};
227
  #endif  
228
  #if NUMBER_OF_CYLINDERS >= 25
229
  MultiWrapSurfs_SINGLE WrapSurf25(REF = .BASE_FRAME, NUMBER = 25, _TYPE=TYPE, DEBUG=DEBUG ) = {};
230
  #endif  
231
};