1 # SPDX-FileCopyrightText: 2016-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
5 from math
import sin
, cos
, sqrt
6 from .vefm_271
import *
10 def __init__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
,
11 vpart
, uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
):
14 self
.PKHG_parameters
= [uresolution
, vresolution
, uscale
, vscale
, upart
,
15 vpart
, uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
]
16 self
.ures
= uresolution
17 self
.vres
= vresolution
23 self
.uphase
= uphase
* self
.a360
24 self
.vphase
= vphase
* self
.a360
32 if self
.upart
!= 1.0: # there is a gap in the major radius
36 if self
.vpart
!= 1.0: # there is a gap in the minor radius
41 self
.ufinish
= self
.ures
+ 1
43 self
.ufinish
= self
.ures
45 self
.vfinish
= self
.vres
+ 1
47 self
.vfinish
= self
.vres
48 self
.ustep
= (self
.a360
/ self
.ures
) * self
.upart
49 self
.vstep
= (self
.a360
/ self
.vres
) * self
.vpart
50 if self
.xscale
!= 1.0:
54 if self
.yscale
!= 1.0:
60 def generatepoints(self
):
61 for i
in range(self
.ufinish
):
63 for j
in range(self
.vfinish
):
64 u
= self
.ustep
* i
+ self
.uphase
65 v
= self
.vstep
* j
+ self
.vphase
68 r1
= self
.superform(self
.sform
[0], self
.sform
[1], self
.sform
[2],
69 self
.sform
[3], self
.sform
[14] + u
, self
.sform
[4],
70 self
.sform
[5], self
.sform
[16] * v
)
74 r2
= self
.superform(self
.sform
[6], self
.sform
[7], self
.sform
[8],
75 self
.sform
[9], self
.sform
[15] + v
, self
.sform
[10],
76 self
.sform
[11], self
.sform
[17] * v
)
79 x
, y
, z
= self
.formula(u
, v
, r1
, r2
)
80 point
= vertex((x
, y
, z
))
82 self
.verts
.append(point
)
83 self
.rowlist
.append(row
)
88 for i
in range(len(self
.rowlist
)):
89 self
.rowlist
[i
].append(self
.rowlist
[i
][0])
93 self
.rowlist
.append(self
.rowlist
[0])
95 def generatefaces(self
):
96 ufin
= len(self
.rowlist
) - 1
97 vfin
= len(self
.rowlist
[0]) - 1
104 a
= self
.rowlist
[top
][left
]
105 b
= self
.rowlist
[top
][right
]
106 c
= self
.rowlist
[bottom
][right
]
107 d
= self
.rowlist
[bottom
][left
]
108 face1
= face([a
, b
, c
, d
])
109 self
.faces
.append(face1
)
112 self
.edges
.append(edge1
)
113 self
.edges
.append(edge2
)
116 self
.edges
.append(edge3
)
119 self
.edges
.append(edge4
)
123 def __init__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
124 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
):
125 form
.__init
__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
126 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
)
127 unit
= 1.0 / self
.a360
130 print("\n***ERRORin forms_271.grid L126***, ures is 1, changed into 2\n\n")
133 print("\n***ERROR in grid forms_271.grid L129***, vres is 1, changed into 2\n\n")
135 self
.ustep
= self
.a360
/ (self
.ures
- 1)
136 self
.vstep
= self
.a360
/ (self
.vres
- 1)
143 self
.uexpand
= unit
* self
.uscale
144 self
.vexpand
= unit
* self
.vscale
145 self
.ushift
= self
.uscale
* 0.5
146 self
.vshift
= self
.vscale
* 0.5
148 self
.generatepoints()
150 for i
in range(len(self
.verts
)):
151 self
.verts
[i
].index
= i
154 def formula(self
, u
, v
, r1
, r2
):
155 x
= u
* self
.uexpand
- self
.ushift
156 y
= v
* self
.vexpand
- self
.vshift
161 class cylinder(form
):
162 def __init__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
163 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
):
164 form
.__init
__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
165 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
)
166 unit
= 1.0 / self
.a360
167 self
.vshift
= self
.vscale
* 0.5
168 self
.vexpand
= unit
* self
.vscale
170 self
.generatepoints()
172 for i
in range(len(self
.verts
)):
173 self
.verts
[i
].index
= i
176 def formula(self
, u
, v
, r1
, r2
):
177 x
= sin(u
) * self
.uscale
* r1
* r2
* self
.xscale
178 y
= cos(u
) * self
.uscale
* r1
* r2
179 z
= v
* self
.vexpand
- self
.vshift
183 class parabola(form
):
184 def __init__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
185 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
):
186 form
.__init
__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
187 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
)
188 unit
= 1.0 / self
.a360
189 self
.vshift
= self
.vscale
* 0.5
190 self
.vexpand
= unit
* self
.vscale
192 self
.generatepoints()
194 for i
in range(len(self
.verts
)):
195 self
.verts
[i
].index
= i
198 def formula(self
, u
, v
, r1
, r2
):
199 factor
= sqrt(v
) + 0.001
200 x
= sin(u
) * factor
* self
.uscale
* r1
* r2
* self
.xscale
201 y
= cos(u
) * factor
* self
.uscale
* r1
* r2
202 z
= - v
* self
.vexpand
+ self
.vshift
207 def __init__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
208 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
):
209 form
.__init
__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
210 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
)
211 self
.generatepoints()
213 for i
in range(len(self
.verts
)):
214 self
.verts
[i
].index
= i
217 def formula(self
, u
, v
, r1
, r2
):
218 z
= sin(v
) * self
.uscale
* r2
* self
.yscale
219 y
= (self
.vscale
+ self
.uscale
* cos(v
)) * cos(u
) * r1
* r2
220 x
= (self
.vscale
+ self
.uscale
* cos(v
)) * sin(u
) * r1
* r2
* self
.xscale
225 def __init__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
226 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
):
227 form
.__init
__(self
, uresolution
, vresolution
, uscale
, vscale
, upart
, vpart
,
228 uphase
, vphase
, utwist
, vtwist
, xscale
, yscale
, sform
)
229 self
.vstep
= (self
.a360
/ (self
.vres
- 1)) * self
.vpart
231 self
.generatepoints()
233 for i
in range(len(self
.verts
)):
234 self
.verts
[i
].index
= i
237 def formula(self
, u
, v
, r1
, r2
):
238 v
= (v
* 0.5) - (self
.a360
* 0.25)
239 x
= r1
* cos(u
) * r2
* cos(v
) * self
.uscale
* self
.xscale
240 y
= r1
* sin(u
) * r2
* cos(v
) * self
.uscale
241 z
= r2
* sin(v
) * self
.uscale
* self
.yscale