[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