Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Leger <stephen@3dservices.ch>2018-11-16 17:31:26 +0300
committerStephen Leger <stephen@3dservices.ch>2018-11-16 17:34:51 +0300
commitbfbbd112c170d96e86838208b8781fd46df52514 (patch)
tree9fda29f608a32f8ac5a88e5873730bf6422dd280 /archipack/archipack_fence.py
parent64198b8817042962dcdedc71bb81ee9492b19a4d (diff)
archipack 2.8 compatibility (step1)
Diffstat (limited to 'archipack/archipack_fence.py')
-rw-r--r--archipack/archipack_fence.py218
1 files changed, 112 insertions, 106 deletions
diff --git a/archipack/archipack_fence.py b/archipack/archipack_fence.py
index a94023fd..0196aac8 100644
--- a/archipack/archipack_fence.py
+++ b/archipack/archipack_fence.py
@@ -268,7 +268,7 @@ class FenceGenerator():
co.z *= self.user_defined_post_scale.z
if 'Slope' in g:
co.z += co.y * slope
- verts.append(tM * co)
+ verts.append(tM @ co)
matids += self.user_defined_mat
faces += [tuple([i + f for i in p.vertices]) for p in m.polygons]
uvs += self.user_defined_uvs
@@ -341,7 +341,7 @@ class FenceGenerator():
if s < n_sections:
v1 = subs[s + 1][0].v.normalized()
dir = (v0 + v1).normalized()
- scale = 1 / cos(0.5 * acos(min(1, max(-1, v0 * v1))))
+ scale = 1 / cos(0.5 * acos(min(1, max(-1, v0.dot(v1)))))
for p in profile:
x, y = n.p + scale * p.x * dir
z = zl + p.y + altitude
@@ -556,7 +556,7 @@ class FenceGenerator():
if s < n_sections:
v1 = sections[s + 1][0].v.normalized()
dir = (v0 + v1).normalized()
- scale = min(10, 1 / cos(0.5 * acos(min(1, max(-1, v0 * v1)))))
+ scale = min(10, 1 / cos(0.5 * acos(min(1, max(-1, v0.dot(v1) )))))
for p in profile:
# x, y = n.p + scale * (x_offset + p.x) * dir
x, y = n.p + scale * p.x * dir
@@ -673,7 +673,7 @@ materials_enum = (
class archipack_fence_material(PropertyGroup):
- index = EnumProperty(
+ index : EnumProperty(
items=materials_enum,
default='0',
update=update
@@ -684,7 +684,7 @@ class archipack_fence_material(PropertyGroup):
find witch selected object this instance belongs to
provide support for "copy to selected"
"""
- selected = [o for o in context.selected_objects]
+ selected = context.selected_objects[:]
for o in selected:
props = archipack_fence.datablock(o)
if props:
@@ -700,7 +700,7 @@ class archipack_fence_material(PropertyGroup):
class archipack_fence_part(PropertyGroup):
- type = EnumProperty(
+ type : EnumProperty(
items=(
('S_FENCE', 'Straight fence', '', 0),
('C_FENCE', 'Curved fence', '', 1),
@@ -708,21 +708,21 @@ class archipack_fence_part(PropertyGroup):
default='S_FENCE',
update=update_type
)
- length = FloatProperty(
+ length : FloatProperty(
name="Length",
min=0.01,
default=2.0,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- radius = FloatProperty(
+ radius : FloatProperty(
name="Radius",
min=0.01,
default=0.7,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- da = FloatProperty(
+ da : FloatProperty(
name="Angle",
min=-pi,
max=pi,
@@ -730,7 +730,7 @@ class archipack_fence_part(PropertyGroup):
subtype='ANGLE', unit='ROTATION',
update=update
)
- a0 = FloatProperty(
+ a0 : FloatProperty(
name="Start angle",
min=-2 * pi,
max=2 * pi,
@@ -738,13 +738,13 @@ class archipack_fence_part(PropertyGroup):
subtype='ANGLE', unit='ROTATION',
update=update
)
- dz = FloatProperty(
+ dz : FloatProperty(
name="delta z",
default=0,
unit='LENGTH', subtype='DISTANCE'
)
- manipulators = CollectionProperty(type=archipack_manipulator)
+ manipulators : CollectionProperty(type=archipack_manipulator)
def find_datablock_in_selection(self, context):
"""
@@ -783,43 +783,43 @@ class archipack_fence_part(PropertyGroup):
class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
- parts = CollectionProperty(type=archipack_fence_part)
- user_defined_path = StringProperty(
+ parts : CollectionProperty(type=archipack_fence_part)
+ user_defined_path : StringProperty(
name="User defined",
update=update_path
)
- user_defined_spline = IntProperty(
+ user_defined_spline : IntProperty(
name="Spline index",
min=0,
default=0,
update=update_path
)
- user_defined_resolution = IntProperty(
+ user_defined_resolution : IntProperty(
name="Resolution",
min=1,
max=128,
default=12, update=update_path
)
- n_parts = IntProperty(
+ n_parts : IntProperty(
name="Parts",
min=1,
default=1, update=update_manipulators
)
- x_offset = FloatProperty(
+ x_offset : FloatProperty(
name="Offset",
default=0.0, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- radius = FloatProperty(
+ radius : FloatProperty(
name="Radius",
min=0.01,
default=0.7,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- da = FloatProperty(
+ da : FloatProperty(
name="Angle",
min=-pi,
max=pi,
@@ -827,7 +827,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
subtype='ANGLE', unit='ROTATION',
update=update
)
- angle_limit = FloatProperty(
+ angle_limit : FloatProperty(
name="Angle",
min=0,
max=2 * pi,
@@ -835,7 +835,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
subtype='ANGLE', unit='ROTATION',
update=update_manipulators
)
- shape = EnumProperty(
+ shape : EnumProperty(
items=(
('RECTANGLE', 'Straight', '', 0),
('CIRCLE', 'Curved ', '', 1)
@@ -843,106 +843,106 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
default='RECTANGLE',
update=update
)
- post = BoolProperty(
+ post : BoolProperty(
name='Enable',
default=True,
update=update
)
- post_spacing = FloatProperty(
+ post_spacing : FloatProperty(
name="Spacing",
min=0.1,
default=1.0, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- post_x = FloatProperty(
+ post_x : FloatProperty(
name="Width",
min=0.001,
default=0.04, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- post_y = FloatProperty(
+ post_y : FloatProperty(
name="Length",
min=0.001, max=1000,
default=0.04, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- post_z = FloatProperty(
+ post_z : FloatProperty(
name="Height",
min=0.001,
default=1, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- post_alt = FloatProperty(
+ post_alt : FloatProperty(
name="Altitude",
default=0, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- user_defined_post_enable = BoolProperty(
+ user_defined_post_enable : BoolProperty(
name="User",
update=update,
default=True
)
- user_defined_post = StringProperty(
+ user_defined_post : StringProperty(
name="User defined",
update=update
)
- idmat_post = EnumProperty(
+ idmat_post : EnumProperty(
name="Post",
items=materials_enum,
default='1',
update=update
)
- subs = BoolProperty(
+ subs : BoolProperty(
name='Enable',
default=False,
update=update
)
- subs_spacing = FloatProperty(
+ subs_spacing : FloatProperty(
name="Spacing",
min=0.05,
default=0.10, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- subs_x = FloatProperty(
+ subs_x : FloatProperty(
name="Width",
min=0.001,
default=0.02, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- subs_y = FloatProperty(
+ subs_y : FloatProperty(
name="Length",
min=0.001,
default=0.02, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- subs_z = FloatProperty(
+ subs_z : FloatProperty(
name="Height",
min=0.001,
default=1, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- subs_alt = FloatProperty(
+ subs_alt : FloatProperty(
name="Altitude",
default=0, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- subs_offset_x = FloatProperty(
+ subs_offset_x : FloatProperty(
name="Offset",
default=0.0, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- subs_bottom = EnumProperty(
+ subs_bottom : EnumProperty(
name="Bottom",
items=(
('STEP', 'Follow step', '', 0),
@@ -951,78 +951,78 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
default='STEP',
update=update
)
- user_defined_subs_enable = BoolProperty(
+ user_defined_subs_enable : BoolProperty(
name="User",
update=update,
default=True
)
- user_defined_subs = StringProperty(
+ user_defined_subs : StringProperty(
name="User defined",
update=update
)
- idmat_subs = EnumProperty(
+ idmat_subs : EnumProperty(
name="Subs",
items=materials_enum,
default='1',
update=update
)
- panel = BoolProperty(
+ panel : BoolProperty(
name='Enable',
default=True,
update=update
)
- panel_alt = FloatProperty(
+ panel_alt : FloatProperty(
name="Altitude",
default=0.25, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- panel_x = FloatProperty(
+ panel_x : FloatProperty(
name="Width",
min=0.001,
default=0.01, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- panel_z = FloatProperty(
+ panel_z : FloatProperty(
name="Height",
min=0.001,
default=0.6, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- panel_dist = FloatProperty(
+ panel_dist : FloatProperty(
name="Spacing",
min=0.001,
default=0.05, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- panel_offset_x = FloatProperty(
+ panel_offset_x : FloatProperty(
name="Offset",
default=0.0, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- idmat_panel = EnumProperty(
+ idmat_panel : EnumProperty(
name="Panels",
items=materials_enum,
default='2',
update=update
)
- rail = BoolProperty(
+ rail : BoolProperty(
name="Enable",
update=update,
default=False
)
- rail_n = IntProperty(
+ rail_n : IntProperty(
name="#",
default=1,
min=0,
max=31,
update=update
)
- rail_x = FloatVectorProperty(
+ rail_x : FloatVectorProperty(
name="Width",
default=[
0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05,
@@ -1036,7 +1036,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
unit='LENGTH',
update=update
)
- rail_z = FloatVectorProperty(
+ rail_z : FloatVectorProperty(
name="Height",
default=[
0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05,
@@ -1050,7 +1050,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
unit='LENGTH',
update=update
)
- rail_offset = FloatVectorProperty(
+ rail_offset : FloatVectorProperty(
name="Offset",
default=[
0, 0, 0, 0, 0, 0, 0, 0,
@@ -1063,7 +1063,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
unit='LENGTH',
update=update
)
- rail_alt = FloatVectorProperty(
+ rail_alt : FloatVectorProperty(
name="Altitude",
default=[
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
@@ -1076,43 +1076,43 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
unit='LENGTH',
update=update
)
- rail_mat = CollectionProperty(type=archipack_fence_material)
+ rail_mat : CollectionProperty(type=archipack_fence_material)
- handrail = BoolProperty(
+ handrail : BoolProperty(
name="Enable",
update=update,
default=True
)
- handrail_offset = FloatProperty(
+ handrail_offset : FloatProperty(
name="Offset",
default=0.0, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- handrail_alt = FloatProperty(
+ handrail_alt : FloatProperty(
name="Altitude",
default=1.0, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- handrail_extend = FloatProperty(
+ handrail_extend : FloatProperty(
name="Extend",
min=0,
default=0.1, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- handrail_slice = BoolProperty(
+ handrail_slice : BoolProperty(
name='Slice',
default=True,
update=update
)
- handrail_slice_right = BoolProperty(
+ handrail_slice_right : BoolProperty(
name='Slice',
default=True,
update=update
)
- handrail_profil = EnumProperty(
+ handrail_profil : EnumProperty(
name="Profil",
items=(
('SQUARE', 'Square', '', 0),
@@ -1122,28 +1122,28 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
default='SQUARE',
update=update
)
- handrail_x = FloatProperty(
+ handrail_x : FloatProperty(
name="Width",
min=0.001,
default=0.04, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- handrail_y = FloatProperty(
+ handrail_y : FloatProperty(
name="Height",
min=0.001,
default=0.04, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- handrail_radius = FloatProperty(
+ handrail_radius : FloatProperty(
name="Radius",
min=0.001,
default=0.02, precision=2, step=1,
unit='LENGTH', subtype='DISTANCE',
update=update
)
- idmat_handrail = EnumProperty(
+ idmat_handrail : EnumProperty(
name="Handrail",
items=materials_enum,
default='0',
@@ -1151,25 +1151,25 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
)
# UI layout related
- parts_expand = BoolProperty(
+ parts_expand : BoolProperty(
default=False
)
- rail_expand = BoolProperty(
+ rail_expand : BoolProperty(
default=False
)
- idmats_expand = BoolProperty(
+ idmats_expand : BoolProperty(
default=False
)
- handrail_expand = BoolProperty(
+ handrail_expand : BoolProperty(
default=False
)
- post_expand = BoolProperty(
+ post_expand : BoolProperty(
default=False
)
- panel_expand = BoolProperty(
+ panel_expand : BoolProperty(
default=False
)
- subs_expand = BoolProperty(
+ subs_expand : BoolProperty(
default=False
)
@@ -1178,7 +1178,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
# .auto_update = False
# bulk changes
# .auto_update = True
- auto_update = BoolProperty(
+ auto_update : BoolProperty(
options={'SKIP_SAVE'},
default=True,
update=update_manipulators
@@ -1226,26 +1226,27 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
# add parts
for i in range(len(self.parts), self.n_parts):
self.parts.add()
-
+ print("setup_manipulators")
self.setup_manipulators()
+ print("update_parts.done")
def interpolate_bezier(self, pts, wM, p0, p1, resolution):
# straight segment, worth testing here
# since this can lower points count by a resolution factor
# use normalized to handle non linear t
if resolution == 0:
- pts.append(wM * p0.co.to_3d())
+ pts.append(wM @ p0.co.to_3d())
else:
v = (p1.co - p0.co).normalized()
d1 = (p0.handle_right - p0.co).normalized()
d2 = (p1.co - p1.handle_left).normalized()
if d1 == v and d2 == v:
- pts.append(wM * p0.co.to_3d())
+ pts.append(wM @ p0.co.to_3d())
else:
- seg = interpolate_bezier(wM * p0.co,
- wM * p0.handle_right,
- wM * p1.handle_left,
- wM * p1.co,
+ seg = interpolate_bezier(wM @ p0.co,
+ wM @ p0.handle_right,
+ wM @ p1.handle_left,
+ wM @ p1.co,
resolution + 1)
for i in range(resolution):
pts.append(seg[i].to_3d())
@@ -1264,7 +1265,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
pts = []
if spline.type == 'POLY':
pt = spline.points[0].co
- pts = [wM * p.co.to_3d() for p in spline.points]
+ pts = [wM @ p.co.to_3d() for p in spline.points]
if spline.use_cyclic_u:
pts.append(pts[0])
elif spline.type == 'BEZIER':
@@ -1280,7 +1281,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
self.interpolate_bezier(pts, wM, p0, p1, resolution)
pts.append(pts[0])
else:
- pts.append(wM * points[-1].co)
+ pts.append(wM @ points[-1].co)
auto_update = self.auto_update
self.auto_update = False
@@ -1305,12 +1306,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
self.auto_update = auto_update
- o.matrix_world = tM * Matrix([
- [1, 0, 0, pt.x],
- [0, 1, 0, pt.y],
- [0, 0, 1, pt.z],
- [0, 0, 0, 1]
- ])
+ o.matrix_world = tM @ Matrix.Translation(pt)
def update_path(self, context):
path = context.scene.objects.get(self.user_defined_path)
@@ -1335,7 +1331,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
return g
def update(self, context, manipulable_refresh=False):
-
+ print("update")
o = self.find_in_selection(context, self.auto_update)
if o is None:
@@ -1344,7 +1340,7 @@ class archipack_fence(ArchipackObject, Manipulable, PropertyGroup):
# clean up manipulators before any data model change
if manipulable_refresh:
self.manipulable_disable(context)
-
+ print("update_parts")
self.update_parts()
verts = []
@@ -1465,7 +1461,7 @@ class ARCHIPACK_PT_fence(Panel):
bl_label = "Fence"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
- bl_category = 'ArchiPack'
+ bl_category = 'Archipack'
@classmethod
def poll(cls, context):
@@ -1478,13 +1474,13 @@ class ARCHIPACK_PT_fence(Panel):
scene = context.scene
layout = self.layout
row = layout.row(align=True)
- row.operator('archipack.fence_manipulate', icon='HAND')
+ row.operator('archipack.fence_manipulate', icon='VIEW_PAN')
box = layout.box()
# box.label(text="Styles")
row = box.row(align=True)
row.operator("archipack.fence_preset_menu", text=bpy.types.ARCHIPACK_OT_fence_preset_menu.bl_label)
- row.operator("archipack.fence_preset", text="", icon='ZOOMIN')
- row.operator("archipack.fence_preset", text="", icon='ZOOMOUT').remove_active = True
+ row.operator("archipack.fence_preset", text="", icon='ADD')
+ row.operator("archipack.fence_preset", text="", icon='REMOVE').remove_active = True
box = layout.box()
row = box.row(align=True)
row.operator("archipack.fence_curve_update", text="", icon='FILE_REFRESH')
@@ -1619,25 +1615,35 @@ class ARCHIPACK_OT_fence(ArchipackCreateTool, Operator):
bl_options = {'REGISTER', 'UNDO'}
def create(self, context):
+ print("Create")
m = bpy.data.meshes.new("Fence")
o = bpy.data.objects.new("Fence", m)
d = m.archipack_fence.add()
# make manipulators selectable
+ print("manipulable_selectable")
+
d.manipulable_selectable = True
- context.scene.objects.link(o)
- o.select = True
- context.scene.objects.active = o
+ context.scene.collection.objects.link(o)
+ o.select_set(state=True)
+ context.view_layer.objects.active = o
+ print("load_preset")
self.load_preset(d)
+ print("add_material")
+
self.add_material(o)
return o
def execute(self, context):
if context.mode == "OBJECT":
+ print("select_all")
bpy.ops.object.select_all(action="DESELECT")
o = self.create(context)
- o.location = bpy.context.scene.cursor_location
- o.select = True
- context.scene.objects.active = o
+ print("select_all")
+ o.location = context.scene.cursor_location
+ o.select_set(state=True)
+ context.view_layer.objects.active = o
+ print("manipulate")
+
self.manipulate()
return {'FINISHED'}
else:
@@ -1663,7 +1669,7 @@ class ARCHIPACK_OT_fence_curve_update(Operator):
def draw(self, context):
layout = self.layout
row = layout.row()
- row.label("Use Properties panel (N) to define parms", icon='INFO')
+ row.label(text="Use Properties panel (N) to define parms", icon='INFO')
def execute(self, context):
if context.mode == "OBJECT":
@@ -1689,7 +1695,7 @@ class ARCHIPACK_OT_fence_from_curve(ArchipackCreateTool, Operator):
def draw(self, context):
layout = self.layout
row = layout.row()
- row.label("Use Properties panel (N) to define parms", icon='INFO')
+ row.label(text="Use Properties panel (N) to define parms", icon='INFO')
def create(self, context):
o = None
@@ -1709,8 +1715,8 @@ class ARCHIPACK_OT_fence_from_curve(ArchipackCreateTool, Operator):
bpy.ops.object.select_all(action="DESELECT")
o = self.create(context)
if o is not None:
- o.select = True
- context.scene.objects.active = o
+ o.select_set(state=True)
+ context.view_layer.objects.active = o
# self.manipulate()
return {'FINISHED'}
else: