Exemple #1
0
// Generate a surface by translating a profile curve along a rail curve
//
// **params**
// + profile NurbsCurveData
// + rail NurbsCurveData
//
// **returns**
// + NurbsSurfaceData object
func SweptSurface(profile, rail *verb.NurbsCurve) *verb.NurbsSurface {
	railKnots := rail.Knots()

	startu := railKnots[0]
	endu := railKnots[len(railKnots)-1]
	pt0 := rail.Point(startu)

	numSamples := 2 * len(rail.ControlPoints())
	span := (endu - startu) / (float64(numSamples) - 1)

	crvs := make([]*verb.NurbsCurve, numSamples)

	for i := range crvs {
		pt := rail.Point(startu + float64(i)*span)
		pt.Sub(&pt0)

		mat := mat4.Ident
		mat.SetTranslation(&pt)
		crvs[i] = profile.Transform(&mat)
	}

	return loftedSurface(crvs, nil)
}