[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3802] contrib/py/scripts/addons: initial merge of selected contrib mesh tools to one menu system
Brendon Murphy
meta.androcto1 at gmail.com
Mon Oct 1 15:42:25 CEST 2012
Revision: 3802
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3802
Author: meta-androcto
Date: 2012-10-01 13:42:24 +0000 (Mon, 01 Oct 2012)
Log Message:
-----------
initial merge of selected contrib mesh tools to one menu system
Added Paths:
-----------
contrib/py/scripts/addons/mesh_extra_tools/
contrib/py/scripts/addons/mesh_extra_tools/__init__.py
contrib/py/scripts/addons/mesh_extra_tools/face_inset_fillet.py
contrib/py/scripts/addons/mesh_extra_tools/mesh_bevel_round.py
contrib/py/scripts/addons/mesh_extra_tools/mesh_bevel_witold.py
contrib/py/scripts/addons/mesh_extra_tools/mesh_bump.py
contrib/py/scripts/addons/mesh_extra_tools/mesh_extras.py
contrib/py/scripts/addons/mesh_extra_tools/mesh_filletplus.py
contrib/py/scripts/addons/mesh_extra_tools/mesh_mextrude_plus.py
contrib/py/scripts/addons/mesh_extra_tools/mesh_normal_smooth.py
contrib/py/scripts/addons/mesh_extra_tools/mesh_polyredux.py
contrib/py/scripts/addons/mesh_extra_tools/mesh_vertex_chamfer.py
Removed Paths:
-------------
contrib/py/scripts/addons/mesh_bevel_round.py
contrib/py/scripts/addons/mesh_multi_extrude/
contrib/py/scripts/addons/mesh_normal_smooth.py
contrib/py/scripts/addons/mesh_vertex_chamfer.py
Deleted: contrib/py/scripts/addons/mesh_bevel_round.py
===================================================================
--- contrib/py/scripts/addons/mesh_bevel_round.py 2012-10-01 07:06:29 UTC (rev 3801)
+++ contrib/py/scripts/addons/mesh_bevel_round.py 2012-10-01 13:42:24 UTC (rev 3802)
@@ -1,2956 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can 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.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8 compliant>
-
-# Ported from RoundCorner Ruby program for Sketchup by Fredo6
-# Fredo6 gave permission to port and distribute with Blender
-
-bl_info = {
- "name": "Bevel Round",
- "author": "Fredo6, Howard Trickey",
- "version": (0, 1),
- "blender": (2, 6, 3),
- "location": "View3D > Tools",
- "description": "Bevel selected edges, possibly rounded",
- "warning": "",
- "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"\
- "Scripts",
- "tracker_url": "http://projects.blender.org/tracker/index.php?"\
- "func=detail&aid=32582",
- "category": "Mesh"}
-
-import math
-import functools
-import bpy
-import bmesh
-import mathutils
-from bpy.props import (BoolProperty,
- EnumProperty,
- IntProperty,
- FloatProperty,
- )
-from mathutils import Vector
-
-EPSILON = 1e-6
-
-class BevelRound(bpy.types.Operator):
- bl_idname = "mesh.bevel_round"
- bl_label = "Bevel Round"
- bl_description = "Bevel selected edges, possibly rounded"
- bl_options = {'REGISTER', 'UNDO'}
-
- bevel_kind = EnumProperty(name="Bevel Kind",
- description="Style for beveling edges and corners",
- items=[
- ('ROUND', "Round",
- "Round edges and corners"),
- ('SHARP', "Sharp",
- "Round edges, peaked corners"),
- ('BEVEL', "Bevel",
- "Flat edges and corners")
- ],
- default='BEVEL')
-
- offset_amount = FloatProperty(name="Offset",
- description="Amount to offset edges along faces",
- default=0.2,
- min=0.0,
- max=1000.0,
- soft_min=0.0,
- soft_max=10.0,
- unit='LENGTH')
-
- segments = IntProperty(name="Segments",
- description="How many segments on bevel profile",
- min=1,
- max=100,
- default=1)
-
- strict_offset = BoolProperty(name="Strict Offset",
- description="Keep offset the same on all faces",
- default=True)
-
- rounding = BoolProperty(name="Inner Rounding",
- description="Round inside faces at concave corners",
- default=True)
-
- @classmethod
- def poll(cls, context):
- obj = context.active_object
- return (obj and obj.type == 'MESH' and context.mode == 'EDIT_MESH')
-
- def draw(self, context):
- layout = self.layout
- box = layout.box()
- box.label("Bevel Round Options:")
- box.prop(self, "bevel_kind")
- box.prop(self, "offset_amount")
- box.prop(self, "segments")
- box.prop(self, "strict_offset")
- box.prop(self, "rounding")
-
- def invoke(self, context, event):
- self.action(context)
- return {'FINISHED'}
-
- def execute(self, context):
- self.action(context)
- return {'FINISHED'}
-
- def action(self, context):
- obj = bpy.context.active_object
- bm = bmesh.from_edit_mesh(obj.data)
- # make sure vert, edge, face indexes match their positions
- bm.verts.index_update()
- bm.edges.index_update()
- bm.faces.index_update()
- algo = BevelRoundAlgo(bm, self.bevel_kind, self.offset_amount,
- self.segments, self.strict_offset, self.rounding)
- algo.execute()
- # Force mesh data recalculation
- bpy.ops.object.editmode_toggle()
- bpy.ops.object.editmode_toggle()
-
-
-class BevelRoundAlgo(object):
- def __init__(self, bm, kind, offset, num_seg, strict, round):
- # The bmesh object
- self.bm = bm
-
- # How much to move offset edges
- # (projected onto 90deg angle planes, unless strict_offset)
- self.offset = offset
-
- # How many segments in the profile of an edge
- self.num_seg = num_seg
-
- # Cache of profiles in standard position, keyed by "kind-numseg"
- # Kind will be one of 'C' or 'P', for now
- self.hsh_profile_pts = {}
-
- # bmesh Edge index -> BEdge for it
- # Will have one for all the edges in the bevel selection
- self.hsh_ed = {}
-
- # bmesh Vertex index -> BCorner for it
- # Will have one for all ends of edges in hsh_ed
- self.hsh_corners = {}
-
- # bmesh Face index -> BFace for it
- self.hsh_faces = {}
-
- # List of [Vector, Vector], each a border line segment (for display only?)
- self.lpt_borders = []
-
- # Catenas are chains of edges with related offsets
- # Each has eds, a list of BEdges;
- # chain, a list of [BEdge, face index]l
- # nbsmall: seems to be some kind of edge count
- self.lst_catenas = []
-
- # List of Vector, pivot points for star corners
- self.lst_mark_points = []
-
- # lst_triangulate is list of [vd, ed1, ed2, seg1, seg2]
- # for each vd for a vert with only two edges and >=3 pairs
- self.lst_triangulated = []
-
- # List of BCorner, those signaled as errors (pair lines don't cross (?))
- self.hsh_error_vertex = {}
-
- # Edge index -> bmesh Edge for edges to bevel
- self.hash_edges = {}
-
- # hash_edges_extra : Edge index -> bmesh Edge added for valence >= 4 reasons
- self.hash_edges_extra = {}
-
- # Vertex index -> list of bmesh edges to bevel attached
- self.hsh_vertex_edges = {}
-
- # Vertex index -> list of all bmesh edges attached to it
- self.hsh_vertex_info = {}
-
- # Map from point to BMVert
- self.points = Points(self.bm)
-
- # Used to orient asymmetric corner mesh patterns
- self.golden_axis = Vector([0.0, 0.0, 1.0])
-
- # Profile spec for edges: [string, number]
- # where string is 'C' for quarter circle, 'CR' for concave quarter circle,
- # 'BZ' for Bezier, 'P' for 'perso' (?, some kind of multi-bezier).
- # number is number of line segments in profile (so 1 means just
- # a single straight line from start to end)
- if kind == 'BEVEL':
- self.profile_type = ['C', 1]
- self.num_seg = 1
- else:
- self.profile_type = ['C', num_seg]
-
- # Controls whether or not to use a round profile in certain disagreeing cases (?)
- self.mode_profile = 1
-
- # Corners come to peaks if mode_sharp
- self.mode_sharp = True if kind == 'SHARP' else False
-
- # Forces offset along faces to be uniform rather than adjusted
- # to make them uniform when projected on 90deg-meeting-faces
- self.strict_offset = strict
-
- # Should we round the edges in the faces themselves too?
- self.mode_rounding = round
-
- def execute(self):
- bm = self.bm
-
- # Add the bmesh edges and compute everything
- # needed for bevel
- self.build_model(bm)
-
- # print("after build:")
- # self.print()
-
- # Initialization for geometry making
- self.prepare_geometry()
-
- # print("after prepare_geometry")
- # self.print()
-
- self.lst_corners = list(self.hsh_corners.values())
- self.nb_corners = len(self.lst_corners) - 1
- self.lst_eds = list(self.hsh_ed.values())
- self.nb_eds = len(self.lst_eds) - 1
- self.hsh_edge_erase = {}
- self.nb_borders = len(self.lpt_borders) // 2 - 1
-
- # Process geometry
-
- self.lst_edge_erase = []
- self.nb_edge_erase = -1
-
- # Creating the rounding faces
- for k in range(0, self.nb_eds + 1):
- ed = self.lst_eds[k]
- if ed.vmesh:
- self.create_geometry_vmesh(ed.vmesh)
-
- # Creating the triangulated vmesh if any
- self.create_geometry_vmesh(self.lst_vmesh_triangulated)
- self.create_geometry_vborders(self.lst_vborders_triangulated)
-
- # Creating the corner round faces
- for k in range(0, self.nb_corners + 1):
- vd = self.lst_corners[k]
- if vd.vmesh:
- self.create_geometry_vmesh(vd.vmesh)
-
- # Creating the new faces
- for fc in self.hsh_faces.values():
- if not fc.anynew():
- continue
- lv = []
- for i in range(len(fc.bmverts)):
- npl = fc.newpts[i]
- if npl:
- lv.extend(self.get_bmverts(npl))
- else:
- lv.append(fc.bmverts[i])
- self.bm.faces.new(lv)
-
- # Deleting the unneeded geometry
- for f in self.hsh_faces.values():
- if f.face.is_valid:
- if not f.anynew():
- continue
- fedges = f.face.edges[::]
- self.bm.faces.remove(f.face)
- for e in fedges:
- if e.is_valid:
- if e.is_wire:
- self.bm.edges.remove(e)
- for k in range(0, self.nb_corners + 1):
- vd = self.lst_corners[k]
- if len(vd.leds) == 1:
- edge = vd.leds[0].edge
- if edge.is_valid:
- self.bm.edges.remove(edge)
- else:
- # print("remove edges:", vd.vertex.link_edges)
- pass # is there stuff to do here?
- if vd.vertex.is_valid:
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list