Piping Auto Routing을 개발하다 보면 파이프가 장치 혹은 구조물을 뚫고 지나가는 현상이 발생하게 됩니다.
Routing을 돌리고 나서 무수히 많은 모델에서 이러한 간섭을 일일이 찾는 것은 힘들고도 시간 낭비입니다.
그래서 간섭이 일어난 부분을 찾는 Clash Check 기능이 필요합니다.
Clash Check 기능은 모델의 OrientedBoundingBox를 구해 OrientedBoundingBox끼리 충돌 검사를 하여 결과를 리포트합니다.
리포트를 더블 클릭하면 충돌이 발생한 두 OrientedBoundingBox를 줌하여 화면에 표시합니다.
어떻게 말해야 할지 모르겠지만 일반적인 경우(두 OrientedBoundingBox의 크기가 비슷할 경우)는 충돌이 발생한 지점을 찾기가 쉽지만,
한 쪽이 다른 쪽에 비해 월등히 크다면 충돌이 일어나 지점을 정확히 찾기가 어렵게 됩니다.
좀 더 정확한 충돌 지점을 찾기 위해서는 충돌이 일어난 OrientedBoundingBox를 세분화하여 작은 OrientedBoundingBox들을 생성합니다.
Small OrientedBoundingBox의 좌표는 아래 식으로 계산할 수 있습니다. $$(x,y,z) = \overrightarrow{X}*i + \overrightarrow{Y}*j + \overrightarrow{Z}*k,\ (i,j,k는 각각 \overrightarrow{X},\overrightarrow{Y},\overrightarrow{Z}상의 값)$$ 그리고 생성한 OrientedBoundingBox들 끼리 충돌 검사를 하여 충돌이 일어난 정확한 지점을 찾습니다.
Routing을 돌리고 나서 무수히 많은 모델에서 이러한 간섭을 일일이 찾는 것은 힘들고도 시간 낭비입니다.
그래서 간섭이 일어난 부분을 찾는 Clash Check 기능이 필요합니다.
Clash Check 기능은 모델의 OrientedBoundingBox를 구해 OrientedBoundingBox끼리 충돌 검사를 하여 결과를 리포트합니다.
리포트를 더블 클릭하면 충돌이 발생한 두 OrientedBoundingBox를 줌하여 화면에 표시합니다.
어떻게 말해야 할지 모르겠지만 일반적인 경우(두 OrientedBoundingBox의 크기가 비슷할 경우)는 충돌이 발생한 지점을 찾기가 쉽지만,
한 쪽이 다른 쪽에 비해 월등히 크다면 충돌이 일어나 지점을 정확히 찾기가 어렵게 됩니다.
좀 더 정확한 충돌 지점을 찾기 위해서는 충돌이 일어난 OrientedBoundingBox를 세분화하여 작은 OrientedBoundingBox들을 생성합니다.
[하나의 OrientedBoundingBox를 여러 개의 작은 OrientedBoundingBox로 나눔] |
Small OrientedBoundingBox의 좌표는 아래 식으로 계산할 수 있습니다. $$(x,y,z) = \overrightarrow{X}*i + \overrightarrow{Y}*j + \overrightarrow{Z}*k,\ (i,j,k는 각각 \overrightarrow{X},\overrightarrow{Y},\overrightarrow{Z}상의 값)$$ 그리고 생성한 OrientedBoundingBox들 끼리 충돌 검사를 하여 충돌이 일어난 정확한 지점을 찾습니다.
댓글
댓글 쓰기