Grasshopper에서
import rhinoscriptsyntax as rs
import Rhino
import System # 🔴 꼭 필요!
def check_mesh_collisions(mesh_ids):
collisions = []
meshes = [rs.coercemesh(mid) for mid in mesh_ids]
collided_indices = set()
for i in range(len(meshes)):
for j in range(i + 1, len(meshes)):
result = Rhino.Geometry.Intersect.Intersection.MeshMeshAccurate(
meshes[i], meshes[j], 0.001)
if result:
collisions.append((i, j))
collided_indices.update([i, j])
return collisions, list(collided_indices)
# 결과
collisions, collided_indices = check_mesh_collisions(meshes)
# 출력용: 색상 분리
colored_meshes = []
colors = []
for i, mesh in enumerate(meshes):
colored_meshes.append(mesh)
if i in collided_indices:
# 분홍색
colors.append(System.Drawing.Color.FromArgb(255, 255, 100, 200))
else:
# 기본 회색
colors.append(System.Drawing.Color.FromArgb(255, 180, 180, 180))
a = colored_meshes
b = colors
Rhino에서 생성된 mesh 이용
import rhinoscriptsyntax as rs
import scriptcontext as sc
import Rhino
def check_and_color_collisions(mesh_ids):
collisions = []
meshes = []
id_map = {} # mesh 객체를 원래 ID로 역매핑
# GUID → 실제 Mesh 객체로 변환
for mid in mesh_ids:
mesh = rs.coercemesh(mid)
if mesh:
meshes.append(mesh)
id_map[mesh] = mid
# 충돌 검출
collided_ids = set()
for i in range(len(meshes)):
for j in range(i + 1, len(meshes)):
result = Rhino.Geometry.Intersect.Intersection.MeshMeshAccurate(
meshes[i], meshes[j], 0.001
)
if result:
collisions.append((i, j))
collided_ids.add(id_map[meshes[i]])
collided_ids.add(id_map[meshes[j]])
# 충돌된 메시를 분홍색으로 설정
for cid in collided_ids:
rh_obj = sc.doc.Objects.Find(cid)
if rh_obj:
attributes = rh_obj.Attributes
attributes.ObjectColor = System.Drawing.Color.FromArgb(255, 200, 100, 200) # 분홍색
attributes.ColorSource = Rhino.DocObjects.ObjectColorSource.ColorFromObject
sc.doc.Objects.ModifyAttributes(cid, attributes, True)
sc.doc.Views.Redraw()
return list(collided_ids), collisions
# 결과 출력
import System.Drawing
highlighted_ids, collision_pairs = check_and_color_collisions(meshes)
a = collision_pairs # (index_i, index_j)
b = highlighted_ids # 충돌된 메시의 GUID 리스트
grasshopper 기본 (0) | 2025.04.23 |
---|---|
MeshIntersect (0) | 2025.04.17 |
Brep Join in LunchBox (0) | 2025.04.12 |
How to create a tree trunk and branches (0) | 2025.03.28 |
Rotate Axis (0) | 2025.03.28 |