[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [643] trunk/py/scripts/addons/ add_mesh_archimedean_solids.py: * Added support for Truncated Cuboctahedron

Martin Buerbaum martin.buerbaum at gmx.at
Tue Apr 27 16:41:08 CEST 2010


Revision: 643
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-extensions&revision=643
Author:   pontiac
Date:     2010-04-27 16:41:08 +0200 (Tue, 27 Apr 2010)

Log Message:
-----------
* Added support for Truncated Cuboctahedron
* See also http://en.wikipedia.org/wiki/Truncated_cuboctahedron

Modified Paths:
--------------
    trunk/py/scripts/addons/add_mesh_archimedean_solids.py

Modified: trunk/py/scripts/addons/add_mesh_archimedean_solids.py
===================================================================
--- trunk/py/scripts/addons/add_mesh_archimedean_solids.py	2010-04-27 08:40:35 UTC (rev 642)
+++ trunk/py/scripts/addons/add_mesh_archimedean_solids.py	2010-04-27 14:41:08 UTC (rev 643)
@@ -306,8 +306,10 @@
 def add_truncated_tetrahedron(hexagon_side=2.0 * sqrt(2.0) / 3.0,
     star_ngons=False):
 
+    size = 2.0
+
     if (hexagon_side < 0.0
-        or hexagon_side > 2.0 * sqrt(2.0)):
+        or hexagon_side > size * sqrt(2.0)):
         return None, None
 
     verts = []
@@ -393,15 +395,15 @@
 # http://en.wikipedia.org/wiki/Truncated_cube
 # http://en.wikipedia.org/wiki/Cuboctahedron
 def add_cuboctahedron(octagon_side=0.0, star_ngons=False):
-    if (octagon_side > 2.0 or octagon_side < 0.0):
+    size = 2.0
+
+    if (octagon_side > size or octagon_side < 0.0):
         return None, None, None
 
     s = octagon_side
     verts = []
     faces = []
 
-    size = 2.0
-
     name = "Cuboctahedron"
     if s == 0.0:
         # Upper quad face
@@ -573,7 +575,7 @@
             top_down_3[1], top_down_3[0], ngon_top[6], ngon_top[7],
             top_down_0[0], top_down_0[1], ngon_bot[7], ngon_bot[6]]
 
-         # Invert face normals where needed.
+        # Invert face normals where needed.
         ngon_top = invert_face_normal(ngon_top)
         tri_xp_yp_zp = invert_face_normal(tri_xp_yp_zp)
         tri_xp_yn_zn = invert_face_normal(tri_xp_yn_zn)
@@ -610,14 +612,14 @@
 # http://en.wikipedia.org/wiki/Rhombicuboctahedron
 # Note: quad_size=0 would result in a Cuboctahedron
 def add_rhombicuboctahedron(quad_size=sqrt(2.0) / (1.0 + sqrt(2) / 2.0)):
-    if (quad_size > 2.0 or quad_size < 0.0):
+    size = 2.0
+
+    if (quad_size > size or quad_size < 0.0):
         return None, None
 
     faces = []
     verts = []
 
-    size = 2.0
-
     # Top & bottom faces (quads)
     face_top = []
     face_bot = []
@@ -867,6 +869,292 @@
 
     return verts, faces
 
