Rs Trim Curve
Last changed: dale@mcneel.com-204.177.179.125

.
DeveloperRhinoScript
SummaryDemonstrates how to trim curves using RhinoScript.

Question

I need to trim a lot of lines where ever they intersect. How can i do this? Also, can you clarify what is meant by 'domain'?

Answer

If you can remember back to your pre-calculus days, a domain is most often defined as the set of values for which a function is defined. As curves in Rhino have starting and ending points, they also have starting (minimum) and ending (maximum) domain values (parameters). You can obtain a curve's minimum and maximum domain values using the CurveDomain function.

In order to trim a curve using TrimCurve, you must provide an interval, or sub-domain, of the curve that you want to keep. For example, lets say you have a curve with a minimum domain value of 0 and a maximum domain value of 5 and you wanted everything from t=2 to the end of the curve trimmed away, then you'd do something like this:

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

Remember, the interval argument defines what you want to keep, not what you want to trim.

If two curves intersect, CurveCurveIntersection will return the parameter on the curve where the intersection event took place. Using this parameter, you can begin to build an interval to pass to TrimCurve.

The following example script demonstrates how to interactively trim a curve using what was discussed above.

  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