[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