This guide demonstrates how to trim curves using RhinoScript.
Imagine you need to trim a lot of lines where they intersect. How is this done? What is a “domain?”
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
To trim a curve using TrimCurve, you must provide an interval, or sub-domain, of the curve that you want to keep. For example, if 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) Call 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
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