[Bf-extensions-cvs] [80914c55] master: archipack: improve labels to support i18n, fix regression in boolean, division by 0 error in roof

Stephen Leger noreply at git.blender.org
Tue Aug 8 15:18:17 CEST 2017


Commit: 80914c55924995493f6e1bcb92a2bcb8e241d200
Author: Stephen Leger
Date:   Thu Aug 3 15:59:40 2017 +0200
Branches: master
https://developer.blender.org/rBA80914c55924995493f6e1bcb92a2bcb8e241d200

archipack: improve labels to support i18n, fix regression in boolean, division by 0 error in roof

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

M	archipack/archipack_autoboolean.py
M	archipack/archipack_cutter.py
M	archipack/archipack_door.py
M	archipack/archipack_fence.py
M	archipack/archipack_floor.py
M	archipack/archipack_object.py
M	archipack/archipack_rendering.py
M	archipack/archipack_roof.py
M	archipack/archipack_slab.py
M	archipack/archipack_stair.py
M	archipack/archipack_wall2.py
M	archipack/archipack_window.py
M	archipack/presets/archipack_materials/roof.txt
M	archipack/presets/archipack_window/180x210_flat_3.py
M	archipack/presets/archipack_window/240x210_rail_3.py

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

diff --git a/archipack/archipack_autoboolean.py b/archipack/archipack_autoboolean.py
index f304ced0..62841fa5 100644
--- a/archipack/archipack_autoboolean.py
+++ b/archipack/archipack_autoboolean.py
@@ -30,16 +30,6 @@ from bpy.props import EnumProperty
 from mathutils import Vector
 
 
-"""
-from os import path
-def debug_using_gl(context, filename):
-    context.scene.update()
-    temp_path = "C:\\tmp\\"
-    context.scene.render.filepath = path.join(temp_path, filename + ".png")
-    bpy.ops.render.opengl(write_still=True)
-"""
-
-
 class ArchipackBoolManager():
     """
         Handle three methods for booleans
@@ -95,7 +85,7 @@ class ArchipackBoolManager():
                'archipack_robusthole' in wall or
                'archipack_handle' in wall)
 
-    def datablock(self, o, basis='WALL'):
+    def datablock(self, o):
         """
             get datablock from windows and doors
             return
@@ -103,15 +93,10 @@ class ArchipackBoolManager():
                 None when not found
         """
         d = None
-        if o.data:
-            if basis == 'WALL':
-                if "archipack_window" in o.data:
-                    d = o.data.archipack_window[0]
-                elif "archipack_door" in o.data:
-                    d = o.data.archipack_door[0]
-            elif basis == 'ROOF':
-                if "archipack_roof" in o.data:
-                    d = o.data.archipack_roof[0]
+        if "archipack_window" in o.data:
+            d = o.data.archipack_window[0]
+        elif "archipack_door" in o.data:
+            d = o.data.archipack_door[0]
         return d
 
     def prepare_hole(self, hole):
@@ -135,7 +120,7 @@ class ArchipackBoolManager():
                 return hole
         return None
 
-    def _generate_hole(self, context, o, basis='WALL'):
+    def _generate_hole(self, context, o):
         # use existing one
         if self.mode != 'ROBUST':
             hole = self.get_child_hole(o)
@@ -143,7 +128,7 @@ class ArchipackBoolManager():
                 # print("_generate_hole Use existing hole %s" % (hole.name))
                 return hole
         # generate single hole from archipack primitives
-        d = self.datablock(o, basis)
+        d = self.datablock(o)
         hole = None
         if d is not None:
             if (self.itM is not None and (
@@ -390,21 +375,21 @@ class ArchipackBoolManager():
         elif modif is not None:
             wall.modifiers.remove(modif)
 
-    def get_basis_type(self, o):
-        if o.data is not None:
-            if "archipack_wall2" in o.data:
-                return 'WALL'
-            elif "archipack_roof" in o.data:
-                return 'ROOF'
-            elif "archipack_wall" in o.data:
-                return 'WALL'
-        return 'DEFAULT'
-
     def autoboolean(self, context, wall):
         """
             Entry point for multi-boolean operations like
             in T panel autoBoolean and RobustBoolean buttons
         """
+
+        if wall.data is not None and "archipack_wall2" in wall.data:
+            # ensure wall modifier is there before any boolean
+            # to support "revival" of applied modifiers
+            m = wall.modifiers.get("Wall")
+            if m is None:
+                wall.select = True
+                context.scene.objects.active = wall
+                wall.data.archipack_wall2[0].update(context)
+
         bpy.ops.object.select_all(action='DESELECT')
         context.scene.objects.active = None
         childs = []
@@ -412,12 +397,9 @@ class ArchipackBoolManager():
         # get wall bounds to find what's inside
         self._get_bounding_box(wall)
 
-        # filter roofs when wall is roof
-        basis = self.get_basis_type(wall)
-
         # either generate hole or get existing one
         for o in context.scene.objects:
-            h = self._generate_hole(context, o, basis)
+            h = self._generate_hole(context, o)
             if h is not None:
                 holes.append(h)
                 childs.append(o)
@@ -484,8 +466,7 @@ class ArchipackBoolManager():
 
         # generate holes for crossing window and doors
         self.itM = wall.matrix_world.inverted()
-        basis = self.get_basis_type(wall)
-        d = self.datablock(o, basis)
+        d = self.datablock(o)
 
         hole = None
         hole_obj = None
@@ -680,17 +661,14 @@ class ARCHIPACK_OT_generate_hole(Operator):
             manager = ArchipackBoolManager(mode='HYBRID')
             o = context.active_object
 
-            # filter roofs when o is roof
-            basis = manager.get_basis_type(o)
-
-            d = manager.datablock(o, basis)
+            d = manager.datablock(o)
             if d is None:
                 self.report({'WARNING'}, "Archipack: active object must be a door, a window or a roof")
                 return {'CANCELLED'}
             bpy.ops.object.select_all(action='DESELECT')
             o.select = True
             context.scene.objects.active = o
-            hole = manager._generate_hole(context, o, basis)
+            hole = manager._generate_hole(context, o)
             manager.prepare_hole(hole)
             hole.select = False
             o.select = True
diff --git a/archipack/archipack_cutter.py b/archipack/archipack_cutter.py
index ba51b863..69bd16c2 100644
--- a/archipack/archipack_cutter.py
+++ b/archipack/archipack_cutter.py
@@ -28,6 +28,7 @@ from mathutils import Vector, Matrix
 from mathutils.geometry import interpolate_bezier
 from math import cos, sin, pi, atan2
 import bmesh
+from random import uniform
 from bpy.props import (
     FloatProperty, IntProperty, BoolProperty,
     StringProperty, EnumProperty
@@ -213,7 +214,7 @@ class CutAblePolygon():
             TODO:
             make s1 angle different than all othr segs
         """
