[Bf-extensions-cvs] [b2c68d8e] master: curve_assign_shapekey: 1) Passed target & shape key objects as params to main function 2) Fix to retain first key name, if target already has shape keys

Shrinivas Kulkarni noreply at git.blender.org
Thu Jan 9 10:02:25 CET 2020


Commit: b2c68d8eeb87318f1e57f48d7f7049c3fa6d0ca1
Author: Shrinivas Kulkarni
Date:   Thu Jan 9 14:31:26 2020 +0530
Branches: master
https://developer.blender.org/rBAb2c68d8eeb87318f1e57f48d7f7049c3fa6d0ca1

curve_assign_shapekey: 1) Passed target & shape key objects as params to main function 2) Fix to retain first key name, if target already has shape keys

===================================================================

M	curve_assign_shapekey.py

===================================================================

diff --git a/curve_assign_shapekey.py b/curve_assign_shapekey.py
index 318e2b25..f6f18500 100644
--- a/curve_assign_shapekey.py
+++ b/curve_assign_shapekey.py
@@ -3,7 +3,7 @@
 # This Blender add-on assigns one or more Bezier Curves as shape keys to another
 # Bezier Curve
 #
-# Supported Blender Version: 2.80 Beta
+# Supported Blender Versions: 2.8x
 #
 # Copyright (C) 2019  Shrinivas Kulkarni
 #
@@ -400,18 +400,12 @@ class Path:
         self.curve.data = self.getNewCurveData()
         bpy.data.curves.remove(curveData)
 
-def main(removeOriginal, space, matchParts, matchCriteria, alignBy, alignValues):
-    targetObj = bpy.context.active_object
-    if(targetObj == None or not isBezier(targetObj)):
-        return
+def main(targetObj, shapekeyObjs, removeOriginal, space, matchParts, \
+    matchCriteria, alignBy, alignValues):
 
     target = Path(targetObj)
 
-    shapekeys = [Path(c) for c in bpy.context.selected_objects if isBezier(c) \
-        and c != bpy.context.active_object]
-
-    if(len(shapekeys) == 0):
-        return
+    shapekeys = [Path(c) for c in shapekeyObjs]
 
     shapekeys = getExistingShapeKeyPaths(target) + shapekeys
     userSel = [target] + shapekeys
@@ -437,18 +431,20 @@ def main(removeOriginal, space, matchParts, matchCriteria, alignBy, alignValues)
         for j, part in enumerate(path.parts):
             part.toClose = allToClose[j]
 
-    target.updateCurve()
+    if(targetObj.data.shape_keys != None):
+        skName = targetObj.data.shape_keys.key_blocks[0].name
+    else:
+        skName = 'Basis'
 
-    target.curve.shape_key_add(name = 'Basis')
+    target.updateCurve()
+    target.curve.shape_key_add(name = skName)
 
     addShapeKeys(target.curve, shapekeys, space)
 
     if(removeOriginal):
         for path in userSel:
             if(path.curve != target.curve):
-                safeRemoveCurveObj(path.curve)
-
-    return {}
+                safeRemoveObj(path.curve)
 
 def getSplineSegs(spline):
     p = spline.bezier_points
@@ -743,7 +739,7 @@ def addShapeKeys(curve, paths, space):
             key.data[i].handle_right = pt[2]
 
 #TODO: Remove try
-def safeRemoveCurveObj(obj):
+def safeRemoveObj(obj):
     try:
         collections = obj.users_collection
 
@@ -791,9 +787,14 @@ class AssignShapeKeysOp(Operator):
         alignVal2 = params.alignVal2
         alignVal3 = params.alignVal3
 
-        createdObjsMap = main(removeOriginal, space, \
-                            matchParts, [matchCri1, matchCri2, matchCri3], \
-                                alignBy, [alignVal1, alignVal2, alignVal3])
+        targetObj = bpy.context.active_object
+        shapekeyObjs = [obj for obj in bpy.context.selected_objects if isBezier(obj) \
+            and obj != targetObj]
+
+        if(targetObj != None and isBezier(targetObj) and len(shapekeyObjs) > 0):
+            main(targetObj, shapekeyObjs, removeOriginal, space, \
+                    matchParts, [matchCri1, matchCri2, matchCri3], \
+                            alignBy, [alignVal1, alignVal2, alignVal3])
 
         return {'FINISHED'}



More information about the Bf-extensions-cvs mailing list