기본 콘텐츠로 건너뛰기

라벨이 CableTray인 게시물 표시

[Cable Auto Routing] 맵 생성하기

 Cable AutoRouting을 하기 위해서는 Cable이 지나는 모든 CableTray에 대한 맵을 구성해야 합니다. 맵을 구성하기 위해 먼저 각 CableTray에 대해서 Node와 Edge를 구성합니다. 프로젝트 수행을 위해 고객사에서 보여준 제안서의 CableTray는 끊어진 Feature 없이 매끄럽게 연결되어 있었습니다. 하지만 막상 실제 프로젝트 수행이 끝난 3D Model을 받아 보니 군데군데 이빠지듯 Feature가 빠진 CableTray도 다수 있고 CableTray의 Feature 순서도 뒤죽박죽이었습니다. 우리가 생각한것보다 모델링의 품질이 좋지 않았습니다. CableTray1과 CableTray2가 하나의 CableTray로 구성될거라 생각했었는데 다른 CableTray로 만들어져 있습니다. [CableTray의 Feature가 서로 떨어져 있는 경우] CableTray는 여러 Feature들로 구성되어 있습니다. 그리고 Feature는 Part를 가지고 있습니다. Feature의 타입에는 Straight, Branch, End, Turn, AlongLegFeature등이 있습니다. Part가 있는 Feature만 노드를 생성합니다. End, Branch Feature등 물리적 형상의 나타내는 Part를 가지고 있지 않는 Feature에 대해서는 노드를 생성하지 않습니다. 노드를 생성한 Feature의 OrientedRangeBox의 Intersects 함수를 이용하여 Feature와 Feature간의 에지를 생성합니다. class CableTray: def __init__ ( ) : self ._nodes = [ ]   def build_network ( ) : for feature in self ._features: if feature. has_part : self ._nodes. append ( new Node ( feature ) )   for i...

[S3D] CableWay, CableTray의 OrientedRangeBox 구하기

 S3D의 객체에는 RangeBox라는 객체의 크기를 가지는 속성이 있습니다. RangeBox는 글로벌 좌표계에서 Min, Max 좌표를 가지고 있습니다. 객체가 $X$축,$Y$축 또는 $Z$축에 놓여있을 때는 RangeBox와 실제 크기가 일치하겠지만, 그 외의 경우에는 RangeBox의 크기가 실제 크기보다 큽니다. 따라서 모든 경우에 객체 크기에 정확히 일치하는 크기를 구할때 RangeBox는 부적합합니다. 심지어 $X$축,$Y$축 또는 $Z$축에 놓여있을 때에도 RangeBox가 실제 크기보다 조금 더 큽니다. 모든 경우에 객체의 실제 크기와 같은 RangeBox를 구하기 위해서는 OrientedRangeBox를 구해야 합니다. 왜 S3D에서 객체의 속성으로 OrientedRangeBox를 제공하지 않는지 모르겠습니다. OrientedRangeBox는 아래와 같은 구조를 가지고 있습니다. Cable Way/Cable Tray 객체는 Start, End, 코너의 8개점, Length, Width, Depth 정보를 가지있습니다. 8개의 코너 점은 실제 형상보다 큰 지점을 가리키고 있고 Start, End는 실제 형상의 단면의 중점입니다. 코너의 8개의 점들은 객체를 이루는 두 단면의 4개씩의 점들로 이루어진다고 생각합니다. 제가 디자인했다면 이렇게 했을겁니다. 아무도 뒤죽박죽 점들의 순서를 정하지 않았을겁니다. 그렇지 않다면 제 손에 장을 지지겠습니다. 이제 이 8개의 점들로 객체의 Width, Depth 벡터를 구하면 OrientedRangeBox의 3 벡터를 결정할 수 있습니다.  $\overrightarrow{P_1-P_0}$과 $\overrightarrow{P_3-P_0}$ 중에서 객체의 $\overrightarrow{Width},\overrightarrow{Depth}$를 선택해야 합니다. 객체의 Width ,Depth 크기를 알고 있으니 $\overrightarrow{P_1-P_0}$와 $\overrightarrow{P_3-P_...