-        s1 = Line(pt, Vector((100 * self.xsize, 0.1)))
+        s1 = Line(pt, Vector((min(10000, 100 * self.xsize), uniform(-0.5, 0.5))))
         counter = 0
         if segs is None:
             segs = self.segs
@@ -236,6 +237,9 @@ class CutAblePolygon():
         s0 = self.segs[-1]
         for i in range(n_segs):
             s1 = self.segs[i]
+            if "Curved" in type(s1).__name__:
+                self.convex = False
+                return
             c = s0.v.cross(s1.v)
             if i == 0:
                 sign = (c > 0)
@@ -543,14 +547,14 @@ class ArchipackCutterPart():
         -type EnumProperty
     """
     length = FloatProperty(
-            name="length",
+            name="Length",
             min=0.01,
             max=1000.0,
             default=2.0,
             update=update_hole
             )
     a0 = FloatProperty(
-            name="angle",
+            name="Angle",
             min=-2 * pi,
             max=2 * pi,
             default=0,
@@ -558,7 +562,7 @@ class ArchipackCutterPart():
             update=update_hole
             )
     offset = FloatProperty(
-            name="offset",
+            name="Offset",
             min=0,
             default=0,
             update=update_hole
@@ -598,7 +602,7 @@ def update_manipulators(self, context):
 
 class ArchipackCutter():
     n_parts = IntProperty(
-            name="parts",
+            name="Parts",
             min=1,
             default=1, update=update_manipulators
             )
@@ -609,11 +613,11 @@ class ArchipackCutter():
             options={'SKIP_SAVE'}
             )
     user_defined_path = StringProperty(
-            name="user defined",
+            name="User defined",
             update=update_path
             )
     user_defined_resolution = IntProperty(
-            name="resolution",
+            name="Resolution",
             min=1,
             max=128,
             default=12, update=update_path
diff --git a/archipack/archipack_door.py b/archipack/archipack_door.py
index ffc1e4c4..642b7747 100644
--- a/archipack/archipack_door.py
+++ b/archipack/archipack_door.py
@@ -61,7 +61,7 @@ def update_childs(self, context):
 
 class archipack_door_panel(ArchipackObject, PropertyGroup):
     x = FloatProperty(
-            name='width',
+            name='Width',
             min=0.25,
             default=100.0, precision=2,
             unit='LENGTH', subtype='DISTANCE',
@@ -75,7 +75,7 @@ class archipack_door_panel(ArchipackObject, PropertyGroup):
             description='depth'
             )
     z = FloatProperty(
-            name='height',
+            name='Height',
             min=0.1,
             default=2.0, precision=2,
             unit='LENGTH', subtype='DISTANCE',
@@ -88,49 +88,49 @@ class archipack_door_panel(ArchipackObject, PropertyGroup):
             description="open direction"
             )
     model = IntProperty(
-            name="model",
+            name="Model",
             min=0,
             max=3,
             default=0,
             description="Model"
             )
     chanfer = FloatProperty(
-            name='chanfer',
+            name='Bevel',
             min=0.001,
             default=0.005, precision=3,
             unit='LENGTH', subtype='DISTANCE',
             description='chanfer'
             )
     panel_spacing = FloatProperty(
-            name='spacing',
+            name='Spacing',
             min=0.001,
             default=0.1, precision=2,
             unit='LENGTH', subtype='DISTANCE',
             description='distance between panels'
             )
     panel_bottom = FloatProperty(
-            name='bottom',
+            name='Bottom',
             min=0.0,
             default=0.0, precision=2,
             unit='LENGTH', subtype='DISTANCE',
             description='distance from bottom'
             )
     panel_border = FloatProperty(
-            name='border',
+            name='Border',
             min=0.001,
             default=0.2, precision=2,
             unit='LENGTH', subtype='DISTANCE',
             description='distance from border'
             )
     panels_x = IntProperty(
-            name="panels h",
+            name="# h",
             min=1,
             max=50,
             default=1,
             description="panels h"
             )
     panels_y = IntProperty(
-            name="panels v",
+            name="# v",
     

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list