public void LoadBezierToGallery() { //string currDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); //string currDirectory = Directory.GetCurrentDirectory(); string currDirectory = System.AppDomain.CurrentDomain.BaseDirectory; #if FINAL //string fullPath = Path.Combine(currDirectory, "\\galleries\\bezier_surfaces\\"); string fullPath = currDirectory + "\\galleries\\bezier_surfaces\\"; #else string fullPath = Path.Combine(currDirectory, "..\\..\\galleries\\bezier_surfaces\\"); #endif string[] paths = Directory.GetFiles(fullPath); // TODO poprawić ścieżkę w finalnej wersji foreach (string path in paths) { string file = Path.GetFileNameWithoutExtension(path); BezierSurface bezier = BezierSurface.ReadFromFile(path); if (bezier != null) { //bezier.Name = file; #if FINAL bezier.ImageUri = currDirectory + "\\galleries\\bezier_surfaces\\" + bezier.Name + ".png"; #else bezier.ImageUri = AppDomain.CurrentDomain.BaseDirectory + "..\\..\\galleries\\bezier_surfaces\\" + bezier.Name + ".png"; #endif Add(bezier); // TODO poprawić ścieżkę w finalnej wersji } } }
public override void OnInspectorGUI() { BezierSurface bs = target as BezierSurface; base.OnInspectorGUI(); bool test = false; EditorGUI.BeginChangeCheck(); if (GUILayout.Button("Create Surface")) { bs.AddBezierSurface(bs.startPosition); test = true; } if (GUILayout.Button("Reset")) { bs.Reset(); } if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(bs, "add bezier surface"); } }
public DrawForm() { InitializeComponent(); inputFileCmb.SelectedItem = inputFileCmb.Items[1]; SetPoints(); coordinates = new Coordinates3D(Canvas.Size.Width, Canvas.Size.Height); surface = new BezierSurface(); startSurfaceGrid = new List <List <Point3> >(); surface.SetPoints(points); SavePoints(pointsFilename); startSurfaceGrid.Clear(); }
public BezierSurface Redo(BezierSurface bezier) { if (firstRedo != null) { Element second = first; first = new Element(); first.next = second; first.bezier = new BezierSurface(bezier); bezier = firstRedo.bezier; firstRedo = firstRedo.next; } return(bezier); }
private void DrawGrid(Rectangle rect, Graphics g) { if (startSurfaceGrid.Count == 0) { surface = new BezierSurface(); surface.SetPoints(startPoints); startSurfaceGrid = surface.GetSurfaceGridPoints(tolerance, rows, columns); surfaceGridPoints = null; startSurfaceCells.Clear(); surfaceCells = null; } var drawGridPoints = Point3Utils.GetObjectProjection(surfaceGridPoints ?? startSurfaceGrid, rect.Width, rect.Height); g.DrawGrid(Pens.Black, drawGridPoints); }
/// <summary> /// Działa tylko dla widoków ortogonalnych. /// </summary> /// <param name="bezierSurface"></param> /// <param name="bezierCam"></param> /// <param name="viewportType"></param> /// <param name="pos"></param> /// <param name="size"></param> /// <param name="orthoSize"></param> /// <param name="orthoPos"></param> /// <param name="orthoLookAt"></param> public static void SelectBezierControlPoint(BezierSurface bezierSurface, Camera bezierCam, ViewportType viewportType, Point pos, Point size, Vector2 orthoSize, Vector3 orthoPos, Vector3 orthoLookAt) { Vector3 outCamPos = new Vector3(), outSurfPos = new Vector3(); switch (viewportType) { case ViewportType.Perspective: CalcPerspCoords(pos, size, bezierCam.fovAngle, bezierCam.rotateAngle, bezierCam.position, bezierCam.lookAt, out outCamPos, out outSurfPos); break; case ViewportType.Orto: CalcOrthoCoords(pos, size, orthoSize, orthoPos, orthoLookAt, out outCamPos, out outSurfPos); break; } Vector3 rayDir = Vector3.Normalize(outSurfPos - outCamPos); SlimDX.Ray ray = new SlimDX.Ray(outCamPos + 0.01f * rayDir, rayDir); float dist = float.PositiveInfinity; float tmpDist = -1; BoundingBox bb; for (int i = 0; i < bezierSurface.ControlPoints.Length; i++) { bb = new BoundingBox(new Vector3(bezierSurface.ControlPoints[i].x - 0.05f, bezierSurface.ControlPoints[i].y - 0.05f, bezierSurface.ControlPoints[i].z - 0.05f), new Vector3(bezierSurface.ControlPoints[i].x + 0.05f, bezierSurface.ControlPoints[i].y + 0.05f, bezierSurface.ControlPoints[i].z + 0.05f)); if (SlimDX.Ray.Intersects(ray, bb, out tmpDist)) { if (tmpDist < dist) { dist = tmpDist; bezierSurface.selectedPointIdx = i; } } } if (dist == float.PositiveInfinity) { bezierSurface.selectedPointIdx = -1; } }
public void SaveBezierToGallery(BezierSurface bezier, Image bezierImage) { string currDirectory = System.AppDomain.CurrentDomain.BaseDirectory; #if FINAL bezier.SaveBezierFile(currDirectory + "/galleries/bezier_surfaces/" + bezier.Name + ".bzr"); bezier.ImageUri = currDirectory + "\\galleries\\bezier_surfaces\\" + bezier.Name + ".png"; #else bezier.SaveBezierFile("../../galleries/bezier_surfaces/" + bezier.Name + ".bzr"); bezier.ImageUri = AppDomain.CurrentDomain.BaseDirectory + "..\\..\\galleries\\bezier_surfaces\\" + bezier.Name + ".png"; #endif bezierImage.Save(bezier.ImageUri, ImageFormat.Png); bezierImage.Dispose(); }
private void Canvas_Paint(object sender, PaintEventArgs e) { var rect = new Rectangle(Canvas.Location.X, Canvas.Location.Y, Canvas.Size.Width, Canvas.Size.Height); DrawXYZAxes(e.Graphics, rect); var basePointsArray = points.Select(row => row.Select(point => point.GetDrawingPoint(rect.Width, rect.Height)).ToArray()).ToArray(); e.Graphics.DrawPoints(Brushes.Black, basePointsArray, pointRadius); if (startSurfaceGrid.Count == 0) { surface = new BezierSurface(); surface.SetPoints(startPoints); startSurfaceGrid = surface.GetSurfaceGridPoints(tolerance, rows, columns); surfaceGridPoints = null; } var drawPoints = Point3Utils.GetObjectProjection(surfaceGridPoints ?? startSurfaceGrid, rect.Width, rect.Height); e.Graphics.DrawGrid(Pens.Red, drawPoints); }
private void DrawCells(Rectangle rect, Graphics g) { var innerBrush = Brushes.Cyan; var outerBrush = Brushes.DarkOrchid; if (startSurfaceCells.Count == 0) { surface = new BezierSurface(); surface.SetPoints(startPoints); startSurfaceCells = surface.GetSurfaceCells(tolerance, rows, columns); surfaceCells = null; } var check = startSurfaceCells; var ordered = (surfaceCells ?? startSurfaceCells).OrderByDescending(cell => cell.FurthestDistance); foreach (SurfaceCell cell in ordered) { var drawPoints = Point3Utils.GetCurveProjection(cell.ToList(), rect.Width, rect.Height).ToArray(); g.FillPolygon(cell.IsFront ? outerBrush : innerBrush, drawPoints); } }
public void Save(BezierSurface bezier) { Element second = first; first = new Element(); first.next = second; first.bezier = new BezierSurface(bezier); firstRedo = null; int m = 0; for (Element el = first; el != null; el = el.next) { //m += el.scene.EstimatedMemory(); m += el.bezier.EstimatedMemory(); if (m > MAX_MEMORY) { el.next = null; } } }
public void OnSceneGUI() { BezierSurface bs = target as BezierSurface; if (bs.controlVertices == null) { return; } if (!bs.drawHandles) { return; } Vector3[] vertices = bs.controlVertices; int uResolution = 4; int vResolution = 4; EditorGUI.BeginChangeCheck(); for (int i = 0; i < bs.controlVertices.Length; ++i) { vertices[i] = Handles.PositionHandle(bs.controlVertices[i], Quaternion.identity); } uResolution = bs.uResolution; vResolution = bs.vResolution; if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(bs, undoMsg); bs.controlVertices = vertices; bs.uResolution = uResolution; bs.vResolution = vResolution; bs.RecalculateVertices(); } }
public void GetVCount() { double[][][] ptGrid = null; double r, a; BezierSurface surface = null; ptGrid = new double[][][] { new double[][] { new double[] { 0.0, 0.0, 0.0 }, new double[] { 0.0, 1.0, 2.0 }, new double[] { 0.0, 2.0, 1.0 }, new double[] { 0.0, 3.0, 0.0 }, }, new double[][] { new double[] { 1.0, 0.0, 2.0 }, new double[] { 1.0, 1.0, 0.0 }, new double[] { 1.0, 2.0, 2.0 }, new double[] { 1.0, 3.0, 1.0 }, }, new double[][] { new double[] { 2.0, 0.0, 1.0 }, new double[] { 2.0, 1.0, 0.0 }, new double[] { 2.0, 2.0, 2.0 }, new double[] { 2.0, 3.0, 0.0 }, }, }; surface = new BezierSurface(ptGrid); r = surface.GetVCount(); a = 4; Assert.IsTrue(r == a); }
/// <summary> /// Test scene for BezierSurface. /// </summary> public static void Bezier( IRayScene sc ) { Debug.Assert( sc != null ); // CSG scene: CSGInnerNode root = new CSGInnerNode( SetOperation.Union ); root.SetAttribute( PropertyName.REFLECTANCE_MODEL, new PhongModel() ); root.SetAttribute( PropertyName.MATERIAL, new PhongMaterial( new double[] { 1.0, 0.8, 0.1 }, 0.1, 0.5, 0.5, 64 ) ); sc.Intersectable = root; // Background color: sc.BackgroundColor = new double[] { 0.0, 0.05, 0.07 }; // Camera: sc.Camera = new StaticCamera( new Vector3d( 0.7, 0.5, -5.0 ), new Vector3d( 0.0, -0.18, 1.0 ), 50.0 ); // Light sources: sc.Sources = new LinkedList<ILightSource>(); sc.Sources.Add( new AmbientLightSource( 0.8 ) ); sc.Sources.Add( new PointLightSource( new Vector3d( -5.0, 3.0, -3.0 ), 1.0 ) ); // --- NODE DEFINITIONS ---------------------------------------------------- // Bezier patch (not yet): BezierSurface b = new BezierSurface( 1, 2, new double[] { 0.0, 0.0, 3.0, // row 0 1.0, 0.0, 3.0, 2.0, 0.0, 3.0, 3.0, 0.0, 3.0, 4.0, 0.0, 3.0, 5.0, 0.0, 3.0, 6.0, 0.0, 3.0, 0.0, 0.0, 2.0, // row 1 1.0, 0.0, 2.0, 2.0, 3.0, 2.0, 3.0, 3.0, 2.0, 4.0, 3.0, 2.0, 5.0, 0.0, 2.0, 6.0, 0.0, 2.0, 0.0, 0.0, 1.0, // row 2 1.0, 0.0, 1.0, 2.0, 0.0, 1.0, 3.0, 1.5, 1.0, 4.0, 3.0, 1.0, 5.0, 0.0, 1.0, 6.0, 0.0, 1.0, 0.0, 0.0, 0.0, // row 3 1.0, 0.0, 0.0, 2.0, 0.0, 0.0, 3.0, 0.0, 0.0, 4.0, 0.0, 0.0, 5.0, 0.0, 0.0, 6.0, 0.0, 0.0, } ); b.SetAttribute( PropertyName.TEXTURE, new CheckerTexture( 10.5, 12.0, new double[] { 0.0, 0.0, 0.1 } ) ); root.InsertChild( b, Matrix4d.RotateY( -0.4 ) * Matrix4d.CreateTranslation( -1.1, -0.9, 0.0 ) ); // Cylinders for reflections.. Cylinder c = new Cylinder(); c.SetAttribute( PropertyName.MATERIAL, new PhongMaterial( new double[] { 0.0, 0.6, 0.0 }, 0.2, 0.6, 0.3, 8 ) ); root.InsertChild( c, Matrix4d.Scale( 0.15 ) * Matrix4d.RotateX( MathHelper.PiOver2 ) * Matrix4d.CreateTranslation( -0.4, 0.0, 0.0 ) ); c = new Cylinder(); c.SetAttribute( PropertyName.MATERIAL, new PhongMaterial( new double[] { 0.8, 0.2, 0.0 }, 0.2, 0.6, 0.3, 8 ) ); root.InsertChild( c, Matrix4d.Scale( 0.2 ) * Matrix4d.RotateX( MathHelper.PiOver2 ) * Matrix4d.CreateTranslation( -1.9, 0.0, 3.0 ) ); // Infinite plane with checker: Plane pl = new Plane(); pl.SetAttribute( PropertyName.COLOR, new double[] { 0.3, 0.0, 0.0 } ); pl.SetAttribute( PropertyName.TEXTURE, new CheckerTexture( 0.6, 0.6, new double[] { 1.0, 1.0, 1.0 } ) ); root.InsertChild( pl, Matrix4d.RotateX( -MathHelper.PiOver2 ) * Matrix4d.CreateTranslation( 0.0, -1.0, 0.0 ) ); }
public void ParameterAt() { double[][][] ptGrid = null; double[] r, a; double u, v, e; BezierSurface surface = null; ptGrid = new double[][][] { new double[][] { new double[] { 0.0, 0.0, 0.0 }, new double[] { 0.0, 1.0, 2.0 }, new double[] { 0.0, 2.0, 1.0 }, new double[] { 0.0, 3.0, 0.0 }, }, new double[][] { new double[] { 1.0, 0.0, 2.0 }, new double[] { 1.0, 1.0, 0.0 }, new double[] { 1.0, 2.0, 2.0 }, new double[] { 1.0, 3.0, 1.0 }, }, new double[][] { new double[] { 2.0, 0.0, 1.0 }, new double[] { 2.0, 1.0, 0.0 }, new double[] { 2.0, 2.0, 2.0 }, new double[] { 2.0, 3.0, 0.0 }, }, }; u = 0.3; v = 0.4; e = 0.0001; surface = new BezierSurface(ptGrid); r = surface.ParameterAt(u, v); a = new double[] { 0.6, 1.2, 1.086 }; Assert.IsTrue(r.SequenceEqual(a, e)); ptGrid = new double[][][] { new double[][] { new double[] { 0.0, 0.0, 0.0 }, new double[] { 0.0, 1.0, 2.0 }, new double[] { 0.0, 2.0, 1.0 }, new double[] { 0.0, 3.0, 0.0 }, }, new double[][] { new double[] { 1.0, 0.0, 2.0 }, new double[] { 1.0, 1.0, 0.0 }, new double[] { 1.0, 2.0, 2.0 }, new double[] { 1.0, 3.0, 1.0 }, }, new double[][] { new double[] { 2.0, 0.0, 1.0 }, new double[] { 2.0, 1.0, 0.0 }, new double[] { 2.0, 2.0, 2.0 }, new double[] { 2.0, 3.0, 0.0 }, }, }; u = 0.8; v = 0.9; e = 0.0001; surface = new BezierSurface(ptGrid); r = surface.ParameterAt(u, v); a = new double[] { 1.6, 2.7, 0.713 }; Assert.IsTrue(r.SequenceEqual(a, e)); ptGrid = new double[][][] { new double[][] { new double[] { 0.0, 0.0, 0.0 }, new double[] { 0.0, 1.0, 2.0 }, new double[] { 0.0, 2.0, 1.0 }, new double[] { 0.0, 3.0, 0.0 }, }, new double[][] { new double[] { 1.0, 0.0, 2.0 }, new double[] { 1.0, 1.0, 0.0 }, new double[] { 1.0, 2.0, 2.0 }, new double[] { 1.0, 3.0, 1.0 }, }, new double[][] { new double[] { 2.0, 0.0, 1.0 }, new double[] { 2.0, 1.0, 0.0 }, new double[] { 2.0, 2.0, 2.0 }, new double[] { 2.0, 3.0, 0.0 }, }, }; u = 0.1; v = 0.2; e = 0.0001; surface = new BezierSurface(ptGrid); r = surface.ParameterAt(u, v); a = new double[] { 0.2, 0.6, 0.9272 }; Assert.IsTrue(r.SequenceEqual(a, e)); }
// Use this for initialization void Start() { mySurface = BezierSurface.CreateSurface(); }
public static void Test_Factorial() { Console.WriteLine(BezierSurface.Factorial(3)); }
public override void OnPaint() { switch (ActiveSurface) { case SurfaceKind.ArrayExtruder: xyArray A = new xyArray(); A.data = new xy[] { new xy(0, 0), new xy(0, 4), new xy(4, 4), new xy(4, 0), new xy(0, 0) }; ArrayExtruder AE = new ArrayExtruder(); AE.Array = A; AE.Height = 5; AE.Paint(this); break; case SurfaceKind.BezierSurface: Lights[0].Position = DefaultLightPos; BezierSurface Bezs = new BezierSurface(); Bezs.ControlPoints = new xyz[, ] { { new xyz(0, 0, 0), new xyz(2, 0, 0), new xyz(4, 0, 0), new xyz(6, 0, 0) }, { new xyz(0, 3, 1), new xyz(2, 3, 3), new xyz(4, 3, 0), new xyz(6, 3, 0) }, { new xyz(0, 6, 1), new xyz(2, 6, 3), new xyz(4, 6, 0), new xyz(6, 6, 0) }, { new xyz(0, 9, 0), new xyz(2, 9, 0), new xyz(4, 9, 0), new xyz(6, 9, 0) }, }; Bezs.Paint(this); break; case SurfaceKind.BsplineSurface: BSplineSurface BS = new BSplineSurface(); Lights[0].Position = DefaultLightPos; BS.ControlPoints = new xyz[, ] { { new xyz(0, 0, 0), new xyz(0, 3, 0), new xyz(0, 6, 0), new xyz(0, 9, 0), }, { new xyz(2, 0, 1), new xyz(2, 3, 3), new xyz(2, 6, 3), new xyz(2, 9, 0), }, { new xyz(4, 0, 1), new xyz(4, 3, 3), new xyz(4, 6, 3), new xyz(4, 9, 0), }, { new xyz(6, 0, 0), new xyz(6, 3, 0), new xyz(6, 6, 0), new xyz(6, 9, 0) }, }; BS.UDegree = 3; BS.VDegree = 2; BS.SetDefaultKnots(); BS.Paint(this); break; case SurfaceKind.Cone: Lights[0].Position = new xyzwf(5, 0, (float)2.5, 1); Cone Cone = new Cone(new xyz(0, 0, 0), 5, 2, System.Math.PI / 4); Cone.Paint(this); break; case SurfaceKind.Curve2DRotator: Lights[0].Position = DefaultLightPos; Curve2dRotator C2d = new Curve2dRotator(); C2d.Curve = new Bezier(new xy(1, 0), new xy(2, 3), new xy(4, 3), new xy(6, 0));; C2d.FromAngle = 0; C2d.ToAngle = Math.PI / 2; C2d.Paint(this); break; case SurfaceKind.Curve3dRotator: Curve3dRotator C3d = new Curve3dRotator(); C3d.Curve = new Bezier3D(new xyz(1, 2, 0), new xyz(2, 1, 3), new xyz(4, 2, 3), new xyz(5, 2, 0)); C3d.Paint(this); break; case SurfaceKind.CurveExtruder: Lights[0].Position = new xyzwf(3, 6, 3, 1); CurveExtruder CE = new CurveExtruder(); CE.Curve = new Bezier(new xy(1, 0), new xy(2, 3), new xy(4, 3), new xy(6, 0)); CE.UpPlane = new Plane(new xyz(0, 0, 4), new xyz(0, 0.3, 1)); CE.DownPlane = new Plane(new xyz(0, 0, 0), new xyz(0, -0.3, 1)); CE.Height = -5; CE.Paint(this); break; case SurfaceKind.CustomSurface: Lights[0].Position = new xyzwf(8, 1, 2, 1); CustomSurface.Paint(this); break; case SurfaceKind.Cylinder: Lights[0].Position = new xyzwf(8, 1, 2, 1); Cylinder Cylinder = new Cylinder(3, 5); drawSurface(Cylinder); break; case SurfaceKind.NurbsSurface: NurbsSurface NS = new NurbsSurface(); Lights[0].Position = DefaultLightPos; NS.ControlPoints = new xyz[, ] { { new xyz(0, 0, 0), new xyz(0, 3, 0), new xyz(0, 6, 0), new xyz(0, 9, 0), }, { new xyz(2, 0, 1), new xyz(2, 3, 3), new xyz(2, 6, 3), new xyz(2, 9, 0), }, { new xyz(4, 0, 1), new xyz(4, 3, 3), new xyz(4, 6, 3), new xyz(4, 9, 0), }, { new xyz(6, 0, 0), new xyz(6, 3, 0), new xyz(6, 6, 0), new xyz(6, 9, 0) }, }; NS.UDegree = 3; NS.VDegree = 2; NS.Weights = new double[, ] { { 1, 1, 1, 1 }, { 1, 3, 3, 1 }, { 1, 3, 3, 1 }, { 1, 1, 1, 1 } }; NS.SetDefaultKnots(); NS.Paint(this); break; case SurfaceKind.OffsetSurface: Lights[0].Position = DefaultLightPos; BSplineSurface _BS = new BSplineSurface(); _BS.ControlPoints = new xyz[, ] { { new xyz(0, 0, 0), new xyz(0, 3, 0), new xyz(0, 6, 0), new xyz(0, 9, 0), }, { new xyz(2, 0, 1), new xyz(2, 3, 3), new xyz(2, 6, 3), new xyz(2, 9, 0), }, { new xyz(4, 0, 1), new xyz(4, 3, 3), new xyz(4, 6, 3), new xyz(4, 9, 0), }, { new xyz(6, 0, 0), new xyz(6, 3, 0), new xyz(6, 6, 0), new xyz(6, 9, 0) }, }; _BS.UDegree = 3; _BS.VDegree = 2; _BS.SetDefaultKnots(); OffsetSurface OS = new OffsetSurface(); OS.BasisSurface = _BS; OS.Distance = 0.5; OS.Paint(this); break; case SurfaceKind.PlaneSurface: Lights[0].Position = new xyzwf(2, 2, 4, 1); PlaneSurface PS = new PlaneSurface(new xyz(0, 0, 0), new xyz(4, 2, 2), new xyz(1, 5, 7)); PS.Width = 4; PS.Length = 5; PS.Paint(this); break; case SurfaceKind.SmoothPlane: Lights[0].Position = new xyzwf(2, 2, 4, 1); SmoothPlane SP = new SmoothPlane(new xyz(0, 0, 0), new xyz(0, 5, 0), new xyz(5, 5, 0), new xyz(5, 0, 0), new xyz(-1, -1, 1), new xyz(-1, 1, 1), new xyz(1, 1, 1), new xyz(1, 1, 1)); SP.Width = 5; SP.Length = 6; SP.Paint(this); break; case SurfaceKind.Sphere: Lights[0].Position = DefaultLightPos; Sphere Sphere = new Sphere(new xyz(2, 1, 1), 4); drawSurface(Sphere); break; case SurfaceKind.Torus: Lights[0].Position = DefaultLightPos; Torus Torus = new Torus(1, 4); drawSurface(Torus); break; default: break; } base.OnPaint(); }
public void GeneratePointGrid() { double[][][] pts, r, a = null; ParametricSurface srf; int uCount, vCount; double e; e = 0.0001; pts = new double[][][] { new double[][] { new double[] { 0.0, 0.0, 1.0 }, new double[] { 0.0, 1.0, 2.0 }, new double[] { 0.0, 2.0, 0.0 }, new double[] { 0.0, 3.0, 1.0 }, new double[] { 0.0, 4.0, 1.0 }, }, new double[][] { new double[] { 1.0, 0.0, 2.0 }, new double[] { 1.0, 1.0, 2.0 }, new double[] { 1.0, 2.0, 1.0 }, new double[] { 1.0, 3.0, 1.0 }, new double[] { 1.0, 4.0, 1.0 }, }, new double[][] { new double[] { 2.0, 0.0, 2.0 }, new double[] { 2.0, 1.0, 1.0 }, new double[] { 2.0, 2.0, 1.0 }, new double[] { 2.0, 3.0, 1.0 }, new double[] { 2.0, 4.0, 2.0 }, }, }; srf = new BezierSurface(pts); uCount = 10; vCount = 4; r = SurfaceDivider.GeneratePointGrid(srf, uCount, vCount); a = new double[][][] { new double[][] { new double[] { 0.0, 0.0, 1.0 }, new double[] { 0.0, 1.0, 1.210938 }, new double[] { 0.0, 2.0, 0.875 }, new double[] { 0.0, 3.0, 0.835938 }, new double[] { 0.0, 4.0, 1.0 }, }, new double[][] { new double[] { 0.2, 0.0, 1.19 }, new double[] { 0.2, 1.0, 1.306953 }, new double[] { 0.2, 2.0, 0.95625 }, new double[] { 0.2, 3.0, 0.879453 }, new double[] { 0.2, 4.0, 1.01 }, }, new double[][] { new double[] { 0.4, 0.0, 1.36 }, new double[] { 0.4, 1.0, 1.384063 }, new double[] { 0.4, 2.0, 1.025 }, new double[] { 0.4, 3.0, 0.924063 }, new double[] { 0.4, 4.0, 1.04 }, }, new double[][] { new double[] { 0.6, 0.0, 1.51 }, new double[] { 0.6, 1.0, 1.442266 }, new double[] { 0.6, 2.0, 1.08125 }, new double[] { 0.6, 3.0, 0.969766 }, new double[] { 0.6, 4.0, 1.09 }, }, new double[][] { new double[] { 0.8, 0.0, 1.64 }, new double[] { 0.8, 1.0, 1.481563 }, new double[] { 0.8, 2.0, 1.125 }, new double[] { 0.8, 3.0, 1.016562 }, new double[] { 0.8, 4.0, 1.16 }, }, new double[][] { new double[] { 1.0, 0.0, 1.75 }, new double[] { 1.0, 1.0, 1.501953 }, new double[] { 1.0, 2.0, 1.15625 }, new double[] { 1.0, 3.0, 1.064453 }, new double[] { 1.0, 4.0, 1.25 }, }, new double[][] { new double[] { 1.2, 0.0, 1.84 }, new double[] { 1.2, 1.0, 1.503438 }, new double[] { 1.2, 2.0, 1.175 }, new double[] { 1.2, 3.0, 1.113437 }, new double[] { 1.2, 4.0, 1.36 }, }, new double[][] { new double[] { 1.4, 0.0, 1.91 }, new double[] { 1.4, 1.0, 1.486016 }, new double[] { 1.4, 2.0, 1.18125 }, new double[] { 1.4, 3.0, 1.163516 }, new double[] { 1.4, 4.0, 1.49 }, }, new double[][] { new double[] { 1.6, 0.0, 1.96 }, new double[] { 1.6, 1.0, 1.449687 }, new double[] { 1.6, 2.0, 1.175 }, new double[] { 1.6, 3.0, 1.214688 }, new double[] { 1.6, 4.0, 1.64 }, }, new double[][] { new double[] { 1.8, 0.0, 1.99 }, new double[] { 1.8, 1.0, 1.394453 }, new double[] { 1.8, 2.0, 1.15625 }, new double[] { 1.8, 3.0, 1.266953 }, new double[] { 1.8, 4.0, 1.81 }, }, new double[][] { new double[] { 2.0, 0.0, 2.0 }, new double[] { 2.0, 1.0, 1.320313 }, new double[] { 2.0, 2.0, 1.125 }, new double[] { 2.0, 3.0, 1.320313 }, new double[] { 2.0, 4.0, 2.0 }, }, }; for (int i = 0; i < r.Length; i++) { for (int j = 0; j < r[0].Length; j++) { Assert.IsTrue(r[i][j].SequenceEqual(a[i][j], e)); } } }
public void GenerateGridSegment() { double[][][] pts; double [][] r, a = null; ParametricSurface srf; int uCount, vCount; double e; e = 0.0001; pts = new double[][][] { new double[][] { new double[] { 0.0, 0.0, 1.0 }, new double[] { 0.0, 1.0, 2.0 }, new double[] { 0.0, 2.0, 0.0 }, new double[] { 0.0, 3.0, 1.0 }, new double[] { 0.0, 4.0, 1.0 }, }, new double[][] { new double[] { 1.0, 0.0, 2.0 }, new double[] { 1.0, 1.0, 2.0 }, new double[] { 1.0, 2.0, 1.0 }, new double[] { 1.0, 3.0, 1.0 }, new double[] { 1.0, 4.0, 1.0 }, }, new double[][] { new double[] { 2.0, 0.0, 2.0 }, new double[] { 2.0, 1.0, 1.0 }, new double[] { 2.0, 2.0, 1.0 }, new double[] { 2.0, 3.0, 1.0 }, new double[] { 2.0, 4.0, 2.0 }, }, }; srf = new BezierSurface(pts); uCount = 10; vCount = 4; r = SurfaceDivider.GenerateGridSegment(srf, uCount, vCount); a = new double[][] { new double[] { 0, 0, 1, 0, 1, 1.2109375 }, new double[] { 0, 1, 1.2109375, 0, 2, 0.875 }, new double[] { 0, 2, 0.875, 0, 3, 0.8359375 }, new double[] { 0, 3, 0.8359375, 0, 4, 1 }, new double[] { 0.2, 0, 1.19, 0.2, 1, 1.306953125 }, new double[] { 0.2, 1, 1.306953125, 0.2, 2, 0.95625 }, new double[] { 0.2, 2, 0.95625, 0.2, 3, 0.879453125 }, new double[] { 0.2, 3, 0.879453125, 0.2, 4, 1.01 }, new double[] { 0.4, 0, 1.36, 0.4, 1, 1.3840625 }, new double[] { 0.4, 1, 1.3840625, 0.4, 2, 1.025 }, new double[] { 0.4, 2, 1.025, 0.4, 3, 0.9240625 }, new double[] { 0.4, 3, 0.9240625, 0.4, 4, 1.04 }, new double[] { 0.6, 0, 1.51, 0.6, 1, 1.442265625 }, new double[] { 0.6, 1, 1.442265625, 0.6, 2, 1.08125 }, new double[] { 0.6, 2, 1.08125, 0.6, 3, 0.969765625 }, new double[] { 0.6, 3, 0.969765625, 0.6, 4, 1.09 }, new double[] { 0.8, 0, 1.64, 0.8, 1, 1.4815625 }, new double[] { 0.8, 1, 1.4815625, 0.8, 2, 1.125 }, new double[] { 0.8, 2, 1.125, 0.8, 3, 1.0165625 }, new double[] { 0.8, 3, 1.0165625, 0.8, 4, 1.16 }, new double[] { 1, 0, 1.75, 1, 1, 1.501953125 }, new double[] { 1, 1, 1.501953125, 1, 2, 1.15625 }, new double[] { 1, 2, 1.15625, 1, 3, 1.064453125 }, new double[] { 1, 3, 1.064453125, 1, 4, 1.25 }, new double[] { 1.2, 0, 1.84, 1.2, 1, 1.5034375 }, new double[] { 1.2, 1, 1.5034375, 1.2, 2, 1.175 }, new double[] { 1.2, 2, 1.175, 1.2, 3, 1.1134375 }, new double[] { 1.2, 3, 1.1134375, 1.2, 4, 1.36 }, new double[] { 1.4, 0, 1.91, 1.4, 1, 1.486015625 }, new double[] { 1.4, 1, 1.486015625, 1.4, 2, 1.18125 }, new double[] { 1.4, 2, 1.18125, 1.4, 3, 1.163515625 }, new double[] { 1.4, 3, 1.163515625, 1.4, 4, 1.49 }, new double[] { 1.6, 0, 1.96, 1.6, 1, 1.4496875 }, new double[] { 1.6, 1, 1.4496875, 1.6, 2, 1.175 }, new double[] { 1.6, 2, 1.175, 1.6, 3, 1.2146875 }, new double[] { 1.6, 3, 1.2146875, 1.6, 4, 1.64 }, new double[] { 1.8, 0, 1.99, 1.8, 1, 1.394453125 }, new double[] { 1.8, 1, 1.394453125, 1.8, 2, 1.15625 }, new double[] { 1.8, 2, 1.15625, 1.8, 3, 1.266953125 }, new double[] { 1.8, 3, 1.266953125, 1.8, 4, 1.81 }, new double[] { 2, 0, 2, 2, 1, 1.3203125 }, new double[] { 2, 1, 1.3203125, 2, 2, 1.125 }, new double[] { 2, 2, 1.125, 2, 3, 1.3203125 }, new double[] { 2, 3, 1.3203125, 2, 4, 2 }, new double[] { 0, 0, 1, 0.2, 0, 1.19 }, new double[] { 0.2, 0, 1.19, 0.4, 0, 1.36 }, new double[] { 0.4, 0, 1.36, 0.6, 0, 1.51 }, new double[] { 0.6, 0, 1.51, 0.8, 0, 1.64 }, new double[] { 0.8, 0, 1.64, 1, 0, 1.75 }, new double[] { 1, 0, 1.75, 1.2, 0, 1.84 }, new double[] { 1.2, 0, 1.84, 1.4, 0, 1.91 }, new double[] { 1.4, 0, 1.91, 1.6, 0, 1.96 }, new double[] { 1.6, 0, 1.96, 1.8, 0, 1.99 }, new double[] { 1.8, 0, 1.99, 2, 0, 2 }, new double[] { 0, 1, 1.2109375, 0.2, 1, 1.306953125 }, new double[] { 0.2, 1, 1.306953125, 0.4, 1, 1.3840625 }, new double[] { 0.4, 1, 1.3840625, 0.6, 1, 1.442265625 }, new double[] { 0.6, 1, 1.442265625, 0.8, 1, 1.4815625 }, new double[] { 0.8, 1, 1.4815625, 1, 1, 1.501953125 }, new double[] { 1, 1, 1.501953125, 1.2, 1, 1.5034375 }, new double[] { 1.2, 1, 1.5034375, 1.4, 1, 1.486015625 }, new double[] { 1.4, 1, 1.486015625, 1.6, 1, 1.4496875 }, new double[] { 1.6, 1, 1.4496875, 1.8, 1, 1.394453125 }, new double[] { 1.8, 1, 1.394453125, 2, 1, 1.3203125 }, new double[] { 0, 2, 0.875, 0.2, 2, 0.95625 }, new double[] { 0.2, 2, 0.95625, 0.4, 2, 1.025 }, new double[] { 0.4, 2, 1.025, 0.6, 2, 1.08125 }, new double[] { 0.6, 2, 1.08125, 0.8, 2, 1.125 }, new double[] { 0.8, 2, 1.125, 1, 2, 1.15625 }, new double[] { 1, 2, 1.15625, 1.2, 2, 1.175 }, new double[] { 1.2, 2, 1.175, 1.4, 2, 1.18125 }, new double[] { 1.4, 2, 1.18125, 1.6, 2, 1.175 }, new double[] { 1.6, 2, 1.175, 1.8, 2, 1.15625 }, new double[] { 1.8, 2, 1.15625, 2, 2, 1.125 }, new double[] { 0, 3, 0.8359375, 0.2, 3, 0.879453125 }, new double[] { 0.2, 3, 0.879453125, 0.4, 3, 0.9240625 }, new double[] { 0.4, 3, 0.9240625, 0.6, 3, 0.969765625 }, new double[] { 0.6, 3, 0.969765625, 0.8, 3, 1.0165625 }, new double[] { 0.8, 3, 1.0165625, 1, 3, 1.064453125 }, new double[] { 1, 3, 1.064453125, 1.2, 3, 1.1134375 }, new double[] { 1.2, 3, 1.1134375, 1.4, 3, 1.163515625 }, new double[] { 1.4, 3, 1.163515625, 1.6, 3, 1.2146875 }, new double[] { 1.6, 3, 1.2146875, 1.8, 3, 1.266953125 }, new double[] { 1.8, 3, 1.266953125, 2, 3, 1.3203125 }, new double[] { 0, 4, 1, 0.2, 4, 1.01 }, new double[] { 0.2, 4, 1.01, 0.4, 4, 1.04 }, new double[] { 0.4, 4, 1.04, 0.6, 4, 1.09 }, new double[] { 0.6, 4, 1.09, 0.8, 4, 1.16 }, new double[] { 0.8, 4, 1.16, 1, 4, 1.25 }, new double[] { 1, 4, 1.25, 1.2, 4, 1.36 }, new double[] { 1.2, 4, 1.36, 1.4, 4, 1.49 }, new double[] { 1.4, 4, 1.49, 1.6, 4, 1.64 }, new double[] { 1.6, 4, 1.64, 1.8, 4, 1.81 }, new double[] { 1.8, 4, 1.81, 2, 4, 2 }, }; for (int i = 0; i < r.Length; i++) { Assert.IsTrue(r[i].SequenceEqual(a[i], e)); } }