Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormeta-androcto <meta.androcto1@gmail.com>2016-08-10 19:05:58 +0300
committermeta-androcto <meta.androcto1@gmail.com>2016-08-10 19:05:58 +0300
commita36c5cd168d917da46b6a6e773153adfeacf0bf7 (patch)
treece59445a3034ffe53fb0ef107c6b6cd32b949e1a /add_curve_extra_objects/__init__.py
parent69bda0309bbe6f63b08732955ad80ce51503cd4e (diff)
code cleanup: curve extra objects thanks @batfinger
Diffstat (limited to 'add_curve_extra_objects/__init__.py')
-rw-r--r--add_curve_extra_objects/__init__.py126
1 files changed, 109 insertions, 17 deletions
diff --git a/add_curve_extra_objects/__init__.py b/add_curve_extra_objects/__init__.py
index ec45c1c1..e24b770f 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__)