protected override void CreateDirectionalSurfaceSampling( Func <Point3D, Point3D, double> estimateScreenDistanceWithoutClip, Func <int, int, Tuple <int, int> > mapping, int subdivisions, List <Vertex> vertices, List <IndexedLine> lines ) { if (vertices.Count > 0) { return; } var builder = new WireframeBuilder(); var surfaceSampler = new SurfaceConstantParameterLinesBuilder( builder ); var bezierPatch = new BernsteinPatch(); for (var i = 0; i < 16; ++i) { bezierPatch.ControlPoints[i / 4, i % 4] = ControlPoints[i].Position; } surfaceSampler.Build(bezierPatch); vertices.AddRange(builder.Vertices.ToList()); lines.AddRange(builder.Lines.ToList()); }
public BernsteinPatch GetBernsteinPatch() { if (_segmentsU > 1 || _segmentsV > 1) { throw new ArgumentException( "There exists more than one bernstein patch here" ); } var bezierPatch = new BernsteinPatch(); for (var i = 0; i < 16; ++i) { bezierPatch.ControlPoints[i / 4, i % 4] = _virtualPoints[i].Position; } return(bezierPatch); }
private BernsteinPatch GetPatchByLocation(int uPatchNum, int vPatchNum) { var patchControlPoints = BezierPatchGroup.GetList2DSubRectCyclic( ControlPoints, 3 * SegmentsU + 1, 3 * uPatchNum, 3 * vPatchNum, 4, 4 ); var bezierPatch = new BernsteinPatch(); for (var i = 0; i < 16; ++i) { bezierPatch.ControlPoints[i / 4, i % 4] = patchControlPoints[i]; } return(bezierPatch); }