[Bf-extensions-cvs] [a36c5cd] master: code cleanup: curve extra objects thanks @batfinger

meta-androcto noreply at git.blender.org
Wed Aug 10 18:06:28 CEST 2016


Commit: a36c5cd168d917da46b6a6e773153adfeacf0bf7
Author: meta-androcto
Date:   Thu Aug 11 02:05:58 2016 +1000
Branches: master
https://developer.blender.org/rBAa36c5cd168d917da46b6a6e773153adfeacf0bf7

code cleanup: curve extra objects thanks @batfinger

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

M	add_curve_extra_objects/__init__.py
M	add_curve_extra_objects/add_curve_aceous_galore.py
M	add_curve_extra_objects/add_curve_spirals.py
M	add_curve_extra_objects/add_curve_torus_knots.py
M	add_curve_extra_objects/add_surface_plane_cone.py

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

diff --git a/add_curve_extra_objects/__init__.py b/add_curve_extra_objects/__init__.py
index ec45c1c..e24b770 100644
--- a/add_curve_extra_objects/__init__.py
+++ b/add_curve_extra_objects/__init__.py
@@ -45,8 +45,91 @@ else:
     from . import add_surface_plane_cone
 
 import bpy
-from bpy.types import Menu
+from bpy.types import Menu, AddonPreferences
+from bpy.props import StringProperty, IntProperty, BoolProperty
 
+def convert_old_presets(data_path, msg_data_path, old_preset_subdir, new_preset_subdir, fixdic={}, ext=".py"):
+    ''' convert old presets '''
+
+    def convert_presets(self, context):
+        if not getattr(self, data_path, False):
+            return None
+        import os
+
+        target_path = os.path.join("presets", old_preset_subdir)
+        target_path = bpy.utils.user_resource('SCRIPTS',
+                                              target_path)
+
+        # created an anytype op to run against preset
+        op = type('', (), {})()
+
+        files = [f for f in os.listdir(target_path) if f.endswith(ext)]
+        if not files:
+            print("No old presets in %s" % target_path)
+            setattr(self, msg_data_path, "No old presets")
+            return None
+
+        new_target_path = os.path.join("presets", new_preset_subdir)
+        new_target_path = bpy.utils.user_resource('SCRIPTS',
+                                              new_target_path,
+                                              create=True)
+        for f in files:
+            file = open(os.path.join(target_path, f))
+            for line in file:
+                if line.startswith("op."):
+                    exec(line)
+            file.close()
+            for key, items in fixdic.items():
+                if hasattr(op, key) and isinstance(getattr(op, key), int):
+                    setattr(op, key, items[getattr(op, key)])
+            # create a new one
+            new_file_path = os.path.join(new_target_path, f)
+            if os.path.isfile(new_file_path):
+                # do nothing
+                print("Preset %s already exists, passing..." % f)
+                continue
+            file_preset = open(new_file_path, 'w')
+            file_preset.write("import bpy\n")
+            file_preset.write("op = bpy.context.active_operator\n")
+            for prop, value in vars(op).items():
+                file_preset.write("op.%s = %s\n" % (prop, str(value)))
+            file_preset.close()
+            print("Writing new preset to %s" % new_file_path)
+
+        setattr(self, msg_data_path, "Converted %d old presets" % len(files))
+        return None
+    return convert_presets
+
+
+class CurveExtraObjectsAddonPreferences(AddonPreferences):
+    bl_idname = __name__
+
+    spiral_fixdic = {"spiral_type": ['ARCH', 'ARCH', 'LOG', 'SPHERE', 'TORUS'],
+              "curve_type": ['POLY', 'NURB'],
+              "spiral_direction": ['COUNTER_CLOCKWISE', 'CLOCKWISE']
+                     }
+    update_spriral_presets_msg = StringProperty(default="Nothing to do")
+    update_spiral_presets = BoolProperty(
+            name="Update Old Presets",
+            description="Update presets to reflect data changes",
+            default=False,
+            update=convert_old_presets("update_spiral_presets",  # this props name
+                                       "update_spiral_presets_msg",  # message prop
+                                       "operator/curve.spirals",
+                                       "curve_extras/curve.spirals",
+                                       fixdic=spiral_fixdic)
+            )
+
+    def draw(self, context):
+        layout = self.layout
+        layout.label(text="Spirals")
+        if self.update_spiral_presets:
+            layout.label(self.update_spriral_presets_msg, icon='FILE_TICK')
+        else:
+            layout.prop(self, "update_spiral_presets")
+
+
+# TODO check if this is even used.
 class INFO_MT_curve_extras_add(Menu):
     # Define the "Extras" menu
     bl_idname = "curve_extra_objects_add"
@@ -55,31 +138,40 @@ class INFO_MT_curve_extras_add(Menu):
     def draw(self, context):
         layout = self.layout
         layout.operator_context = 'INVOKE_REGION_WIN'
-        layout.operator("mesh.curveaceous_galore",
-            text="Curve Profiles")
-        layout.operator("curve.spirals",
-            text="Spirals")
+        layout.operator_menu_enum("mesh.curveaceous_galore",
+                             "ProfileType",
+                            )
+        layout.operator_menu_enum("curve.spirals",
+                             "spiral_type",
+                             icon='FORCE_VORTEX')
         layout.operator("curve.torus_knot_plus",
             text="Torus Knot Plus")
 
 # Define "Extras" menus
 def menu_func(self, context):
