본문 바로가기

Data handling

[openMesh] add_vertex, add_face 이용해서 3D 메쉬 생성하기

728x90
mesh = om.TriMesh()
points = []
faces = []
pre_roofs =[]
for idx, row in corridor_info.iterrows():
    center = row['center']
    top = row['top']
    bot = row['bot']
    top_int = row['top_intersect'][0]
    bot_int = row['bot_intersect'][0]

    center_vh = mesh.add_vertex(center)
    left_vh = mesh.add_vertex(top)
    right_vh = mesh.add_vertex(bot)
    left_edge_vh = mesh.add_vertex(top_int)
    right_edge_vh = mesh.add_vertex(bot_int)

    if idx > 0:
        
        face3 = mesh.add_face(pre_roofs[1], pre_roofs[3], left_edge_vh)
        face5 = mesh.add_face(left_edge_vh, left_vh, pre_roofs[1])
        face1 = mesh.add_face(pre_roofs[0], pre_roofs[1], left_vh)
        face6 = mesh.add_face(left_vh, center_vh, pre_roofs[0])

        face2 = mesh.add_face(pre_roofs[0], center_vh, pre_roofs[2])
        face7 = mesh.add_face(center_vh, right_vh, pre_roofs[2])
        face4 = mesh.add_face(pre_roofs[2], right_vh, pre_roofs[4])
        face8 = mesh.add_face(right_vh, right_edge_vh, pre_roofs[4])

        print(face1.idx(), face2.idx(), face3.idx(), face4.idx(), face5.idx(), face6.idx(), face7.idx(), face8.idx())

    pre_roofs = [center_vh, left_vh, right_vh, left_edge_vh, right_edge_vh]
    
    #points.append(center)
    #points.append(top)
    #points.append(bot)
    #points.append(top_int)

디버깅을 해보았을 때 

문제점 :

mesh.add_vertex와 mesh.add_face를 이용해 mesh를 생성하는데 구멍뚫린 부분이 나타난다.

디버깅 :

face#.idx() 가 -1이 나오면 face가 제대로 생성되지 않았다는 뜻이다.

 

해결 방안 :

vh 인자들의 순서를 될 때까지 바꿔주면 된다.