mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-10 22:16:41 +00:00
Roof modifier - removing bottom chord if angle = 90 degrees
This - https://i.imgur.com/75AmYGI.png instead of https://community.osarch.org/uploads/editor/yp/zcaqxx9b33wu.png
This commit is contained in:
@@ -28,12 +28,11 @@ from blenderbim.bim.module.model.data import RoofData, refresh
|
|||||||
from blenderbim.bim.module.model.decorator import ProfileDecorator
|
from blenderbim.bim.module.model.decorator import ProfileDecorator
|
||||||
|
|
||||||
import json
|
import json
|
||||||
from math import tan
|
from math import tan, pi
|
||||||
from mathutils import Vector, Matrix
|
from mathutils import Vector, Matrix
|
||||||
from bpypolyskel import bpypolyskel
|
from bpypolyskel import bpypolyskel
|
||||||
import shapely
|
import shapely
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
from math import pi
|
|
||||||
|
|
||||||
# reference:
|
# reference:
|
||||||
# https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRoof.htm
|
# https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcRoof.htm
|
||||||
@@ -214,6 +213,7 @@ def generate_hiped_roof_bmesh(bm, mode="ANGLE", height=1.0, angle=pi / 18, mutat
|
|||||||
footprint_verts = set()
|
footprint_verts = set()
|
||||||
verts_to_change = {}
|
verts_to_change = {}
|
||||||
verts_to_rip = []
|
verts_to_rip = []
|
||||||
|
bottom_chords_to_remove = []
|
||||||
|
|
||||||
# find footprint edges
|
# find footprint edges
|
||||||
for edge in bm.edges:
|
for edge in bm.edges:
|
||||||
@@ -251,6 +251,9 @@ def generate_hiped_roof_bmesh(bm, mode="ANGLE", height=1.0, angle=pi / 18, mutat
|
|||||||
new_vert_co = change_angle(vert_co, edge_verts_remaped, defined_angle)
|
new_vert_co = change_angle(vert_co, edge_verts_remaped, defined_angle)
|
||||||
verts_to_rip.append([v, new_vert_co, identical_edge])
|
verts_to_rip.append([v, new_vert_co, identical_edge])
|
||||||
|
|
||||||
|
if defined_angle >= pi/2:
|
||||||
|
bottom_chords_to_remove.append(identical_edge)
|
||||||
|
|
||||||
def separate_vert(bm, vert, edge, new_co):
|
def separate_vert(bm, vert, edge, new_co):
|
||||||
face = next(f for f in vert.link_faces if edge in f.edges)
|
face = next(f for f in vert.link_faces if edge in f.edges)
|
||||||
new_v = bmesh.utils.face_vert_separate(face, vert)
|
new_v = bmesh.utils.face_vert_separate(face, vert)
|
||||||
@@ -269,6 +272,7 @@ def generate_hiped_roof_bmesh(bm, mode="ANGLE", height=1.0, angle=pi / 18, mutat
|
|||||||
for v, new_co, edge in verts_to_rip:
|
for v, new_co, edge in verts_to_rip:
|
||||||
separate_vert(bm, v, edge, new_co)
|
separate_vert(bm, v, edge, new_co)
|
||||||
|
|
||||||
|
bmesh.ops.delete(bm, geom=bottom_chords_to_remove, context='EDGES')
|
||||||
bmesh.ops.contextual_create(bm, geom=bm.edges[:])
|
bmesh.ops.contextual_create(bm, geom=bm.edges[:])
|
||||||
|
|
||||||
extrusion_geom = bmesh.ops.extrude_face_region(bm, geom=bm.faces)["geom"]
|
extrusion_geom = bmesh.ops.extrude_face_region(bm, geom=bm.faces)["geom"]
|
||||||
|
|||||||
Reference in New Issue
Block a user