본문 바로가기
IFC

IFC mesh pyvista 시각화

by 은유지니 2024. 9. 25.

IFC mesh 모습을 pyvista로 시각화하는 코드는 다음과 같다.

import pyvista as pv
import ifcopenshell
import ifcopenshell.geom

self.pyvista = pv.Plotter() # 캔버스 정의 
self.pyvista.add_axes(line_width=5, labels_off=False) #좌표계 보이게

# IFC geometry 설정
settings = ifcopenshell.geom.settings()
settings.set(settings.USE_WORLD_COORDS, True)

shape = ifcopenshell.geom.create_shape(settings, element)
mesh = shape.geometry
verts = mesh.verts
faces = mesh.faces

# 3개씩 묶어서 grouped_verts 생성
grouped_verts = [[verts[i], verts[i + 1], verts[i + 2]] for i in range(0, len(verts), 3)]
# 3개씩 묶어서 grouped_faces 생성
grouped_faces = [[faces[i], faces[i + 1], faces[i + 2]] for i in range(0, len(faces), 3)]

# 각 face 리스트에 3을 앞에 추가
for idx, face in enumerate(grouped_faces):
    # 3을 추가한 리스트를 생성하여 기존 face를 업데이트
    face.insert(0, len(face))  # 0번째 인덱스에 3을 삽입
    grouped_faces[idx] = face  # 해당 인덱스의 face를 업데이트


mesh = pv.PolyData(grouped_verts, grouped_faces)
self.pyvista.add_mesh(mesh)

self.pyvista.show(cpos="xy")

 

만약 mesh 결과로 verts, faces가 부족하게 나온다거나 오히려 없는 형상까지 더 초과되어 나올 경우에는
ifcopenshell 버전에 문제가 있을 수 있으니 업데이트를 진행하면 된다.

pip install --upgrade ifcopenshell