Sun Position: update translation
[blender-addons.git] / add_mesh_geodesic_domes / forms_271.py
blob5b3bf8a6e953dab7a73777880a34e5129759b634
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 *
9 class form(mesh):
10 def __init__(self, uresolution, vresolution, uscale, vscale, upart,
11 vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform):
12 mesh.__init__(self)
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
19 self.uscale = uscale
20 self.vscale = vscale
21 self.upart = upart
22 self.vpart = vpart
23 self.uphase = uphase * self.a360
24 self.vphase = vphase * self.a360
25 self.utwist = utwist
26 self.vtwist = vtwist
28 self.xscale = xscale
29 self.yscale = yscale
30 self.sform = sform
32 if self.upart != 1.0: # there is a gap in the major radius
33 self.uflag = 1
34 else:
35 self.uflag = 0
36 if self.vpart != 1.0: # there is a gap in the minor radius
37 self.vflag = 1
38 else:
39 self.vflag = 0
40 if self.uflag:
41 self.ufinish = self.ures + 1
42 else:
43 self.ufinish = self.ures
44 if self.vflag:
45 self.vfinish = self.vres + 1
46 else:
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:
51 self.xscaleflag = 1
52 else:
53 self.xscaleflag = 0
54 if self.yscale != 1.0:
55 self.yscaleflag = 1
56 else:
57 self.yscaleflag = 0
58 self.rowlist = []
60 def generatepoints(self):
61 for i in range(self.ufinish):
62 row = []
63 for j in range(self.vfinish):
64 u = self.ustep * i + self.uphase
65 v = self.vstep * j + self.vphase
67 if self.sform[12]:
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)
71 else:
72 r1 = 1.0
73 if self.sform[13]:
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)
77 else:
78 r2 = 1.0
79 x, y, z = self.formula(u, v, r1, r2)
80 point = vertex((x, y, z))
81 row.append(point)
82 self.verts.append(point)
83 self.rowlist.append(row)
85 if self.vflag:
86 pass
87 else:
88 for i in range(len(self.rowlist)):
89 self.rowlist[i].append(self.rowlist[i][0])
90 if self.uflag:
91 pass
92 else:
93 self.rowlist.append(self.rowlist[0])
95 def generatefaces(self):
96 ufin = len(self.rowlist) - 1
97 vfin = len(self.rowlist[0]) - 1
98 for i in range(ufin):
99 for j in range(vfin):
100 top = i
101 bottom = i + 1
102 left = j
103 right = j + 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)
110 edge1 = edge(a, b)
111 edge2 = edge(a, d)
112 self.edges.append(edge1)
113 self.edges.append(edge2)
114 if i + 1 == ufin:
115 edge3 = edge(d, c)
116 self.edges.append(edge3)
117 if j + 1 == vfin:
118 edge4 = edge(b, c)
119 self.edges.append(edge4)
122 class grid(form):
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
129 if self.ures == 1:
130 print("\n***ERRORin forms_271.grid L126***, ures is 1, changed into 2\n\n")
131 self.ures = 2
132 if self.vres == 1:
133 print("\n***ERROR in grid forms_271.grid L129***, vres is 1, changed into 2\n\n")
134 self.vres = 2
135 self.ustep = self.a360 / (self.ures - 1)
136 self.vstep = self.a360 / (self.vres - 1)
138 self.uflag = 1
139 self.vflag = 1
141 self.xscaleflag = 0
142 self.yscaleflag = 0
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()
149 self.generatefaces()
150 for i in range(len(self.verts)):
151 self.verts[i].index = i
152 self.connectivity()
154 def formula(self, u, v, r1, r2):
155 x = u * self.uexpand - self.ushift
156 y = v * self.vexpand - self.vshift
157 z = r1 * r2 - 1.0
158 return x, y, z
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
169 self.vflag = 1
170 self.generatepoints()
171 self.generatefaces()
172 for i in range(len(self.verts)):
173 self.verts[i].index = i
174 self.connectivity()
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
180 return x, y, z
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
191 self.vflag = 1
192 self.generatepoints()
193 self.generatefaces()
194 for i in range(len(self.verts)):
195 self.verts[i].index = i
196 self.connectivity()
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
203 return x, y, z
206 class torus(form):
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()
212 self.generatefaces()
213 for i in range(len(self.verts)):
214 self.verts[i].index = i
215 self.connectivity()
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
221 return x, y, z
224 class sphere(form):
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
230 self.vflag = 1
231 self.generatepoints()
232 self.generatefaces()
233 for i in range(len(self.verts)):
234 self.verts[i].index = i
235 self.connectivity()
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
242 return x, y, z