Site Tools


커브 트림 처리

RhinoScript

Summary: RhinoScript 를 사용하여 커브를 트림 처리하는 법.

질문

서로 교차하는 많은 선을 트림해야 합니다. 어떻게 해야 하나요? 그리고, 'domain' 이 무엇입니까?

답변

예전 수학 시간에 배웠던 내용을 생각해보신다면, domain (정의역) 이란 대부분의 경우, 정의된 함수의 값을 말합니다. Rhino 에서 커브는 시작점과 끝점이 있으며, 또한 시작(최소) 정의역 값과 끝(최대) 정의역 값(매개변수)이 있습니다. CurveDomain 함수를 사용하여 커브의 최소/최대 정의역값을 가져올 수 있습니다.

TrimCurve 를 사용하여 커브를 트림하려면, 유지하고자 하는 커브의 interval (간격) 또는 sub-domain 을 지정해야 합니다. 예를 들어, 최소 정의역 값이 0 이고, 최대 정의역 값이 5 인 커브가 있는 경우, t=2 에서 커브 끝에 이르는 모든 것을 트림하려면, 다음과 같이 지정해야 합니다:

 domain = Rhino.CurveDomain(curve)
 Rhino.TrimCurve curve, Array(domain(0), 2), True

기억하세요. interval argument 는 트림하려는 부분이 아닌, 사용자가 유지하려고 하는 부분을 정의합니다.

두 커브가 교차하면 CurveCurveIntersection 에서 매개변수를 교차가 발생하는 커브상으로 반환합니다. 이 매개변수를 사용하여 TrimCurve 로 전달할 간격의 빌드를 시작할 수 있습니다.

다음의 샘플 스크립트는 위에 언급된 내용을 사용하여 커브를 대화식으로 트림하는 방법을 보여줍니다.

 Sub TestTrimCurve
 
   Const rhCurve = 4
 
   ' Pick the cutting curve
   Dim cutter : cutter = Rhino.GetObject("Select cutting curve", rhCurve)
   If IsNull(cutter) Then Exit Sub
 
   ' Pick the curve to trim    
   Dim curve : curve = Rhino.GetCurveObject("Select curve to trim")
   If IsNull(curve) Then Exit Sub
 
   ' Calculate the intersection of the two curves      
   Dim ccx : ccx = Rhino.CurveCurveIntersection(curve(0), cutter)
   If IsNull(ccx) Then
     Rhino.Print "Curves do not intersect."
     Exit Sub
   End If
 
   Dim trim_t : trim_t = ccx(0, 5)             ' intersection parameter
   Dim pick_t : pick_t = curve(4)              ' pick parameter
   Dim domain : domain = CurveDomain(curve(0)) ' curve domain

   ' TrimCurve's interval argument defines what to keep.
   ' So, figure out what side of the curve to keep.
   Dim interval
   If (trim_t < pick_t) Then
     interval = Array(domain(0), trim_t)
   Else
     interval = Array(trim_t, domain(1))
   End If
 
   ' Trim the curve
   Rhino.TrimCurve curve(0), interval
 
 End Sub
ko/developer/scriptsamples/trimcurve.txt · Last modified: 2015/09/14 (external edit)