-    self.layout.separator()
-    self.layout.operator("mesh.curveaceous_galore",
-            text="Curve Profiles")
-    self.layout.operator("curve.torus_knot_plus",
-            text="Torus Knot Plus")
-    self.layout.operator("curve.spirals",
-            text="Spirals")
+    if context.mode != 'OBJECT':
+        # fix in D2142 will allow to work in EDIT_CURVE
+        return None
+    layout = self.layout
+    layout.separator()
+    layout.operator_menu_enum("mesh.curveaceous_galore",
+                         "ProfileType",
+                        )
+    layout.operator_menu_enum("curve.spirals",
+                         "spiral_type",
+                          icon='FORCE_VORTEX')
+    layout.operator("curve.torus_knot_plus", text="Torus Knot Plus")
 
 def menu_surface(self, context):
     layout = self.layout
     self.layout.separator()
-    self.layout.operator("object.add_surface_wedge", text="Wedge", icon="MOD_CURVE")
-    self.layout.operator("object.add_surface_cone", text="Cone", icon="MOD_CURVE")
-    self.layout.operator("object.add_surface_star", text="Star", icon="MOD_CURVE")
-    self.layout.operator("object.add_surface_plane", text="Plane", icon="MOD_CURVE")
-    self.layout.operator("curve.smooth_x_times", text="Special Smooth", icon="MOD_CURVE")
+    if context.mode == 'EDIT_SURFACE':
+        self.layout.operator("curve.smooth_x_times", text="Special Smooth", icon="MOD_CURVE")
+    elif context.mode == 'OBJECT':
+        self.layout.operator("object.add_surface_wedge", text="Wedge", icon="MOD_CURVE")
+        self.layout.operator("object.add_surface_cone", text="Cone", icon="MOD_CURVE")
+        self.layout.operator("object.add_surface_star", text="Star", icon="MOD_CURVE")
+        self.layout.operator("object.add_surface_plane", text="Plane", icon="MOD_CURVE")
 
 def register():
     bpy.utils.register_module(__name__)
diff --git a/add_curve_extra_objects/add_curve_aceous_galore.py b/add_curve_extra_objects/add_curve_aceous_galore.py
index 41bf458..259660f 100644
--- a/add_curve_extra_objects/add_curve_aceous_galore.py
+++ b/add_curve_extra_objects/add_curve_aceous_galore.py
@@ -31,8 +31,8 @@ bl_info = {
 '''
 
 
-##------------------------------------------------------------
-#### import modules
+# ------------------------------------------------------------
+#    import modules
 import bpy
 from bpy.props import (
         BoolProperty,
@@ -51,11 +51,11 @@ from math import (
         )
 import mathutils.noise as Noise
 from bpy.types import Operator
-###------------------------------------------------------------
-#### Some functions to use with others:
-###------------------------------------------------------------
+# ------------------------------------------------------------
+# Some functions to use with others:
+# ------------------------------------------------------------
 
-#------------------------------------------------------------
+# ------------------------------------------------------------
 # Generate random number:
 def randnum(low=0.0, high=1.0, seed=0):
     """
@@ -82,9 +82,9 @@ def randnum(low=0.0, high=1.0, seed=0):
     return rnum
 
 
-#------------------------------------------------------------
+# ------------------------------------------------------------
 # Make some noise:
-def vTurbNoise(x,y,z, iScale=0.25, Size=1.0, Depth=6, Hard=0, Basis=0, Seed=0):
+def vTurbNoise(x, y, z, iScale=0.25, Size=1.0, Depth=6, Hard=0, Basis=0, Seed=0):
     """
     vTurbNoise((x,y,z), iScale=0.25, Size=1.0, Depth=6, Hard=0, Basis=0, Seed=0 )
 
@@ -109,32 +109,34 @@ def vTurbNoise(x,y,z, iScale=0.25, Size=1.0, Depth=6, Hard=0, Basis=0, Seed=0):
             the generated turbulence vector.
                 (type=3-float list)
     """
-    rand = randnum(-100,100,Seed)
-    if Basis == 9: Basis = 14
+    rand = randnum(-100, 100, Seed)
+    if Basis == 9:
+        Basis = 14
     vTurb = Noise.turbulence_vector((x/Size+rand, y/Size+rand, z/Size+rand), Depth, Hard, Basis)
     tx = vTurb[0]*iScale
     ty = vTurb[1]*iScale
     tz = vTurb[2]*iScale
-    return tx,ty,tz
+    return tx, ty, tz
 
 
 #------------------------------------------------------------
 # Axis: ( used in 3DCurve Turbulence )
-def AxisFlip(x,y,z, x_axis=1, y_axis=1, z_axis=1, flip=0 ):
+def AxisFlip(x, y, z, x_axis=1, y_axis=1, z_axis=1, flip=0):
     if flip != 0:
         flip *= -1
-    else: flip = 1
+    else:
+        flip = 1
     x *= x_axis*flip
     y *= y_axis*flip
     z *= z_axis*flip
-    return x,y,z
+    return x, y, z
 
 
-###-------------------------------------------------------------------
-#### 2D Curve shape functions:
-###-------------------------------------------------------------------
+# -------------------------------------------------------------------
+# 2D Curve shape functions:
+# -------------------------------------------------------------------
 
-##------------------------------------------------------------
+# ------------------------------------------------------------
 # 2DCurve: Profile:  L, H, T, U, Z
 def ProfileCurve(type=0, a=0.25, b=0.25):
     """
@@ -155,42 +157,42 @@ def ProfileCurve(type=0, a=0.25, b=0.25):
     """
 
     newpoints = []
-    if type ==1:
-        ## H:
-        a*=0.5
-        b*=0.5
-        newpoints = [ [ -1.0, 1.0, 0.0 ], [ -1.0+a, 1.0, 0.0 ],
-        [ -1.0+a, b, 0.0 ], [ 1.0-a, b, 0.0 ], [ 1.0-a, 1.0, 0.0 ],
-        [ 1.0, 1.0, 0.0 ],  [ 1.

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list