[Bf-extensions-cvs] [00b84551] master: archipack: thumb generator to replace static thumbs, revert _preset to preset according to talk with ideasman42

Stephen Leger noreply at git.blender.org
Fri Aug 4 05:13:57 CEST 2017


Commit: 00b84551cf7798c402508bce9458a2ed2ca1fc77
Author: Stephen Leger
Date:   Thu Aug 3 15:59:40 2017 +0200
Branches: master
https://developer.blender.org/rBA00b84551cf7798c402508bce9458a2ed2ca1fc77

archipack: thumb generator to replace static thumbs, revert _preset to preset according to talk with ideasman42

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

M	archipack/__init__.py
D	archipack/_presets/archipack_materials/floor.txt
D	archipack/_presets/archipack_materials/roof.txt
D	archipack/_presets/archipack_materials/wall.txt
M	archipack/archipack_cutter.py
M	archipack/archipack_floor.py
M	archipack/archipack_manipulator.py
M	archipack/archipack_material.py
M	archipack/archipack_object.py
M	archipack/archipack_preset.py
M	archipack/archipack_progressbar.py
M	archipack/archipack_rendering.py
M	archipack/archipack_roof.py
A	archipack/archipack_thumbs.py
R100	archipack/_presets/archipack_door/160x200_dual.py	archipack/presets/archipack_door/160x200_dual.py
R100	archipack/_presets/archipack_door/400x240_garage.py	archipack/presets/archipack_door/400x240_garage.py
R100	archipack/_presets/archipack_door/80x200.py	archipack/presets/archipack_door/80x200.py
R100	archipack/_presets/archipack_fence/glass_panels.py	archipack/presets/archipack_fence/glass_panels.py
R100	archipack/_presets/archipack_fence/inox_glass_concrete.py	archipack/presets/archipack_fence/inox_glass_concrete.py
R100	archipack/_presets/archipack_fence/metal.py	archipack/presets/archipack_fence/metal.py
R100	archipack/_presets/archipack_fence/metal_glass.py	archipack/presets/archipack_fence/metal_glass.py
R100	archipack/_presets/archipack_fence/wood.py	archipack/presets/archipack_fence/wood.py
R091	archipack/_presets/archipack_floor/boards_200x20.py	archipack/presets/archipack_floor/boards_200x20.py
R091	archipack/_presets/archipack_floor/herringbone_50x10.py	archipack/presets/archipack_floor/herringbone_50x10.py
R091	archipack/_presets/archipack_floor/herringbone_p_50x10.py	archipack/presets/archipack_floor/herringbone_p_50x10.py
R088	archipack/_presets/archipack_floor/hexagon_10.py	archipack/presets/archipack_floor/hexagon_10.py
R088	archipack/_presets/archipack_floor/hopscotch_30x30.py	archipack/presets/archipack_floor/hopscotch_30x30.py
R091	archipack/_presets/archipack_floor/parquet_15x3.py	archipack/presets/archipack_floor/parquet_15x3.py
R088	archipack/_presets/archipack_floor/stepping_stone_30x30.py	archipack/presets/archipack_floor/stepping_stone_30x30.py
R088	archipack/_presets/archipack_floor/tile_30x60.py	archipack/presets/archipack_floor/tile_30x60.py
R088	archipack/_presets/archipack_floor/windmill_30x30.py	archipack/presets/archipack_floor/windmill_30x30.py
R100	archipack/_presets/archipack_materials/door.txt	archipack/presets/archipack_materials/door.txt
R100	archipack/_presets/archipack_materials/fence.txt	archipack/presets/archipack_materials/fence.txt
A	archipack/presets/archipack_materials/floor.txt
R100	archipack/_presets/archipack_materials/handle.txt	archipack/presets/archipack_materials/handle.txt
A	archipack/presets/archipack_materials/roof.txt
R100	archipack/_presets/archipack_materials/slab.txt	archipack/presets/archipack_materials/slab.txt
R100	archipack/_presets/archipack_materials/stair.txt	archipack/presets/archipack_materials/stair.txt
R100	archipack/_presets/archipack_materials/truss.txt	archipack/presets/archipack_materials/truss.txt
R100	archipack/_presets/archipack_materials/wall2.txt	archipack/presets/archipack_materials/wall2.txt
R100	archipack/_presets/archipack_materials/window.txt	archipack/presets/archipack_materials/window.txt
R088	archipack/_presets/archipack_roof/braas_1.py	archipack/presets/archipack_roof/braas_1.py
R088	archipack/_presets/archipack_roof/braas_2.py	archipack/presets/archipack_roof/braas_2.py
R088	archipack/_presets/archipack_roof/eternit.py	archipack/presets/archipack_roof/eternit.py
R088	archipack/_presets/archipack_roof/lauze.py	archipack/presets/archipack_roof/lauze.py
R091	archipack/_presets/archipack_roof/metal.py	archipack/presets/archipack_roof/metal.py
R091	archipack/_presets/archipack_roof/ondule.py	archipack/presets/archipack_roof/ondule.py
R090	archipack/_presets/archipack_roof/roman.py	archipack/presets/archipack_roof/roman.py
R088	archipack/_presets/archipack_roof/round.py	archipack/presets/archipack_roof/round.py
R088	archipack/_presets/archipack_roof/square.py	archipack/presets/archipack_roof/square.py
R100	archipack/_presets/archipack_stair/i_wood_over_concrete.py	archipack/presets/archipack_stair/i_wood_over_concrete.py
R100	archipack/_presets/archipack_stair/l_wood_over_concrete.py	archipack/presets/archipack_stair/l_wood_over_concrete.py
R100	archipack/_presets/archipack_stair/o_wood_over_concrete.py	archipack/presets/archipack_stair/o_wood_over_concrete.py
R099	archipack/_presets/archipack_stair/u_wood_over_concrete.py	archipack/presets/archipack_stair/u_wood_over_concrete.py
R100	archipack/_presets/archipack_window/120x110_flat_2.py	archipack/presets/archipack_window/120x110_flat_2.py
R100	archipack/_presets/archipack_window/120x110_flat_2_elliptic.py	archipack/presets/archipack_window/120x110_flat_2_elliptic.py
R100	archipack/_presets/archipack_window/120x110_flat_2_oblique.py	archipack/presets/archipack_window/120x110_flat_2_oblique.py
R100	archipack/_presets/archipack_window/120x110_flat_2_round.py	archipack/presets/archipack_window/120x110_flat_2_round.py
R100	archipack/_presets/archipack_window/180x110_flat_3.py	archipack/presets/archipack_window/180x110_flat_3.py
R100	archipack/_presets/archipack_window/180x210_flat_3.py	archipack/presets/archipack_window/180x210_flat_3.py
R100	archipack/_presets/archipack_window/180x210_rail_2.py	archipack/presets/archipack_window/180x210_rail_2.py
R100	archipack/_presets/archipack_window/240x210_rail_3.py	archipack/presets/archipack_window/240x210_rail_3.py
R100	archipack/_presets/archipack_window/80x80_flat_1.py	archipack/presets/archipack_window/80x80_flat_1.py
R100	archipack/_presets/archipack_window/80x80_flat_1_circle.py	archipack/presets/archipack_window/80x80_flat_1_circle.py
R100	archipack/_presets/missing.png	archipack/presets/missing.png

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