+
+# http://en.wikipedia.org/wiki/Truncated_cuboctahedron
+def add_truncated_cuboctahedron(
+    octagon_size=2.0 - (2.0 / sqrt(2.0)) * (2.0 / (4.0 / sqrt(2.0) + 1.0)),
+    octagon_side=2.0 / (4.0 / sqrt(2.0) + 1.0),
+    star_ngons=False):
+
+    size = 2.0
+
+    if (octagon_side < 0.0
+        or octagon_size < 0.0
+        or octagon_size < octagon_side
+        or octagon_size > size
+        or octagon_side > size):
+        return None, None
+
+    verts = []
+    faces = []
+    
+    oside = octagon_side
+
+    # Vertices of a simple Cube
+    verts_cube = [
+        Vector((1.0, 1.0, 1.0)),     # tip 0
+        Vector((1.0, -1.0, 1.0)),    # tip 1
+        Vector((-1.0, -1.0, 1.0)),   # tip 2
+        Vector((-1.0, 1.0, 1.0)),    # tip 3
+        Vector((1.0, 1.0, -1.0)),    # tip 4
+        Vector((1.0, -1.0, -1.0)),   # tip 5
+        Vector((-1.0, -1.0, -1.0)),  # tip 6
+        Vector((-1.0, 1.0, -1.0))]   # tip 7
+
+    tri_xp_yp_zp = []
+    tri_xp_yn_zp = []
+    tri_xn_yp_zp = []
+    tri_xn_yn_zp = []
+    tri_xp_yp_zn = []
+    tri_xp_yn_zn = []
+    tri_xn_yp_zn = []
+    tri_xn_yn_zn = []
+
+    # Prepare top & bottom octagons.
+    oct_top = []
+    oct_bot = []
+    hex_0_zp = []
+    hex_1_zp = []
+    hex_2_zp = []
+    hex_3_zp = []
+    hex_0_zn = []
+    hex_1_zn = []
+    hex_2_zn = []
+    hex_3_zn = []
+
+    bevel_size = (size - octagon_size) / 2.0
+
+    # Top edges ####
+    bevel_z = Vector((0.0, 0.0, -bevel_size))
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[0], verts_cube[1], oside)
+    va1, vb1 = va + Vector((-bevel_size, 0, 0)), vb + Vector((-bevel_size, 0, 0))
+    va2, vb2 = va + bevel_z, vb + bevel_z
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xp_yp_zp.append(va_idx)
+    #tri_xp_yn_zp.append(vb_idx)
+    oct_top.extend([va1_idx, vb1_idx])
+    quad_01_zp = [va1_idx, vb1_idx, vb2_idx, va2_idx]
+    hex_0_zp.extend([va2_idx, va1_idx])
+    hex_1_zp.extend([vb2_idx, vb1_idx])
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[1], verts_cube[2], oside)
+    va1, vb1 = va + Vector((0, bevel_size, 0)), vb + Vector((0, bevel_size, 0))
+    va2, vb2 = va + bevel_z, vb + bevel_z
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xp_yn_zp.append(va_idx)
+    #tri_xn_yn_zp.append(vb_idx)
+    oct_top.extend([va1_idx, vb1_idx])
+    quad_12_zp = [va1_idx, vb1_idx, vb2_idx, va2_idx]
+    hex_1_zp.extend([va1_idx, va2_idx])
+    hex_2_zp.extend([vb2_idx, vb1_idx])
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[2], verts_cube[3], oside)
+    va1, vb1 = va + Vector((bevel_size, 0, 0)), vb + Vector((bevel_size, 0, 0))
+    va2, vb2 = va + bevel_z, vb + bevel_z
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    oct_top.extend([va1_idx, vb1_idx])
+    quad_23_zp = [va1_idx, vb1_idx, vb2_idx, va2_idx]
+    hex_2_zp.extend([va1_idx, va2_idx])
+    hex_3_zp.extend([vb2_idx, vb1_idx])
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[3], verts_cube[0], oside)
+    va1, vb1 = va + Vector((0, -bevel_size, 0)), vb + Vector((0, -bevel_size, 0))
+    va2, vb2 = va + bevel_z, vb + bevel_z
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xn_yp_zp.append(va_idx)
+    #tri_xp_yp_zp.append(vb_idx)
+    oct_top.extend([va1_idx, vb1_idx])
+    quad_30_zp = [va1_idx, vb1_idx, vb2_idx, va2_idx]
+    hex_3_zp.extend([va1_idx, va2_idx])
+    hex_0_zp.extend([vb1_idx, vb2_idx])
+
+    # Top-down edges ####
+    va, vb = subdivide_edge_2_cuts(verts_cube[0], verts_cube[4], oside)
+    va1, vb1 = va + Vector((-bevel_size, 0, 0)), vb + Vector((-bevel_size, 0, 0))
+    va2, vb2 = va + Vector((0, -bevel_size, 0)), vb + Vector((0, -bevel_size, 0))
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xp_yp_zp.append(va_idx)
+    #tri_xp_yp_zn.append(vb_idx)
+    top_down_0_1 = [va1_idx, vb1_idx]
+    top_down_0_2 = [va2_idx, vb2_idx]
+    quad_04 = [vb1_idx, va1_idx, va2_idx, vb2_idx]
+    hex_0_zp.extend([va1_idx, va2_idx])
+    hex_0_zn.extend([vb1_idx, vb2_idx])
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[1], verts_cube[5], oside)
+    va1, vb1 = va + Vector((-bevel_size, 0, 0)), vb + Vector((-bevel_size, 0, 0))
+    va2, vb2 = va + Vector((0, bevel_size, 0)), vb + Vector((0, bevel_size, 0))
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xp_yn_zp.append(va_idx)
+    #tri_xp_yn_zn.append(vb_idx)
+    top_down_1_1 = [va1_idx, vb1_idx]
+    top_down_1_2 = [va2_idx, vb2_idx]
+    quad_15 = [va1_idx, vb1_idx, vb2_idx, va2_idx]
+    hex_1_zp.extend([va1_idx, va2_idx])
+    hex_1_zn.extend([vb1_idx, vb2_idx])
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[2], verts_cube[6], oside)
+    va1, vb1 = va + Vector((bevel_size, 0, 0)), vb + Vector((bevel_size, 0, 0))
+    va2, vb2 = va + Vector((0, bevel_size, 0)), vb + Vector((0, bevel_size, 0))
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xn_yn_zp.append(va_idx)
+    #tri_xn_yn_zn.append(vb_idx)
+    top_down_2_1 = [va1_idx, vb1_idx]
+    top_down_2_2 = [va2_idx, vb2_idx]
+    quad_26 = [vb1_idx, va1_idx, va2_idx, vb2_idx]
+    hex_2_zp.extend([va2_idx, va1_idx])
+    hex_2_zn.extend([vb2_idx, vb1_idx])
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[3], verts_cube[7], oside)
+    va1, vb1 = va + Vector((bevel_size, 0, 0)), vb + Vector((bevel_size, 0, 0))
+    va2, vb2 = va + Vector((0, -bevel_size, 0)), vb + Vector((0, -bevel_size, 0))
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xn_yp_zp.append(va_idx)
+    #tri_xn_yp_zn.append(vb_idx)
+    top_down_3_1 = [va1_idx, vb1_idx]
+    top_down_3_2 = [va2_idx, vb2_idx]
+    quad_37 = [va1_idx, vb1_idx, vb2_idx, va2_idx]
+    hex_3_zp.extend([va1_idx, va2_idx])
+    hex_3_zn.extend([vb1_idx, vb2_idx])
+    
+    # Bottom edges ####
+    bevel_z = Vector((0.0, 0.0, bevel_size))
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[4], verts_cube[5], oside)
+    va1, vb1 = va + Vector((-bevel_size, 0, 0)), vb + Vector((-bevel_size, 0, 0))
+    va2, vb2 = va + bevel_z, vb + bevel_z
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xp_yp_zn.append(va_idx)
+    #tri_xp_yn_zn.append(vb_idx)
+    oct_bot.extend([va1_idx, vb1_idx])
+    quad_45_zn = [vb1_idx, va1_idx, va2_idx, vb2_idx]
+    hex_0_zn.extend([va2_idx, va1_idx])
+    hex_1_zn.extend([vb2_idx, vb1_idx])
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[5], verts_cube[6], oside)
+    va1, vb1 = va + Vector((0, bevel_size, 0)), vb + Vector((0, bevel_size, 0))
+    va2, vb2 = va + bevel_z, vb + bevel_z
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xp_yn_zn.append(va_idx)
+    #tri_xn_yn_zn.append(vb_idx)
+    oct_bot.extend([va1_idx, vb1_idx])
+    quad_56_zn = [vb1_idx, va1_idx, va2_idx, vb2_idx]
+    hex_1_zn.extend([va1_idx, va2_idx])
+    hex_2_zn.extend([vb2_idx, vb1_idx])
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[6], verts_cube[7], oside)
+    va1, vb1 = va + Vector((bevel_size, 0, 0)), vb + Vector((bevel_size, 0, 0))
+    va2, vb2 = va + bevel_z, vb + bevel_z
+    va1_idx, vb1_idx = len(verts), len(verts) + 1
+    va2_idx, vb2_idx = len(verts) + 2, len(verts) + 3
+    verts.extend([va1, vb1, va2, vb2])
+    #tri_xn_yn_zn.append(va_idx)
+    #tri_xn_yp_zn.append(vb_idx)
+    oct_bot.extend([va1_idx, vb1_idx])
+    quad_67_zn = [vb1_idx, va1_idx, va2_idx, vb2_idx]
+    hex_2_zn.extend([va1_idx, va2_idx])
+    hex_3_zn.extend([vb2_idx, vb1_idx])
+
+    va, vb = subdivide_edge_2_cuts(verts_cube[7], verts_cube[4], oside)
+    va1, vb1 = va + Vector((0, -bevel_size, 0)), vb + Vector((0, -bevel_size, 0))

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list