[Bf-extensions-cvs] [4a0f9a09] master: archipack: Release 1.2.1

Stephen Leger noreply at git.blender.org
Thu May 11 03:24:22 CEST 2017


Commit: 4a0f9a09ccd64b5178ce385fec35b72d4a30af67
Author: Stephen Leger
Date:   Thu May 11 03:23:32 2017 +0200
Branches: master
https://developer.blender.org/rBAC4a0f9a09ccd64b5178ce385fec35b72d4a30af67

archipack: Release 1.2.1

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

M	archipack/__init__.py
M	archipack/archipack_autoboolean.py
M	archipack/archipack_door.py
A	archipack/archipack_fence.py
M	archipack/archipack_manipulator.py
A	archipack/archipack_preset.py
A	archipack/archipack_snap.py
M	archipack/archipack_stair.py
M	archipack/archipack_wall.py
M	archipack/archipack_wall2.py
M	archipack/archipack_window.py
A	archipack/icons/door.png
A	archipack/icons/stair.png
A	archipack/icons/wall.png
A	archipack/icons/window.png

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

diff --git a/archipack/__init__.py b/archipack/__init__.py
index 87e9042f..739ad61e 100644
--- a/archipack/__init__.py
+++ b/archipack/__init__.py
@@ -31,7 +31,7 @@ bl_info = {
     'author': 's-leger',
     'license': 'GPL',
     'deps': 'shapely',
-    'version': (1, 1, 2),
+    'version': (1, 2, 1),
     'blender': (2, 7, 8),
     'location': 'View3D > Tools > Create > Archipack',
     'warning': '',
@@ -51,6 +51,7 @@ if "bpy" in locals():
     imp.reload(archipack_window)
     imp.reload(archipack_stair)
     imp.reload(archipack_wall2)
+    imp.reload(archipack_fence)
     imp.reload(archipack_wall)
     try:
         imp.reload(archipack_polylib)
@@ -58,6 +59,7 @@ if "bpy" in locals():
     except:
         HAS_POLYLIB = False
         pass
+    
     print("archipack: reload ready")
 else:
     from . import archipack_autoboolean
@@ -66,6 +68,7 @@ else:
     from . import archipack_stair
     from . import archipack_wall
     from . import archipack_wall2
+    from . import archipack_fence
     try:
         """
             polylib depends on shapely
@@ -77,6 +80,7 @@ else:
         print("archipack: Polylib failed to load, missing shapely ?")
         HAS_POLYLIB = False
         pass
+    
     print("archipack: ready")
 
 # noinspection PyUnresolvedReferences
@@ -134,12 +138,16 @@ class TOOLS_PT_PolyLib(Panel):
         row = box.row(align=True)
         row.operator(
             "tools.poly_lib_pick_2d_polygons",
-            icon_value=icons_dict["union"].icon_id,
-            text='Wall').action = 'wall'
+            text='Wall',
+            icon_value=icons_dict["wall"].icon_id).action = 'wall'
         row.prop(context.window_manager.poly_lib, "solidify_thickness")
         row = box.row(align=True)
-        row.operator("tools.poly_lib_pick_2d_polygons", text='Window').action = 'window'
-        row.operator("tools.poly_lib_pick_2d_polygons", text='Door').action = 'door'
+        row.operator("tools.poly_lib_pick_2d_polygons",
+            text='Window',
+            icon_value=icons_dict["window"].icon_id).action = 'window'
+        row.operator("tools.poly_lib_pick_2d_polygons",
+            text='Door',
+            icon_value=icons_dict["door"].icon_id).action = 'door'
         row.operator("tools.poly_lib_pick_2d_polygons", text='Rectangle').action = 'rectangle'
         row = box.row(align=True)
         row.label(text="Lines")
@@ -228,13 +236,17 @@ class TOOLS_PT_Archipack_Create(Panel):
         box = row.box()
         box.label("Objects")
         row = box.row(align=True)
-        row.operator("archipack.window").mode = 'CREATE'
-        row.operator("archipack.door").mode = 'CREATE'
+        row.operator("archipack.window", icon_value=icons_dict["window"].icon_id).mode = 'CREATE'
+        row.operator("archipack.door", icon_value=icons_dict["door"].icon_id).mode = 'CREATE'
         row = box.row(align=True)
-        row.operator("archipack.stair")
+        row.operator("archipack.stair", icon_value=icons_dict["stair"].icon_id)
         row = box.row(align=True)
-        row.operator("archipack.wall2")
-
+        row.operator("archipack.wall2", icon_value=icons_dict["wall"].icon_id)
+        row.operator("archipack.wall2_draw", icon='GREASEPENCIL')
+        row = box.row(align=True)
+        row.operator("archipack.fence")
+        row.operator("archipack.fence_from_curve", icon='CURVE_DATA')
+        
 
 def register():
     global icons_dict
@@ -244,13 +256,13 @@ def register():
         name, ext = os.path.splitext(icon)
         icons_dict.load(name, os.path.join(icons_dir, icon), 'IMAGE')
     bpy.utils.register_module(__name__)
-
+    
 
 def unregister():
     global icons_dict
     iconsLib.remove(icons_dict)
     bpy.utils.unregister_module(__name__)
-
+    
 
 if __name__ == "__main__":
     register()
diff --git a/archipack/archipack_autoboolean.py b/archipack/archipack_autoboolean.py
index 4b73d54e..0bbf3e2f 100644
--- a/archipack/archipack_autoboolean.py
+++ b/archipack/archipack_autoboolean.py
@@ -78,6 +78,8 @@ class ARCHIPACK_OT_auto_boolean(Operator):
         if wall.parent is None:
             x, y, z = wall.bound_box[0]
             context.scene.cursor_location = wall.matrix_world * Vector((x, y, z))
+            # fix issue #9
+            context.scene.objects.active = wall
             bpy.ops.archipack.reference_point()
         else:
             context.scene.objects.active = wall.parent
@@ -119,7 +121,9 @@ class ARCHIPACK_OT_auto_boolean(Operator):
         hole.lock_scale = (True, True, True)
         hole.draw_type = 'WIRE'
         hole.hide_render = True
+        hole.hide_select = True
         hole.select = True
+        
 
     def _generate_holes(self, context, childs):
         # generate holes from archipack primitives
diff --git a/archipack/archipack_door.py b/archipack/archipack_door.py
index 06257230..d33aefbf 100644
--- a/archipack/archipack_door.py
+++ b/archipack/archipack_door.py
@@ -28,8 +28,11 @@
 # noinspection PyUnresolvedReferences
 import bpy
 # noinspection PyUnresolvedReferences
-from bpy.types import Operator, PropertyGroup, Mesh, Panel
-from bpy.props import FloatProperty, IntProperty, CollectionProperty, EnumProperty, BoolProperty
+from bpy.types import Operator, PropertyGroup, Mesh, Panel, Menu
+from bpy.props import (
+    FloatProperty, IntProperty, CollectionProperty,
+    EnumProperty, BoolProperty, StringProperty
+    )
 from mathutils import Vector
 
 # door component objects (panels, handles ..)
@@ -39,6 +42,7 @@ from .materialutils import MaterialUtils
 from .archipack_handle import create_handle
 from .archipack_door_panel import ARCHIPACK_PT_door_panel, ARCHIPACK_OT_door_panel
 from .archipack_manipulator import Manipulable
+from .archipack_preset import ArchipackPreset
 
 SPACING = 0.005
 BATTUE = 0.01
@@ -194,6 +198,16 @@ class archipack_door(Manipulable, PropertyGroup):
             unit='LENGTH', subtype='DISTANCE',
             description='how much hole surround wall'
             )
+    flip = BoolProperty(
+            default=False,
+            update=update,
+            description='flip outside and outside material of hole'
+            )
+    auto_update = BoolProperty(
+            options={'SKIP_SAVE'},
+            default=True,
+            update=update
+            )
 
     @property
     def frame(self):
@@ -236,12 +250,16 @@ class archipack_door(Manipulable, PropertyGroup):
         y0 = self.y / 2 + self.hole_margin
         y1 = -y0
         y2 = 0
+        outside_mat = 0
+        inside_mat = 1
+        if self.flip:
+            outside_mat, inside_mat = inside_mat, outside_mat
         return DoorPanel(
             False,       # closed
             [0, 0, 0],  # x index
             [x0],
             [y1, y2, y0],
-            [0, 1, 1],  # material index
+            [outside_mat, inside_mat, inside_mat],  # material index
             closed_path=True,
             side_cap_front=2,
             side_cap_back=0     # cap index
@@ -522,7 +540,7 @@ class archipack_door(Manipulable, PropertyGroup):
         # support for "copy to selected"
         active, selected, o = self.find_in_selection(context)
 
-        if o is None:
+        if o is None or not self.auto_update:
             return
 
         if childs_only is False:
@@ -621,6 +639,12 @@ class ARCHIPACK_PT_door(Panel):
         if o.data.users > 1:
             row.operator('archipack.door', text="Make unique", icon='UNLINKED').mode = 'UNIQUE'
         row.operator('archipack.door', text="Delete", icon='ERROR').mode = 'DELETE'
+        box = layout.box()
+        # box.label(text="Styles")
+        row = box.row(align=True)
+        row.menu("ARCHIPACK_MT_door_preset", text=bpy.types.ARCHIPACK_MT_door_preset.bl_label)
+        row.operator("archipack.door_preset", text="", icon='ZOOMIN')
+        row.operator("archipack.door_preset", text="", icon='ZOOMOUT').remove_active = True
         row = layout.row()
         box = row.box()
         box.label(text="Size")
@@ -784,7 +808,9 @@ class ARCHIPACK_OT_door(Operator):
             ),
             default='CREATE'
             )
-    auto_manipulate = BoolProperty(default=True)
+    auto_manipulate = BoolProperty(
+            default=True
+            )
 
     # -----------------------------------------------------
     # Draw (create UI interface)
@@ -915,16 +941,50 @@ class ARCHIPACK_OT_door_manipulate(Operator):
         if context.space_data.type == 'VIEW_3D':
             o = context.active_object
             self.d = o.data.archipack_door[0]
-            self.d.manipulable_invoke(context)
-            context.window_manager.modal_handler_add(self)
-            return {'RUNNING_MODAL'}
+            if self.d.manipulable_invoke(context):
+                context.window_manager.modal_handler_add(self)
+                return {'RUNNING_MODAL'}
+            else:
+                return {'FINISHED'}
         else:
             self.report({'WARNING'}, "Active space must be a View3d")
             return {'CANCELLED'}
 
 
+# ------------------------------------------------------------------
+# Define operator class to load / save presets
+# ------------------------------------------------------------------
+
+
+class ARCHIPACK_MT_door_preset(Menu):
+    bl_label = "Door Styles"
+    preset_subdir = "archipack_door"
+    preset_operator = "script.execute_preset"
+    draw = Menu.draw_preset
+
+
+class ARCHIPACK_OT_door_preset(ArchipackPreset, Operator):
+    """Add a Door Styles"""
+    bl_idname = "archipack.door_preset"
+    bl_label = "Add Door Style"
+    preset_menu = "ARCHIPACK_MT_door_preset"
+
+    datablock_name = StringProperty(
+        name="Datablock",
+        default='archipack_door',
+        maxlen=64,
+        options={'HIDDEN', 'SKIP_SAVE'},
+        )
+
+    @property
+    def blacklist(self):
+        return ['x', 'y', 'z', 'direction', 'manipulators']
+
+
 bpy.utils.register_class(archipack_door)
 Mesh.archipack_door = CollectionProperty(type=archipack_door)
+bpy.utils.register_class(ARCHIPACK_MT_door_preset)
 bpy.utils.register_class(ARCHIPACK_PT_door)
 bpy.utils.register_class(ARCHIPACK_OT_door)
+bpy.utils.register_class(ARCHIPACK_OT_door_preset)
 bpy.utils.register_class(ARCHIPACK_OT_doo

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list