[Bf-extensions-cvs] [45cad675] master: archipack: update to 1.2.8 add roof and freeform floors

Stephen Leger noreply at git.blender.org
Tue Aug 1 03:51:17 CEST 2017


Commit: 45cad6756f10eb708d1a17dae4a70723accc1928
Author: Stephen Leger
Date:   Tue Aug 1 03:48:42 2017 +0200
Branches: master
https://developer.blender.org/rBA45cad6756f10eb708d1a17dae4a70723accc1928

archipack: update to 1.2.8 add roof and freeform floors

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

M	archipack/__init__.py
M	archipack/archipack_2d.py
M	archipack/archipack_autoboolean.py
A	archipack/archipack_cutter.py
M	archipack/archipack_door.py
M	archipack/archipack_floor.py
M	archipack/archipack_gl.py
M	archipack/archipack_handle.py
M	archipack/archipack_manipulator.py
A	archipack/archipack_material.py
M	archipack/archipack_object.py
M	archipack/archipack_preset.py
A	archipack/archipack_progressbar.py
M	archipack/archipack_reference_point.py
A	archipack/archipack_roof.py
M	archipack/archipack_slab.py
M	archipack/archipack_snap.py
M	archipack/archipack_stair.py
M	archipack/archipack_wall2.py
M	archipack/archipack_window.py
M	archipack/bmesh_utils.py
A	archipack/icons/roof.png
D	archipack/materialutils.py
A	archipack/presets/archipack_floor/boards_200x20.png
A	archipack/presets/archipack_floor/boards_200x20.py
M	archipack/presets/archipack_floor/herringbone_50x10.png
M	archipack/presets/archipack_floor/herringbone_50x10.py
M	archipack/presets/archipack_floor/herringbone_p_50x10.png
M	archipack/presets/archipack_floor/herringbone_p_50x10.py
A	archipack/presets/archipack_floor/hexagon_10.png
A	archipack/presets/archipack_floor/hexagon_10.py
A	archipack/presets/archipack_floor/hopscotch_30x30.png
A	archipack/presets/archipack_floor/hopscotch_30x30.py
M	archipack/presets/archipack_floor/parquet_15x3.png
M	archipack/presets/archipack_floor/parquet_15x3.py
D	archipack/presets/archipack_floor/planks_200x20.png
D	archipack/presets/archipack_floor/planks_200x20.py
A	archipack/presets/archipack_floor/stepping_stone_30x30.png
A	archipack/presets/archipack_floor/stepping_stone_30x30.py
A	archipack/presets/archipack_floor/tile_30x60.png
A	archipack/presets/archipack_floor/tile_30x60.py
D	archipack/presets/archipack_floor/tiles_15x15.png
D	archipack/presets/archipack_floor/tiles_15x15.py
D	archipack/presets/archipack_floor/tiles_60x30.png
D	archipack/presets/archipack_floor/tiles_60x30.py
D	archipack/presets/archipack_floor/tiles_hex_10x10.png
D	archipack/presets/archipack_floor/tiles_hex_10x10.py
D	archipack/presets/archipack_floor/tiles_l+ms_30x30_15x15.png
D	archipack/presets/archipack_floor/tiles_l+ms_30x30_15x15.py
D	archipack/presets/archipack_floor/tiles_l+s_30x30_15x15.png
D	archipack/presets/archipack_floor/tiles_l+s_30x30_15x15.py
A	archipack/presets/archipack_floor/windmill_30x30.png
A	archipack/presets/archipack_floor/windmill_30x30.py
A	archipack/presets/archipack_materials/door.txt
A	archipack/presets/archipack_materials/fence.txt
A	archipack/presets/archipack_materials/floor.txt
A	archipack/presets/archipack_materials/handle.txt
A	archipack/presets/archipack_materials/roof.txt
A	archipack/presets/archipack_materials/slab.txt
A	archipack/presets/archipack_materials/stair.txt
A	archipack/presets/archipack_materials/truss.txt
A	archipack/presets/archipack_materials/wall2.txt
A	archipack/presets/archipack_materials/window.txt
A	archipack/presets/archipack_roof/braas_1.png
A	archipack/presets/archipack_roof/braas_1.py
A	archipack/presets/archipack_roof/braas_2.png
A	archipack/presets/archipack_roof/braas_2.py
A	archipack/presets/archipack_roof/eternit.png
A	archipack/presets/archipack_roof/eternit.py
A	archipack/presets/archipack_roof/lauze.png
A	archipack/presets/archipack_roof/lauze.py
A	archipack/presets/archipack_roof/metal.png
A	archipack/presets/archipack_roof/metal.py
A	archipack/presets/archipack_roof/ondule.png
A	archipack/presets/archipack_roof/ondule.py
A	archipack/presets/archipack_roof/roman.png
A	archipack/presets/archipack_roof/roman.py
A	archipack/presets/archipack_roof/round.png
A	archipack/presets/archipack_roof/round.py
A	archipack/presets/archipack_roof/square.png
A	archipack/presets/archipack_roof/square.py
M	archipack/presets/archipack_stair/u_wood_over_concrete.py

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