diff --git a/archipack/__init__.py b/archipack/__init__.py
index 93a50e66..7707abd3 100644
--- a/archipack/__init__.py
+++ b/archipack/__init__.py
@@ -261,7 +261,7 @@ class Archipack_Pref(AddonPreferences):
         col.label(text="Manipulators:")
         col.prop(self, "arrow_size")
         col.prop(self, "handle_size")
-
+        # layout.operator("archipack.render_thumbs")
 
 # ----------------------------------------------------
 # Archipack panels
@@ -283,18 +283,16 @@ class TOOLS_PT_Archipack_Tools(Panel):
     def draw(self, context):
         wm = context.window_manager
         layout = self.layout
-        row = layout.row(align=True)
-        box = row.box()
+        box = layout.box()
         box.label("Auto boolean")
-        row = box.row(align=True)
-        row.operator("archipack.auto_boolean", text="AutoBoolean", icon='AUTO').mode = 'HYBRID'
-        row = layout.row(align=True)
-        box = row.box()
+        box.operator("archipack.auto_boolean", text="AutoBoolean", icon='AUTO').mode = 'HYBRID'
+        box = layout.box()
         box.label("Rendering")
-        row = box.row(align=True)
-        row.prop(wm.archipack, 'render_type', text="")
-        row = box.row(align=True)
-        row.operator("archipack.render", icon='RENDER_STILL')
+        box.prop(wm.archipack, 'render_type', text="")
+        box.operator("archipack.render", icon='RENDER_STILL')
+        box = layout.box()
+        box.label("Render presets Thumbnails")
+        box.operator("archipack.render_thumbs", icon='ERROR')
 
 
 class TOOLS_PT_Archipack_Create(Panel):
