IFC Window modifier

Added IFC Window in object modifiers tab (works similar way to Ifc Stair)
This commit is contained in:
Andrej730
2023-01-11 14:33:56 +05:00
parent cf6acd5dd6
commit a6271d0936
7 changed files with 1023 additions and 3 deletions
@@ -298,3 +298,87 @@ class BIMStairProperties(PropertyGroup):
class BIMSverchokProperties(PropertyGroup):
node_group: bpy.props.PointerProperty(name="Node Group", type=NodeTree)
def window_type_prop_update(self, context):
panels_data = self.window_types_panels[self.window_type]
for i in range(3):
try:
width, height = panels_data[i]
except IndexError:
width, height = (0.0, 0.0)
self.relative_width[i] = width
self.relative_height[i] = height
class BIMWindowProperties(PropertyGroup):
window_types = (
('SINGLE_PANEL', 'SINGLE_PANEL', ''),
('DOUBLE_PANEL_HORIZONTAL', 'DOUBLE_PANEL_HORIZONTAL', ''),
('DOUBLE_PANEL_VERTICAL', 'DOUBLE_PANEL_VERTICAL', ''),
('TRIPLE_PANEL_BOTTOM', 'TRIPLE_PANEL_BOTTOM', ''),
('TRIPLE_PANEL_TOP', 'TRIPLE_PANEL_TOP', ''),
('TRIPLE_PANEL_LEFT', 'TRIPLE_PANEL_LEFT', ''),
('TRIPLE_PANEL_RIGHT', 'TRIPLE_PANEL_RIGHT', ''),
('TRIPLE_PANEL_HORIZONTAL', 'TRIPLE_PANEL_HORIZONTAL', ''),
('TRIPLE_PANEL_VERTICAL', 'TRIPLE_PANEL_VERTICAL', ''),
)
# default panel relative dimensions
window_types_panels = {
'SINGLE_PANEL': ((1.0, 1.0), ),
'DOUBLE_PANEL_HORIZONTAL': ((1.0, 0.5), (1.0, 0.5), ),
'DOUBLE_PANEL_VERTICAL': ((0.5, 1.0), (0.5, 1.0), ),
'TRIPLE_PANEL_BOTTOM': ((0.5, 0.5), (0.5, 0.5), (1.0, 0.5), ),
'TRIPLE_PANEL_TOP': ((1.0, 0.5), (0.5, 0.5), (0.5, 0.5), ),
'TRIPLE_PANEL_LEFT': ((0.5, 1.0), (0.5, 0.5), (0.5, 0.5), ),
'TRIPLE_PANEL_RIGHT': ((0.5, 0.5), (0.5, 1.0), (0.5, 0.5), ),
'TRIPLE_PANEL_HORIZONTAL': ((1.0, 1/3), (1.0, 1/3), (1.0, 1/3),),
'TRIPLE_PANEL_VERTICAL': ((1/3, 1.0), (1/3, 1.0), (1/3, 1.0),),
}
is_editing: bpy.props.IntProperty(default=-1)
window_type: bpy.props.EnumProperty(name="Window Type", items=window_types, default="SINGLE_PANEL", update=window_type_prop_update)
overall_height: bpy.props.FloatProperty(name='Overall Height', default=900)
overall_width: bpy.props.FloatProperty(name='Overall Width', default=600)
# lining properties
lining_depth: bpy.props.FloatProperty(name='Lining Depth', default=50)
lining_thickness: bpy.props.FloatProperty(name='Lining Thickness', default=50)
lining_offset: bpy.props.FloatProperty(name='Lining Offset', default=50)
lining_to_panel_offset_x: bpy.props.FloatProperty(name='Lining to Panel Offset X', default=25)
lining_to_panel_offset_y: bpy.props.FloatProperty(name='Lining to Panel Offset Y', default=25)
mullion_thickness: bpy.props.FloatProperty(name='(not used) Mullion Thickness')
transom_thickness: bpy.props.FloatProperty(name='(not used) Transom Thickness')
# panel_properties
frame_depth: bpy.props.FloatVectorProperty(name='Frame Depth', size=3, default=[35]*3)
frame_thickness: bpy.props.FloatVectorProperty(name='Frame Thickness', size=3, default=[35]*3)
relative_width: bpy.props.FloatVectorProperty(name='Relative Width', size=3, default=[1,0,0])
relative_height: bpy.props.FloatVectorProperty(name='Relative Height', size=3, default=[1,0,0])
def get_general_kwargs(self):
return {
"window_type": self.window_type,
"overall_height": self.overall_height,
"overall_width": self.overall_width,
}
def get_lining_kwargs(self):
return {
"lining_depth": self.lining_depth,
"lining_thickness": self.lining_thickness,
"lining_offset": self.lining_offset,
"lining_to_panel_offset_x": self.lining_to_panel_offset_x,
"lining_to_panel_offset_y": self.lining_to_panel_offset_y,
"mullion_thickness": self.mullion_thickness,
"transom_thickness": self.transom_thickness,
}
def get_panel_kwargs(self):
return {
"frame_depth": self.frame_depth,
"frame_thickness": self.frame_thickness,
"relative_width": self.relative_width,
"relative_height": self.relative_height,
}