diff --git a/archipack/__init__.py b/archipack/__init__.py
index 5bdf9b10..93a50e66 100644
--- a/archipack/__init__.py
+++ b/archipack/__init__.py
@@ -31,7 +31,7 @@ bl_info = {
     'author': 's-leger',
     'license': 'GPL',
     'deps': '',
-    'version': (1, 2, 6),
+    'version': (1, 2, 8),
     'blender': (2, 7, 8),
     'location': 'View3D > Tools > Create > Archipack',
     'warning': '',
@@ -46,6 +46,8 @@ import os
 
 if "bpy" in locals():
     import importlib as imp
+    imp.reload(archipack_progressbar)
+    imp.reload(archipack_material)
     imp.reload(archipack_snap)
     imp.reload(archipack_manipulator)
     imp.reload(archipack_reference_point)
@@ -54,6 +56,7 @@ if "bpy" in locals():
     imp.reload(archipack_window)
     imp.reload(archipack_stair)
     imp.reload(archipack_wall2)
+    imp.reload(archipack_roof)
     imp.reload(archipack_slab)
     imp.reload(archipack_fence)
     imp.reload(archipack_truss)
@@ -62,6 +65,8 @@ if "bpy" in locals():
 
     print("archipack: reload ready")
 else:
+    from . import archipack_progressbar
+    from . import archipack_material
     from . import archipack_snap
     from . import archipack_manipulator
     from . import archipack_reference_point
@@ -70,6 +75,7 @@ else:
     from . import archipack_window
     from . import archipack_stair
     from . import archipack_wall2
+    from . import archipack_roof
     from . import archipack_slab
     from . import archipack_fence
     from . import archipack_truss
@@ -78,7 +84,6 @@ else:
 
     print("archipack: ready")
 
-
 # noinspection PyUnresolvedReferences
 import bpy
 # noinspection PyUnresolvedReferences
@@ -135,7 +140,7 @@ class Archipack_Pref(AddonPreferences):
     )
     max_style_draw_tool = BoolProperty(
         name="Draw a wall use 3dsmax style",
-        description="Reverse clic / release cycle for Draw a wall",
+        description="Reverse clic / release & drag cycle for Draw a wall",
         default=True
     )
     # Arrow sizes (world units)
@@ -151,6 +156,11 @@ class Archipack_Pref(AddonPreferences):
             min=2,
             default=10
             )