diff --git a/archipack/_presets/archipack_materials/floor.txt b/archipack/_presets/archipack_materials/floor.txt
deleted file mode 100644
index e04180a6..00000000
--- a/archipack/_presets/archipack_materials/floor.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-DEFAULT##|##Floor_grout
-DEFAULT##|##Floor_alt1
-DEFAULT##|##Floor_alt2
-DEFAULT##|##Floor_alt3
-DEFAULT##|##Floor_alt4
-DEFAULT##|##Floor_alt5
-DEFAULT##|##Floor_alt6
-DEFAULT##|##Floor_alt7
-DEFAULT##|##Floor_alt8
-DEFAULT##|##Floor_alt9
-DEFAULT##|##Floor_alt10
diff --git a/archipack/_presets/archipack_materials/roof.txt b/archipack/_presets/archipack_materials/roof.txt
deleted file mode 100644
index 84e6394e..00000000
--- a/archipack/_presets/archipack_materials/roof.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-DEFAULT##|##Roof_sheeting
-DEFAULT##|##Roof_rakes
-DEFAULT##|##Roof_eaves
-DEFAULT##|##Roof_ridge
-DEFAULT##|##Roof_rafter
-DEFAULT##|##Roof_valley
-DEFAULT##|##Roof_hip_tiles
-DEFAULT##|##Roof_tiles
-DEFAULT##|##Roof_tiles2
-DEFAULT##|##Roof_tiles3
-DEFAULT##|##Roof_tiles4
-DEFAULT##|##Roof_tiles5
diff --git a/archipack/_presets/archipack_materials/wall.txt b/archipack/_presets/archipack_materials/wall.txt
deleted file mode 100644
index e489e4a6..00000000
--- a/archipack/_presets/archipack_materials/wall.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-DEFAULT##|##Wall_inside
-DEFAULT##|##Wall_outside
-DEFAULT##|##Wall_cuts
-DEFAULT##|##Wall_alt1
-DEFAULT##|##Wall_alt2
-DEFAULT##|##Wall_alt3
-DEFAULT##|##Wall_alt4
-DEFAULT##|##Wall_alt5
diff --git a/archipack/archipack_cutter.py b/archipack/archipack_cutter.py
index bce82008..ba51b863 100644
--- a/archipack/archipack_cutter.py
+++ b/archipack/archipack_cutter.py
@@ -40,6 +40,7 @@ class CutterSegment(Line):
     def __init__(self, p, v, type='DEFAULT'):
         Line.__init__(self, p, v)
         self.type = type
+        self.is_hole = True
 
     @property
     def copy(self):
@@ -404,23 +405,29 @@ class CutAblePolygon():
         # no points found at all
         if start < 0:
             # print("no pt inside")
-            return
+            return not keep_inside
 
         if not slice_res:
             # print("slice fails")
             # found more segments than input
             # cutter made more than one loop
-            return
+            return True
 
         if len(store) < 1:
             if is_inside:
                 # print("not touching, add as hole")
-                self.holes.append(cutter)
-            return
+                if keep_inside:
+                    self.segs = cutter.segs
+                else:
+                    self.holes.append(cutter)
+
+            return True
 
         self.segs = store
         self.is_convex()
 
+        return True
+
 
 class CutAbleGenerator():
 
@@ -641,8 +648,7 @@ class ArchipackCutter():
             row.prop(self, 'parts_expand', icon="TRIA_DOWN", icon_only=True, text="Parts", emboss=False)
             box.prop(self, 'n_parts')
             for i, part in enumerate(self.parts):
-                if i < self.n_parts:
-                    part.draw(layout, context, i)
+                part.draw(layout, context, i)
         else:
             row.prop(self, 'parts_expand', icon="TRIA_RIGHT", icon_only=True, text="Parts", emboss=False)
 
diff --git a/archipack/archipack_floor.py b/archipack/archipack_floor.py
index 29957716..9899905d 100644
--- a/archipack/archipack_floor.py
+++ b/archipack/archipack_floor.py
@@ -806,9 +806,6 @@ class FloorGenerator(CutAblePolygon, CutAbleGenerator):
         m.set_pts([pt1, pt2, pt3])
 
     def generate_pattern(self, d, verts, faces, matids, uvs):
-        # clear data before refreshing it
-
-        self.uv_factor = 1 / max(self.xmax, self.ymax)  # automatically scale to keep within reasonable bounds
 
         if d.pattern == "boards":
             self.boards(d, verts, faces, matids, uvs)
@@ -1225,14 +1222,14 @@ class archipack_floor(ArchipackObject, Manipulable, PropertyGroup):
 
     vary_materials = BoolProperty(
                 name="Vary Material?",
-                default=False,
+                default=True,
                 description="Vary Material indexes",
                 update=update)
     matid = IntProperty(
                 name="#variations",
                 min=1,
                 max=10,
-                default=1,
+                default=7,
                 description="Material index maxi",
                 update=update)
     auto_update = BoolProperty(
@@ -1815,7 +1812,7 @@ class ARCHIPACK_OT_floor(ArchipackCreateTool, Operator):
             # activate manipulators at creation time
             o.select = True
             context.scene.objects.active = o
-            bpy.ops.archipack.floor_manipulate()
+            self.manipulate()
             return {'FINISHED'}
         else:
             self.report({'WARNING'}, "Option only valid in Object mode")
diff --git a/archipack/archipack_manipulator.py b/archipack/archipack_manipulator.py
index c96af62a..034507d8 100644
--- a/archipack/archipack_manipulator.py
+++ b/archipack/archipack_manipulator.py
@@ -2094,7 +2094,7 @@ class ARCHIPACK_OT_manipulate(Operator):
         return res
 
     def invoke(self, context, event):
-        if context.space_data.type == 'VIEW_3D':
+        if context.space_data is not None and context.space_data.type == 'VIEW_3D':
             context.window_manager.modal_handler_add(self)
             return {'RUNNING_MODAL'}
         else:
@@ -2213,7 +2213,7 @@ class Manipulable():
 
         # take care of context switching
         # when call from outside of 3d view
-        if context.space_data.type != 'VIEW_3D':
+        if context.space_data is not None and context.space_data.type != 'VIEW_3D':
             for window in bpy.context.window_manager.windows:
                 screen = window.screen
                 for area in screen.areas:
diff --git a/archipack/archipack_material.py b/archipack/archipack_material.py
index 7cb44180..c226c7fb 100644
--- a/archipack/archipack_material.py
+++ b/archipack/archipack_material.py
@@ -37,6 +37,7 @@ from bpy.props import (
     StringProperty
     )
 
+
 setman = None
 libman = None
 
@@ -49,7 +50,10 @@ class MatLib():
     """
     def __init__(self, matlib_path, name):
         self.name = name
-        self.path = os.path.join(matlib_path, name)
+        try:
+            self.path = os.path.join(matlib_path, name)
+        except:
+            pass
         self.materials = []
 
     def cleanup(self):
@@ -60,14 +64,15 @@ class MatLib():
             list material names
         """
         # print("MatLib.load_list(%s)" % (self.name))
-
         self.materials.clear()
-
-        with bpy.data.libraries.load(self.path) as (data_from, data_to):
-            for mat in data_from.materials:
-                self.materials.append(mat)
-        if sort:
-            self.materials = list(sorted(self.materials))
+        try:
+            with bpy.data.libraries.load(self.path) as (data_from, data_to):
+                for mat in data_from.materials:
+                    self.materials.append(mat)
+            if sort:
+                self.materials = list(sorted(self.materials))
+        except:
+            pass
 
     def has(self, name):
         return name in self.materials
@@ -76,15 +81,19 @@ class MatLib():
         """
             Load a material from library
         """
-        # print("MatLib.load_mat(%s) linked:%s" % (name, link))
-        with bpy.data.libraries.load(self.path, link, False) as (data_from, data_to):
-            data_to.materials = [name]
+        try:
+            # print("MatLib.load_mat(%s) linked:%s" % (name, link))
+            with bpy.data.libraries.load(self.path, link, False) as (data_from, data_to):
+                data_to.materials = [name]
+        except:
+            pass
 
     def get_mat(self, name, link):
         """
             apply a material by name to active_object
             into slot index
             lazy load material list on demand
+            return material or None
         """
 
         # Lazy load material names
@@ -116,14 +125,14 @@ class MatlibsManager():
         self.matlibs.clear()
 
     def get_prefs(self, context):
+        """
+            let raise error if any
+        """
         global __name__
         prefs = None
-        try:
-            # retrieve addon name from imports
-            addon_name = __name__.split('.')[0]
-            prefs = context.user_preferences.addons[addon_name].preferences
-        except:
-            pass
+        # retrieve addon name from imports
+        addon_name = __name__.split('.')[0]
+        prefs = context.user_prefere

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list