[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