+    matlib_path = StringProperty(
+            name="Folder path",
+            description="absolute path to material library folder",
+            default=""
+            )
     # Font sizes and basic colour scheme
     feedback_size_main = IntProperty(
             name="Main",
@@ -225,6 +235,11 @@ class Archipack_Pref(AddonPreferences):
         box.prop(self, "max_style_draw_tool")
         box = layout.box()
         row = box.row()
+        col = row.column()
+        col.label(text="Material library:")
+        col.prop(self, "matlib_path")
+        box = layout.box()
+        row = box.row()
         split = row.split(percentage=0.5)
         col = split.column()
         col.label(text="Colors:")
@@ -296,6 +311,7 @@ class TOOLS_PT_Archipack_Create(Panel):
 
     def draw(self, context):
         global icons_collection
+
         icons = icons_collection["main"]
         layout = self.layout
         row = layout.row(align=True)
@@ -356,10 +372,22 @@ class TOOLS_PT_Archipack_Create(Panel):
                     icon_value=icons["slab"].icon_id
                     ).ceiling = True
         row = box.row(align=True)
+        row.operator("archipack.roof_preset_menu",
+                    text="Roof",
+                    icon_value=icons["roof"].icon_id
+                    ).preset_operator = "archipack.roof"
+        row = box.row(align=True)
         row.operator("archipack.floor_preset_menu",
                     text="Floor",
                     icon_value=icons["floor"].icon_id
                     ).preset_operator = "archipack.floor"
+        row.operator("archipack.floor_preset_menu",
+                    text="->Wall",
+                    icon_value=icons["floor"].icon_id
+                    ).preset_operator = "archipack.floor_from_wall"
+        row.operator("archipack.floor_preset_menu",
+                    text="",
+                    icon='CURVE_DATA').preset_operator = "archipack.floor_from_curve"
 
 
 # ----------------------------------------------------
@@ -400,13 +428,16 @@ def draw_menu(self, context):
     layout.operator("archipack.floor_preset_menu",
                     text="Floor",
                     icon_value=icons["floor"].icon_id
-                    )
+                    ).preset_operator = "archipack.floor"
+    layout.operator("archipack.roof_preset_menu",
+                    text="Roof",
+                    icon_value=icons["roof"].icon_id
+                    ).preset_operator = "archipack.roof"
 
 
 class ARCHIPACK_create_menu(Menu):
     bl_label = 'Archipack'
     bl_idname = 'ARCHIPACK_create_menu'
-    bl_context = "objectmode"
 
     def draw(self, context):
         draw_menu(self, context)
@@ -454,6 +485,8 @@ def register():
         icons.load(name, os.path.join(icons_dir, icon), 'IMAGE')
     icons_collection["main"] = icons
 
+    archipack_progressbar.register()
+    archipack_material.register()
     archipack_snap.register()
     archipack_manipulator.register()
     archipack_reference_point.register()
@@ -462,6 +495,7 @@ def register():
     archipack_window.register()
     archipack_stair.register()
     archipack_wall2.register()
+    archipack_roof.register()
     archipack_slab.register()
     archipack_fence.register()
     archipack_truss.register()
@@ -484,8 +518,8 @@ def unregister():
     bpy.utils.unregister_class(TOOLS_PT_Archipack_Tools)
     bpy.utils.unregister_class(TOOLS_PT_Archipack_Create)
     bpy.utils.unregister_class(Archipack_Pref)
-
-    # unregister subs
+    archipack_progressbar.unregister()
+    archipack_material.unregister()
     archipack_snap.unregister()
     archipack_manipulator.unregister()
     archipack_reference_point.unregister()
@@ -494,6 +528,7 @@ def unregister():
     archipack_window.unregister()
     archipack_stair.unregister()
     archipack_wall2.unregister()
+    archipack_roof.unregister()
     archipack_slab.unregister()
     archipack_fence.unregister()
     archipack_truss.unregister()
diff --git a/archipack/archipack_2d.py b/archipack/archipack_2d.py
index 912e3cb8..fcd578da 100644
--- a/archipack/archipack_2d.py
+++ b/archipack/archipack_2d.py
@@ -118,6 +118,10 @@ class Line(Projection):
             self.v = Vector((0, 0))
 
     @property
