[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [1921] contrib/py/scripts/addons/ add_mesh_column.py: reverting last commit addons/add_mesh_column.py
Brendon Murphy
meta.androcto1 at gmail.com
Sat May 14 15:10:17 CEST 2011
Revision: 1921
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=1921
Author: meta-androcto
Date: 2011-05-14 13:10:16 +0000 (Sat, 14 May 2011)
Log Message:
-----------
reverting last commit addons/add_mesh_column.py
Removed Paths:
-------------
contrib/py/scripts/addons/add_mesh_column.py
Deleted: contrib/py/scripts/addons/add_mesh_column.py
===================================================================
--- contrib/py/scripts/addons/add_mesh_column.py 2011-05-14 12:31:55 UTC (rev 1920)
+++ contrib/py/scripts/addons/add_mesh_column.py 2011-05-14 13:10:16 UTC (rev 1921)
@@ -1,448 +0,0 @@
-#
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you may redistribute it, and/or
-# modify it, under the terms of the GNU General Public License
-# as published by the Free Software Foundation - either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, write to:
-#
-# the Free Software Foundation Inc.
-# 51 Franklin Street, Fifth Floor
-# Boston, MA 02110-1301, USA
-#
-# or go online at: http://www.gnu.org/licenses/ to view license options.
-#
-# ***** END GPL LICENCE BLOCK *****
-#
-
-bl_info = {
- "name": "Columns",
- "author": "Jim Bates, jambay",
- "version": (0, 1),
- "blender": (2, 5, 7),
- "api": 36339,
- "location": "View3D > Add > Mesh > Columns",
- "description": "Add architectural column(s).",
- "warning": "WIP - Initial implementation; updates pending and API not final for Blender",
- "wiki_url": "",
- "tracker_url": "",
- "category": "Add Mesh"
-}
-
-"""
-
-Create a column for use as an architectural element in a scene. Basically a glorified cylinder/cube.
-
-A column consists of three elements; base, shaft, and capital. They can be square or round, straight or tapered. The base and capital are optional.
-
-The shaft may be fluted and twisted.
-
-Only one column is created, at the current 3D cursor, expecting the user to duplicate and place as needed.
-
-This script is based on features from add_mesh_gears.
-
-"""
-
-# Version History
-# v0.01 2011/05/13 Initial implementation.
-
-
-import bpy
-import mathutils
-from math import *
-from bpy.props import *
-
-# A very simple "bridge" tool.
-# Connects two equally long vertex rows with faces.
-# Returns a list of the new faces (list of lists)
-#
-# vertIdx1 ... First vertex list (list of vertex indices).
-# vertIdx2 ... Second vertex list (list of vertex indices).
-# closed ... Creates a loop (first & last are closed).
-# flipped ... Invert the normal of the face(s).
-#
-# Note: You can set vertIdx1 to a single vertex index to create
-# a fan/star of faces.
-# Note: If both vertex idx list are the same length they have
-# to have at least 2 vertices.
-def createFaces(vertIdx1, vertIdx2, closed=False, flipped=False):
- faces = []
-
- if not vertIdx1 or not vertIdx2:
- return None
-
- if len(vertIdx1) < 2 and len(vertIdx2) < 2:
- return None
-
- fan = False
- if (len(vertIdx1) != len(vertIdx2)):
- if (len(vertIdx1) == 1 and len(vertIdx2) > 1):
- fan = True
- else:
- return None
-
- total = len(vertIdx2)
-
- if closed:
- # Bridge the start with the end.
- if flipped:
- face = [
- vertIdx1[0],
- vertIdx2[0],
- vertIdx2[total - 1]]
- if not fan:
- face.append(vertIdx1[total - 1])
- faces.append(face)
-
- else:
- face = [vertIdx2[0], vertIdx1[0]]
- if not fan:
- face.append(vertIdx1[total - 1])
- face.append(vertIdx2[total - 1])
- faces.append(face)
-
- # Bridge the rest of the faces.
- for num in range(total - 1):
- if flipped:
- if fan:
- face = [vertIdx2[num], vertIdx1[0], vertIdx2[num + 1]]
- else:
- face = [vertIdx2[num], vertIdx1[num],
- vertIdx1[num + 1], vertIdx2[num + 1]]
- faces.append(face)
- else:
- if fan:
- face = [vertIdx1[0], vertIdx2[num], vertIdx2[num + 1]]
- else:
- face = [vertIdx1[num], vertIdx2[num],
- vertIdx2[num + 1], vertIdx1[num + 1]]
- faces.append(face)
-
- return faces
-
-
-# Calculate the vertex coordinates for a single
-# section of a gear tooth.
-# Returns 4 lists of vertex coords (list of tuples):
-# *-*---*---* (1.) verts_inner_base
-# | | | |
-# *-*---*---* (2.) verts_outer_base
-# | | |
-# *---*---* (3.) verts_middle_tooth
-# \ | /
-# *-*-* (4.) verts_tip_tooth
-#
-# a
-# t
-# d
-# radius
-# Ad
-# De
-# base
-# p_angle
-# rack
-# crown
-def add_tooth(a, t, d, radius, Ad, De, base, p_angle, rack=0, crown=0.0):
- A = [a, a + t / 4, a + t / 2, a + 3 * t / 4]
- C = [cos(i) for i in A]
- S = [sin(i) for i in A]
-
- Ra = radius + Ad
- Rd = radius - De
- Rb = Rd - base
-
- # Pressure angle calc
- O = Ad * tan(p_angle)
- if Ra: # prevent div 0 error - useless parameter...
- p_angle = atan(O / Ra)
-
- if radius < 0:
- p_angle = -p_angle
-
- if rack:
- S = [sin(t / 4) * I for I in range(-2, 3)]
- Sp = [0, sin(-t / 4 + p_angle), 0, sin(t / 4 - p_angle)]
-
- verts_inner_base = [(Rb, radius * S[I], d) for I in range(4)]
- verts_outer_base = [(Rd, radius * S[I], d) for I in range(4)]
- verts_middle_tooth = [(radius, radius * S[I], d) for I in range(1, 4)]
- verts_tip_tooth = [(Ra, radius * Sp[I], d) for I in range(1, 4)]
-
- else:
- Cp = [
- 0,
- cos(a + t / 4 + p_angle),
- cos(a + t / 2),
- cos(a + 3 * t / 4 - p_angle)]
- Sp = [0,
- sin(a + t / 4 + p_angle),
- sin(a + t / 2),
- sin(a + 3 * t / 4 - p_angle)]
-
- verts_inner_base = [(Rb * C[I], Rb * S[I], d)
- for I in range(4)]
- verts_outer_base = [(Rd * C[I], Rd * S[I], d)
- for I in range(4)]
- verts_middle_tooth = [(radius * C[I], radius * S[I], d + crown / 3)
- for I in range(1, 4)]
- verts_tip_tooth = [(Ra * Cp[I], Ra * Sp[I], d + crown)
- for I in range(1, 4)]
-
- return (verts_inner_base, verts_outer_base, verts_middle_tooth, verts_tip_tooth)
-
-
-# Create column geometry.
-# Returns:
-# * A list of vertices
-# * A list of faces
-# * A list (group) of vertices of the tip
-# * A list (group) of vertices of the valley
-#
-# radius area of the column, negative for flutes (else extrusions).
-# sectors surfaces (faces) on column, 1 = square, increase to smooth, max 360, 180 is plenty.
-# segNum number of segments (rows - vertical blocks) for column. Use +1 to complete row (2 is working min).
-# flutes make curfs, gouges, gear like indents... true/false.
-# Ad ... Addendum, extent of tooth above radius.
-# De ... Dedendum, extent of tooth below radius.
-# width ... Width, thickness of flute.
-# crown ... Inward pointing extend of crown teeth.
-#
-# @todo: Fix teethNum. Some numbers are not possible yet.
-# @todo: Create start & end geoemetry (closing faces)
-def add_column(radius, sectors, segNum, flutes, Ad, De, p_angle, width, skew, crown):
-
- numFlutes = 0
- isFluted = False
-
- t = 2 * pi / sectors # sectors == 1 makes a square
-
- verts = []
- faces = []
- vgroup_top = [] # Vertex group of top/tip? vertices.
- vgroup_valley = [] # Vertex group of valley vertices
-
- #width = width / 2.0
-
- edgeloop_prev = []
- for Row in range(segNum):
- edgeloop = []
-
- for faceCnt in range(sectors):
- a = faceCnt * t
-
- s = Row * skew
- d = Row * width
-
- if flutes and not numFlutes % sectors: # making "flutes", and due a flute?
- numFlutes + 1
- isFluted = True
-
- verts1, verts2, verts3, verts4 = add_tooth(a + s, t, d,
- radius, Ad, De, 0, 0, 0, crown)
-
- # Remove various unneeded verts (if we are "inside" the tooth)
- del(verts2[2]) # Central vertex in the base of the tooth.
- del(verts3[1]) # Central vertex in the middle of the tooth.
-
- else: # column surface for section...
- isFluted = False
- verts1, verts2, verts3, verts4 = add_tooth(a + s, t, d,
- radius - De, 0.0, 0.0, 0, p_angle)
-
- # Ignore other verts than the "other base".
- verts1 = verts3 = verts4 = []
-
- vertsIdx2 = list(range(len(verts), len(verts) + len(verts2)))
- verts.extend(verts2)
- vertsIdx3 = list(range(len(verts), len(verts) + len(verts3)))
- verts.extend(verts3)
- vertsIdx4 = list(range(len(verts), len(verts) + len(verts4)))
- verts.extend(verts4)
-
- if isFluted:
- verts_current = []
- verts_current.extend(vertsIdx2[:2])
- verts_current.append(vertsIdx3[0])
- verts_current.extend(vertsIdx4)
- verts_current.append(vertsIdx3[-1])
- verts_current.append(vertsIdx2[-1])
-
- # Valley = first 2 vertices of outer base:
- vgroup_valley.extend(vertsIdx2[:1])
- # Top/tip vertices:
- vgroup_top.extend(vertsIdx4)
-
- else: # Flat
- verts_current = vertsIdx2
- vgroup_valley.extend(vertsIdx2) # Valley - all of them
-
- edgeloop.extend(verts_current)
-
- # Create faces between rings/rows.
- if edgeloop_prev:
- faces_row = createFaces(edgeloop, edgeloop_prev, closed=True)
- faces.extend(faces_row)
-
- # Remember last ring/row of vertices for next ring/row iteration.
- edgeloop_prev = edgeloop
-
- return verts, faces, vgroup_top, vgroup_valley
-
-
-class AddColumn(bpy.types.Operator):
- '''Add a column mesh.'''
- bl_idname = "mesh.primitive_column"
- bl_label = "Add Column"
- bl_options = {'REGISTER', 'UNDO'}
-
- radius = FloatProperty(name="Radius",
- description="Radius of the column",
- min=0.01,
- max=100.0,
- default=0.5)
- column_segs = IntProperty(name="Segments",
- description="Number of segments (faces) in the column",
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list