diff options
author | lijenstina <lijenstina@gmail.com> | 2016-12-30 22:33:05 +0300 |
---|---|---|
committer | lijenstina <lijenstina@gmail.com> | 2016-12-30 22:33:05 +0300 |
commit | c86080a455579a8c770545e33b95513b43e1a43b (patch) | |
tree | 6c392b16b914aa3264b373022602e57ad493e7d7 /add_mesh_extra_objects/geodesic_domes | |
parent | c95e86bcef654c0686d3cf4d52446ff9ff8c819f (diff) |
Add mesh extra objects: Update to version 0.3.1
General Pep8 cleanup
Removed unused variables and imports
Removed a panel from add_empty_as_parent
Standardized the property definitions
across all the scripts
Moved scene props from third_domes_panel_271
to init for proper removal
Added a Enum prop for mesh type in teapot
Fixed a small issue with Geodesic domes self.reports
(problem with value fields message spam)
Fixed props names in Geodesic domes
Consistent tooltips
Reorganized menus:
Mechanical Menu including Pipe joints, Mesh gear
Added separators
Diffstat (limited to 'add_mesh_extra_objects/geodesic_domes')
6 files changed, 1690 insertions, 1202 deletions
diff --git a/add_mesh_extra_objects/geodesic_domes/__init__.py b/add_mesh_extra_objects/geodesic_domes/__init__.py index 711de18e..aa2e509a 100644 --- a/add_mesh_extra_objects/geodesic_domes/__init__.py +++ b/add_mesh_extra_objects/geodesic_domes/__init__.py @@ -38,12 +38,13 @@ else: import bpy from bpy.props import * + def register(): bpy.utils.register_module(__name__) + def unregister(): bpy.utils.unregister_module(__name__) if __name__ == "__main__": register() - diff --git a/add_mesh_extra_objects/geodesic_domes/add_shape_geodesic.py b/add_mesh_extra_objects/geodesic_domes/add_shape_geodesic.py index 879f6fa1..36b11ae5 100644 --- a/add_mesh_extra_objects/geodesic_domes/add_shape_geodesic.py +++ b/add_mesh_extra_objects/geodesic_domes/add_shape_geodesic.py @@ -1,16 +1,18 @@ import bpy import mathutils + def reset_transform(ob): m = mathutils.Matrix() ob.matrix_local = m + def func_add_corrective_pose_shape_fast(source, target): result = "" reset_transform(target) # If target object doesn't have Basis shape key, create it. try: - num_keys = len( target.data.shape_keys.key_blocks ) + num_keys = len(target.data.shape_keys.key_blocks) except: basis = target.shape_key_add() basis.name = "Basis" @@ -21,11 +23,11 @@ def func_add_corrective_pose_shape_fast(source, target): new_shapekey = target.shape_key_add() new_shapekey.name = "Shape_" + source.name new_shapekey_name = new_shapekey.name - key_index = len(target.data.shape_keys.key_blocks)-1 + key_index = len(target.data.shape_keys.key_blocks) - 1 target.active_shape_key_index = key_index # else, the active shape will be used (updated) target.show_only_shape_key = True - shape_key_verts = target.data.shape_keys.key_blocks[ key_index ].data + shape_key_verts = target.data.shape_keys.key_blocks[key_index].data try: vgroup = target.active_shape_key.vertex_group target.active_shape_key.vertex_group = '' @@ -36,20 +38,20 @@ def func_add_corrective_pose_shape_fast(source, target): # copy the local vertex positions to the new shape verts = source.data.vertices try: - for n in range( len(verts)): + for n in range(len(verts)): shape_key_verts[n].co = verts[n].co - # go to all armature modifies and unpose the shape + # go to all armature modifies and unpose the shape except: message = "***ERROR***, meshes have different number of vertices" - result = message + result = message for n in target.modifiers: if n.type == 'ARMATURE' and n.show_viewport: - #~ print("got one") + # print("got one") n.use_bone_envelopes = False n.use_deform_preserve_volume = False n.use_vertex_groups = True armature = n.object - unposeMesh( shape_key_verts, target, armature) + unposeMesh(shape_key_verts, target, armature) break # set the new shape key value to 1.0, so we see the result instantly @@ -58,20 +60,21 @@ def func_add_corrective_pose_shape_fast(source, target): target.active_shape_key.vertex_group = vgroup except: print("bluba") - result = result + "bluba" + result = result + "bluba" pass target.show_only_shape_key = False target.data.update() return result + class add_corrective_pose_shape_fast(bpy.types.Operator): - '''Adds 1st object as shape to 2nd object as pose shape (only 1 armature)''' bl_idname = "object.add_corrective_pose_shape_fast" bl_label = "Add object as corrective shape faster" + bl_description = "Adds 1st object as shape to 2nd object as pose shape (only 1 armature)" @classmethod def poll(cls, context): - return context.active_object != None + return context.active_object is not None def execute(self, context): @@ -87,12 +90,15 @@ class add_corrective_pose_shape_fast(bpy.types.Operator): source = selection[0] print(source) print(target) - func_add_corrective_pose_shape_fast( source, target) + func_add_corrective_pose_shape_fast(source, target) + return {'FINISHED'} + def register(): bpy.utils.register_module(__name__) + def unregister(): bpy.utils.unregister_module(__name__) diff --git a/add_mesh_extra_objects/geodesic_domes/forms_271.py b/add_mesh_extra_objects/geodesic_domes/forms_271.py index d3e46dca..f4dd5119 100644 --- a/add_mesh_extra_objects/geodesic_domes/forms_271.py +++ b/add_mesh_extra_objects/geodesic_domes/forms_271.py @@ -1,8 +1,9 @@ -import math -from math import sin, cos +from math import sin, cos, sqrt from .vefm_271 import * + + class form(mesh): - def __init__(self, uresolution, vresolution, uscale, vscale, upart,\ + def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform): mesh.__init__(self) @@ -24,11 +25,11 @@ class form(mesh): self.yscale = yscale self.sform = sform - if self.upart != 1.0: ## there is a gap in the major radius + if self.upart != 1.0: # there is a gap in the major radius self.uflag = 1 else: self.uflag = 0 - if self.vpart != 1.0: ## there is a gap in the minor radius + if self.vpart != 1.0: # there is a gap in the minor radius self.vflag = 1 else: self.vflag = 0 @@ -50,25 +51,25 @@ class form(mesh): self.yscaleflag = 1 else: self.yscaleflag = 0 - self.rowlist=[] + self.rowlist = [] def generatepoints(self): for i in range(self.ufinish): - row=[] + row = [] for j in range(self.vfinish): u = self.ustep * i + self.uphase v = self.vstep * j + self.vphase if self.sform[12]: - r1 = self.superform(self.sform[0], self.sform[1], self.sform[2],\ - self.sform[3], self.sform[14] + u, self.sform[4],\ - self.sform[5], self.sform[16] * v) + r1 = self.superform(self.sform[0], self.sform[1], self.sform[2], + self.sform[3], self.sform[14] + u, self.sform[4], + self.sform[5], self.sform[16] * v) else: r1 = 1.0 if self.sform[13]: - r2 = self.superform(self.sform[6], self.sform[7], self.sform[8],\ - self.sform[9], self.sform[15] + v, self.sform[10],\ - self.sform[11], self.sform[17] * v) + r2 = self.superform(self.sform[6], self.sform[7], self.sform[8], + self.sform[9], self.sform[15] + v, self.sform[10], + self.sform[11], self.sform[17] * v) else: r2 = 1.0 x, y, z = self.formula(u, v, r1, r2) @@ -82,7 +83,7 @@ class form(mesh): else: for i in range(len(self.rowlist)): self.rowlist[i].append(self.rowlist[i][0]) - if self.uflag: + if self.uflag: pass else: self.rowlist.append(self.rowlist[0]) @@ -113,17 +114,19 @@ class form(mesh): edge4 = edge(b, c) self.edges.append(edge4) + class grid(form): - def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ + def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform): - form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ - uphase, vphase, utwist, vtwist, xscale, yscale, sform) + form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, + uphase, vphase, utwist, vtwist, xscale, yscale, sform) unit = 1.0 / self.a360 - if self.ures == 1 : - print("\n***ERRORin forms_271.grid L121***, ures is 1, changed into 2\n\n") + + if self.ures == 1: + print("\n***ERRORin forms_271.grid L126***, ures is 1, changed into 2\n\n") self.ures = 2 - if self.vres == 1 : - print("\n***ERROR in grid forms_271.grid L124***, vres is 1, changed into 2\n\n") + if self.vres == 1: + print("\n***ERROR in grid forms_271.grid L129***, vres is 1, changed into 2\n\n") self.vres = 2 self.ustep = self.a360 / (self.ures - 1) self.vstep = self.a360 / (self.vres - 1) @@ -152,9 +155,9 @@ class grid(form): class cylinder(form): - def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ + def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform): - form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ + form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform) unit = 1.0 / self.a360 self.vshift = self.vscale * 0.5 @@ -172,10 +175,11 @@ class cylinder(form): z = v * self.vexpand - self.vshift return x, y, z + class parabola(form): - def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ + def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform): - form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ + form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform) unit = 1.0 / self.a360 self.vshift = self.vscale * 0.5 @@ -194,10 +198,11 @@ class parabola(form): z = - v * self.vexpand + self.vshift return x, y, z + class torus(form): - def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ + def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform): - form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ + form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform) self.generatepoints() self.generatefaces() @@ -211,11 +216,12 @@ class torus(form): x = (self.vscale + self.uscale * cos(v)) * sin(u) * r1 * r2 * self.xscale return x, y, z + class sphere(form): - def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ + def __init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, uphase, vphase, utwist, vtwist, xscale, yscale, sform): - form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart,\ - uphase,vphase,utwist,vtwist,xscale,yscale,sform) + form.__init__(self, uresolution, vresolution, uscale, vscale, upart, vpart, + uphase, vphase, utwist, vtwist, xscale, yscale, sform) self.vstep = (self.a360 / (self.vres - 1)) * self.vpart self.vflag = 1 self.generatepoints() diff --git a/add_mesh_extra_objects/geodesic_domes/geodesic_classes_271.py b/add_mesh_extra_objects/geodesic_domes/geodesic_classes_271.py index 985dcccd..6f54bff7 100644 --- a/add_mesh_extra_objects/geodesic_domes/geodesic_classes_271.py +++ b/add_mesh_extra_objects/geodesic_domes/geodesic_classes_271.py @@ -1,22 +1,21 @@ - from .vefm_271 import mesh, vertex, edge, face +from math import pi, acos, sin, cos, atan, tan, fabs, sqrt -import math -from math import pi,acos,sin,cos,atan,tan,fabs, sqrt -def check_contains(cl,name , print_value = False): +def check_contains(cl, name, print_value=False): dir_class = dir(cl) for el in dir_class: if el.startswith("_"): pass else: if print_value: - tmp = getattr(cl,el) - print(name , " contains ==>",el," value = ", tmp) + tmp = getattr(cl, el) + print(name, " contains ==>", el, " value = ", tmp) else: - print(name , " contains ==>",el) + print(name, " contains ==>", el) print("\ncheck_contains finished\n\n") + class geodesic(mesh): def __init__(self): @@ -25,9 +24,9 @@ class geodesic(mesh): self.panels = [] self.vertsdone = [] - self.skeleton = [] # List of verts in the full skeleton edges. - self.vertskeleton = [] # config needs this member - self.edgeskeleton = [] # config needs this member + self.skeleton = [] # List of verts in the full skeleton edges. + self.vertskeleton = [] # config needs this member + self.edgeskeleton = [] # config needs this member self.sphericalverts = [] self.a45 = pi * 0.25 self.a90 = pi * 0.5 @@ -35,7 +34,7 @@ class geodesic(mesh): self.a270 = pi * 1.5 self.a360 = pi * 2 # define members here - # setparams needs: + # setparams needs: self.frequency = None self.eccentricity = None self.squish = None @@ -53,7 +52,7 @@ class geodesic(mesh): self.sform = None self.super = None self.odd = None - #config needs + # config needs self.panelpoints = None self.paneledges = None self.reversepanel = None @@ -61,45 +60,45 @@ class geodesic(mesh): self.vertsdone = None self.panels = [] - def setparameters(self,params): + def setparameters(self, params): parameters = self.PKHG_parameters = params - self.frequency = parameters[0] ## How many subdivisions - up to 20. - self.eccentricity = parameters[1] ## Elliptical if >1.0. - self.squish = parameters[2] ## Flattened if < 1.0. - self.radius = parameters[3] ## Exactly what it says. - self.square = parameters[4] ## Controls amount of superellipse in X/Y plane. - self.squarez = parameters[5] ## Controls amount of superellipse in Z dimension. - self.cart = parameters[6] ## Cuts out sphericalisation step. - self.shape = parameters[7] ## Full sphere, dome, flatbase. - self.baselevel = parameters[8] ## Where the base is cut on a flatbase dome. - self.faceshape = parameters[9] ## Triangular, hexagonal, tri-hex. + self.frequency = parameters[0] # How many subdivisions - up to 20. + self.eccentricity = parameters[1] # Elliptical if >1.0. + self.squish = parameters[2] # Flattened if < 1.0. + self.radius = parameters[3] # Exactly what it says. + self.square = parameters[4] # Controls amount of superellipse in X/Y plane. + self.squarez = parameters[5] # Controls amount of superellipse in Z dimension. + self.cart = parameters[6] # Cuts out sphericalisation step. + self.shape = parameters[7] # Full sphere, dome, flatbase. + self.baselevel = parameters[8] # Where the base is cut on a flatbase dome. + self.faceshape = parameters[9] # Triangular, hexagonal, tri-hex. self.dualflag = parameters[10] self.rotxy = parameters[11] self.rotz = parameters[12] self.klass = parameters[13] self.sform = parameters[14] - self.super = 0 ## Toggles superellipse. + self.super = 0 # Toggles superellipse. if self.square != 2.0 or self.squarez != 2.0: self.super = 1 - self.odd = 0 ## Is the frequency odd. It matters for dome building. + self.odd = 0 # Is the frequency odd. It matters for dome building. if self.frequency % 2 != 0: self.odd = 1 def makegeodesic(self): - self.vertedgefacedata() #PKHG only a pass 13okt11 - self.config() ## Generate all the configuration information. + self.vertedgefacedata() # PKHG only a pass 13okt11 + self.config() # Generate all the configuration information. if self.klass: self.class2() if self.faceshape == 1: - self.hexify() ## Hexagonal faces + self.hexify() # Hexagonal faces elif self.faceshape == 2: - self.starify() ## Hex and Triangle faces + self.starify() # Hex and Triangle faces if self.dualflag: self.dual() if not self.cart: - self.sphericalize() ## Convert x,y,z positions into spherical u,v. - self.sphere2cartesian() ## Convert spherical uv back into cartesian x,y,z for final shape. - for i in range(len( self.verts)): + self.sphericalize() # Convert x,y,z positions into spherical u,v. + self.sphere2cartesian() # Convert spherical uv back into cartesian x,y,z for final shape. + for i in range(len(self.verts)): self.verts[i].index = i for edg in self.edges: edg.findvect() @@ -111,20 +110,20 @@ class geodesic(mesh): for i in range(len(self.vertskeleton)): self.vertskeleton[i].index = i for edges in self.edgeskeleton: - s = skeletonrow(self.frequency, edges, 0, self) #self a geodesic + s = skeletonrow(self.frequency, edges, 0, self) # self a geodesic self.skeleton.append(s) - for i in range(len( self.verts)): + for i in range(len(self.verts)): self.verts[i].index = i for i in range(len(self.panelpoints)): a = self.vertsdone[self.panelpoints[i][0]][1] b = self.vertsdone[self.panelpoints[i][1]][1] c = self.vertsdone[self.panelpoints[i][2]][1] - panpoints = [ self.verts[a], + panpoints = [self.verts[a], self.verts[b], self.verts[c]] - panedges = [ self.skeleton[self.paneledges[i][0]], + panedges = [self.skeleton[self.paneledges[i][0]], self.skeleton[self.paneledges[i][1]], - self.skeleton[self.paneledges[i][2]] ] + self.skeleton[self.paneledges[i][2]]] reverseflag = 0 for flag in self.reversepanel: if flag == i: @@ -140,9 +139,9 @@ class geodesic(mesh): y = vert.vector.y z = vert.vector.z - u = self.usphericalise(x,y,z) - v = self.vsphericalise(x,y,z) - self.sphericalverts.append([u,v]) + u = self.usphericalise(x, y, z) + v = self.vsphericalise(x, y, z) + self.sphericalverts.append([u, v]) def sphere2cartesian(self): for i in range(len(self.verts)): @@ -154,69 +153,69 @@ class geodesic(mesh): else: u = self.sphericalverts[i][0] v = self.sphericalverts[i][1] - if self.squish != 1.0 or self.eccentricity>1.0: + if self.squish != 1.0 or self.eccentricity > 1.0: scalez = 1 / self.squish - v = self.ellipsecomp(scalez,v) - u = self.ellipsecomp(self.eccentricity,u) + v = self.ellipsecomp(scalez, v) + u = self.ellipsecomp(self.eccentricity, u) if self.super: - r1 = self.superell(self.square,u,self.rotxy) - r2 = self.superell(self.squarez,v,self.rotz) + r1 = self.superell(self.square, u, self.rotxy) + r2 = self.superell(self.squarez, v, self.rotz) else: r1 = 1.0 r2 = 1.0 if self.sform[12]: - r1 = r1 * self.superform(self.sform[0],self.sform[1],\ - self.sform[2],self.sform[3],\ - self.sform[14] + u,self.sform[4],\ - self.sform[5],self.sform[16] * v) + r1 = r1 * self.superform(self.sform[0], self.sform[1], + self.sform[2], self.sform[3], + self.sform[14] + u, self.sform[4], + self.sform[5], self.sform[16] * v) if self.sform[13]: - r2 = r2 * self.superform(self.sform[6],self.sform[7],\ - self.sform[8],self.sform[9],\ - self.sform[15] + v,self.sform[10],\ - self.sform[11],self.sform[17] * v) - x,y,z = self.cartesian(u,v,r1,r2) + r2 = r2 * self.superform(self.sform[6], self.sform[7], + self.sform[8], self.sform[9], + self.sform[15] + v, self.sform[10], + self.sform[11], self.sform[17] * v) + x, y, z = self.cartesian(u, v, r1, r2) - self.verts[i] = vertex((x,y,z)) + self.verts[i] = vertex((x, y, z)) - def usphericalise(self,x,y,z): + def usphericalise(self, x, y, z): if y == 0.0: - if x>0: + if x > 0: theta = 0.0 else: theta = self.a180 elif x == 0.0: - if y>0: + if y > 0: theta = self.a90 else: theta = self.a270 - else: theta = atan(y / x) + if x < 0.0 and y < 0.0: theta = theta + self.a180 - elif x < 0.0 and y>0.0: + elif x < 0.0 and y > 0.0: theta = theta + self.a180 u = theta return u - def vsphericalise(self,x,y,z) : + def vsphericalise(self, x, y, z): if z == 0.0: phi = self.a90 else: - rho = sqrt(x ** 2 + y**2 + z**2) + rho = sqrt(x ** 2 + y ** 2 + z ** 2) phi = acos(z / rho) v = phi return v - def ellipsecomp(self,efactor,theta): + def ellipsecomp(self, efactor, theta): if theta == self.a90: result = self.a90 elif theta == self.a270: result = self.a270 else: result = atan(tan(theta) / efactor**0.5) - if result>=0.0: + if result >= 0.0: x = result y = self.a180 + result if fabs(x - theta) <= fabs(y - theta): @@ -236,24 +235,24 @@ class geodesic(mesh): def cutbasecomp(self): pass - def cartesian(self,u,v,r1,r2): + def cartesian(self, u, v, r1, r2): x = r1 * cos(u) * r2 * sin(v) * self.radius * self.eccentricity y = r1 * sin(u) * r2 * sin(v) * self.radius z = r2 * cos(v) * self.radius * self.squish - return x,y,z + return x, y, z class edgerow: def __init__(self, count, anchor, leftindex, rightindex, stepvector, endflag, parentgeo): self.points = [] self.edges = [] - ## Make a row of evenly spaced points. + # Make a row of evenly spaced points. for i in range(count + 1): if i == 0: self.points.append(leftindex) elif i == count and not endflag: self.points.append(rightindex) - else: #PKHG Vectors added! + else: # PKHG Vectors added! newpoint = anchor + (stepvector * i) vertcount = len(parentgeo.verts) self.points.append(vertcount) @@ -262,17 +261,18 @@ class edgerow: for i in range(count): a = parentgeo.verts[self.points[i]] b = parentgeo.verts[self.points[i + 1]] - line = edge(a,b) + line = edge(a, b) self.edges.append(len(parentgeo.edges)) parentgeo.edges.append(line) + class skeletonrow: def __init__(self, count, skeletonedge, shortflag, parentgeo): self.points = [] self.edges = [] self.vect = skeletonedge.vect self.step = skeletonedge.vect / float(count) - ## Make a row of evenly spaced points. + # Make a row of evenly spaced points. for i in range(count + 1): vert1 = skeletonedge.a vert2 = skeletonedge.b @@ -284,22 +284,21 @@ class skeletonrow: vertcount = len(parentgeo.verts) self.points.append(vertcount) newpoint.index = vertcount - parentgeo.vertsdone[vert1.index] = [1,vertcount] + parentgeo.vertsdone[vert1.index] = [1, vertcount] parentgeo.verts.append(newpoint) elif i == count: if parentgeo.vertsdone[vert2.index][0]: self.points.append(parentgeo.vertsdone[vert2.index][1]) else: - newpoint = vertex(vert2.vector) vertcount = len(parentgeo.verts) self.points.append(vertcount) newpoint.index = vertcount - parentgeo.vertsdone[vert2.index] = [1,vertcount] + parentgeo.vertsdone[vert2.index] = [1, vertcount] parentgeo.verts.append(newpoint) else: - newpoint = vertex(vert1.vector + (self.step * i)) #must be a vertex! + newpoint = vertex(vert1.vector + (self.step * i)) # must be a vertex! vertcount = len(parentgeo.verts) self.points.append(vertcount) newpoint.index = vertcount @@ -307,32 +306,35 @@ class skeletonrow: for i in range(count): a = parentgeo.verts[self.points[i]] b = parentgeo.verts[self.points[i + 1]] - line = edge(a,b) + line = edge(a, b) self.edges.append(len(parentgeo.edges)) parentgeo.edges.append(line) + class facefill: def __init__(self, upper, lower, reverseflag, parentgeo, finish): for i in range(finish): - a,b,c = upper.points[i],lower.points[i + 1],lower.points[i] + a, b, c = upper.points[i], lower.points[i + 1], lower.points[i] if reverseflag: - upface = face([parentgeo.verts[a],parentgeo.verts[c],parentgeo.verts[b]]) + upface = face([parentgeo.verts[a], parentgeo.verts[c], parentgeo.verts[b]]) else: - upface = face([parentgeo.verts[a],parentgeo.verts[b],parentgeo.verts[c]]) + upface = face([parentgeo.verts[a], parentgeo.verts[b], parentgeo.verts[c]]) parentgeo.faces.append(upface) if i == finish - 1: pass else: d = upper.points[i + 1] if reverseflag: - downface = face([parentgeo.verts[b],parentgeo.verts[d],parentgeo.verts[a]]) + downface = face([parentgeo.verts[b], parentgeo.verts[d], parentgeo.verts[a]]) else: - downface = face([parentgeo.verts[b],parentgeo.verts[a],parentgeo.verts[d]]) - line = edge(parentgeo.verts[a],parentgeo.verts[b]) - line2 = edge(parentgeo.verts[d],parentgeo.verts[b]) + downface = face([parentgeo.verts[b], parentgeo.verts[a], parentgeo.verts[d]]) + line = edge(parentgeo.verts[a], parentgeo.verts[b]) + line2 = edge(parentgeo.verts[d], parentgeo.verts[b]) parentgeo.faces.append(downface) parentgeo.edges.append(line) parentgeo.edges.append(line2) + + class panel: def __init__(self, points, edges, reverseflag, parentgeo): self.cardinal = points[0] @@ -341,12 +343,12 @@ class panel: self.leftedge = edges[0] self.rightedge = edges[1] self.baseedge = edges[2] - self.rows=[] - self.orient(parentgeo,edges) + self.rows = [] + self.orient(parentgeo, edges) self.createrows(parentgeo) - self.createfaces(parentgeo,reverseflag) + self.createfaces(parentgeo, reverseflag) - def orient(self,parentgeo,edges): + def orient(self, parentgeo, edges): if self.leftedge.points[0] != self.cardinal.index: self.leftedge.points.reverse() self.leftedge.vect.negative() @@ -365,377 +367,438 @@ class panel: if i == parentgeo.frequency: newrow = self.baseedge else: - newrow = edgerow(i, parentgeo.verts[self.leftedge.points[i]], self.leftedge.points[i], self.rightedge.points[i], self.baseedge.step, 0, parentgeo ) + newrow = edgerow(i, parentgeo.verts[self.leftedge.points[i]], self.leftedge.points[i], + self.rightedge.points[i], self.baseedge.step, 0, parentgeo) self.rows.append(newrow) - def createfaces(self, parentgeo,reverseflag): + def createfaces(self, parentgeo, reverseflag): for i in range(len(self.leftedge.points) - 1): facefill(self.rows[i], self.rows[i + 1], reverseflag, parentgeo, len(self.rows[i].points)) -#for point on top? YES! -class tetrahedron(geodesic,mesh): - def __init__(self,parameter): + +# for point on top? YES! +class tetrahedron(geodesic, mesh): + def __init__(self, parameter): geodesic.__init__(mesh) - geodesic.setparameters(self,parameter) + geodesic.setparameters(self, parameter) self.set_vert_edge_skeleons() def set_vert_edge_skeleons(self): - self.vertskeleton=[ vertex(( 0.0 , 0.0 , 1.73205080757 )), - vertex(( 0.0 , -1.63299316185 , -0.577350269185 )), - vertex(( 1.41421356237 , 0.816496580927 , -0.57735026919 )), - vertex(( -1.41421356237 , 0.816496580927 , -0.57735026919 )) ] - self.edgeskeleton=[ edge(self.vertskeleton[0],self.vertskeleton[1]), - edge(self.vertskeleton[0],self.vertskeleton[2]), - edge(self.vertskeleton[0],self.vertskeleton[3]), - edge(self.vertskeleton[1],self.vertskeleton[2]), - edge(self.vertskeleton[2],self.vertskeleton[3]), - edge(self.vertskeleton[1],self.vertskeleton[3]) ] - - self.panelpoints=[[0,1,2],[0,2,3],[0,1,3],[1,2,3]] - self.paneledges=[[0,1,3],[1,2,4],[0,2,5],[3,5,4]] - self.reversepanel=[2,3] - self.edgelength=[] - self.vertsdone=[[0,0]] * len(self.vertskeleton) - -#for edge on top? YES + self.vertskeleton = [vertex((0.0, 0.0, 1.73205080757)), + vertex((0.0, -1.63299316185, -0.577350269185)), + vertex((1.41421356237, 0.816496580927, -0.57735026919)), + vertex((-1.41421356237, 0.816496580927, -0.57735026919))] + + self.edgeskeleton = [edge(self.vertskeleton[0], self.vertskeleton[1]), + edge(self.vertskeleton[0], self.vertskeleton[2]), + edge(self.vertskeleton[0], self.vertskeleton[3]), + edge(self.vertskeleton[1], self.vertskeleton[2]), + edge(self.vertskeleton[2], self.vertskeleton[3]), + edge(self.vertskeleton[1], self.vertskeleton[3])] + + self.panelpoints = [[0, 1, 2], [0, 2, 3], [0, 1, 3], [1, 2, 3]] + self.paneledges = [[0, 1, 3], [1, 2, 4], [0, 2, 5], [3, 5, 4]] + self.reversepanel = [2, 3] + self.edgelength = [] + self.vertsdone = [[0, 0]] * len(self.vertskeleton) + + +# for edge on top? YES class tetraedge(geodesic): - def __init__(self,parameter): + def __init__(self, parameter): geodesic.__init__(mesh) - geodesic.setparameters(self,parameter) + geodesic.setparameters(self, parameter) self.set_vert_edge_skeleons() def set_vert_edge_skeleons(self): - self.vertskeleton=[ vertex(( 0.0 , -1.41421356237 , 1.0 )), - vertex(( 0.0 , 1.41421356237 , 1.0 )), - vertex(( 1.41421356237 , 0.0 , -1.0 )), - vertex(( -1.41421356237 , 0.0 , -1.0 )) ] - self.edgeskeleton=[ edge(self.vertskeleton[0],self.vertskeleton[1]), - edge(self.vertskeleton[0],self.vertskeleton[2]), - edge(self.vertskeleton[0],self.vertskeleton[3]), - edge(self.vertskeleton[1],self.vertskeleton[3]), - edge(self.vertskeleton[1],self.vertskeleton[2]), - edge(self.vertskeleton[2],self.vertskeleton[3]) ] + self.vertskeleton = [vertex((0.0, -1.41421356237, 1.0)), + vertex((0.0, 1.41421356237, 1.0)), + vertex((1.41421356237, 0.0, -1.0)), + vertex((-1.41421356237, 0.0, -1.0))] + + self.edgeskeleton = [edge(self.vertskeleton[0], self.vertskeleton[1]), + edge(self.vertskeleton[0], self.vertskeleton[2]), + edge(self.vertskeleton[0], self.vertskeleton[3]), + edge(self.vertskeleton[1], self.vertskeleton[3]), + edge(self.vertskeleton[1], self.vertskeleton[2]), + edge(self.vertskeleton[2], self.vertskeleton[3])] + for i in range(len(self.vertskeleton)): self.vertskeleton[i].index = i - self.panelpoints=[[0,1,2],[1,2,3],[0,1,3],[0,2,3]] - self.paneledges=[[0,1,4],[4,3,5],[0,2,3],[1,2,5]] - self.reversepanel=[0,3] - self.edgelength=[] - self.vertsdone=[[0,0]] * len(self.vertskeleton) -#for face on top? YES + self.panelpoints = [[0, 1, 2], [1, 2, 3], [0, 1, 3], [0, 2, 3]] + self.paneledges = [[0, 1, 4], [4, 3, 5], [0, 2, 3], [1, 2, 5]] + self.reversepanel = [0, 3] + self.edgelength = [] + self.vertsdone = [[0, 0]] * len(self.vertskeleton) + + +# for face on top? YES class tetraface(geodesic): - def __init__(self,parameter): + def __init__(self, parameter): geodesic.__init__(mesh) - geodesic.setparameters(self,parameter) + geodesic.setparameters(self, parameter) self.set_vert_edge_skeleons() def set_vert_edge_skeleons(self): - self.vertskeleton=[ vertex(( -1.41421356237 , -0.816496580927 , 0.57735026919 )), - vertex(( 1.41421356237 , -0.816496580927 , 0.57735026919 )), - vertex(( 0.0 , 1.63299316185 , 0.577350269185 )), - vertex(( 0.0 , 0.0 , -1.73205080757 )) ] - self.edgeskeleton=[ edge(self.vertskeleton[0],self.vertskeleton[1]), - edge(self.vertskeleton[2],self.vertskeleton[1]), - edge(self.vertskeleton[2],self.vertskeleton[0]), - edge(self.vertskeleton[0],self.vertskeleton[3]), - edge(self.vertskeleton[1],self.vertskeleton[3]), - edge(self.vertskeleton[2],self.vertskeleton[3]) ] - self.panelpoints=[[2,0,1],[0,1,3],[2,1,3],[2,0,3]] - self.paneledges=[[2,1,0],[0,3,4],[1,5,4],[2,5,3]] - self.reversepanel=[1,3] - self.edgelength=[] - self.vertsdone=[[0,0]] * len(self.vertskeleton) + self.vertskeleton = [vertex((-1.41421356237, -0.816496580927, 0.57735026919)), + vertex((1.41421356237, -0.816496580927, 0.57735026919)), + vertex((0.0, 1.63299316185, 0.577350269185)), + vertex((0.0, 0.0, -1.73205080757))] + + self.edgeskeleton = [edge(self.vertskeleton[0], self.vertskeleton[1]), + edge(self.vertskeleton[2], self.vertskeleton[1]), + edge(self.vertskeleton[2], self.vertskeleton[0]), + edge(self.vertskeleton[0], self.vertskeleton[3]), + edge(self.vertskeleton[1], self.vertskeleton[3]), + edge(self.vertskeleton[2], self.vertskeleton[3]) + ] + self.panelpoints = [[2, 0, 1], [0, 1, 3], [2, 1, 3], [2, 0, 3]] + + self.paneledges = [[2, 1, 0], [0, 3, 4], [1, 5, 4], [2, 5, 3]] + self.reversepanel = [1, 3] + self.edgelength = [] + self.vertsdone = [[0, 0]] * len(self.vertskeleton) + class octahedron(geodesic): - def __init__(self,parameter): + def __init__(self, parameter): geodesic.__init__(mesh) - geodesic.setparameters(self,parameter) + geodesic.setparameters(self, parameter) self.set_vert_edge_skeleons() def set_vert_edge_skeleons(self): - self.vertskeleton=[ vertex((0.0,0.0,1.0)), - vertex((0.0,1.0,0.0)), - vertex((-1.0,0.0,0.0)), - vertex((0.0,-1.0,0.0)), - vertex((1.0,0.0,0.0)), - vertex((0.0,0.0,-1.0)) ] + self.vertskeleton = [vertex((0.0, 0.0, 1.0)), + vertex((0.0, 1.0, 0.0)), + vertex((-1.0, 0.0, 0.0)), + vertex((0.0, -1.0, 0.0)), + vertex((1.0, 0.0, 0.0)), + vertex((0.0, 0.0, -1.0))] + for i in range(len(self.vertskeleton)): self.vertskeleton[i].index = i - self.edgeskeleton=[ edge(self.vertskeleton[0],self.vertskeleton[1]), - edge(self.vertskeleton[0],self.vertskeleton[2]), - edge(self.vertskeleton[0],self.vertskeleton[3]), - edge(self.vertskeleton[0],self.vertskeleton[4]), - edge(self.vertskeleton[1],self.vertskeleton[2]), - edge(self.vertskeleton[2],self.vertskeleton[3]), - edge(self.vertskeleton[3],self.vertskeleton[4]), - edge(self.vertskeleton[4],self.vertskeleton[1]), - edge(self.vertskeleton[1],self.vertskeleton[5]), - edge(self.vertskeleton[2],self.vertskeleton[5]), - edge(self.vertskeleton[3],self.vertskeleton[5]), - edge(self.vertskeleton[4],self.vertskeleton[5]) ] - self.panelpoints=[[0,1,2],[0,2,3],[0,3,4],[0,4,1],[1,2,5],[2,3,5],[3,4,5],[4,1,5]] - self.paneledges=[[0,1,4],[1,2,5],[2,3,6],[3,0,7],[4,8,9],[5,9,10],[6,10,11],[7,11,8]] - self.reversepanel=[4,5,6,7] - self.edgelength=[] - self.vertsdone=[[0,0]] * len(self.vertskeleton) + self.edgeskeleton = [edge(self.vertskeleton[0], self.vertskeleton[1]), + edge(self.vertskeleton[0], self.vertskeleton[2]), + edge(self.vertskeleton[0], self.vertskeleton[3]), + edge(self.vertskeleton[0], self.vertskeleton[4]), + edge(self.vertskeleton[1], self.vertskeleton[2]), + edge(self.vertskeleton[2], self.vertskeleton[3]), + edge(self.vertskeleton[3], self.vertskeleton[4]), + edge(self.vertskeleton[4], self.vertskeleton[1]), + edge(self.vertskeleton[1], self.vertskeleton[5]), + edge(self.vertskeleton[2], self.vertskeleton[5]), + edge(self.vertskeleton[3], self.vertskeleton[5]), + edge(self.vertskeleton[4], self.vertskeleton[5])] + + self.panelpoints = [[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 1], [1, 2, 5], + [2, 3, 5], [3, 4, 5], [4, 1, 5]] + self.paneledges = [[0, 1, 4], [1, 2, 5], [2, 3, 6], [3, 0, 7], [4, 8, 9], + [5, 9, 10], [6, 10, 11], [7, 11, 8]] + self.reversepanel = [4, 5, 6, 7] + self.edgelength = [] + self.vertsdone = [[0, 0]] * len(self.vertskeleton) + class octaedge(geodesic): - def __init__(self,parameter): + def __init__(self, parameter): geodesic.__init__(mesh) - geodesic.setparameters(self,parameter) + geodesic.setparameters(self, parameter) self.set_vert_edge_skeleons() def set_vert_edge_skeleons(self): - self.vertskeleton=[ vertex(( 0.0 , -0.707106781187 , 0.707106781187 )), - vertex(( 0.0 , 0.707106781187 , 0.707106781187 )), - vertex(( 1.0 , 0.0 , 0.0 )), - vertex(( -1.0 , 0.0 , 0.0 )), - vertex(( 0.0 , -0.707106781187 , -0.707106781187 )), - vertex(( 0.0 , 0.707106781187 , -0.707106781187 )) ] - self.edgeskeleton=[ edge(self.vertskeleton[0],self.vertskeleton[1]), - edge(self.vertskeleton[0],self.vertskeleton[4]), - edge(self.vertskeleton[0],self.vertskeleton[2]), - edge(self.vertskeleton[1],self.vertskeleton[2]), - edge(self.vertskeleton[1],self.vertskeleton[5]), - edge(self.vertskeleton[1],self.vertskeleton[3]), - edge(self.vertskeleton[0],self.vertskeleton[3]), - edge(self.vertskeleton[2],self.vertskeleton[4]), - edge(self.vertskeleton[2],self.vertskeleton[5]), - edge(self.vertskeleton[3],self.vertskeleton[5]), - edge(self.vertskeleton[3],self.vertskeleton[4]), - edge(self.vertskeleton[4],self.vertskeleton[5]) ] - self.panelpoints=[[0,1,2],[0,1,3],[0,2,4],[1,2,5],[1,3,5],[0,3,4],[2,4,5],[3,4,5]] - self.paneledges=[[0,2,3],[0,6,5],[2,1,7],[3,4,8],[5,4,9],[6,1,10],[7,8,11],[10,9,11]] - self.reversepanel=[0,2,4,7] - self.edgelength=[] - self.vertsdone=[[0,0]] * len(self.vertskeleton) + self.vertskeleton = [vertex((0.0, -0.707106781187, 0.707106781187)), + vertex((0.0, 0.707106781187, 0.707106781187)), + vertex((1.0, 0.0, 0.0)), + vertex((-1.0, 0.0, 0.0)), + vertex((0.0, -0.707106781187, -0.707106781187)), + vertex((0.0, 0.707106781187, -0.707106781187))] + + self.edgeskeleton = [edge(self.vertskeleton[0], self.vertskeleton[1]), + edge(self.vertskeleton[0], self.vertskeleton[4]), + edge(self.vertskeleton[0], self.vertskeleton[2]), + edge(self.vertskeleton[1], self.vertskeleton[2]), + edge(self.vertskeleton[1], self.vertskeleton[5]), + edge(self.vertskeleton[1], self.vertskeleton[3]), + edge(self.vertskeleton[0], self.vertskeleton[3]), + edge(self.vertskeleton[2], self.vertskeleton[4]), + edge(self.vertskeleton[2], self.vertskeleton[5]), + edge(self.vertskeleton[3], self.vertskeleton[5]), + edge(self.vertskeleton[3], self.vertskeleton[4]), + edge(self.vertskeleton[4], self.vertskeleton[5])] + + self.panelpoints = [[0, 1, 2], [0, 1, 3], [0, 2, 4], [1, 2, 5], [1, 3, 5], + [0, 3, 4], [2, 4, 5], [3, 4, 5]] + self.paneledges = [[0, 2, 3], [0, 6, 5], [2, 1, 7], [3, 4, 8], [5, 4, 9], + [6, 1, 10], [7, 8, 11], [10, 9, 11]] + + self.reversepanel = [0, 2, 4, 7] + self.edgelength = [] + self.vertsdone = [[0, 0]] * len(self.vertskeleton) + class octaface(geodesic): - def __init__(self,parameter): + def __init__(self, parameter): geodesic.__init__(mesh) - geodesic.setparameters(self,parameter) + geodesic.setparameters(self, parameter) self.set_vert_edge_skeleons() def set_vert_edge_skeleons(self): - self.vertskeleton=[ vertex(( 0.408248458663 , -0.707106781187 , 0.577350150255 )), - vertex(( 0.408248458663 , 0.707106781187 , 0.577350150255 )), - vertex(( -0.816496412728 , 0.0 , 0.577350507059 )), - vertex(( -0.408248458663 , -0.707106781187 , -0.577350150255 )), - vertex(( 0.816496412728 , 0.0 , -0.577350507059 )), - vertex(( -0.408248458663 , 0.707106781187 , -0.577350150255 )) ] - self.edgeskeleton=[ edge(self.vertskeleton[0],self.vertskeleton[1]), - edge(self.vertskeleton[2],self.vertskeleton[1]), - edge(self.vertskeleton[2],self.vertskeleton[0]), - edge(self.vertskeleton[0],self.vertskeleton[3]), - edge(self.vertskeleton[0],self.vertskeleton[4]), - edge(self.vertskeleton[1],self.vertskeleton[4]), - edge(self.vertskeleton[1],self.vertskeleton[5]), - edge(self.vertskeleton[2],self.vertskeleton[5]), - edge(self.vertskeleton[2],self.vertskeleton[3]), - edge(self.vertskeleton[3],self.vertskeleton[4]), - edge(self.vertskeleton[4],self.vertskeleton[5]), - edge(self.vertskeleton[3],self.vertskeleton[5]) ] - self.panelpoints=[[2,0,1],[0,3,4],[0,1,4],[1,4,5],[2,1,5],[2,3,5],[2,0,3],[3,4,5]] - self.paneledges=[[2,1,0],[3,4,9],[0,4,5],[5,6,10],[1,7,6],[8,7,11],[2,8,3],[9,11,10]] - self.reversepanel=[2,5,6,7] - self.edgelength=[] - self.vertsdone=[[0,0]] * len(self.vertskeleton) + self.vertskeleton = [vertex((0.408248458663, -0.707106781187, 0.577350150255)), + vertex((0.408248458663, 0.707106781187, 0.577350150255)), + vertex((-0.816496412728, 0.0, 0.577350507059)), + vertex((-0.408248458663, -0.707106781187, -0.577350150255)), + vertex((0.816496412728, 0.0, -0.577350507059)), + vertex((-0.408248458663, 0.707106781187, -0.577350150255))] + + self.edgeskeleton = [edge(self.vertskeleton[0], self.vertskeleton[1]), + edge(self.vertskeleton[2], self.vertskeleton[1]), + edge(self.vertskeleton[2], self.vertskeleton[0]), + edge(self.vertskeleton[0], self.vertskeleton[3]), + edge(self.vertskeleton[0], self.vertskeleton[4]), + edge(self.vertskeleton[1], self.vertskeleton[4]), + edge(self.vertskeleton[1], self.vertskeleton[5]), + edge(self.vertskeleton[2], self.vertskeleton[5]), + edge(self.vertskeleton[2], self.vertskeleton[3]), + edge(self.vertskeleton[3], self.vertskeleton[4]), + edge(self.vertskeleton[4], self.vertskeleton[5]), + edge(self.vertskeleton[3], self.vertskeleton[5])] + + self.panelpoints = [[2, 0, 1], [0, 3, 4], [0, 1, 4], [1, 4, 5], + [2, 1, 5], [2, 3, 5], [2, 0, 3], [3, 4, 5]] + + self.paneledges = [[2, 1, 0], [3, 4, 9], [0, 4, 5], [5, 6, 10], + [1, 7, 6], [8, 7, 11], [2, 8, 3], [9, 11, 10]] + + self.reversepanel = [2, 5, 6, 7] + self.edgelength = [] + self.vertsdone = [[0, 0]] * len(self.vertskeleton) + class icosahedron(geodesic): - def __init__(self,parameter): + def __init__(self, parameter): geodesic.__init__(mesh) - geodesic.setparameters(self,parameter) + geodesic.setparameters(self, parameter) self.set_vert_edge_skeleons() def set_vert_edge_skeleons(self): - self.vertskeleton=[ vertex(( 0.0 , 0.0 , 0.587785252292 )), - vertex(( 0.0 , -0.525731096637 , 0.262865587024 )), - vertex(( 0.5 , -0.162459832634 , 0.262865565628 )), - vertex(( 0.309016994375 , 0.425325419658 , 0.262865531009 )), - vertex(( -0.309016994375 , 0.425325419658 , 0.262865531009 )), - vertex(( -0.5 , -0.162459832634 , 0.262865565628 )), - vertex(( 0.309016994375 , -0.425325419658 , -0.262865531009 )), - vertex(( 0.5 , 0.162459832634 , -0.262865565628 )), - vertex(( 0.0 , 0.525731096637 , -0.262865587024 )), - vertex(( -0.5 , 0.162459832634 , -0.262865565628 )), - vertex(( -0.309016994375 , -0.425325419658 , -0.262865531009 )), - vertex(( 0.0 , 0.0 , -0.587785252292 )) ] - self.edgeskeleton=[ edge(self.vertskeleton[0],self.vertskeleton[1]), - edge(self.vertskeleton[0],self.vertskeleton[2]), - edge(self.vertskeleton[0],self.vertskeleton[3]), - edge(self.vertskeleton[0],self.vertskeleton[4]), - edge(self.vertskeleton[0],self.vertskeleton[5]), - edge(self.vertskeleton[1],self.vertskeleton[2]), - edge(self.vertskeleton[2],self.vertskeleton[3]), - edge(self.vertskeleton[3],self.vertskeleton[4]), - edge(self.vertskeleton[4],self.vertskeleton[5]), - edge(self.vertskeleton[5],self.vertskeleton[1]), - edge(self.vertskeleton[1],self.vertskeleton[6]), - edge(self.vertskeleton[2],self.vertskeleton[6]), - edge(self.vertskeleton[2],self.vertskeleton[7]), - edge(self.vertskeleton[3],self.vertskeleton[7]), - edge(self.vertskeleton[3],self.vertskeleton[8]), - edge(self.vertskeleton[4],self.vertskeleton[8]), - edge(self.vertskeleton[4],self.vertskeleton[9]), - edge(self.vertskeleton[5],self.vertskeleton[9]), - edge(self.vertskeleton[5],self.vertskeleton[10]), - edge(self.vertskeleton[1],self.vertskeleton[10]), - edge(self.vertskeleton[6],self.vertskeleton[7]), - edge(self.vertskeleton[7],self.vertskeleton[8]), - edge(self.vertskeleton[8],self.vertskeleton[9]), - edge(self.vertskeleton[9],self.vertskeleton[10]), - edge(self.vertskeleton[10],self.vertskeleton[6]), - edge(self.vertskeleton[6],self.vertskeleton[11]), - edge(self.vertskeleton[7],self.vertskeleton[11]), - edge(self.vertskeleton[8],self.vertskeleton[11]), - edge(self.vertskeleton[9],self.vertskeleton[11]), - edge(self.vertskeleton[10],self.vertskeleton[11]) ] - self.panelpoints=[[0,1,2],[0,2,3],[0,3,4],[0,4,5],[0,5,1],[1,2,6],[2,6,7],[2,3,7],[3,7,8],[3,4,8],[4,8,9],[4,5,9],[5,9,10],[5,1,10],[1,10,6],[6,7,11],[7,8,11],[8,9,11],[9,10,11],[10,6,11]] - self.paneledges=[[0,1,5],[1,2,6],[2,3,7],[3,4,8],[4,0,9],[5,10,11],[11,12,20],[6,12,13],[13,14,21],[7,14,15],[15,16,22],[8,16,17],[17,18,23],[9,18,19],[19,10,24],[20,25,26],[21,26,27],[22,27,28],[23,28,29],[24,29,25]] - self.reversepanel=[5,7,9,11,13,15,16,17,18,19] - self.edgelength=[] - self.vertsdone=[[0,0]] * len(self.vertskeleton) + self.vertskeleton = [vertex((0.0, 0.0, 0.587785252292)), + vertex((0.0, -0.525731096637, 0.262865587024)), + vertex((0.5, -0.162459832634, 0.262865565628)), + vertex((0.309016994375, 0.425325419658, 0.262865531009)), + vertex((-0.309016994375, 0.425325419658, 0.262865531009)), + vertex((-0.5, -0.162459832634, 0.262865565628)), + vertex((0.309016994375, -0.425325419658, -0.262865531009)), + vertex((0.5, 0.162459832634, -0.262865565628)), + vertex((0.0, 0.525731096637, -0.262865587024)), + vertex((-0.5, 0.162459832634, -0.262865565628)), + vertex((-0.309016994375, -0.425325419658, -0.262865531009)), + vertex((0.0, 0.0, -0.587785252292))] + + self.edgeskeleton = [edge(self.vertskeleton[0], self.vertskeleton[1]), + edge(self.vertskeleton[0], self.vertskeleton[2]), + edge(self.vertskeleton[0], self.vertskeleton[3]), + edge(self.vertskeleton[0], self.vertskeleton[4]), + edge(self.vertskeleton[0], self.vertskeleton[5]), + edge(self.vertskeleton[1], self.vertskeleton[2]), + edge(self.vertskeleton[2], self.vertskeleton[3]), + edge(self.vertskeleton[3], self.vertskeleton[4]), + edge(self.vertskeleton[4], self.vertskeleton[5]), + edge(self.vertskeleton[5], self.vertskeleton[1]), + edge(self.vertskeleton[1], self.vertskeleton[6]), + edge(self.vertskeleton[2], self.vertskeleton[6]), + edge(self.vertskeleton[2], self.vertskeleton[7]), + edge(self.vertskeleton[3], self.vertskeleton[7]), + edge(self.vertskeleton[3], self.vertskeleton[8]), + edge(self.vertskeleton[4], self.vertskeleton[8]), + edge(self.vertskeleton[4], self.vertskeleton[9]), + edge(self.vertskeleton[5], self.vertskeleton[9]), + edge(self.vertskeleton[5], self.vertskeleton[10]), + edge(self.vertskeleton[1], self.vertskeleton[10]), + edge(self.vertskeleton[6], self.vertskeleton[7]), + edge(self.vertskeleton[7], self.vertskeleton[8]), + edge(self.vertskeleton[8], self.vertskeleton[9]), + edge(self.vertskeleton[9], self.vertskeleton[10]), + edge(self.vertskeleton[10], self.vertskeleton[6]), + edge(self.vertskeleton[6], self.vertskeleton[11]), + edge(self.vertskeleton[7], self.vertskeleton[11]), + edge(self.vertskeleton[8], self.vertskeleton[11]), + edge(self.vertskeleton[9], self.vertskeleton[11]), + edge(self.vertskeleton[10], self.vertskeleton[11])] + + self.panelpoints = [[0, 1, 2], [0, 2, 3], [0, 3, 4], [0, 4, 5], [0, 5, 1], [1, 2, 6], + [2, 6, 7], [2, 3, 7], [3, 7, 8], [3, 4, 8], [4, 8, 9], [4, 5, 9], + [5, 9, 10], [5, 1, 10], [1, 10, 6], [6, 7, 11], [7, 8, 11], + [8, 9, 11], [9, 10, 11], [10, 6, 11]] + + self.paneledges = [[0, 1, 5], [1, 2, 6], [2, 3, 7], [3, 4, 8], [4, 0, 9], [5, 10, 11], + [11, 12, 20], [6, 12, 13], [13, 14, 21], [7, 14, 15], [15, 16, 22], + [8, 16, 17], [17, 18, 23], [9, 18, 19], [19, 10, 24], [20, 25, 26], + [21, 26, 27], [22, 27, 28], [23, 28, 29], [24, 29, 25]] + + self.reversepanel = [5, 7, 9, 11, 13, 15, 16, 17, 18, 19] + self.edgelength = [] + self.vertsdone = [[0, 0]] * len(self.vertskeleton) + class icoedge(geodesic): - def __init__(self,parameter): + def __init__(self, parameter): geodesic.__init__(mesh) - geodesic.setparameters(self,parameter) + geodesic.setparameters(self, parameter) self.set_vert_edge_skeleons() def set_vert_edge_skeleons(self): - self.vertskeleton=[ vertex(( 0 , 0.309016994375 , 0.5 )), - vertex(( 0 , -0.309016994375 , 0.5 )), - vertex(( -0.5 , 0 , 0.309016994375 )), - vertex(( 0.5 , 0 , 0.309016994375 )), - vertex(( -0.309016994375 , -0.5 , 0 )), - vertex(( 0.309016994375 , -0.5 , 0 )), - vertex(( 0.309016994375 , 0.5 , 0 )), - vertex(( -0.309016994375 , 0.5 , 0 )), - vertex(( -0.5 , 0 , -0.309016994375 )), - vertex(( 0.5 , 0 , -0.309016994375 )), - vertex(( 0 , 0.309016994375 , -0.5 )), - vertex(( 0 , -0.309016994375 , -0.5 )) ] - self.edgeskeleton=[ edge(self.vertskeleton[0],self.vertskeleton[1]), - edge(self.vertskeleton[0],self.vertskeleton[7]), - edge(self.vertskeleton[0],self.vertskeleton[2]), - edge(self.vertskeleton[1],self.vertskeleton[2]), - edge(self.vertskeleton[1],self.vertskeleton[4]), - edge(self.vertskeleton[1],self.vertskeleton[5]), - edge(self.vertskeleton[1],self.vertskeleton[3]), - edge(self.vertskeleton[0],self.vertskeleton[3]), - edge(self.vertskeleton[0],self.vertskeleton[6]), - edge(self.vertskeleton[2],self.vertskeleton[7]), - edge(self.vertskeleton[2],self.vertskeleton[8]), - edge(self.vertskeleton[2],self.vertskeleton[4]), - edge(self.vertskeleton[4],self.vertskeleton[5]), - edge(self.vertskeleton[3],self.vertskeleton[5]), - edge(self.vertskeleton[3],self.vertskeleton[9]), - edge(self.vertskeleton[3],self.vertskeleton[6]), - edge(self.vertskeleton[6],self.vertskeleton[7]), - edge(self.vertskeleton[7],self.vertskeleton[10]), - edge(self.vertskeleton[7],self.vertskeleton[8]), - edge(self.vertskeleton[4],self.vertskeleton[8]), - edge(self.vertskeleton[4],self.vertskeleton[11]), - edge(self.vertskeleton[5],self.vertskeleton[11]), - edge(self.vertskeleton[5],self.vertskeleton[9]), - edge(self.vertskeleton[6],self.vertskeleton[9]), - edge(self.vertskeleton[6],self.vertskeleton[10]), - edge(self.vertskeleton[8],self.vertskeleton[10]), - edge(self.vertskeleton[8],self.vertskeleton[11]), - edge(self.vertskeleton[9],self.vertskeleton[11]), - edge(self.vertskeleton[9],self.vertskeleton[10]), - edge(self.vertskeleton[10],self.vertskeleton[11]) ] - self.panelpoints=[ [0,1,2],[0,1,3],[0,2,7],[1,2,4],[1,4,5],[1,3,5],[0,3,6],[0,6,7],[2,7,8],[2,4,8], - [3,5,9],[3,6,9],[7,8,10],[4,8,11],[4,5,11],[5,9,11],[6,9,10],[6,7,10],[8,10,11],[9,10,11]] - self.paneledges=[[0,2,3],[0,7,6],[2,1,9],[3,4,11],[4,5,12],[6,5,13],[7,8,15],[8,1,16],[9,10,18],[11,10,19], - [13,14,22],[15,14,23],[18,17,25],[19,20,26],[12,20,21],[22,21,27],[23,24,28],[16,24,17],[25,26,29],[28,27,29]] - self.reversepanel=[0,2,5,9,11,12,14,15,17,19] - self.edgelength=[] - self.vertsdone=[[0,0]] * len(self.vertskeleton) + self.vertskeleton = [vertex((0, 0.309016994375, 0.5)), + vertex((0, -0.309016994375, 0.5)), + vertex((-0.5, 0, 0.309016994375)), + vertex((0.5, 0, 0.309016994375)), + vertex((-0.309016994375, -0.5, 0)), + vertex((0.309016994375, -0.5, 0)), + vertex((0.309016994375, 0.5, 0)), + vertex((-0.309016994375, 0.5, 0)), + vertex((-0.5, 0, -0.309016994375)), + vertex((0.5, 0, -0.309016994375)), + vertex((0, 0.309016994375, -0.5)), + vertex((0, -0.309016994375, -0.5))] + + self.edgeskeleton = [edge(self.vertskeleton[0], self.vertskeleton[1]), + edge(self.vertskeleton[0], self.vertskeleton[7]), + edge(self.vertskeleton[0], self.vertskeleton[2]), + edge(self.vertskeleton[1], self.vertskeleton[2]), + edge(self.vertskeleton[1], self.vertskeleton[4]), + edge(self.vertskeleton[1], self.vertskeleton[5]), + edge(self.vertskeleton[1], self.vertskeleton[3]), + edge(self.vertskeleton[0], self.vertskeleton[3]), + edge(self.vertskeleton[0], self.vertskeleton[6]), + edge(self.vertskeleton[2], self.vertskeleton[7]), + edge(self.vertskeleton[2], self.vertskeleton[8]), + edge(self.vertskeleton[2], self.vertskeleton[4]), + edge(self.vertskeleton[4], self.vertskeleton[5]), + edge(self.vertskeleton[3], self.vertskeleton[5]), + edge(self.vertskeleton[3], self.vertskeleton[9]), + edge(self.vertskeleton[3], self.vertskeleton[6]), + edge(self.vertskeleton[6], self.vertskeleton[7]), + edge(self.vertskeleton[7], self.vertskeleton[10]), + edge(self.vertskeleton[7], self.vertskeleton[8]), + edge(self.vertskeleton[4], self.vertskeleton[8]), + edge(self.vertskeleton[4], self.vertskeleton[11]), + edge(self.vertskeleton[5], self.vertskeleton[11]), + edge(self.vertskeleton[5], self.vertskeleton[9]), + edge(self.vertskeleton[6], self.vertskeleton[9]), + edge(self.vertskeleton[6], self.vertskeleton[10]), + edge(self.vertskeleton[8], self.vertskeleton[10]), + edge(self.vertskeleton[8], self.vertskeleton[11]), + edge(self.vertskeleton[9], self.vertskeleton[11]), + edge(self.vertskeleton[9], self.vertskeleton[10]), + edge(self.vertskeleton[10], self.vertskeleton[11])] + + self.panelpoints = [[0, 1, 2], [0, 1, 3], [0, 2, 7], [1, 2, 4], [1, 4, 5], + [1, 3, 5], [0, 3, 6], [0, 6, 7], [2, 7, 8], [2, 4, 8], + [3, 5, 9], [3, 6, 9], [7, 8, 10], [4, 8, 11], [4, 5, 11], + [5, 9, 11], [6, 9, 10], [6, 7, 10], [8, 10, 11], [9, 10, 11]] + + self.paneledges = [[0, 2, 3], [0, 7, 6], [2, 1, 9], [3, 4, 11], [4, 5, 12], [6, 5, 13], + [7, 8, 15], [8, 1, 16], [9, 10, 18], [11, 10, 19], [13, 14, 22], + [15, 14, 23], [18, 17, 25], [19, 20, 26], [12, 20, 21], [22, 21, 27], + [23, 24, 28], [16, 24, 17], [25, 26, 29], [28, 27, 29]] + + self.reversepanel = [0, 2, 5, 9, 11, 12, 14, 15, 17, 19] + self.edgelength = [] + self.vertsdone = [[0, 0]] * len(self.vertskeleton) + class icoface(geodesic): - def __init__(self,parameter): + def __init__(self, parameter): geodesic.__init__(mesh) - geodesic.setparameters(self,parameter) + geodesic.setparameters(self, parameter) self.set_vert_edge_skeleons() def set_vert_edge_skeleons(self): - self.vertskeleton=[ vertex(( -0.17841104489 , 0.309016994375 , 0.46708617948 )), - vertex(( -0.17841104489 , -0.309016994375 , 0.46708617948 )), - vertex(( 0.35682208977 , 0.0 , 0.467086179484 )), - vertex(( -0.57735026919 , 0.0 , 0.110264089705 )), - vertex(( -0.288675134594 , -0.5 , -0.11026408971 )), - vertex(( 0.288675134594 , -0.5 , 0.11026408971 )), - vertex(( 0.57735026919 , 0.0 , -0.110264089705 )), - vertex(( 0.288675134594 , 0.5 , 0.11026408971 )), - vertex(( -0.288675134594 , 0.5 , -0.11026408971 )), - vertex(( -0.35682208977 , 0.0 , -0.467086179484 )), - vertex(( 0.17841104489 , -0.309016994375 , -0.46708617948 )), - vertex(( 0.17841104489 , 0.309016994375 , -0.46708617948 )) ] - self.edgeskeleton=[ edge(self.vertskeleton[0],self.vertskeleton[1]), - edge(self.vertskeleton[2],self.vertskeleton[1]), - edge(self.vertskeleton[2],self.vertskeleton[0]), - edge(self.vertskeleton[0],self.vertskeleton[3]), - edge(self.vertskeleton[1],self.vertskeleton[3]), - edge(self.vertskeleton[1],self.vertskeleton[4]), - edge(self.vertskeleton[1],self.vertskeleton[5]), - edge(self.vertskeleton[2],self.vertskeleton[5]), - edge(self.vertskeleton[2],self.vertskeleton[6]), - edge(self.vertskeleton[2],self.vertskeleton[7]), - edge(self.vertskeleton[0],self.vertskeleton[7]), - edge(self.vertskeleton[0],self.vertskeleton[8]), - edge(self.vertskeleton[3],self.vertskeleton[9]), - edge(self.vertskeleton[3],self.vertskeleton[4]), - edge(self.vertskeleton[5],self.vertskeleton[4]), - edge(self.vertskeleton[5],self.vertskeleton[10]), - edge(self.vertskeleton[5],self.vertskeleton[6]), - edge(self.vertskeleton[7],self.vertskeleton[6]), - edge(self.vertskeleton[7],self.vertskeleton[11]), - edge(self.vertskeleton[7],self.vertskeleton[8]), - edge(self.vertskeleton[3],self.vertskeleton[8]), - edge(self.vertskeleton[4],self.vertskeleton[9]), - edge(self.vertskeleton[4],self.vertskeleton[10]), - edge(self.vertskeleton[6],self.vertskeleton[10]), - edge(self.vertskeleton[6],self.vertskeleton[11]), - edge(self.vertskeleton[8],self.vertskeleton[11]), - edge(self.vertskeleton[8],self.vertskeleton[9]), - edge(self.vertskeleton[9],self.vertskeleton[10]), - edge(self.vertskeleton[11],self.vertskeleton[10]), - edge(self.vertskeleton[11],self.vertskeleton[9]) ] - self.panelpoints=[[2,0,1],[0,1,3],[2,1,5],[2,0,7],[1,3,4],[1,5,4],[2,5,6],[2,7,6],[0,7,8],[0,3,8],[3,4,9],[5,4,10],[5,6,10],[7,6,11],[7,8,11],[3,8,9],[4,9,10],[6,11,10],[8,11,9],[11,9,10]] - self.paneledges=[[2,1,0],[0,3,4],[1,7,6],[2,9,10],[4,5,13],[6,5,14],[7,8,16],[9,8,17],[10,11,19],[3,11,20], - [13,12,21],[14,15,22],[16,15,23],[17,18,24],[19,18,25],[20,12,26],[21,22,27],[24,23,28],[25,26,29],[29,28,27]] - self.reversepanel=[1,3,5,7,9,10,12,14,17,19] - self.edgelength=[] - self.vertsdone=[[0,0]] * len(self.vertskeleton) - -##???PKHG TODO this does not work yet ... -def creategeo(geo,polytype,orientation,parameters): + self.vertskeleton = [vertex((-0.17841104489, 0.309016994375, 0.46708617948)), + vertex((-0.17841104489, -0.309016994375, 0.46708617948)), + vertex((0.35682208977, 0.0, 0.467086179484)), + vertex((-0.57735026919, 0.0, 0.110264089705)), + vertex((-0.288675134594, -0.5, -0.11026408971)), + vertex((0.288675134594, -0.5, 0.11026408971)), + vertex((0.57735026919, 0.0, -0.110264089705)), + vertex((0.288675134594, 0.5, 0.11026408971)), + vertex((-0.288675134594, 0.5, -0.11026408971)), + vertex((-0.35682208977, 0.0, -0.467086179484)), + vertex((0.17841104489, -0.309016994375, -0.46708617948)), + vertex((0.17841104489, 0.309016994375, -0.46708617948))] + + self.edgeskeleton = [edge(self.vertskeleton[0], self.vertskeleton[1]), + edge(self.vertskeleton[2], self.vertskeleton[1]), + edge(self.vertskeleton[2], self.vertskeleton[0]), + edge(self.vertskeleton[0], self.vertskeleton[3]), + edge(self.vertskeleton[1], self.vertskeleton[3]), + edge(self.vertskeleton[1], self.vertskeleton[4]), + edge(self.vertskeleton[1], self.vertskeleton[5]), + edge(self.vertskeleton[2], self.vertskeleton[5]), + edge(self.vertskeleton[2], self.vertskeleton[6]), + edge(self.vertskeleton[2], self.vertskeleton[7]), + edge(self.vertskeleton[0], self.vertskeleton[7]), + edge(self.vertskeleton[0], self.vertskeleton[8]), + edge(self.vertskeleton[3], self.vertskeleton[9]), + edge(self.vertskeleton[3], self.vertskeleton[4]), + edge(self.vertskeleton[5], self.vertskeleton[4]), + edge(self.vertskeleton[5], self.vertskeleton[10]), + edge(self.vertskeleton[5], self.vertskeleton[6]), + edge(self.vertskeleton[7], self.vertskeleton[6]), + edge(self.vertskeleton[7], self.vertskeleton[11]), + edge(self.vertskeleton[7], self.vertskeleton[8]), + edge(self.vertskeleton[3], self.vertskeleton[8]), + edge(self.vertskeleton[4], self.vertskeleton[9]), + edge(self.vertskeleton[4], self.vertskeleton[10]), + edge(self.vertskeleton[6], self.vertskeleton[10]), + edge(self.vertskeleton[6], self.vertskeleton[11]), + edge(self.vertskeleton[8], self.vertskeleton[11]), + edge(self.vertskeleton[8], self.vertskeleton[9]), + edge(self.vertskeleton[9], self.vertskeleton[10]), + edge(self.vertskeleton[11], self.vertskeleton[10]), + edge(self.vertskeleton[11], self.vertskeleton[9])] + + self.panelpoints = [[2, 0, 1], [0, 1, 3], [2, 1, 5], [2, 0, 7], [1, 3, 4], [1, 5, 4], + [2, 5, 6], [2, 7, 6], [0, 7, 8], [0, 3, 8], [3, 4, 9], [5, 4, 10], + [5, 6, 10], [7, 6, 11], [7, 8, 11], [3, 8, 9], [4, 9, 10], + [6, 11, 10], [8, 11, 9], [11, 9, 10]] + + self.paneledges = [[2, 1, 0], [0, 3, 4], [1, 7, 6], [2, 9, 10], [4, 5, 13], [6, 5, 14], + [7, 8, 16], [9, 8, 17], [10, 11, 19], [3, 11, 20], [13, 12, 21], + [14, 15, 22], [16, 15, 23], [17, 18, 24], [19, 18, 25], [20, 12, 26], + [21, 22, 27], [24, 23, 28], [25, 26, 29], [29, 28, 27]] + + self.reversepanel = [1, 3, 5, 7, 9, 10, 12, 14, 17, 19] + self.edgelength = [] + self.vertsdone = [[0, 0]] * len(self.vertskeleton) + + +# PKHG TODO this does not work yet ... +def creategeo(geo, polytype, orientation, parameters): if polytype == 'Tetrahedron': if orientation == 'PointUp': my_tetrahedron = tetrahedron(geodesic) my_tetrahedron.set_vert_edge_skeleons() my_tetrahedron.config() - check_contains(my_tetrahedron,"my_tetra",True) + check_contains(my_tetrahedron, "my_tetra", True) vefm_add_object(geo) elif orientation == 'EdgeUp': geo = tetraedge(parameters) - else: # orientation==2: - geo=tetraface(parameters) - elif polytype == 'Octahedron': # octahedron + else: # orientation == 2: + geo = tetraface(parameters) + elif polytype == 'Octahedron': if orientation == 'PointUp': geo = octahedron(parameters) elif orientation == 'EdgeUp': geo = octaedge(parameters) - else: #if orientation==2: + else: # if orientation == 2: geo = octaface(parameters) - elif polytype == 'Icosahedron': # icosahedron + elif polytype == 'Icosahedron': if orientation == 'PointUp': geo = icosahedron(parameters) elif orientation == 'EdgeUp': geo = icoedge(parameters) - else: #if orientation==2: + else: # if orientation == 2: geo = icoface(parameters) + return geo diff --git a/add_mesh_extra_objects/geodesic_domes/third_domes_panel_271.py b/add_mesh_extra_objects/geodesic_domes/third_domes_panel_271.py index bca0f71f..75760e9d 100644 --- a/add_mesh_extra_objects/geodesic_domes/third_domes_panel_271.py +++ b/add_mesh_extra_objects/geodesic_domes/third_domes_panel_271.py @@ -5,400 +5,819 @@ from . import forms_271 from . import geodesic_classes_271 from . import add_shape_geodesic -from bpy.props import EnumProperty, IntProperty, FloatProperty, StringProperty, BoolProperty +from bpy.types import Operator +from bpy.props import ( + EnumProperty, + IntProperty, + FloatProperty, + StringProperty, + BoolProperty, + ) from math import pi -from mathutils import Vector #needed to check vertex.vector values +from mathutils import Vector # used for vertex.vector values -########global###### +# global # last_generated_object = None last_imported_mesh = None basegeodesic = None imported_hubmesh_to_use = None -########global end###### +# global end # -########EIND FOR SHAPEKEYS###### -### error messages?! -bpy.types.Scene.error_message = StringProperty(name="actual error", default = "") +# ###### EIND FOR SHAPEKEYS ###### -bpy.types.Scene.geodesic_not_yet_called = BoolProperty(name="geodesic_not_called",default = True) - -bpy.types.Scene.gd_help_text_width = IntProperty(name = "Text Width" , description = "The width above which the text wraps" , default = 60 , max = 180 , min = 20) - -class GenerateGeodesicDome(bpy.types.Operator): +class GenerateGeodesicDome(Operator): bl_label = "Modify Geodesic Objects" bl_idname = "mesh.generate_geodesic_dome" bl_description = "Create Geodesic Object Types" bl_options = {'REGISTER', 'UNDO'} -#PKHG_NEW saving and loading parameters - save_parameters = BoolProperty(name = "save params",\ - description = "activation save */tmp/GD_0.GD", default = False) - load_parameters = BoolProperty(name = "load params",\ - description = "read */tmp/GD_0.GD", default = False) - - gd_help_text_width = IntProperty(name = "Text Width" , description = "The width above which the text wraps" , default = 60 , max = 180 , min = 20) - - + # PKHG_NEW saving and loading parameters + save_parameters = BoolProperty( + name="Save params", + description="Activation save */tmp/GD_0.GD", + default=False + ) + load_parameters = BoolProperty( + name="Load params", + description="Read */tmp/GD_0.GD", + default=False + ) + gd_help_text_width = IntProperty( + name="Text Width", + description="The width above which the text wraps", + default=60, + max=180, min=20 + ) mainpages = EnumProperty( - name="Menu", - description="Create Faces, Struts & Hubs", - items=[("Main", "Main", "Geodesic objects"), - ("Faces", "Faces", "Generate Faces"), - ("Struts", "Struts", "Generate Struts"), - ("Hubs", "Hubs", "Generate Hubs"), - ("Help", "Help", "Not implemented"), - ], - default='Main') - -#for Faces! + name="Menu", + description="Create Faces, Struts & Hubs", + items=[("Main", "Main", "Geodesic objects"), + ("Faces", "Faces", "Generate Faces"), + ("Struts", "Struts", "Generate Struts"), + ("Hubs", "Hubs", "Generate Hubs"), + ("Help", "Help", "Not implemented"), + ], + default='Main' + ) + # for Faces facetype_menu = EnumProperty( - name="Faces", - description="choose a facetype", - items=[("0", "strip", "strip"), - ("1", "open vertical", "vertical"), - ("2", "open slanted", "slanted"), - ("3", "closed point", "closed point"), - ("4", "pillow", "pillow"), - ("5", "closed vertical", "closed vertical"), - ("6", "stepped", "stepped"), - ("7", "spikes", "spikes"), - ("8", "boxed", "boxed"), - ("9", "diamond", "diamond"), - ("10", "bar", "bar"), - ], - default='0') - - facetoggle = BoolProperty(name="Activate: Face Object", description = "Activate Faces for Geodesic object", default = False ) - - face_use_imported_object = BoolProperty(name="Use: Imported Object",\ - description = "Activate faces on your Imported object", default = False) - facewidth = FloatProperty(name="facewidth", min = -1, soft_min = 0.001, max = 4, default = .50) - fwtog = BoolProperty(name="fwtog", default = False ) - faceheight = FloatProperty(name="faceheight", min = 0.001, max = 4, default = 1 ) - fhtog = BoolProperty(name="fhtog", default = False ) - face_detach = BoolProperty(name="face_detach", default = False ) - fmeshname = StringProperty(name="fmeshname", default = "defaultface") - - + name="Faces", + description="choose a facetype", + items=[("0", "strip", "strip"), + ("1", "open vertical", "vertical"), + ("2", "open slanted", "slanted"), + ("3", "closed point", "closed point"), + ("4", "pillow", "pillow"), + ("5", "closed vertical", "closed vertical"), + ("6", "stepped", "stepped"), + ("7", "spikes", "spikes"), + ("8", "boxed", "boxed"), + ("9", "diamond", "diamond"), + ("10", "bar", "bar"), + ], + default='0' + ) + facetoggle = BoolProperty( + name="Activate: Face Object", + description="Activate Faces for Geodesic object", + default=False + ) + face_use_imported_object = BoolProperty( + name="Use: Imported Object", + description="Activate faces on your Imported object", + default=False + ) + facewidth = FloatProperty( + name="Face Width", + min=-1, soft_min=0.001, max=4, + default=.50 + ) + fwtog = BoolProperty( + name="Width tweak", + default=False + ) + faceheight = FloatProperty( + name="Face Height", + min=0.001, max=4, + default=1 + ) + fhtog = BoolProperty( + name="Height tweak", + default=False + ) + face_detach = BoolProperty( + name="Detach Faces", + default=False + ) + fmeshname = StringProperty( + name="Face Mesh name", + default="defaultface" + ) geodesic_types = EnumProperty( - name="Objects", - description="Choose Geodesic, Grid, Cylinder, Parabola,\ - Torus, Sphere, Import your mesh or Superparameters", - items=[("Geodesic", "Geodesic", "Generate Geodesic"), - ("Grid", "Grid", "Generate Grid"), - ("Cylinder", "Cylinder", "Generate Cylinder"), - ("Parabola", "Parabola", "Generate Parabola"), - ("Torus", "Torus", "Generate Torus"), - ("Sphere", "Sphere", "Generate Sphere"), - ("Import your mesh", "Import your mesh", "Import Your Mesh"), - ], - default = 'Geodesic') - - import_mesh_name = StringProperty(name = "mesh to import",\ - description = "the name has to be the name of a meshobject", default = "None") - + name="Objects", + description="Choose Geodesic, Grid, Cylinder, Parabola, " + "Torus, Sphere, Import your mesh or Superparameters", + items=[("Geodesic", "Geodesic", "Generate Geodesic"), + ("Grid", "Grid", "Generate Grid"), + ("Cylinder", "Cylinder", "Generate Cylinder"), + ("Parabola", "Parabola", "Generate Parabola"), + ("Torus", "Torus", "Generate Torus"), + ("Sphere", "Sphere", "Generate Sphere"), + ("Import your mesh", "Import your mesh", "Import Your Mesh"), + ], + default='Geodesic' + ) + import_mesh_name = StringProperty( + name="Mesh to import", + description="the name has to be the name of a meshobject", + default="None" + ) base_type = EnumProperty( - name="Hedron", - description="Choose between Tetrahedron, Octahedron, Icosahedron ",\ - items=[("Tetrahedron", "Tetrahedron", "Generate Tetrahedron"),\ - ("Octahedron", "Octahedron", "Generate Octahedron"),\ - ("Icosahedron", "Icosahedron", "Generate Icosahedron"), - ], - default='Tetrahedron') - + name="Hedron", + description="Choose between Tetrahedron, Octahedron, Icosahedron ", + items=[("Tetrahedron", "Tetrahedron", "Generate Tetrahedron"), + ("Octahedron", "Octahedron", "Generate Octahedron"), + ("Icosahedron", "Icosahedron", "Generate Icosahedron"), + ], + default='Tetrahedron' + ) orientation = EnumProperty( - name="Point^", - description="Point (Vert), Edge or Face pointing upwards", - items=[("PointUp", "PointUp", "Point up"), - ("EdgeUp", "EdgeUp", "Edge up"), - ("FaceUp", "FaceUp", "Face up"), - ], - default='PointUp') - + name="Point^", + description="Point (Vert), Edge or Face pointing upwards", + items=[("PointUp", "PointUp", "Point up"), + ("EdgeUp", "EdgeUp", "Edge up"), + ("FaceUp", "FaceUp", "Face up"), + ], + default='PointUp' + ) geodesic_class = EnumProperty( - name="Class", - description="Subdivide Basic/Triacon", - items=[("Class 1", "Class 1", "class one"), - ("Class 2", "Class 2", "class two"), - ], - default='Class 1') - + name="Class", + description="Subdivide Basic/Triacon", + items=[("Class 1", "Class 1", "class one"), + ("Class 2", "Class 2", "class two"), + ], + default='Class 1' + ) tri_hex_star = EnumProperty( - name="Shape", - description="Choose between tri hex star face types", - items=[("tri", "tri", "tri faces"), - ("hex", "hex", "hex faces(by tri)"), - ("star", "star", "star faces(by tri)"), - ], - default='tri') - + name="Shape", + description="Choose between tri hex star face types", + items=[("tri", "tri", "tri faces"), + ("hex", "hex", "hex faces(by tri)"), + ("star", "star", "star faces(by tri)"), + ], + default='tri' + ) spherical_flat = EnumProperty( - name="Round", - description="Choose between spherical or flat ", - items=[("spherical", "spherical", "Generate spherical"), - ("flat", "flat", "Generate flat"), - ], - default='spherical') - - use_imported_mesh = BoolProperty(name="use import",\ - description = "Use an imported mesh", default = False) - -#Cylinder - cyxres= IntProperty(name="Resolution x/y", min = 3, max = 32,\ - description = "number of faces around x/y", default = 5 ) - cyyres= IntProperty(name="Resolution z", min = 3, max = 32,\ - description = "number of faces in z direction", default = 5 ) - cyxsz= FloatProperty(name="Scale x/y", min = 0.01, max = 10,\ - description = "scale in x/y direction", default = 1 ) - cyysz= FloatProperty(name="Scale z", min = 0.01, max = 10,\ - description = "scale in z direction", default = 1 ) - cyxell= FloatProperty(name="Stretch x", min = 0.001, max = 4,\ - description = "stretch in x direction", default = 1 ) - cygap= FloatProperty(name="Gap", min = -2, max = 2,\ - description = "shrink in % around radius", default = 1 ) - cygphase= FloatProperty(name="Phase", min = -4, max = 4,\ - description = "rotate around pivot x/y", default = 0 ) -#Parabola - paxres= IntProperty(name="Resolution x/y", min = 3, max = 32,\ - description = "number of faces around x/y", default = 5 ) - payres= IntProperty(name="Resolution z", min = 3, max = 32,\ - description = "number of faces in z direction", default = 5 ) - paxsz= FloatProperty(name="Scale x/y", min = 0.001, max = 10,\ - description = "scale in x/y direction", default = 0.30) - paysz= FloatProperty(name="Scale z", min = 0.001, max = 10,\ - description = "scale in z direction", default = 1 ) - paxell= FloatProperty(name="Stretch x", min = 0.001, max = 4,\ - description = "stretch in x direction", default = 1 ) - pagap= FloatProperty(name="Gap", min = -2, max = 2,\ - description = "shrink in % around radius", default = 1 ) - pagphase= FloatProperty(name="Phase", min = -4, max = 4,\ - description = "rotate around pivot x/y", default = 0 ) -#Torus - ures= IntProperty(name="Resolution x/y",min = 3, max = 32,\ - description = "number of faces around x/y", default = 8 ) - vres= IntProperty(name="Resolution z", min = 3, max = 32,\ - description = "number of faces in z direction", default = 8 ) - urad= FloatProperty(name="Radius x/y", min = 0.001, max = 10,\ - description = "radius in x/y plane", default = 1 ) - vrad= FloatProperty(name="Radius z", min = 0.001, max = 10,\ - description = "radius in z plane", default = 0.250) - uellipse= FloatProperty(name="Stretch x", min = 0.001, max = 10,\ - description = "number of faces in z direction", default = 1 ) - vellipse= FloatProperty(name="Stretch z", min = 0.001, max = 10,\ - description = "number of faces in z direction", default = 1 ) - upart= FloatProperty(name="Gap x/y", min = -4, max = 4,\ - description = "shrink faces around x/y", default = 1 ) - vpart= FloatProperty(name="Gap z", min = -4, max = 4,\ - description = "shrink faces in z direction", default = 1 ) - ugap= FloatProperty(name="Phase x/y", min = -4, max = 4,\ - description = "rotate around pivot x/y", default = 0 ) - vgap= FloatProperty(name="Phase z", min = -4, max = 4,\ - description = "rotate around pivot z", default = 0 ) - uphase= FloatProperty(name="uphase", min = -4, max = 4,\ - description = "number of faces in z direction", default = 0 ) - vphase= FloatProperty(name="vphase", min = -4, max = 4,\ - description = "number of faces in z direction", default = 0 ) - uexp= FloatProperty(name="uexp", min = -4, max = 4,\ - description = "number of faces in z direction", default = 0 ) - vexp= FloatProperty(name="vexp", min = -4, max = 4,\ - description = "number of faces in z direction", default = 0 ) - usuper= FloatProperty(name="usuper", min = -4, max = 4,\ - description = "first set of superform parameters", default = 2 ) - vsuper= FloatProperty(name="vsuper", min = -4, max = 4,\ - description = "second set of superform parameters", default = 2 ) - utwist= FloatProperty(name="Twist x/y", min = -4, max = 4,\ - description = " use with superformular u", default = 0 ) - vtwist= FloatProperty(name="Twist z", min = -4, max = 4,\ - description = "use with superformular v", default = 0 ) - -#Sphere - bures= IntProperty(name="Resolution x/y", min = 3, max = 32,\ - description = "number of faces around x/y", default = 8 ) - bvres= IntProperty(name="Resolution z", min = 3, max = 32,\ - description = "number of faces in z direction", default = 8 ) - burad= FloatProperty(name="Radius", min = -4, max = 4,\ - description = "overall radius", default = 1 ) - bupart= FloatProperty(name="Gap x/y", min = -4, max = 4,\ - description = "shrink faces around x/y", default = 1 ) - bvpart= FloatProperty(name="Gap z", min = -4, max = 4,\ - description = "shrink faces in z direction", default = 1 ) - buphase= FloatProperty(name="Phase x/y", min = -4, max = 4, - description = "rotate around pivot x/y", default = 0 ) - bvphase= FloatProperty(name="Phase z", min = -4, max = 4,\ - description = "rotate around pivot z", default = 0 ) - buellipse= FloatProperty(name="Stretch x", min = 0.001, max = 4,\ - description = "stretch in the x direction", default = 1 ) - bvellipse= FloatProperty(name="Stretch z", min = 0.001, max = 4,\ - description = "stretch in the z direction", default = 1 ) -#Grid - grxres = IntProperty(name="Resolution x", min = 2, soft_max = 10, max = 20,\ - description = "number of faces in x direction", default = 5 ) - gryres = IntProperty(name="Resolution z",min = 2, soft_min = 2, soft_max=10, max = 20,\ - description = "number of faces in x direction", default = 2) - grxsz = FloatProperty(name = "X size", min = 1, soft_min=0.01, soft_max=5, max = 10,\ - description = "x size", default = 2.0) - grysz = FloatProperty(name="Y size",min = 1, soft_min=0.01, soft_max=5, max = 10,\ - description = "y size", default = 1.0) - -#PKHG_TODO_??? what means cart - cart = IntProperty(name = "cart",min = 0, max = 2, default = 0) - frequency = IntProperty(name="Frequency", min = 1, max = 8,\ - description ="subdivide base triangles", default = 1 ) - eccentricity = FloatProperty(name = "Eccentricity", min = 0.01 , max = 4,\ - description = "scaling in x/y dimension", default = 1 ) - squish = FloatProperty(name = "Squish",min = 0.01, soft_max = 4, max = 10,\ - description = "scaling in z dimension", default = 1 ) - radius = FloatProperty(name = "Radius",min = 0.01, soft_max = 4, max = 10,\ - description = "overall radius", default = 1 ) - squareness = FloatProperty(name="Square x/y", min = 0.1, max = 5,\ - description = "superelipse action in x/y", default = 2 ) - squarez = FloatProperty(name="Square z", min = 0.1, soft_max = 5, max = 10,\ - description = "superelipse action in z", default = 2 ) - baselevel = IntProperty(name="baselevel", default = 5 ) - dual = BoolProperty(name="Dual", description = "faces become verts,\ - verts become faces, edges flip", default = False) - rotxy = FloatProperty(name="Rotate x/y", min= -4, max = 4,\ - description = "rotate superelipse action in x/y", default = 0 ) - rotz = FloatProperty(name="Rotate z", min= -4, max = 4,\ - description = "rotate superelipse action in z", default = 0 ) - -#for choice of superformula - uact = BoolProperty(name = 'superformula u (x/y)',\ - description = "activate superformula u parameters", default = False) - vact = BoolProperty(name = 'superformula v (z)',\ - description = "activate superformula v parameters", default = False) - um = FloatProperty(name = 'Pinch x/y', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Pinch the mesh on x/y", default = 3) - un1 = FloatProperty(name = 'Squash x/y', min = 0, soft_min=0.1, soft_max=5,max = 20,\ - description = "Squash the mesh x/y", default = 1) - un2 = FloatProperty(name = 'Inflate x/y', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Inflate the mesh x/y", default = 1) - un3 = FloatProperty(name = 'Roundify x/y', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Roundify x/y", default = 1) - ua = FloatProperty(name = 'Shrink', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Shrink", default = 1.0) - ub = FloatProperty(name = 'Shrink x/y', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Shrink y/x", default = 4.0) - vm = FloatProperty(name = 'Scale Z Base', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Scale Z Base", default = 1) - vn1 = FloatProperty(name = 'Scale lock Top Z', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Scale lock Top Z", default = 1) - vn2 = FloatProperty(name = 'Inflate Base', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Inflate Base", default = 1) - vn3 = FloatProperty(name = 'Inflate', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Inflate", default = 1) - va = FloatProperty(name = 'Scale 1', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Scale 1", default = 1) - vb = FloatProperty(name = 'Scale 2', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "Scale 2", default = 1) - - uturn = FloatProperty(name = 'x/y Vert cycle', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "x/y Vert cycle", default = 0) - vturn = FloatProperty(name = 'z Vert cycle', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "z Vert cycle", default = 0) - utwist = FloatProperty(name = 'x/y Twist cycle', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "x/y Twist cycle", default = 0) - vtwist = FloatProperty(name = 'z Twist cycle', min = 0, soft_min=0.1, soft_max=5,max = 10,\ - description = "z Twist cycle", default = 0) - -#Strut - struttype= IntProperty(name="struttype", default= 0) - struttoggle = BoolProperty(name="struttoggle", default = False ) - strutimporttoggle= BoolProperty(name="strutimporttoggle", default = False ) - strutimpmesh= StringProperty(name="strutimpmesh", default = "None") - strutwidth= FloatProperty(name="strutwidth", min = -10, soft_min = 5, soft_max = 5,\ - max = 10, default = 1 ) - swtog= BoolProperty(name="swtog", default = False ) - strutheight= FloatProperty(name="strutheight", min = -5, soft_min = -1, soft_max = 5,\ - max = 10, default = 1 ) - shtog= BoolProperty(name="shtog", default = False ) - strutshrink= FloatProperty(name="strutshrink", min = 0.001, max = 4, default = 1 ) - sstog= BoolProperty(name="sstog", default = False ) - stretch= FloatProperty(name="stretch", min= -4, max = 4, default = 1.0 ) - lift= FloatProperty(name="lift", min = 0.001, max = 10, default = 0 ) - smeshname= StringProperty(name="smeshname", default = "defaultstrut") - -#Hubs - hubtype = BoolProperty(name ="hubtype", description = "not used", default = True ) - hubtoggle = BoolProperty(name ="hubtoggle", default = False ) - hubimporttoggle = BoolProperty(name="new import", description = "import a mesh",\ - default = False ) - hubimpmesh = StringProperty(name="hubimpmesh",\ - description = "name of mesh to import", default = "None") - hubwidth = FloatProperty(name="hubwidth", min = 0.01, max = 10,\ - default = 1 ) - hwtog = BoolProperty(name="hwtog", default = False ) - hubheight = FloatProperty(name="hubheight", min = 0.01, max = 10,\ - default = 1 ) - hhtog = BoolProperty(name="hhtog", default = False ) - hublength = FloatProperty(name ="hublength", min = 0.1, max = 10,\ - default = 1 ) - hstog= BoolProperty(name="hstog", default = False ) - hmeshname= StringProperty(name="hmeshname",\ - description = "Name of an existing mesh needed!", default = "None") - - name_list = ['facetype_menu','facetoggle','face_use_imported_object', -'facewidth','fwtog','faceheight','fhtog', -'face_detach','fmeshname','geodesic_types','import_mesh_name', -'base_type','orientation','geodesic_class','tri_hex_star', -'spherical_flat','use_imported_mesh','cyxres','cyyres', -'cyxsz','cyysz','cyxell','cygap', -'cygphase','paxres','payres','paxsz', -'paysz','paxell','pagap','pagphase', -'ures','vres','urad','vrad', -'uellipse','vellipse','upart','vpart', -'ugap','vgap','uphase','vphase', -'uexp','vexp','usuper','vsuper', -'utwist','vtwist','bures','bvres', -'burad','bupart','bvpart','buphase', -'bvphase','buellipse','bvellipse','grxres', -'gryres','grxsz','grysz', -'cart','frequency','eccentricity','squish', -'radius','squareness','squarez','baselevel', -'dual','rotxy','rotz', -'uact','vact','um','un1', -'un2','un3','ua','ub', -'vm','vn1','vn2','vn3', -'va','vb','uturn','vturn', -'utwist','vtwist','struttype','struttoggle', -'strutimporttoggle','strutimpmesh','strutwidth','swtog', -'strutheight','shtog','strutshrink','sstog', -'stretch','lift','smeshname','hubtype', -'hubtoggle','hubimporttoggle','hubimpmesh','hubwidth', -'hwtog','hubheight','hhtog','hublength', -'hstog','hmeshname'] - - def write_params(self,filename): + name="Round", + description="Choose between spherical or flat ", + items=[("spherical", "spherical", "Generate spherical"), + ("flat", "flat", "Generate flat"), + ], + default='spherical' + ) + use_imported_mesh = BoolProperty( + name="use import", + description="Use an imported mesh", + default=False + ) + # Cylinder + cyxres = IntProperty( + name="Resolution x/y", + min=3, max=32, + description="Number of faces around x/y", + default=5 + ) + cyyres = IntProperty( + name="Resolution z", + min=3, max=32, + description="Number of faces in z direction", + default=5 + ) + cyxsz = FloatProperty( + name="Scale x/y", + min=0.01, max=10, + description="Scale in x/y direction", + default=1 + ) + cyysz = FloatProperty( + name="Scale z", + min=0.01, max=10, + description="Scale in z direction", + default=1 + ) + cyxell = FloatProperty( + name="Stretch x", + min=0.001, max=4, + description="Stretch in x direction", + default=1 + ) + cygap = FloatProperty( + name="Gap", + min=-2, max=2, + description="Shrink in % around radius", + default=1 + ) + cygphase = FloatProperty( + name="Phase", min=-4, max=4, + description="Rotate around pivot x/y", + default=0 + ) + # Parabola + paxres = IntProperty( + name="Resolution x/y", + min=3, max=32, + description="Number of faces around x/y", + default=5 + ) + payres = IntProperty( + name="Resolution z", + min=3, max=32, + description="Number of faces in z direction", + default=5 + ) + paxsz = FloatProperty( + name="Scale x/y", + min=0.001, max=10, + description="scale in x/y direction", + default=0.30 + ) + paysz = FloatProperty( + name="Scale z", + min=0.001, max=10, + description="Scale in z direction", + default=1 + ) + paxell = FloatProperty( + name="Stretch x", + min=0.001, max=4, + description="Stretch in x direction", + default=1 + ) + pagap = FloatProperty( + name="Gap", + min=-2, max=2, + description="Shrink in % around radius", + default=1 + ) + pagphase = FloatProperty( + name="Phase", + min=-4, max=4, + description="Rotate around pivot x/y", + default=0 + ) + # Torus + ures = IntProperty( + name="Resolution x/y", + min=3, max=32, + description="Number of faces around x/y", + default=8) + vres = IntProperty( + name="Resolution z", + min=3, max=32, + description="Number of faces in z direction", + default=8) + urad = FloatProperty( + name="Radius x/y", + min=0.001, max=10, + description="Radius in x/y plane", + default=1 + ) + vrad = FloatProperty( + name="Radius z", + min=0.001, max=10, + description="Radius in z plane", + default=0.250 + ) + uellipse = FloatProperty( + name="Stretch x", + min=0.001, max=10, + description="Number of faces in z direction", + default=1 + ) + vellipse = FloatProperty( + name="Stretch z", + min=0.001, max=10, + description="Number of faces in z direction", + default=1 + ) + upart = FloatProperty( + name="Gap x/y", + min=-4, max=4, + description="Shrink faces around x/y", + default=1 + ) + vpart = FloatProperty( + name="Gap z", + min=-4, max=4, + description="Shrink faces in z direction", + default=1 + ) + ugap = FloatProperty( + name="Phase x/y", + min=-4, max=4, + description="Rotate around pivot x/y", + default=0 + ) + vgap = FloatProperty( + name="Phase z", + min=-4, max=4, + description="Rotate around pivot z", + default=0 + ) + uphase = FloatProperty( + name="uphase", + min=-4, max=4, + description="Number of faces in z direction", + default=0 + ) + vphase = FloatProperty( + name="vphase", + min=-4, max=4, + description="Number of faces in z direction", + default=0 + ) + uexp = FloatProperty( + name="uexp", + min=-4, max=4, + description="Number of faces in z direction", + default=0 + ) + vexp = FloatProperty( + name="vexp", + min=-4, max=4, + description="Number of faces in z direction", + default=0 + ) + usuper = FloatProperty( + name="usuper", + min=-4, max=4, + description="First set of superform parameters", + default=2 + ) + vsuper = FloatProperty( + name="vsuper", + min=-4, max=4, + description="Second set of superform parameters", + default=2 + ) + utwist = FloatProperty( + name="Twist x/y", + min=-4, max=4, + description="Use with superformular u", + default=0 + ) + vtwist = FloatProperty( + name="Twist z", + min=-4, max=4, + description="Use with superformular v", + default=0 + ) + # Sphere + bures = IntProperty( + name="Resolution x/y", + min=3, max=32, + description="Number of faces around x/y", + default=8 + ) + bvres = IntProperty( + name="Resolution z", + min=3, max=32, + description="Number of faces in z direction", + default=8 + ) + burad = FloatProperty( + name="Radius", + min=-4, max=4, + description="overall radius", + default=1 + ) + bupart = FloatProperty( + name="Gap x/y", + min=-4, max=4, + description="Shrink faces around x/y", + default=1 + ) + bvpart = FloatProperty( + name="Gap z", + min=-4, max=4, + description="Shrink faces in z direction", + default=1 + ) + buphase = FloatProperty( + name="Phase x/y", + min=-4, max=4, + description="Rotate around pivot x/y", + default=0 + ) + bvphase = FloatProperty( + name="Phase z", + min=-4, max=4, + description="Rotate around pivot z", + default=0 + ) + buellipse = FloatProperty( + name="Stretch x", + min=0.001, max=4, + description="Stretch in the x direction", + default=1 + ) + bvellipse = FloatProperty( + name="Stretch z", + min=0.001, max=4, + description="Stretch in the z direction", + default=1 + ) + # Grid + grxres = IntProperty( + name="Resolution x", + min=2, soft_max=10, max=20, + description="Number of faces in x direction", + default=5 + ) + gryres = IntProperty( + name="Resolution z", + min=2, soft_min=2, + soft_max=10, max=20, + description="Number of faces in x direction", + default=2 + ) + grxsz = FloatProperty( + name="X size", + min=1, soft_min=0.01, + soft_max=5, max=10, + description="X size", + default=2.0 + ) + grysz = FloatProperty( + name="Y size", + min=1, soft_min=0.01, + soft_max=5, max=10, + description="Y size", + default=1.0 + ) + + # PKHG_TODO_??? what means cart + cart = IntProperty( + name="cart", + min=0, max=2, + default=0 + ) + frequency = IntProperty( + name="Frequency", + min=1, max=8, + description="Subdivide base triangles", + default=1 + ) + eccentricity = FloatProperty( + name="Eccentricity", + min=0.01, max=4, + description="Scaling in x/y dimension", + default=1 + ) + squish = FloatProperty( + name="Squish", + min=0.01, + soft_max=4, max=10, + description="Scaling in z dimension", + default=1 + ) + radius = FloatProperty( + name="Radius", + min=0.01, + soft_max=4, max=10, + description="Overall radius", + default=1 + ) + squareness = FloatProperty( + name="Square x/y", + min=0.1, max=5, + description="Superelipse action in x/y", + default=2 + ) + squarez = FloatProperty( + name="Square z", + min=0.1, soft_max=5, max=10, + description="Superelipse action in z", + default=2 + ) + baselevel = IntProperty( + name="baselevel", + default=5 + ) + dual = BoolProperty( + name="Dual", + description="Faces become verts, " + "verts become faces, edges flip", + default=False + ) + rotxy = FloatProperty( + name="Rotate x/y", + min=-4, max=4, + description="Rotate superelipse action in x/y", + default=0 + ) + rotz = FloatProperty( + name="Rotate z", + min=-4, max=4, + description="Rotate superelipse action in z", + default=0 + ) + + # for choice of superformula + uact = BoolProperty( + name="Superformula u (x/y)", + description="Activate superformula u parameters", + default=False + ) + vact = BoolProperty( + name="Superformula v (z)", + description="Activate superformula v parameters", + default=False + ) + um = FloatProperty( + name="Pinch x/y", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Pinch the mesh on x/y", + default=3 + ) + un1 = FloatProperty( + name="Squash x/y", + min=0, soft_min=0.1, + soft_max=5, max=20, + description="Squash the mesh x/y", + default=1 + ) + un2 = FloatProperty( + name="Inflate x/y", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Inflate the mesh x/y", + default=1 + ) + un3 = FloatProperty( + name="Roundify x/y", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Roundify x/y", + default=1 + ) + ua = FloatProperty( + name="Shrink", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Shrink", + default=1.0 + ) + ub = FloatProperty( + name="Shrink x/y", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Shrink y/x", + default=4.0 + ) + vm = FloatProperty( + name="Scale Z Base", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Scale Z Base", + default=1 + ) + vn1 = FloatProperty( + name="Scale lock Top Z", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Scale lock Top Z", + default=1 + ) + vn2 = FloatProperty( + name="Inflate Base", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Inflate Base", + default=1 + ) + vn3 = FloatProperty( + name="Inflate", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Inflate", + default=1 + ) + va = FloatProperty( + name="Scale 1", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Scale 1", + default=1 + ) + vb = FloatProperty( + name="Scale 2", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="Scale 2", + default=1 + ) + + uturn = FloatProperty( + name="x/y Vert cycle", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="x/y Vert cycle", + default=0 + ) + vturn = FloatProperty( + name="z Vert cycle", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="z Vert cycle", + default=0 + ) + utwist = FloatProperty( + name="x/y Twist cycle", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="x/y Twist cycle", + default=0 + ) + vtwist = FloatProperty( + name="z Twist cycle", + min=0, soft_min=0.1, + soft_max=5, max=10, + description="z Twist cycle", + default=0 + ) + # Strut + struttype = IntProperty( + name="Strut type", + default=0 + ) + struttoggle = BoolProperty( + name="Use Struts", + default=False + ) + strutimporttoggle = BoolProperty( + name="Strut import toggle", + default=False + ) + strutimpmesh = StringProperty( + name="Strut import mesh", + default="None" + ) + strutwidth = FloatProperty( + name="Strut width", + min=-10, soft_min=5, + soft_max=5, max=10, + default=1 + ) + swtog = BoolProperty( + name="Width enable", + default=False + ) + strutheight = FloatProperty( + name="Strut height", + min=-5, soft_min=-1, + soft_max=5, max=10, + default=1 + ) + shtog = BoolProperty( + name="Height tweak", + default=False + ) + strutshrink = FloatProperty( + name="Strut shrink", + min=0.001, max=4, + default=1 + ) + sstog = BoolProperty( + name="Shrink tweak", + default=False + ) + stretch = FloatProperty( + name="Stretch", + min=-4, max=4, + default=1.0 + ) + lift = FloatProperty( + name="Lift", + min=0.001, max=10, + default=0 + ) + smeshname = StringProperty( + name="Strut mesh name", + default="defaultstrut" + ) + # Hubs + hubtype = BoolProperty( + name="Hub type", + description="not used", + default=True + ) + hubtoggle = BoolProperty( + name="Use Hubs", + default=False + ) + hubimporttoggle = BoolProperty( + name="New import", + description="Import a mesh", + default=False + ) + hubimpmesh = StringProperty( + name="Hub mesh import", + description="Name of mesh to import", + default="None" + ) + hubwidth = FloatProperty( + name="Hub width", + min=0.01, max=10, + default=1 + ) + hwtog = BoolProperty( + name="Width tweak", + default=False + ) + hubheight = FloatProperty( + name="Hub height", + min=0.01, max=10, + default=1 + ) + hhtog = BoolProperty( + name="Height tweak", + default=False + ) + hublength = FloatProperty( + name="Hub length", + min=0.1, max=10, + default=1 + ) + hstog = BoolProperty( + name="Hub s tweak", + default=False + ) + hmeshname = StringProperty( + name="Hub mesh name", + description="Name of an existing mesh needed!", + default="None" + ) + name_list = [ + 'facetype_menu', 'facetoggle', 'face_use_imported_object', + 'facewidth', 'fwtog', 'faceheight', 'fhtog', + 'face_detach', 'fmeshname', 'geodesic_types', 'import_mesh_name', + 'base_type', 'orientation', 'geodesic_class', 'tri_hex_star', + 'spherical_flat', 'use_imported_mesh', 'cyxres', 'cyyres', + 'cyxsz', 'cyysz', 'cyxell', 'cygap', + 'cygphase', 'paxres', 'payres', 'paxsz', + 'paysz', 'paxell', 'pagap', 'pagphase', + 'ures', 'vres', 'urad', 'vrad', + 'uellipse', 'vellipse', 'upart', 'vpart', + 'ugap', 'vgap', 'uphase', 'vphase', + 'uexp', 'vexp', 'usuper', 'vsuper', + 'utwist', 'vtwist', 'bures', 'bvres', + 'burad', 'bupart', 'bvpart', 'buphase', + 'bvphase', 'buellipse', 'bvellipse', 'grxres', + 'gryres', 'grxsz', 'grysz', + 'cart', 'frequency', 'eccentricity', 'squish', + 'radius', 'squareness', 'squarez', 'baselevel', + 'dual', 'rotxy', 'rotz', + 'uact', 'vact', 'um', 'un1', + 'un2', 'un3', 'ua', 'ub', + 'vm', 'vn1', 'vn2', 'vn3', + 'va', 'vb', 'uturn', 'vturn', + 'utwist', 'vtwist', 'struttype', 'struttoggle', + 'strutimporttoggle', 'strutimpmesh', 'strutwidth', 'swtog', + 'strutheight', 'shtog', 'strutshrink', 'sstog', + 'stretch', 'lift', 'smeshname', 'hubtype', + 'hubtoggle', 'hubimporttoggle', 'hubimpmesh', 'hubwidth', + 'hwtog', 'hubheight', 'hhtog', 'hublength', + 'hstog', 'hmeshname' + ] + + def write_params(self, filename): file = open(filename, "w", encoding="utf8", newline="\n") fw = file.write - #for Faces! + # for Faces! for el in self.name_list: fw(el + ", ") - fw(repr(getattr(self,el))) - fw(",\n") + fw(repr(getattr(self, el))) + fw(", \n") file.close() - def read_file(self,filename): + def read_file(self, filename): file = open(filename, "r", newline="\n") result = [] line = file.readline() while(line): - tmp = line.split(", ") + tmp = line.split(", ") result.append(eval(tmp[1])) line = file.readline() return result - - def draw(self,context): - sce = context.scene + def draw(self, context): layout = self.layout row = layout.row() -# row.prop(self, "save_parameters") -# row.prop(self, "load_parameters") col = layout.column() - col.label(" ") col.prop(self, "mainpages") which_mainpages = self.mainpages if which_mainpages == 'Main': @@ -512,15 +931,15 @@ class GenerateGeodesicDome(bpy.types.Operator): elif tmp == 'Import your mesh': col.prop(self, "use_imported_mesh") col.prop(self, "import_mesh_name") -#######superform parameters only where possible + # superform parameters only where possible row = layout.row() row.prop(self, "uact") row = layout.row() row.prop(self, "vact") row = layout.row() if not(tmp == 'Import your mesh'): - if (self.uact == False) and (self.vact == False): - row.label("no checkbox active!") + if (self.uact is False) and (self.vact is False): + row.label(text="No checkbox active", icon="INFO") else: row.label("Superform Parameters") if self.uact: @@ -557,23 +976,20 @@ class GenerateGeodesicDome(bpy.types.Operator): row.prop(self, "vturn") row = layout.row() row.prop(self, "vtwist") -########einde superform - elif which_mainpages == "Hubs": + # einde superform + elif which_mainpages == "Hubs": row = layout.row() row.prop(self, "hubtoggle") - - row = layout.row() - row = layout.row() if self.hubimpmesh == "None": row = layout.row() - row.label("name of a hub to use") + row.label("Name of a hub to use") row = layout.row() row.prop(self, "hubimpmesh") row = layout.row() if self.hmeshname == "None": row = layout.row() - row.label("name of mesh to be filled in!") + row.label("Name of mesh to be filled in") row = layout.row() row.prop(self, "hmeshname") row = layout.row() @@ -604,7 +1020,7 @@ class GenerateGeodesicDome(bpy.types.Operator): row = layout.row() row.prop(self, "sstog") if self.sstog: - row.prop(self, "strutshrink") + row.prop(self, "strutshrink") row = layout.row() row.prop(self, "stretch") row = layout.row() @@ -632,7 +1048,7 @@ class GenerateGeodesicDome(bpy.types.Operator): row.prop(self, "fmeshname") row = layout.row() - #help menu GUI + # help menu GUI elif which_mainpages == "Help": import textwrap @@ -642,39 +1058,39 @@ class GenerateGeodesicDome(bpy.types.Operator): # other parameters are ui : here you usually pass layout # text: is a list with each index representing a line of text - def multi_label(text, ui,text_width=120): - for x in range(0,len(text)): - el = textwrap.wrap(text[x], width = text_width ) + def multi_label(text, ui, text_width=120): + for x in range(0, len(text)): + el = textwrap.wrap(text[x], width=text_width) - for y in range(0,len(el)): + for y in range(0, len(el)): ui.label(text=el[y]) box = layout.box() help_text = ["NEW!", - "New facility: save or load (nearly all) parameters", - "A file GD_0.GD will be used, living in:", - "geodesic_domes/tmp", - "--------", - "After loading you have to change a ", - "parameter back and forth" - "to see it"] + "Save or load (nearly all) parameters", + "A file GD_0.GD will be used, living in:", + "geodesic_domes/tmp", + "--------", + "After loading you have to change a ", + "parameter back and forth " + "to see it"] text_width = self.gd_help_text_width - box.prop(self, "gd_help_text_width",slider=True) - multi_label(help_text,box, text_width) + box.prop(self, "gd_help_text_width", slider=True) + multi_label(help_text, box, text_width) def execute(self, context): global last_generated_object, last_imported_mesh, basegeodesic, imported_hubmesh_to_use - #default superformparam = [3, 10, 10, 10, 1, 1, 4, 10, 10, 10, 1, 1, 0, 0, 0.0, 0.0, 0, 0]] - superformparam = [self.um, self.un1, self.un2, self.un3, self.ua,\ - self.ub, self.vm, self.vn1, self.vn2, self.vn3,\ - self.va, self.vb, self.uact, self.vact,\ - self.uturn*pi, self.vturn*pi, \ + # default superformparam = [3, 10, 10, 10, 1, 1, 4, 10, 10, 10, 1, 1, 0, 0, 0.0, 0.0, 0, 0]] + superformparam = [self.um, self.un1, self.un2, self.un3, self.ua, + self.ub, self.vm, self.vn1, self.vn2, self.vn3, + self.va, self.vb, self.uact, self.vact, + self.uturn * pi, self.vturn * pi, self.utwist, self.vtwist] context.scene.error_message = "" if self.mainpages == 'Main': if self.geodesic_types == "Geodesic": tmp_fs = self.tri_hex_star - faceshape = 0 # tri! + faceshape = 0 # tri! if tmp_fs == "hex": faceshape = 1 elif tmp_fs == "star": @@ -684,83 +1100,90 @@ class GenerateGeodesicDome(bpy.types.Operator): if tmp_cl == "Class 2": klass = 1 shape = 0 - parameters = [self.frequency, self.eccentricity, self.squish,\ - self.radius, self.squareness, self.squarez, 0,\ - shape, self.baselevel, faceshape, self.dual,\ - self.rotxy, self.rotz, klass, superformparam] - basegeodesic = creategeo(self.base_type,self.orientation,parameters) + parameters = [self.frequency, self.eccentricity, self.squish, + self.radius, self.squareness, self.squarez, 0, + shape, self.baselevel, faceshape, self.dual, + self.rotxy, self.rotz, klass, superformparam] + + basegeodesic = creategeo(self.base_type, self.orientation, parameters) basegeodesic.makegeodesic() basegeodesic.connectivity() mesh = vefm_271.mesh() - vefm_271.finalfill(basegeodesic,mesh) #always! for hexifiy etc. necessarry!!! + vefm_271.finalfill(basegeodesic, mesh) # always! for hexifiy etc. necessarry!!! vefm_271.vefm_add_object(mesh) last_generated_object = context.active_object - last_generated_object.location = (0,0,0) + last_generated_object.location = (0, 0, 0) context.scene.objects.active = last_generated_object elif self.geodesic_types == 'Grid': - basegeodesic = forms_271.grid(self.grxres,self.gryres,\ - self.grxsz,self.grysz,1.0,1.0,0,0,0,\ - 0,1.0,1.0,superformparam) + basegeodesic = forms_271.grid(self.grxres, self.gryres, + self.grxsz, self.grysz, 1.0, 1.0, 0, 0, 0, + 0, 1.0, 1.0, superformparam) vefm_271.vefm_add_object(basegeodesic) - bpy.data.objects[-1].location = (0,0,0) + bpy.data.objects[-1].location = (0, 0, 0) elif self.geodesic_types == "Cylinder": - basegeodesic = forms_271.cylinder(self.cyxres, self.cyyres, \ - self.cyxsz, self.cyysz, self.cygap, \ - 1.0, self.cygphase, 0, 0, 0, self.cyxell,\ - 1.0, superformparam) + basegeodesic = forms_271.cylinder( + self.cyxres, self.cyyres, + self.cyxsz, self.cyysz, self.cygap, + 1.0, self.cygphase, 0, 0, 0, self.cyxell, + 1.0, superformparam + ) vefm_271.vefm_add_object(basegeodesic) - bpy.data.objects[-1].location = (0,0,0) + bpy.data.objects[-1].location = (0, 0, 0) elif self.geodesic_types == "Parabola": - basegeodesic=forms_271.parabola(self.paxres, self.payres,\ - self.paxsz, self.paysz, self.pagap,1.0, self.pagphase,\ - 0,0,0, self.paxell,1.0,superformparam) + basegeodesic = forms_271.parabola( + self.paxres, self.payres, + self.paxsz, self.paysz, self.pagap, 1.0, self.pagphase, + 0, 0, 0, self.paxell, 1.0, superformparam + ) vefm_271.vefm_add_object(basegeodesic) - bpy.data.objects[-1].location = (0,0,0) + bpy.data.objects[-1].location = (0, 0, 0) elif self.geodesic_types == "Torus": - basegeodesic = forms_271.torus(self.ures, self.vres,\ - self.vrad, self.urad, self.upart, self.vpart,\ - self.ugap, self.vgap,0,0, self.uellipse,\ - self.vellipse, superformparam) + basegeodesic = forms_271.torus( + self.ures, self.vres, + self.vrad, self.urad, self.upart, self.vpart, + self.ugap, self.vgap, 0, 0, self.uellipse, + self.vellipse, superformparam + ) vefm_271.vefm_add_object(basegeodesic) - bpy.data.objects[-1].location = (0,0,0) + bpy.data.objects[-1].location = (0, 0, 0) elif self.geodesic_types == "Sphere": - basegeodesic=forms_271.sphere(self.bures, self.bvres,\ - self.burad,1.0, self.bupart, self.bvpart,\ - self.buphase, self.bvphase,0,0, self.buellipse,\ - self.bvellipse,superformparam) + basegeodesic = forms_271.sphere( + self.bures, self.bvres, + self.burad, 1.0, self.bupart, self.bvpart, + self.buphase, self.bvphase, 0, 0, self.buellipse, + self.bvellipse, superformparam + ) vefm_271.vefm_add_object(basegeodesic) - bpy.data.objects[-1].location = (0,0,0) + bpy.data.objects[-1].location = (0, 0, 0) elif self.geodesic_types == "Import your mesh": obj_name = self.import_mesh_name if obj_name == "None": - message = "fill in a name \nof an existing mesh\nto be imported" + message = "Fill in a name \nof an existing mesh\nto be imported" context.scene.error_message = message self.report({"INFO"}, message) - print("***INFO*** you have to fill in the name of an existing mesh") + print("***INFO*** You have to fill in the name of an existing mesh") else: -# obj_in_scene = context.objects names = [el.name for el in context.scene.objects] if obj_name in names and context.scene.objects[obj_name].type == "MESH": obj = context.scene.objects[obj_name] -# if obj.type == "MESH": - your_obj = vefm_271.importmesh(obj.name,False) + your_obj = vefm_271.importmesh(obj.name, False) last_imported_mesh = your_obj vefm_271.vefm_add_object(your_obj) last_generated_object = bpy.context.active_object - last_generated_object.name ="Imported mesh" - bpy.context.active_object.location = (0,0,0) + last_generated_object.name = "Imported mesh" + bpy.context.active_object.location = (0, 0, 0) else: - message = obj_name +" does not exist \nor is not a MESH" + message = obj_name + " does not exist \nor is not a Mesh" context.scene.error_message = message bpy.ops.object.dialog_operator('INVOKE_DEFAULT') self.report({'ERROR'}, message) - print("***ERROR***" + obj_name +" does not exist or is not a MESH") + print("***ERROR***" + obj_name + " does not exist or is not a Mesh") elif self.mainpages == "Hubs": hubtype = self.hubtype - hubtoggle = self.hubtoggle + hubtoggle = self.hubtoggle hubimporttoggle = self.hubimporttoggle hubimpmesh = self.hubimpmesh hubwidth = self.hubwidth @@ -768,31 +1191,32 @@ class GenerateGeodesicDome(bpy.types.Operator): hubheight = self.hubheight hhtog = self.hhtog hublength = self.hublength - hstog = self.hstog - hmeshname= self.hmeshname + hstog = self.hstog + hmeshname = self.hmeshname - if not (hmeshname == "None") and not (hubimpmesh == "None") and hubtoggle: + if not (hmeshname == "None") and not (hubimpmesh == "None") and hubtoggle: try: + hub_obj = vefm_271.importmesh(hmeshname, 0) - hub_obj = vefm_271.importmesh(hmeshname,0) - - hub = vefm_271.hub(hub_obj, True,\ - hubwidth, hubheight, hublength,\ - hwtog, hhtog, hstog, hubimpmesh) - + hub = vefm_271.hub( + hub_obj, True, + hubwidth, hubheight, hublength, + hwtog, hhtog, hstog, hubimpmesh + ) mesh = vefm_271.mesh("test") - vefm_271.finalfill(hub,mesh) + vefm_271.finalfill(hub, mesh) vefm_271.vefm_add_object(mesh) - bpy.data.objects[-1].location = (0,0,0) + bpy.data.objects[-1].location = (0, 0, 0) except: - message = "***ERROR third_domes_panel L811 *** \neither no mesh for hub\nor " + hmeshname + " available" + message = "***ERROR*** \nEither no mesh for hub\nor " + \ + hmeshname + " available" context.scene.error_message = message bpy.ops.object.dialog_operator('INVOKE_DEFAULT') print(message) else: - message = "***INFO***\nuse the hub toggle!" + message = "***INFO***\nEnable Hubs first" context.scene.error_message = message - print("\n***INFO*** use the hub toggle!") + print("\n***INFO*** Enable Hubs first") elif self.mainpages == "Struts": struttype = self.struttype struttoggle = self.struttoggle @@ -810,77 +1234,85 @@ class GenerateGeodesicDome(bpy.types.Operator): if not (strutimpmesh == "None") and struttoggle: names = [el.name for el in context.scene.objects] if strutimpmesh in names and context.scene.objects[strutimpmesh].type == "MESH": - strut = vefm_271.strut(basegeodesic, struttype, strutwidth,\ - strutheight, stretch, swtog, shtog, swtog,\ - strutimpmesh, sstog, lift) + strut = vefm_271.strut( + basegeodesic, struttype, strutwidth, + strutheight, stretch, swtog, shtog, swtog, + strutimpmesh, sstog, lift + ) strutmesh = vefm_271.mesh() - vefm_271.finalfill(strut,strutmesh) + vefm_271.finalfill(strut, strutmesh) vefm_271.vefm_add_object(strutmesh) last_generated_object = context.active_object last_generated_object.name = smeshname - last_generated_object.location = (0,0,0) + last_generated_object.location = (0, 0, 0) else: - message = "***ERROR***\n" + strutimpmesh + "\nis not a MESH" + message = "***ERROR***\nStrut object " + strutimpmesh + "\nis not a Mesh" context.scene.error_message = message bpy.ops.object.dialog_operator('INVOKE_DEFAULT') - print("***ERROR*** strut obj is not a MESH") + print("***ERROR*** Strut object is not a Mesh") else: vefm_271.vefm_add_object(basegeodesic) elif self.mainpages == "Faces": if self.facetoggle: - faceparams=[[self.face_detach,0,[[0.5,0.0]]], #0 strip - [self.face_detach,0,[[0.0,0.5]]], #1 vertical - [self.face_detach,0,[[0.5,0.5]]], #2 slanted - [self.face_detach,1,[[0.25,0.25],[0.5,0.5]]], #3 closed point - [self.face_detach,1,[[0.1,0.03],[0.33,0.06],[0.0,0.1]]], #4 pillow - [self.face_detach,2,[[0.0,0.5]]], #5 closed vertical - [self.face_detach,2,[[0.0,0.25],[0.25,0.25],[0.25,0.5]]], #6 stepped - [self.face_detach,1,[[0.2,0.1],[0.4,0.2],[0.0,1.0]]], #7 spikes - [self.face_detach,3,[[0.25,0.0],[0.25,0.5],[0.0,0.5]]], #8 boxed - [self.face_detach,3,[[0.25,0.5],[0.5,0.0],[0.25,-0.5]]], #9 diamond - [self.face_detach,4,[[0.5,0.0],[0.5,0.5],[0.0,0.5]]],] #10 bar + faceparams = [[self.face_detach, 0, [[0.5, 0.0]]], # 0 strip + [self.face_detach, 0, [[0.0, 0.5]]], # 1 vertical + [self.face_detach, 0, [[0.5, 0.5]]], # 2 slanted + [self.face_detach, 1, [[0.25, 0.25], [0.5, 0.5]]], # 3 closed point + [self.face_detach, 1, [[0.1, 0.03], [0.33, 0.06], [0.0, 0.1]]], # 4 pillow + [self.face_detach, 2, [[0.0, 0.5]]], # 5 closed vertical + [self.face_detach, 2, [[0.0, 0.25], [0.25, 0.25], [0.25, 0.5]]], # 6 stepped + [self.face_detach, 1, [[0.2, 0.1], [0.4, 0.2], [0.0, 1.0]]], # 7 spikes + [self.face_detach, 3, [[0.25, 0.0], [0.25, 0.5], [0.0, 0.5]]], # 8 boxed + [self.face_detach, 3, [[0.25, 0.5], [0.5, 0.0], [0.25, -0.5]]], # 9 diamond + [self.face_detach, 4, [[0.5, 0.0], [0.5, 0.5], [0.0, 0.5]]], ] # 10 bar facedata = faceparams[int(self.facetype_menu)] if not self.face_use_imported_object: - faceobject = vefm_271.facetype(basegeodesic, facedata, self.facewidth,\ - self.faceheight,self.fwtog) + faceobject = vefm_271.facetype( + basegeodesic, facedata, self.facewidth, + self.faceheight, self.fwtog + ) else: if last_imported_mesh: - faceobject = vefm_271.facetype(last_imported_mesh, facedata,\ - self.facewidth, self.faceheight, self.fwtog) + faceobject = vefm_271.facetype( + last_imported_mesh, facedata, + self.facewidth, self.faceheight, self.fwtog + ) else: - message = "***ERROR***\nno imported message available\n" + "last geodesic used" + message = "***ERROR***\nNo imported message available\n" + "last geodesic used" context.scene.error_message = message bpy.ops.object.dialog_operator('INVOKE_DEFAULT') - print("\n***ERROR*** no imported mesh available") - print("last geodesic used!") - faceobject = vefm_271.facetype(basegeodesic,facedata,\ - self.facewidth,self.faceheight,self.fwtog) + print("\n***ERROR*** No imported mesh available \nLast geodesic used!") + faceobject = vefm_271.facetype( + basegeodesic, facedata, + self.facewidth, self.faceheight, self.fwtog + ) facemesh = vefm_271.mesh() finalfill(faceobject, facemesh) vefm_271.vefm_add_object(facemesh) obj = bpy.data.objects[-1] obj.name = self.fmeshname - obj.location = (0,0,0) -#PKHG save or load (nearly) all parameters + obj.location = (0, 0, 0) + + # PKHG save or load (nearly) all parameters if self.save_parameters: self.save_parameters = False try: scriptpath = bpy.utils.script_paths()[0] sep = os.path.sep - tmpdir = os.path.join(scriptpath, "addons", "add_mesh_extra_objects" , "tmp") -#scriptpath + sep + "addons" + sep + "geodesic_domes" + sep + "tmp" + tmpdir = os.path.join(scriptpath, "addons", "add_mesh_extra_objects", "tmp") + # scriptpath + sep + "addons" + sep + "geodesic_domes" + sep + "tmp" if not os.path.isdir(tmpdir): message = "***ERROR***\n" + tmpdir + "\nnot (yet) available" filename = tmpdir + sep + "GD_0.GD" -# self.read_file(filename) + # self.read_file(filename) try: self.write_params(filename) - message = "***OK***\nparameters saved in\n" + filename + message = "***OK***\nParameters saved in\n" + filename print(message) except: - message = "***ERRROR***\n" + "writing " + filename + "\nnot possible" - #bpy.context.scene.instant_filenames = filenames + message = "***ERRROR***\n" + "Writing " + filename + "\nis not possible" + # bpy.context.scene.instant_filenames = filenames except: message = "***ERROR***\n Contakt PKHG, something wrong happened" @@ -894,26 +1326,27 @@ class GenerateGeodesicDome(bpy.types.Operator): scriptpath = bpy.utils.script_paths()[0] sep = os.path.sep tmpdir = os.path.join(scriptpath, "addons", "add_mesh_extra_objects", "tmp") - #PKHG>NEXT comment???? - #scriptpath + sep + "addons" + sep + "geodesic_domes" + sep + "tmp" + # PKHG>NEXT comment???? + # scriptpath + sep + "addons" + sep + "geodesic_domes" + sep + "tmp" if not os.path.isdir(tmpdir): - message = "***ERROR***\n" + tmpdir + "\nnot available" + message = "***ERROR***\n" + tmpdir + "\nis not available" print(message) filename = tmpdir + sep + "GD_0.GD" -# self.read_file(filename) + # self.read_file(filename) try: res = self.read_file(filename) - for i,el in enumerate(self.name_list): - setattr(self,el,res[i]) + for i, el in enumerate(self.name_list): + setattr(self, el, res[i]) message = "***OK***\nparameters read from\n" + filename print(message) except: - message = "***ERRROR***\n" + "writing " + filename + "\nnot possible" - #bpy.context.scene.instant_filenames = filenames + message = "***ERRROR***\n" + "Writing " + filename + "\nnot possible" + # bpy.context.scene.instant_filenames = filenames except: message = "***ERROR***\n Contakt PKHG,\nsomething went wrong reading params happened" context.scene.error_message = message bpy.ops.object.dialog_operator('INVOKE_DEFAULT') + return {'FINISHED'} def invoke(self, context, event): @@ -923,44 +1356,48 @@ class GenerateGeodesicDome(bpy.types.Operator): if tmp: context.scene.geodesic_not_yet_called = False self.execute(context) + return {'FINISHED'} -def creategeo(polytype,orientation,parameters): + +def creategeo(polytype, orientation, parameters): geo = None if polytype == "Tetrahedron": if orientation == "PointUp": geo = geodesic_classes_271.tetrahedron(parameters) elif orientation == "EdgeUp": - geo=geodesic_classes_271.tetraedge(parameters) + geo = geodesic_classes_271.tetraedge(parameters) elif orientation == "FaceUp": - geo=geodesic_classes_271.tetraface(parameters) + geo = geodesic_classes_271.tetraface(parameters) elif polytype == "Octahedron": if orientation == "PointUp": - geo=geodesic_classes_271.octahedron(parameters) + geo = geodesic_classes_271.octahedron(parameters) elif orientation == "EdgeUp": - geo=geodesic_classes_271.octaedge(parameters) + geo = geodesic_classes_271.octaedge(parameters) elif orientation == "FaceUp": - geo=geodesic_classes_271.octaface(parameters) + geo = geodesic_classes_271.octaface(parameters) elif polytype == "Icosahedron": if orientation == "PointUp": - geo=geodesic_classes_271.icosahedron(parameters) + geo = geodesic_classes_271.icosahedron(parameters) elif orientation == "EdgeUp": - geo=geodesic_classes_271.icoedge(parameters) + geo = geodesic_classes_271.icoedge(parameters) elif orientation == "FaceUp": - geo=geodesic_classes_271.icoface(parameters) + geo = geodesic_classes_271.icoface(parameters) return geo -basegeodesic,fmeshname,smeshname,hmeshname,outputmeshname,strutimpmesh,hubimpmesh = [None]*7 -def finalfill(source,target): - count=0 +basegeodesic, fmeshname, smeshname, hmeshname, outputmeshname, strutimpmesh, hubimpmesh = [None] * 7 + + +def finalfill(source, target): + count = 0 for point in source.verts: newvert = vefm_271.vertex(point.vector) target.verts.append(newvert) point.index = count - count += 1 + count += 1 for facey in source.faces: - row=len(facey.vertices) + row = len(facey.vertices) if row >= 5: newvert = vefm_271.average(facey.vertices).centroid() centre = vefm_271.vertex(newvert.vector) @@ -971,9 +1408,9 @@ def finalfill(source,target): b = target.verts[facey.vertices[0].index] else: a = target.verts[facey.vertices[i].index] - b = target.verts[facey.vertices[i+1].index] + b = target.verts[facey.vertices[i + 1].index] c = centre - f = [a,b,c] + f = [a, b, c] target.faces.append(f) else: f = [] @@ -983,12 +1420,13 @@ def finalfill(source,target): f.append(target.verts[a.index]) target.faces.append(f) -###for error messages -class DialogOperator(bpy.types.Operator): + +# for error messages +class DialogOperator(Operator): bl_idname = "object.dialog_operator" bl_label = "INFO" - def draw(self,context): + def draw(self, context): layout = self.layout message = context.scene.error_message col = layout.column() @@ -1004,13 +1442,12 @@ class DialogOperator(bpy.types.Operator): return wm.invoke_props_dialog(self) -######### register all def register(): bpy.utils.register_module(__name__) + def unregister(): bpy.utils.unregister_module(__name__) if __name__ == "__main__": register() - diff --git a/add_mesh_extra_objects/geodesic_domes/vefm_271.py b/add_mesh_extra_objects/geodesic_domes/vefm_271.py index f9965ec7..cac2b74d 100644 --- a/add_mesh_extra_objects/geodesic_domes/vefm_271.py +++ b/add_mesh_extra_objects/geodesic_domes/vefm_271.py @@ -1,26 +1,23 @@ # vert class and overloading experiments import bpy -#PKHG>NEEDED? +# PKHG>NEEDED? import bmesh -import math -from math import sqrt,acos,pi,sin,cos,atan,tan,fabs +from math import acos, pi, sin, cos, atan, tan from mathutils import Vector +from bpy_extras.object_utils import AddObjectHelper, object_data_add -#PKHG>DBG change the DBG_info and use extra_DBG_info -DBG_info ={"MeshInfo":False, "StrutMesh":False, "HubMesh":False} +# PKHG>DBG change the DBG_info and use extra_DBG_info +DBG_info = {"MeshInfo": False, "StrutMesh": False, "HubMesh": False} -def extra_DBG_info(name = "value from DBG_info", info_text="default\n", info_obj=None): +def extra_DBG_info(name="value from DBG_info", info_text="default\n", info_obj=None): global DBG_info DBG_keys = DBG_info.keys() if name in DBG_keys: if DBG_info[name]: print(info_text, info_obj) -sgn = lambda x : (x>0) - (x<0) #missing signum function in Python - -from bpy_extras.object_utils import AddObjectHelper, object_data_add -from collections import Counter +sgn = lambda x: (x > 0) - (x < 0) # missing signum function in Python def vefm_add_object(selfobj): @@ -31,23 +28,23 @@ def vefm_add_object(selfobj): e = [[edge.a.index, edge.b.index] for edge in selfobj.edges] if type(selfobj.faces[0]) == type([]): - -#PKHG should be a list of vertices, which have an index - f = [[v.index for v in face] for face in selfobj.faces] + # PKHG should be a list of vertices, which have an index + f = [[v.index for v in face] for face in selfobj.faces] else: - f = [[v.index for v in face.vertices] for face in selfobj.faces] + f = [[v.index for v in face.vertices] for face in selfobj.faces] - m = bpy.data.meshes.new(name= selfobj.name) - m.from_pydata(v, e, f ) + m = bpy.data.meshes.new(name=selfobj.name) + m.from_pydata(v, e, f) # useful for development when the mesh may be invalid. - m.validate(verbose = False) - object_data_add(bpy.context, m, operator = None) + m.validate(verbose=False) + object_data_add(bpy.context, m, operator=None) + -#extra test phase +# extra test phase class vertex: - def __init__(self, vec=(0,0,0)): #default x = 0, y = 0, z = 0): - self.vector = Vector(vec) + def __init__(self, vec=(0, 0, 0)): # default x = 0, y = 0, z = 0): + self.vector = Vector(vec) self.length = self.vector.length self.index = 0 self.normal = 0 @@ -56,19 +53,19 @@ class vertex: self.boundary = 0 def findlength(self): - self.length = self.vector.length + self.length = self.vector.length def normalize(self): self.findlength() if self.length > 0: - tmp = 1.0/self.length - self.vector = tmp * self.vector + tmp = 1.0 / self.length + self.vector = tmp * self.vector self.length = 1.0 def findnormal(self): target = [] if self.faces[:] == []: - print("vefm vertex L81 pkhg:*****ERROR**** findnormal has no faces") + print("vefm vertex L68 pkhg:*****ERROR**** findnormal has no faces") return for currentface in self.faces: target.append(currentface.normal) @@ -76,10 +73,10 @@ class vertex: self.normal.findlength() if self.length == 0: print("******ERROR*** lenght zero in findnormal, j = (0,1,0) replcaced") - self.normal = vertex((0,1,0)) + self.normal = vertex((0, 1, 0)) self.normal.normalize() - def clockwise(self): #PKHG self is a vertex + def clockwise(self): # PKHG self is a vertex if self.boundary: start = self.boundarystart() else: @@ -116,7 +113,7 @@ class vertex: def __sub__(self, other): if isinstance(other, Vector): - tmp = self.vector - other + tmp = self.vector - other else: tmp = self.vector - other.vector return vertex(tmp) @@ -126,44 +123,47 @@ class vertex: return vertex(tmp) def __truediv__(self, other): - denom = 1.0/other + denom = 1.0 / other tmp = self.vector * denom return (tmp) def negative(self): return vertex(-self.vector) + class crossp: - ## Takes in two vertices(vectors), returns the cross product. + # Takes in two vertices(vectors), returns the cross product. def __init__(self, v1, v2): self.v1 = v1 self.v2 = v2 -# + def docrossproduct(self): tmp = self.v1.vector.cross(self.v2.vector) return vertex(tmp) + class average: - ## Takes a list of vertices and returns the average. If two verts are passed, returns midpoint. + # Takes a list of vertices and returns the average. If two verts are passed, returns midpoint. def __init__(self, vertlist): self.vertlist = vertlist def centroid(self): - tmp = Vector() -#PKHG avoid emptylist problems + tmp = Vector() + # PKHG avoid emptylist problems divisor = 1.0 nr_vertices = len(self.vertlist) if nr_vertices > 1: divisor = 1.0 / len(self.vertlist) elif nr_vertices == 0: - print("\n***WARNING*** empty list in vefm_271.centroid! L180") + print("\n***WARNING*** empty list in vefm_271.centroid! L158") for vert in self.vertlist: tmp = tmp + vert.vector tmp = tmp * divisor return vertex(tmp) + class edge: - def __init__(self, a = 0, b = 0): + def __init__(self, a=0, b=0): self.a = a self.b = b self.index = 0 @@ -171,13 +171,12 @@ class edge: self.cross = 0 self.unit = 0 self.faces = [] - self.vect = 0 #PKHG becomes b - a - self.vectb = 0 #PKHG becomes a - b + self.vect = 0 # PKHG becomes b - a + self.vectb = 0 # PKHG becomes a - b self.boundary = 0 self.findvect() self.findlength() - def findvect(self): self.vect = self.b - self.a self.vectb = self.a - self.b @@ -187,9 +186,8 @@ class edge: self.vectb.length = self.vect.length def findnormal(self): - if self.boundary: - self.normal = self.faces[0].normal #average([self.a, self.b]).centroid() + self.normal = self.faces[0].normal # average([self.a, self.b]).centroid() else: self.normal = average([self.faces[0].normal, self.faces[1].normal]).centroid() self.normal.normalize() @@ -197,22 +195,23 @@ class edge: class face: def __init__(self, vertices=[]): -#PKHG ok good for tri's at least - self.vertices = vertices ## List of vertex instances. - self.edges=[] ## Will be filled with the sides of the face. - self.boundary = 0 ## When set will have bool and id of edge concerned. - self.normal = 0 ## Face normal found through cross product. - self.corners=[] - self.spokes=[] ## Vectors of the bisecting angles from each corner - ## to the centre + dotproduct. + # PKHG ok good for tri's at least + self.vertices = vertices # List of vertex instances + self.edges = [] # Will be filled with the sides of the face + self.boundary = 0 # When set will have bool and id of edge concerned + self.normal = 0 # Face normal found through cross product + self.corners = [] + self.spokes = [] # Vectors of the bisecting angles from each corner to the centre + dotproduct + self.index = 0 - #dotproduct is misleading name, it is the hook between two vectors! + # dotproduct is misleading name, it is the hook between two vectors! def dotproduct(self, v1, v2): v1.findlength() v2.findlength() if v1.length == 0 or v2.length == 0: - print("\nPKHG warning, =====vefm_271 dotproduct L245====== at least one zero vector 0 used") + print("\nPKHG warning, ===== vefm_271 dotproduct L212 ======" + " at least one zero vector 0 used") return 0 dot = v1.vector.dot(v2.vector) costheta = dot / (v1.length * v2.length) @@ -220,63 +219,60 @@ class face: return tmp def orderedges(self): - temp=[] + temp = [] finish = len(self.vertices) for i in range(finish): current = self.vertices[i] - if i==finish-1: + if i == finish - 1: next = self.vertices[0] else: - next = self.vertices[i+1] + next = self.vertices[i + 1] for edge in face.edges: - if edge.a==current and edge.b==next: + if edge.a == current and edge.b == next: face.clockw.append(edge.vect) face.aclockw.append(edge.vectb) temp.append(edge) - if edge.b==current and edge.a==next: + if edge.b == current and edge.a == next: face.clockw.append(edge.vectb) face.aclockw.append(edge.vect) temp.append(edge) for edge in face.edges: - if edge.a==current and edge.b==next: + if edge.a == current and edge.b == next: face.clockw.append(edge.vect) face.aclockw.append(edge.vectb) temp.append(edge) - if edge.b==current and edge.a==next: + if edge.b == current and edge.a == next: face.clockw.append(edge.vectb) face.aclockw.append(edge.vect) temp.append(edge) face.vertices = temp - def docorners(self): - ## This function identifies and stores the vectors coming from each vertex - ## allowing easier calculation of cross and dot products. + # This function identifies and stores the vectors coming from each vertex + # allowing easier calculation of cross and dot products. finish = len(self.vertices) for i in range(finish): current = self.vertices[i] - if i==finish-1: + if i == finish - 1: next = self.vertices[0] else: - next = self.vertices[i+1] - if i==0: + next = self.vertices[i + 1] + if i == 0: previous = self.vertices[-1] else: - previous = self.vertices[i-1] - corner=[current] #PKHG new for each vertex = current - #corner = current + previous = self.vertices[i - 1] + corner = [current] # PKHG new for each vertex = current + # corner = current rightedge = None leftedge = None teller = -1 for edge in self.edges: - - if finish == 3 and len(self.edges) == 2 and i == 2: + if finish == 3 and len(self.edges) == 2 and i == 2: return teller += 1 - currentinfo = (current, edge.a, edge.b, edge.a is current, edge.b is current) - #next and previous are vertex with respect to ith vertex - if edge.a is current or edge.b is current: ## does this edge contain our current vert + # next and previous are vertex with respect to ith vertex + if edge.a is current or edge.b is current: # does this edge contain our current vert if edge.a is current: if edge.b is next: rightedge = edge @@ -299,7 +295,6 @@ class face: corner.append(dotty) self.corners.append(corner) - def findnormal(self): one = self.corners[1][2] two = self.corners[1][1] @@ -316,7 +311,6 @@ class face: self.normal.normalize() def dospokes(self): - for corner in self.corners: vert = corner[0] right = corner[1] @@ -332,7 +326,7 @@ class face: one.normalize() two.normalize() - spoke = one+two + spoke = one + two spoke.normalize() self.spokes.append(spoke) @@ -340,14 +334,15 @@ class face: centre = average(self.vertices).centroid() for point in self.vertices: newedge = edge(point, centre) - spokes.append(newedge) + self.spokes.append(newedge) + class mesh: - def __init__(self , name="GD_mesh"): + def __init__(self, name="GD_mesh"): self.name = name - self.verts=[] - self.edges=[] - self.faces=[] + self.verts = [] + self.edges = [] + self.faces = [] self.edgeflag = 0 self.faceflag = 0 self.vertexflag = 0 @@ -364,35 +359,34 @@ class mesh: self.a270 = pi * 1.5 self.a360 = pi * 2 - - def power(self, a, b): ## Returns a power, including negative numbers - result = sgn(a)*(abs(a)**b) + def power(self, a, b): # Returns a power, including negative numbers + result = sgn(a) * (abs(a) ** b) return result - def sign(self, d): ## Works out the sign of a number. + def sign(self, d): # Works out the sign of a number. return sgn(d) def ellipsecomp(self, efactor, theta): - if theta==self.a90: + if theta == self.a90: result = self.a90 - elif theta==self.a180: + elif theta == self.a180: result = self.a180 - elif theta==self.a270: + elif theta == self.a270: result = self.a270 - elif theta==self.a360: + elif theta == self.a360: result = 0.0 else: - result = atan(tan(theta)/efactor**0.5) - if result<0.0: - if theta>self.a180: - result = result+self.a180 - elif theta<self.a180: - result = result+self.a180 - - if result>0.0: - if theta>self.a180: - result = result+self.a180 - elif theta<self.a180: + result = atan(tan(theta) / efactor ** 0.5) + if result < 0.0: + if theta > self.a180: + result = result + self.a180 + elif theta < self.a180: + result = result + self.a180 + + if result > 0.0: + if theta > self.a180: + result = result + self.a180 + elif theta < self.a180: result = result return result @@ -403,23 +397,23 @@ class mesh: self.boundary() def superell(self, n1, uv, turn): - t1 = sin(uv+turn) + t1 = sin(uv + turn) t1 = abs(t1) - t1 = t1**n1 - t2 = cos(uv+turn) + t1 = t1 ** n1 + t2 = cos(uv + turn) t2 = abs(t2) - t2 = t2**n1 - r = self.power(1.0/(t1+t2),(1.0/n1)) + t2 = t2 ** n1 + r = self.power(1.0 / (t1 + t2), (1.0 / n1)) return r def superform(self, m, n1, n2, n3, uv, a, b, twist): - t1 = cos(m*(uv+twist)*.25)*a + t1 = cos(m * (uv + twist) * .25) * a t1 = abs(t1) - t1 = t1**n2 - t2 = sin(m*(uv+twist)*.25)*b + t1 = t1 ** n2 + t2 = sin(m * (uv + twist) * .25) * b t2 = abs(t2) - t2 = t2**n3 - r = self.power(1.0/(t1+t2), n1) + t2 = t2 ** n3 + r = self.power(1.0 / (t1 + t2), n1) return r def dovertedge(self): @@ -441,21 +435,21 @@ class mesh: self.vertfaceflag = 1 def dofaceedge(self): - self.dovertedge() ## just in case they haven't been done - self.dovertface() ## + self.dovertedge() # just in case they haven't been done + self.dovertface() if not self.faceedgeflag: for edge in self.edges: - edge.faces=[] + edge.faces = [] for face in self.faces: face.edges = [] for face in self.faces: finish = len(face.vertices) for i in range(finish): current = face.vertices[i] - if i == finish-1: + if i == finish - 1: next = face.vertices[0] else: - next = face.vertices[i+1] + next = face.vertices[i + 1] for edge in current.edges: if edge.a is current or edge.b is current: if edge.b is next or edge.a is next: @@ -472,17 +466,17 @@ class mesh: edge.a.boundary = 1 edge.b.boundary = 1 -## The functions below turn the basic triangular faces into -## hexagonal faces, creating the buckyball effect. -#PKHG seems to work only for meshes with tri's ;-) ??!! + # The functions below turn the basic triangular faces into + # hexagonal faces, creating the buckyball effect. + # PKHG seems to work only for meshes with tri's ;-) def hexify(self): - self.hexverts=[] - self.hexedges=[] - self.hexfaces=[] - #PKHG renumbering the index of the verts + self.hexverts = [] + self.hexedges = [] + self.hexfaces = [] + # PKHG renumbering the index of the verts for i in range(len(self.verts)): self.verts[i].index = i - #PKHG renumbering the index of the edges + # PKHG renumbering the index of the edges for i in range(len(self.edges)): self.edges[i].index = i @@ -491,7 +485,7 @@ class mesh: for edge in self.edges: self.hexshorten(edge, hexvert_counter) - hexvert_counter += 2 #PKHG two new vertices done + hexvert_counter += 2 # PKHG two new vertices done for face in self.faces: self.makehexfaces(face) @@ -506,15 +500,14 @@ class mesh: self.vertfaceflag = 0 self.faceedgeflag = 0 - def hexshorten(self, currentedge, hexvert_counter): - third = vertex(currentedge.vect/3.0) + third = vertex(currentedge.vect / 3.0) newvert1 = vertex(currentedge.a.vector) newvert2 = vertex(currentedge.b.vector) newvert1 = newvert1 + third newvert1.index = hexvert_counter newvert2 = newvert2 - third - newvert2.index = hexvert_counter + 1 #PKHG caller adjusts +=2 + newvert2.index = hexvert_counter + 1 # PKHG caller adjusts +=2 newedge = edge(newvert1, newvert2) newedge.index = currentedge.index self.hexverts.append(newvert1) @@ -522,7 +515,7 @@ class mesh: self.hexedges.append(newedge) def makehexfaces(self, currentface): - vertices=[] + vertices = [] currentface.docorners() for corner in currentface.corners: vert = corner[0] @@ -551,7 +544,7 @@ class mesh: self.hexedges.append(newedge3) def hexvertface(self, vert): - vertices=[] + vertices = [] for edge in vert.edges: eid = edge.index if edge.a is vert: @@ -562,9 +555,9 @@ class mesh: self.hexfaces.append(newface) def starify(self): - self.starverts=[] - self.staredges=[] - self.starfaces=[] + self.starverts = [] + self.staredges = [] + self.starfaces = [] for i in range(len(self.verts)): self.verts[i].index = i for i in range(len(self.edges)): @@ -580,11 +573,9 @@ class mesh: star_edge_counter = 0 for currentface in self.faces: currentface.docorners() - vertices=[] + vertices = [] for corner in currentface.corners: vert = self.starverts[corner[1].index] -# vert.index = star_vert_counter -# star_vert_counter += 1 vertices.append(vert) newface = face(vertices) newface.index = star_face_counter @@ -601,7 +592,7 @@ class mesh: self.staredges.append(newedge2) self.staredges.append(newedge3) for vert in self.verts: - vertices=[] + vertices = [] vert.clockwise() for currentedge in vert.edges: eid = currentedge.index @@ -618,9 +609,9 @@ class mesh: self.faceedgeflag = 0 def class2(self): - self.class2verts=[] - self.class2edges=[] - self.class2faces=[] + self.class2verts = [] + self.class2edges = [] + self.class2faces = [] newvertstart = len(self.verts) newedgestart = len(self.edges) @@ -642,28 +633,28 @@ class mesh: newedge1 = edge(currentface.vertices[0], newvert) newedge2 = edge(currentface.vertices[1], newvert) newedge3 = edge(currentface.vertices[2], newvert) + self.edges.append(newedge1) self.edges.append(newedge2) self.edges.append(newedge3) for currentedge in range(newedgestart): - self.edges[currentedge].a = self.verts[self.edges[currentedge].faces[0].index+newvertstart] - self.edges[currentedge].b = self.verts[self.edges[currentedge].faces[1].index+newvertstart] + self.edges[currentedge].a = self.verts[self.edges[currentedge].faces[0].index + newvertstart] + self.edges[currentedge].b = self.verts[self.edges[currentedge].faces[1].index + newvertstart] self.edges[currentedge].findvect() for currentvert in range(newvertstart): vert = self.verts[currentvert] - vertices=[] + vertices = [] vert.clockwise() for currentface in vert.faces: eid = currentface.index - vertices.append(self.verts[newvertstart + eid]) for i in range(len(vertices)): if i == len(vertices) - 1: next = vertices[0] else: - next = vertices[i+1] + next = vertices[i + 1] newface = face([vert, vertices[i], next]) self.class2faces.append(newface) @@ -674,9 +665,9 @@ class mesh: self.faceedgeflag = 0 def dual(self): - self.dualverts=[] + self.dualverts = [] - self.dualfaces=[] + self.dualfaces = [] counter_verts = len(self.verts) for i in range(counter_verts): @@ -690,11 +681,11 @@ class mesh: for currentface in self.faces: currentface.docorners() newvert = average(currentface.vertices).centroid() - newvert.index = counter_verts #PKHG needed in >= 2.59 + newvert.index = counter_verts # PKHG needed in >= 2.59 counter_verts += 1 self.dualverts.append(newvert) for vert in self.verts: - vertices=[] + vertices = [] vert.clockwise() for currentface in vert.faces: eid = currentface.index @@ -711,6 +702,7 @@ class mesh: self.vertfaceflag = 0 self.faceedgeflag = 0 + class facetype(mesh): def __init__(self, basegeodesic, parameters, width, height, relative): mesh.__init__(self) @@ -723,12 +715,12 @@ class facetype(mesh): if not self.relative: newwidth = self.findrelative() - self.width = width*newwidth + self.width = width * newwidth self.height = height self.base.connectivity() for coord in self.coords: - coord[0]=coord[0]*self.width - coord[1]=coord[1]*self.height + coord[0] = coord[0] * self.width + coord[1] = coord[1] * self.height if not self.base.facenormalflag: for currentface in self.base.faces: @@ -736,7 +728,7 @@ class facetype(mesh): currentface.findnormal() self.base.facenormalflag = 1 - if self.endtype==4 and not self.base.vertnormalflag: + if self.endtype == 4 and not self.base.vertnormalflag: for currentvert in self.base.verts: currentvert.findnormal() self.base.vertnormalflag = 1 @@ -744,16 +736,16 @@ class facetype(mesh): def findrelative(self): centre = average(self.base.faces[0].vertices).centroid() - edgelist=[] + edgelist = [] for point in self.base.faces[0].vertices: newedge = edge(centre, point) edgelist.append(newedge) length = 0 for edg in edgelist: extra = edg.vect.length - length = length+extra + length = length + extra - length = length/len(edgelist) + length = length / len(edgelist) return length @@ -761,7 +753,7 @@ class facetype(mesh): if not self.detatch: for point in self.base.verts: self.verts.append(point) - if self.endtype==4: + if self.endtype == 4: self.createghostverts() for currentface in self.base.faces: self.doface(currentface) @@ -773,68 +765,69 @@ class facetype(mesh): self.verts.append(newvert) def doface(self, candidate): - grid=[] + grid = [] candidate.dospokes() if not self.detatch: - line=[] + line = [] for vert in candidate.vertices: line.append(vert) grid.append(line) else: - line=[] + line = [] for point in candidate.vertices: newvert = vertex(point.vector) self.verts.append(newvert) line.append(newvert) grid.append(line) finish = len(self.coords) - if self.endtype==1 or self.endtype==4: - finish = finish-1 + if self.endtype == 1 or self.endtype == 4: + finish = finish - 1 for i in range(finish): - up = candidate.normal*self.coords[i][1] - line=[] + up = candidate.normal * self.coords[i][1] + line = [] for j in range(len(candidate.vertices)): - dotfac = candidate.corners[j][3]*0.5 - vec=(candidate.spokes[j]*(self.coords[i][0]/sin(dotfac))) + dotfac = candidate.corners[j][3] * 0.5 + vec = (candidate.spokes[j] * (self.coords[i][0] / sin(dotfac))) - newvert = candidate.vertices[j]+vec+up + newvert = candidate.vertices[j] + vec + up line.append(newvert) self.verts.append(newvert) grid.append(line) - if self.endtype==4: - line=[] + if self.endtype == 4: + line = [] for i in range(len(candidate.vertices)): - vert = self.verts[candidate.vertices[i].index+self.ghoststart] + vert = self.verts[candidate.vertices[i].index + self.ghoststart] line.append(vert) grid.append(line) for line in grid: line.append(line[0]) - if self.endtype==3: + if self.endtype == 3: grid.append(grid[0]) - for i in range(len(grid)-1): - for j in range(len(grid[i])-1): + for i in range(len(grid) - 1): + for j in range(len(grid[i]) - 1): one = grid[i][j] - two = grid[i][j+1] - three = grid[i+1][j+1] - four = grid[i+1][j] + two = grid[i][j + 1] + three = grid[i + 1][j + 1] + four = grid[i + 1][j] newface = face([one, two, three, four]) self.faces.append(newface) - if self.endtype==2: + if self.endtype == 2: finalfaceverts = grid[-1] newface = face(finalfaceverts[:-1]) self.faces.append(newface) - if self.endtype==1: + if self.endtype == 1: lastvert = average(candidate.vertices).centroid() - up = candidate.normal*self.coords[-1][1] - newvert = lastvert+up + up = candidate.normal * self.coords[-1][1] + newvert = lastvert + up self.verts.append(newvert) ring = grid[-1] - for i in range(len(ring)-1): - newface = face([newvert, ring[i], ring[i+1]]) + for i in range(len(ring) - 1): + newface = face([newvert, ring[i], ring[i + 1]]) self.faces.append(newface) + class importmesh(mesh): def __init__(self, meshname, breakquadflag): mesh.__init__(self) @@ -842,34 +835,27 @@ class importmesh(mesh): obj = bpy.data.objects[meshname] bpy.context.scene.objects.active = obj obj.select = True - copied_mesh = None impmesh = None if not breakquadflag: bpy.ops.object.mode_set(mode='EDIT') - impmesh = bmesh.new() # create an empty BMesh - impmesh.from_mesh(obj.data) # fill it in from a Mesh + impmesh = bmesh.new() # create an empty BMesh + impmesh.from_mesh(obj.data) # fill it in from a Mesh bpy.ops.object.mode_set(mode='OBJECT') if breakquadflag: - - name = obj.name - - impmesh_name = "Original_" + name - bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.quads_convert_to_tris() - impmesh = bmesh.new() # create an empty BMesh + impmesh = bmesh.new() # create an empty BMesh impmesh.from_mesh(obj.data) # fill it in from a Mesh bpy.ops.object.mode_set(mode='OBJECT') - for v in impmesh.verts: vert = vertex(v.co) vert.index = v.index self.verts.append(vert) - #PKHG verts is now a list of vertex, so to say a copy of the Vectors + # PKHG verts is now a list of vertex, so to say a copy of the Vectors - #PKHG edges + # PKHG edges for e in impmesh.edges: tmp = [] for vert in e.verts: @@ -878,40 +864,40 @@ class importmesh(mesh): newedge = edge(tmp[0], tmp[1]) newedge.index = e.index self.edges.append(newedge) - #PKHG faces - extra_DBG_info("MeshInfo","vefm L995 the mesh impmesh", impmesh.faces[:]) + # PKHG faces + extra_DBG_info("MeshInfo", "vefm L868 the mesh impmesh", impmesh.faces[:]) for f in impmesh.faces: - temp=[] - for vert in f.verts: #PKHG a list! of indices ??? PKHG>??? - a = self.verts[vert.index] #PKHG verts contains already vertex objects + temp = [] + for vert in f.verts: # PKHG a list! of indices ??? PKHG>??? + a = self.verts[vert.index] # PKHG verts contains already vertex objects temp.append(a) newface = face(temp) - newface.index = f.index #indexcount + newface.index = f.index # indexcount self.faces.append(newface) self.dovertedge() self.dovertface() - self.temp=[] + self.temp = [] for i in range(len(self.verts)): self.temp.append([]) self.verts[i].index = i for i in range(len(self.verts)): target = self.surroundingverts(self.verts[i]) - for j in range(len(target)): ## go through those verts + for j in range(len(target)): # go through those verts temptarg = self.temp[target[j].index] - flag = 0 ## set a flag up + flag = 0 # set a flag up - for k in range(len(temptarg)): ## go through temp list for each of those verts + for k in range(len(temptarg)): # go through temp list for each of those verts - if temptarg[k]==i: ## if we find a match to the current vert... - flag = 1 ## raise the flag + if temptarg[k] == i: # if we find a match to the current vert... + flag = 1 # raise the flag - if flag==0: ## if there is no flag after all that... - self.temp[target[j].index].append(i) ## add current vert to temp list of this surrounding vert - self.temp[i].append(target[j].index) ## add this surrounding vert to the current temp list + if flag == 0: # if there is no flag after all that... + self.temp[target[j].index].append(i) # add current vert to temp list of this surrounding vert + self.temp[i].append(target[j].index) # add this surrounding vert to the current temp list newedge = edge(self.verts[i], self.verts[target[j].index]) - self.edges.append(newedge) ## add the newly found edge to the edges list + self.edges.append(newedge) # add the newly found edge to the edges list for edg in self.edges: edg.findvect() @@ -921,45 +907,49 @@ class importmesh(mesh): def surroundingverts(self, vert): ''' Find the verts surrounding vert''' - surround=[] ## list to be filled and returned - for faces in vert.faces: ## loop through faces attached to vert + surround = [] # list to be filled and returned + for faces in vert.faces: # loop through faces attached to vert finish = len(faces.vertices) for i in range(finish): - if i==finish-1: + if i == finish - 1: next = faces.vertices[0] else: - next = faces.vertices[i+1] + next = faces.vertices[i + 1] if vert == faces.vertices[i]: surround.append(next) return surround def breakquad(self, quad_face): ''' turn quads into triangles''' - distance1 = quad_face.vertices[0]-quad_face.vertices[2] - distance2 = quad_face.vertices[1]-quad_face.vertices[3] + distance1 = quad_face.vertices[0] - quad_face.vertices[2] + distance2 = quad_face.vertices[1] - quad_face.vertices[3] distance1.findlength() distance2.findlength() - if abs(distance1.length)<abs(distance2.length): - self.faces[quad_face.index]=face([quad_face.vertices[0], quad_face.vertices[1], quad_face.vertices[2]]) + if abs(distance1.length) < abs(distance2.length): + self.faces[quad_face.index] = face([quad_face.vertices[0], quad_face.vertices[1], quad_face.vertices[2]]) self.faces.append(face([quad_face.vertices[0], quad_face.vertices[2], quad_face.vertices[3]])) else: - self.faces[quad_face.index]=face([quad_face.vertices[0], quad_face.vertices[1], quad_face.vertices[3]]) + self.faces[quad_face.index] = face([quad_face.vertices[0], quad_face.vertices[1], quad_face.vertices[3]]) self.faces.append(face([quad_face.vertices[1], quad_face.vertices[2], quad_face.vertices[3]])) class strut(mesh): - def __init__(self, base, struttype, width, height, length, widthtog, heighttog, lengthtog, meshname, stretchflag, lift): - extra_DBG_info(name = "StrutMesh", info_text="vefm L1026\nstrut called: ", info_obj=[base, struttype, width, height, length, widthtog, heighttog, lengthtog, meshname, stretchflag, lift]) + def __init__(self, base, struttype, width, height, length, widthtog, heighttog, + lengthtog, meshname, stretchflag, lift): + + extra_DBG_info(name="StrutMesh", info_text="vefm L940\nstrut called: ", + info_obj=[base, struttype, width, height, length, widthtog, + heighttog, lengthtog, meshname, stretchflag, lift]) mesh.__init__(self) - ## put in strut prep stuff here - if struttype==None: + # put in strut prep stuff here + if struttype is None: return total = 0 divvy = len(base.faces[0].edges) for lengf in base.faces[0].edges: lengf.vect.findlength() - total = total+lengf.vect.length - yardstick = total/divvy + total = total + lengf.vect.length + yardstick = total / divvy if widthtog: self.width = width else: @@ -967,7 +957,7 @@ class strut(mesh): if heighttog: self.height = height else: - self.height = height*yardstick + self.height = height * yardstick if lengthtog: self.shrink = length else: @@ -983,63 +973,51 @@ class strut(mesh): edj.unit = side.vect edj.unit.normalize() edj.cross = crossp(edj.normal, edj.unit).docrossproduct() - template = importmesh(meshname,0) + template = importmesh(meshname, 0) maxx = 0 minx = 0 for vert in template.verts: -# if vert.x>maxx: if vert.vector.x > maxx: -# maxx = vert.x maxx = vert.vector.x -# if vert.x<minx: if vert.vector.x < minx: -# minx = vert.x minx = vert.vector.x for edj in base.edges: start = len(self.verts) centre = average([edj.a, edj.b]).centroid() - split = edj.vect.length/2 - #PKHG no division by zero!! + split = edj.vect.length / 2 + # PKHG no division by zero!! tmp = 1.0 if maxx != minx: - tmp = 1.0/(maxx - minx) + tmp = 1.0 / (maxx - minx) dubbl = edj.vect.length * tmp - #PKHG end no division by zero!! - diffplus = split-maxx - diffminus=-split-minx + # PKHG end no division by zero!! + diffplus = split - maxx + diffminus = -split - minx for point in template.verts: - - ay=(edj.normal * point.vector.z * self.height) + (edj.normal * lift) - + ay = (edj.normal * point.vector.z * self.height) + (edj.normal * lift) ce = edj.cross * point.vector.y * self.width + if stretchflag: -# be = edj.unit*self.shrink*dubbl*point.x be = edj.unit * self.shrink * dubbl * point.vector.x else: -# if point.x > 0.0: if point.vector.x > 0.0: -# be = edj.unit * self.shrink * (point.x + diffplus) be = edj.unit * self.shrink * (point.vector.x + diffplus) -# elif point.x < 0.0: elif point.vector.x < 0.0: -# be = edj.unit * self.shrink * (point.x + diffminus) be = edj.unit * self.shrink * (point.vector.x + diffminus) -# elif point.x == 0.0: elif point.vector.x == 0.0: -# be = edj.unit * self.shrink * point.x be = edj.unit * self.shrink * point.vector.x de = ay + be + ce newvert = centre + de self.verts.append(newvert) for edjy in template.edges: - one = edjy.a.index+start - two = edjy.b.index+start + one = edjy.a.index + start + two = edjy.b.index + start newedge = edge(self.verts[one], self.verts[two]) self.edges.append(newedge) for facey in template.faces: - faceverts=[] + faceverts = [] for verty in facey.vertices: - index = verty.index+start + index = verty.index + start faceverts.append(self.verts[index]) newface = face(faceverts) self.faces.append(newface) @@ -1049,21 +1027,21 @@ class strut(mesh): class hub(mesh): - def __init__(self, base, hubtype, width, height, length,\ + def __init__(self, base, hubtype, width, height, length, widthtog, heighttog, lengthtog, meshname): mesh.__init__(self) self.width = 1.0 self.height = 1.0 self.shrink = 1.0 - ## put in strut prep stuff here - extra_DBG_info("vefm L1133 HubMesh","base is ", str(dir(base))+"\n and meshname = " + meshname) - if hubtype==None: + # put in strut prep stuff here + extra_DBG_info("vefm L1037 HubMesh", "base is ", str(dir(base)) + "\n and meshname = " + meshname) + if hubtype is None: return total = 0 divvy = len(base.faces[0].edges) for lengf in base.verts[0].edges: lengf.vect.findlength() - total = total+lengf.vect.length + total = total + lengf.vect.length yardstick = total / divvy if widthtog: self.width = width @@ -1087,12 +1065,12 @@ class hub(mesh): for apex in base.verts: apex.findnormal() side = edge(apex.edges[0].a, apex.edges[0].b) - apex.unit = side.vect #PKHG is Vector: b -a + apex.unit = side.vect # PKHG is Vector: b - a apex.unit.normalize() apex.cross = crossp(apex.normal, apex.unit).docrossproduct() apex.unit = crossp(apex.cross, apex.normal).docrossproduct() - template = importmesh(meshname,0) + template = importmesh(meshname, 0) for apex in base.verts: start = len(self.verts) centre = apex @@ -1100,18 +1078,18 @@ class hub(mesh): ay = apex.normal * point.vector.z * self.height ce = apex.cross * point.vector.y * self.width be = apex.unit * point.vector.x * self.shrink - de = ay+be+ce - newvert = centre+de + de = ay + be + ce + newvert = centre + de self.verts.append(newvert) for edjy in template.edges: - one = edjy.a.index+start - two = edjy.b.index+start + one = edjy.a.index + start + two = edjy.b.index + start newedge = edge(self.verts[one], self.verts[two]) self.edges.append(newedge) for facey in template.faces: - faceverts=[] + faceverts = [] for verty in facey.vertices: - index = verty.index+start + index = verty.index + start faceverts.append(self.verts[index]) newface = face(faceverts) self.faces.append(newface) @@ -1119,33 +1097,32 @@ class hub(mesh): self.vertedgeflag = 0 self.connectivity() -#???PKHG TODO Nmesh used yet wrong! + +# ???PKHG TODO Nmesh used yet wrong! def finalfill(source, target): - if source == target: #PKHG: otherewise >infinite< loop - print("\n***WARNING*** vefm_271.finalfill L1148 source == target empty mesh used") - target = mesh() # -#PKHG_??? maybe renumverting and checkkin faces wiht >=4 5 vertices? + if source == target: # PKHG: otherewise >infinite< loop + print("\n***WARNING*** vefm_271.finalfill L1104 source == target empty mesh used") + target = mesh() + # PKHG_??? maybe renumverting and checkkin faces wiht >=4 5 vertices? count = 0 for point in source.verts: - newvert = vertex(point.vector) newvert.index = count target.verts.append(newvert) - point.index = count #PKHG_INFO source renumbered too! + point.index = count # PKHG_INFO source renumbered too! count += 1 for facey in source.faces: row = len(facey.vertices) if row >= 5: - tmp = Vector() for el in facey.vertices: - tmp = tmp + target.verts[el.index].vector + tmp = tmp + target.verts[el.index].vector tmp = tmp / row centre = vertex(tmp) - centre.index = count #PKHG_??? give it a good index + centre.index = count # PKHG_??? give it a good index count += 1 target.verts.append(centre) @@ -1155,15 +1132,13 @@ def finalfill(source, target): b = target.verts[facey.vertices[0].index] else: a = target.verts[facey.vertices[i].index] - b = target.verts[facey.vertices[i+1].index] + b = target.verts[facey.vertices[i + 1].index] target.faces.append([a, b, centre]) else: f = [] - for j in range(len(facey.vertices)): a = facey.vertices[j] - f.append(target.verts[a.index]) - target.faces.append(f) + target.faces.append(f) |