February 25, 2017

RhinoScript | Layout - Detail views sync



모델링 작업 중 4뷰를 빠르게 종이에 인쇄하여 확인하며 작업하는 경우가 종종 있습니다. 이 때 Layout 명령에서 디테일 4개를 이용하게 되는데, 각 뷰들의 크기가 달라 Top-Front-Right뷰가 서로 다른 크기로 출력되어 이 크기와 위치를 재 설정해야 합니다.

이를 쉽게 설정할 수 있는 방법으로 출력하고자하는 전체 개체 보다 조금 큰 구(Sphere)를 생성하여 Layout을 생성하게 되면 전체 뷰의 가로-세로 크기가 동일하게 설정됩니다. 레이아웃을 생성한 후에 이 구를 삭제하고 출력하면 간단히 4 뷰 포트를 동일한 크기로 설정할 수 있습니다. 물론 1:1 등 크기의 경우도 이렇게 설정한 후 각 디테일의 스케일을 조절하면 중심이 맞은 상태라 동일하게 설정됩니다.



Layout 4 details 명령에서 각 디테일 뷰가 맞지 않은 경우


구를 만들고 레이아웃을 생성한 후 다시 구를 삭제하는 과정을 라이노 스크립트로 쉽게 구현할 수 있습니다. 아래 스크립트는 전체 개체의 바운딩박스의 중심에서 모서리까지를 반지름으로 하는 구를 생성한 후 레이아웃을 생성하고 구를 삭제하는 스크립트입니다. New Layout : 4 Detail  버튼에 아래 스크립트를 대신 사용하면 아래 그림처럼 가로-세로가 맞는 4개의 디테일뷰를 쉽게 생성할 수 있습니다. 이 후 디테일의 디스플레이 모드를 변경하여 출력하면 간단히 Top-Front-Right뷰가 맞춰 인쇄할 수 있습니다.



Call Main()
Sub Main()
    Rhino.EnableRedraw False
    allObjects = Rhino.NormalObjects()
  
    Dim Objs()
    j = 0
    For Each A In allObjects
        i = Rhino.ObjectType(A)
        Select Case i
            Case 1,2,4,8,16,32,512,4096,8192,65536,1073741824
                ReDim Preserve Objs(j)
                Objs(j) = A
                j = j + 1
        End Select
    Next
  
    If j = 0 Then Exit Sub
  
    BB = Rhino.BoundingBox(Objs)
  
    C = middlePoint(BB(0), BB(6))
    R = Rhino.Distance(C, BB(0))  

    strSphere = Rhino.AddSphere(C, R)

    Rhino.Command "! _-Layout _Enter _Enter _Enter 4", False
  
    Rhino.DeleteObject strSphere
    Rhino.EnableRedraw True

End Sub

Function MiddlePoint (A, B)
    MiddlePoint = array((A(0) + B(0)) / 2, (A(1) + B(1)) / 2, (A(2) + B(2)) / 2)
End Function


스크립트를 실행한 디테일 뷰가 맞춰진 Layout

각 디테일 뷰의 디스플레이 모드를 변경한 모습


No comments: