[Bf-extensions-cvs] [9aade9d9] master: curve_assign_shapekey: 1) moved UI and registration to bottom of the script 2) trimmed trailing whitespace 3) 2 lines between classes: T62799
Shrinivas Kulkarni
noreply at git.blender.org
Thu Jun 20 11:32:21 CEST 2019
Commit: 9aade9d926fc88b50a93e396ef3d77a7a08116d7
Author: Shrinivas Kulkarni
Date: Thu Jun 20 14:58:49 2019 +0530
Branches: master
https://developer.blender.org/rBA9aade9d926fc88b50a93e396ef3d77a7a08116d7
curve_assign_shapekey: 1) moved UI and registration to bottom of the script 2) trimmed trailing whitespace 3) 2 lines between classes: T62799
===================================================================
M curve_assign_shapekey.py
===================================================================
diff --git a/curve_assign_shapekey.py b/curve_assign_shapekey.py
index 287873a0..58335d0f 100644
--- a/curve_assign_shapekey.py
+++ b/curve_assign_shapekey.py
@@ -1,1104 +1,1110 @@
-#
-#
-# This Blender add-on assigns one or more Bezier Curves as shape keys to another
-# Bezier Curve
-#
-# Supported Blender Version: 2.80 Beta
-#
-# Copyright (C) 2019 Shrinivas Kulkarni
-#
-# License: MIT (https://github.com/Shriinivas/assignshapekey/blob/master/LICENSE)
-#
-
-import bpy, bmesh, bgl, gpu
-from gpu_extras.batch import batch_for_shader
-from bpy.props import BoolProperty, EnumProperty
-from collections import OrderedDict
-from mathutils import Vector
-from math import sqrt, floor
-from functools import cmp_to_key
-
-#################### UI and Registration Stuff ####################
-
-bl_info = {
- "name": "Assign Shape Keys",
- "author": "Shrinivas Kulkarni",
- "version": (1, 0, 0),
- "location": "Properties > Active Tool and Workspace Settings > Assign Shape Keys",
- "description": "Assigns one or more Bezier curves as shape keys to another Bezier curve",
- "category": "Object",
- "blender": (2, 80, 0),
-}
-
-matchList = [('vCnt', 'Vertex Count', 'Match by vertex count'),
- ('bbArea', 'Area', 'Match by surface area of the bounding box'), \
- ('bbHeight', 'Height', 'Match by bounding box height'), \
- ('bbWidth', 'Width', 'Match by bounding box width'),
- ('bbDepth', 'Depth', 'Match by bounding box depth'),
- ('minX', 'Min X', 'Match by bounding bon Min X'),
- ('maxX', 'Max X', 'Match by bounding bon Max X'),
- ('minY', 'Min Y', 'Match by bounding bon Min Y'),
- ('maxY', 'Max Y', 'Match by bounding bon Max Y'),
- ('minZ', 'Min Z', 'Match by bounding bon Min Z'),
- ('maxZ', 'Max Z', 'Match by bounding bon Max Z')]
-
-def markVertHandler(self, context):
- if(self.markVertex):
- bpy.ops.wm.mark_vertex()
-
-class AssignShapeKeyParams(bpy.types.PropertyGroup):
-
- removeOriginal : BoolProperty(name = "Remove Shape Key Objects", \
- description = "Remove shape key objects after assigning to target", \
- default = True)
-
- space : EnumProperty(name = "Space", \
- items = [('worldspace', 'World Space', 'worldspace'),
- ('localspace', 'Local Space', 'localspace')], \
- description = 'Space that shape keys are evluated in')
-
- alignList : EnumProperty(name="Vertex Alignment", items = \
- [("-None-", 'Manual Alignment', "Align curve segments based on starting vertex"), \
- ('vertCo', 'Vertex Coordinates', 'Align curve segments based on vertex coordinates')], \
- description = 'Start aligning the vertices of target and shape keys from',
- default = '-None-')
-
- alignVal1 : EnumProperty(name="Value 1",
- items = matchList, default = 'minX', description='First align criterion')
-
- alignVal2 : EnumProperty(name="Value 2",
- items = matchList, default = 'maxY', description='Second align criterion')
-
- alignVal3 : EnumProperty(name="Value 3",
- items = matchList, default = 'minZ', description='Third align criterion')
-
- matchParts : EnumProperty(name="Match Parts", items = \
- [("-None-", 'None', "Don't match parts"), \
- ('default', 'Default', 'Use part (spline) order as in curve'), \
- ('custom', 'Custom', 'Use one of the custom criteria for part matching')], \
- description='Match disconnected parts', default = 'default')
-
- matchCri1 : EnumProperty(name="Value 1",
- items = matchList, default = 'minX', description='First match criterion')
-
- matchCri2 : EnumProperty(name="Value 2",
- items = matchList, default = 'maxY', description='Second match criterion')
-
- matchCri3 : EnumProperty(name="Value 3",
- items = matchList, default = 'minZ', description='Third match criterion')
-
- markVertex : BoolProperty(name="Mark Starting Vertices", \
- description='Mark first vertices in all splines of selected curves', \
- default = False, update = markVertHandler)
-
-class AssignShapeKeysPanel(bpy.types.Panel):
-
- bl_label = "Assign Shape Keys"
- bl_idname = "CURVE_PT_assign_shape_keys"
- bl_space_type = 'VIEW_3D'
- bl_region_type = 'UI'
- bl_category = "Tool"
-
- @classmethod
- def poll(cls, context):
- return context.mode in {'OBJECT', 'EDIT_CURVE'}
-
- def draw(self, context):
-
- layout = self.layout
- col = layout.column()
- params = context.window_manager.AssignShapeKeyParams
-
- if(context.mode == 'OBJECT'):
- row = col.row()
- row.prop(params, "removeOriginal")
-
- row = col.row()
- row.prop(params, "space")
-
- row = col.row()
- row.prop(params, "alignList")
-
- if(params.alignList == 'vertCo'):
- row = col.row()
- row.prop(params, "alignVal1")
- row.prop(params, "alignVal2")
- row.prop(params, "alignVal3")
-
- row = col.row()
- row.prop(params, "matchParts")
-
- if(params.matchParts == 'custom'):
- row = col.row()
- row.prop(params, "matchCri1")
- row.prop(params, "matchCri2")
- row.prop(params, "matchCri3")
-
- row = col.row()
- row.operator("object.assign_shape_keys")
- else:
- col.prop(params, "markVertex", \
- toggle = True)
-
-class AssignShapeKeysOp(bpy.types.Operator):
-
- bl_idname = "object.assign_shape_keys"
- bl_label = "Assign Shape Keys"
- bl_options = {'REGISTER', 'UNDO'}
-
- def execute(self, context):
- params = context.window_manager.AssignShapeKeyParams
- removeOriginal = params.removeOriginal
- space = params.space
-
- matchParts = params.matchParts
- matchCri1 = params.matchCri1
- matchCri2 = params.matchCri2
- matchCri3 = params.matchCri3
-
- alignBy = params.alignList
- alignVal1 = params.alignVal1
- alignVal2 = params.alignVal2
- alignVal3 = params.alignVal3
-
- createdObjsMap = main(removeOriginal, space, \
- matchParts, [matchCri1, matchCri2, matchCri3], \
- alignBy, [alignVal1, alignVal2, alignVal3])
-
- return {'FINISHED'}
-
-class MarkerController:
- drawHandlerRef = None
- defPointSize = 6
- ptColor = (0, .8, .8, 1)
-
- def createSMMap(self, context):
- objs = context.selected_objects
- smMap = {}
- for curve in objs:
- if(not isBezier(curve)):
- continue
-
- smMap[curve.name] = {}
- mw = curve.matrix_world
- for splineIdx, spline in enumerate(curve.data.splines):
- if(not spline.use_cyclic_u):
- continue
-
- #initialize to the curr start vert co and idx
- smMap[curve.name][splineIdx] = \
- [mw @ curve.data.splines[splineIdx].bezier_points[0].co, 0]
-
- for pt in spline.bezier_points:
- pt.select_control_point = False
-
- if(len(smMap[curve.name]) == 0):
- del smMap[curve.name]
-
- return smMap
-
- def createBatch(self, context):
- positions = [s[0] for cn in self.smMap.values() for s in cn.values()]
- colors = [MarkerController.ptColor for i in range(0, len(positions))]
-
- self.batch = batch_for_shader(self.shader, \
- "POINTS", {"pos": positions, "color": colors})
-
- if context.area:
- context.area.tag_redraw()
-
- def drawHandler(self):
- bgl.glPointSize(MarkerController.defPointSize)
- self.batch.draw(self.shader)
-
- def removeMarkers(self, context):
- if(MarkerController.drawHandlerRef != None):
- bpy.types.SpaceView3D.draw_handler_remove(MarkerController.drawHandlerRef, \
- "WINDOW")
-
- if(context.area and hasattr(context.space_data, 'region_3d')):
- context.area.tag_redraw()
-
- MarkerController.drawHandlerRef = None
-
- self.deselectAll()
-
- def __init__(self, context):
- self.smMap = self.createSMMap(context)
- self.shader = gpu.shader.from_builtin('3D_FLAT_COLOR')
- self.shader.bind()
-
- MarkerController.drawHandlerRef = \
- bpy.types.SpaceView3D.draw_handler_add(self.drawHandler, \
- (), "WINDOW", "POST_VIEW")
-
- self.createBatch(context)
-
- def saveStartVerts(self):
- for curveName in self.smMap.keys():
- curve = bpy.data.objects[curveName]
- splines = curve.data.splines
- spMap = self.smMap[curveName]
-
- for splineIdx in spMap.keys():
- markerInfo = spMap[splineIdx]
- if(markerInfo[1] != 0):
- pts = splines[splineIdx].bezier_points
- loc, idx = markerInfo[0], markerInfo[1]
- cnt = len(pts)
-
- ptCopy = [[p.co.copy(), p.handle_right.copy(), \
- p.handle_left.copy(), p.handle_right_type, \
- p.handle_left_type] for p in pts]
-
- for i, pt in enumerate(pts):
- srcIdx = (idx + i) % cnt
- p = ptCopy[srcIdx]
-
- #Must set the types first
- pt.handle_right_type = p[3]
- pt.handle_left_type = p[4]
- pt.co = p[0]
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list