+    def copy(self):
+        return Line(self.p.copy(), self.v.copy())
+
+    @property
     def p0(self):
         return self.p
 
@@ -250,6 +254,20 @@ class Line(Projection):
         t = (c * (line.p - self.p)) / d
         return True, self.lerp(t), t
 
+    def intersect_ext(self, line):
+        """
+            same as intersect, but return param t on both lines
+        """
+        c = line.cross_z
+        d = self.v * c
+        if d == 0:
+            return False, 0, 0, 0
+        dp = line.p - self.p
+        c2 = self.cross_z
+        u = (c * dp) / d
+        v = (c2 * dp) / d
+        return u > 0 and v > 0 and u < 1 and v < 1, self.lerp(u), u, v
+
     def point_sur_segment(self, pt):
         """ _point_sur_segment
             point: Vector 2d
@@ -258,6 +276,8 @@ class Line(Projection):
         """
         dp = pt - self.p
         dl = self.length
+        if dl == 0:
+            return dp.length < 0.00001, 0, 0
         d = (self.v.x * dp.y - self.v.y * dp.x) / dl
         t = (self.v * dp) / (dl * dl)
         return t > 0 and t < 1, d, t
@@ -318,7 +338,19 @@ class Line(Projection):
             Draw Line with open gl in screen space
             aka: coords are in pixels
         """
-        raise NotImplementedError
+        curve = bpy.data.curves.new('LINE', type='CURVE')
+        curve.dimensions = '2D'
+        spline = curve.splines.new('POLY')
+        spline.use_endpoint_u = False
+        spline.use_cyclic_u = False
+        pts = self.pts
+        spline.points.add(len(pts) - 1)
+        for i, p in enumerate(pts):
+            x, y, z = p
+            spline.points[i].co = (x, y, 0, 1)
+        curve_obj = bpy.data.objects.new('LINE', curve)
+        context.scene.objects.link(curve_obj)
+        curve_obj.select = True
 
     def make_offset(self, offset, last=None):
         """
@@ -581,6 +613,16 @@ class Arc(Circle):
         steps = max(1, round(self.length / length, 0))
         return 1.0 / steps, int(steps)
 
+    def intersect_ext(self, line):
+        """
+            same as intersect, but return param t on both lines
+        """
+        res, p, v = self.intersect(line)
+        v0 = self.p0 - self.c
+        v1 = p - self.c
+        u = self.signed_angle(v0, v1) / self.da
+        return res and u > 0 and v > 0 and u < 1 and v < 1, p, u, v
+
     # this is for wall
     def steps_by_angle(self, step_angle):
         steps = max(1, round(abs(self.da) / step_angle, 0))
diff --git a/archipack/archipack_autoboolean.py b/archipack/archipack_autoboolean.py
index a171532c..f304ced0 100644
--- a/archipack/archipack_autoboolean.py
+++ b/archipack/archipack_autoboolean.py
@@ -28,16 +28,16 @@ import bpy
 from bpy.types import Operator
 from bpy.props import EnumProperty
 from mathutils import Vector
-from .materialutils import MaterialUtils
-
-from os import path
 
 
+"""
+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():
@@ -95,7 +95,7 @@ class ArchipackBoolManager():
                'archipack_robusthole' in wall or
                'archipack_handle' in wall)
 
-    def datablock(self, o):
+    def datablock(self, o, basis='WALL'):
         """
             get datablock from windows and doors
             return
@@ -104,10 +104,14 @@ class ArchipackBoolManager():
         """
         d = None
         if o.data:
-            if "archipack_window" in o.data:
-                d = o.data.archipack_window[0]
-            elif "archipack_door" in o.data:
-                d = o.data.archipack_door[0]
+            if basis == 'WALL':
+                if "archipack_window" in o.data:
+                    d = o.data.archipack_window[0]
+

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list