public void RefreshBSplineInCanvas(BSpline changedSpline, Canvas canvas, SplineDrawer engine) { RemoveInCanvas(canvas, changedSpline.LinesOfSpline); List <Line> lines = engine.BSplineLines(changedSpline.Degree, changedSpline.Knots.ToArray(), changedSpline.ControlPoints.ToArray(), true); changedSpline.LinesOfSpline = lines; }
public void SetNewWorldArea(double newXMin, double newXMax, double newYMin, double newYMax) { //if (newXMin < 0.5 || newYMin < 0.5 || newXMax < 0.5 || newYMax < 0.5) //{ // haha.Text = "Too high zoom"; // return; //} WorldArea oldWA = _worldArea; _worldArea = new WorldArea(newXMin, newXMax, newYMin, newYMax); _waZeroPointInPACoordinates = TransformCoordinates.WorldAreaToPlotArea(0, 0, _plotArea, _worldArea); _engine = new SplineDrawer(canvas1, _plotArea, _worldArea, DrawPrecision); x_min_TextBox.Text = newXMin.ToString(); x_max_TextBox.Text = newXMax.ToString(); y_min_TextBox.Text = newYMin.ToString(); y_max_TextBox.Text = newYMax.ToString(); ResetCanvas(); }
public void LoadSplinesFromFile(StreamReader reader, List <BSpline> _bSplineList, List <GlobalBSpline> _globalBSplineList, List <HermiteSpline> _hermiteSplineList, List <ClampedSpline> _clampedSplineList, SplineDrawer engine) { var bSplinesStringBuilder = new StringBuilder(); var hSplinesStringBuilder = new StringBuilder(); var cSplinesStringBuilder = new StringBuilder(); var globalBSplinesStringBuilder = new StringBuilder(); var line = reader.ReadLine(); if (line.Equals(BSPLINE_HEADER)) { line = reader.ReadLine(); while (!line.Equals(GLOBAL_BSPLINE_HEADER)) { bSplinesStringBuilder.Append(line); line = reader.ReadLine(); } line = reader.ReadLine(); while (!line.Equals(HSPLINE_HEADER)) { globalBSplinesStringBuilder.Append(line); line = reader.ReadLine(); } line = reader.ReadLine(); while (!line.Equals(CSPLINE_HEADER)) { hSplinesStringBuilder.Append(line); line = reader.ReadLine(); } line = reader.ReadLine(); while (line != null) { cSplinesStringBuilder.Append(line); line = reader.ReadLine(); } //System.Diagnostics.Debug.WriteLine(bSplinesStringBuilder.ToString()); // System.Diagnostics.Debug.WriteLine(hSplinesStringBuilder.ToString()); var bSplinesDefinitions = JsonConvert.DeserializeObject <List <Tuple <int, List <double>, List <double> > > >(bSplinesStringBuilder.ToString()); var globalBSplinesDefinitions = JsonConvert.DeserializeObject <List <Tuple <int, List <double>, List <double>, List <double>, double, double> > >(globalBSplinesStringBuilder.ToString()); var hSplinesDefinitions = JsonConvert.DeserializeObject <List <Tuple <List <double>, List <double>, List <double> > > >(hSplinesStringBuilder.ToString()); var cSplinesDefinitions = JsonConvert.DeserializeObject <List <Tuple <List <double>, List <double>, List <double> > > >(cSplinesStringBuilder.ToString()); BSpline bSpline; for (int i = 0; i < bSplinesDefinitions.Count; i++) { bSpline = engine.InteractiveBSpline(bSplinesDefinitions[i].Item1, bSplinesDefinitions[i].Item2.ToArray(), bSplinesDefinitions[i].Item3.ToArray(), true); _bSplineList.Add(bSpline); } GlobalBSpline gBSpline; for (int i = 0; i < bSplinesDefinitions.Count; i++) { gBSpline = engine.InteractiveGlobalBSpline(globalBSplinesDefinitions[i].Item1, globalBSplinesDefinitions[i].Item2.ToArray(), globalBSplinesDefinitions[i].Item3.ToArray(), globalBSplinesDefinitions[i].Item4.ToArray(), true); gBSpline.LeftDerivation = globalBSplinesDefinitions[i].Item5; gBSpline.RightDerivation = globalBSplinesDefinitions[i].Item6; _bSplineList.Add(gBSpline); } HermiteSpline hSpline; for (int i = 0; i < hSplinesDefinitions.Count; i++) { hSpline = engine.InteractiveHermiteSpline(hSplinesDefinitions[i].Item1.ToArray(), hSplinesDefinitions[i].Item2.ToArray(), hSplinesDefinitions[i].Item3.ToArray()); _hermiteSplineList.Add(hSpline); } ClampedSpline cSpline; for (int i = 0; i < cSplinesDefinitions.Count; i++) { cSpline = engine.InteractiveClampedSpline(cSplinesDefinitions[i].Item1.ToArray(), cSplinesDefinitions[i].Item2.ToArray(), cSplinesDefinitions[i].Item3[0], cSplinesDefinitions[i].Item3[cSplinesDefinitions[i].Item3.Count - 1]); _clampedSplineList.Add(cSpline); } } }
// private object _selectedSpline; //private FunctionComboBoxViewModel functionComboBoxViewModel; /**********************/ public MainPage() { InitializeComponent(); this.DrawPrecision = DEFAULT_DRAW_PRECISION; this.RedrawingPrecision = DEFAULT_REDRAWING_PRECISION; //functionComboBoxViewModel = new FunctionComboBoxViewModel(); _plotArea = new PlotArea(PLOT_AREA_MIN_X, PLOT_AREA_MAX_X, PLOT_AREA_MIN_Y, PLOT_AREA_MAX_Y); _worldArea = new WorldArea(WORLD_AREA_DEFAULT_MIN_XY, WORLD_AREA_DEFAULT_MAX_XY, WORLD_AREA_DEFAULT_MIN_XY, WORLD_AREA_DEFAULT_MAX_XY); // _pa.x_min = 0; _pa.x_max = 775; _pa.y_min = 0; _pa.y_max = 575; _wa.x_min = -10; _wa.x_max = 10; _wa.y_min = -10; _wa.y_max = 10; _engine = new SplineDrawer(canvas1, _plotArea, _worldArea, DrawPrecision); //_auxiliaryEngine = new AuxiliaryDrawer(canvas1); _isMoving = false; _waZeroPointInPACoordinates = TransformCoordinates.WorldAreaToPlotArea(0, 0, _plotArea, _worldArea); _parser = new Parser(); InitSplineLists(); _canvasUtilities = new CanvasUtilities(_plotArea, _worldArea); _openFileDialog = new OpenFileDialog(); _saveFileDialog = new SaveFileDialog(); InitColors(); FunctionSelect_ComboBox.SelectedIndex = 0; _dragInfoLabel = new DragInfoLabel(CANVAS_TEXT_COLOR); //_dragInfoLabel.Margin = new Thickness(20, 30, 0, 0); //_dragInfoLabel.Content = "SDAS"; canvas1.Children.Add(_dragInfoLabel); _dragInfoLabel.Visibility = Visibility.Collapsed; VersionLabel.Content = Version(); try { this._saveFileDialog.DefaultExt = ".spline"; this._openFileDialog.Filter = "Spline Files|*.spline"; this._openFileDialog.FilterIndex = 2; this._saveFileDialog.Filter = "Spline Files|*.spline"; this._saveFileDialog.FilterIndex = 2; // this._saveFileDialog.DefaultFileName = "newSplines.spline"; } catch (Exception) { } DefaultCanvas(); //var s = BSpline.ServiceKnots(new double[] {2,3.75,5},3,true); // _engine.BellFunctionOfDegree3(0, 1, 2, 3, 4); // _engine.BSplineBasisFunctionsOfDegree3(0, 1, 2, 3, 4, 5, 6, 7); //_engine.BSplineBasisFunction(new double[]{0, 1, 2, 3, 4, 5, 6, 7}); // double[] knots = new double[] {-1,1,2,2.5, 3, 4, 5, 6}; // Tuple<double[][], double[]> A = GlobalBSplineMatrix(3, knots); // double[][] B = A.Item1; //MathMyUtils.MatrixInvert(A.Item1); // //double[][] F = MathMyUtils.MatrixInvert(B); //// double[][] C = MathMyUtils.TransposeMatrix(B); //// //double[][] D = MathMyUtils.MatrixInvert(MathMyUtils.MultiplyMatrices(C, B)); //// //double[][] E = MathMyUtils.MultiplyMatrices(B, C); ////// double[][] YMatrix = MathMyUtils.ArrayToMatrix(knotsFunctionValues); // for (int i = 0; i < B.Length; i++) // { // String s = ""; // for (int j = 0; j < B[i].Length; j++) // { // s += B[i][j].ToString() + " | "; // } // System.Diagnostics.Debug.WriteLine(s); // } }
public void TotalRefreshHermiteSplineInCanvas(HermiteSpline changedSpline, Canvas canvas, SplineDrawer engine) { RemoveInCanvas(canvas, changedSpline.LinesOfSpline); RemoveInCanvas(canvas, changedSpline.DerivationEllipses); RemoveInCanvas(canvas, changedSpline.DragEllipses); var spline = engine.InteractiveHermiteSpline(changedSpline.Knots.ToArray(), changedSpline.ControlPoints.ToArray(), changedSpline.Derivations.ToArray()); //changedSpline.LinesOfSpline = spline.LinesOfSpline; //changedSpline.DerivationEllipses = spline.DerivationEllipses; //changedSpline.DragEllipses = spline.DragEllipses; //List<Line> lines = engine.HermiteSplineLines(changedSpline.Knots.ToArray(), changedSpline.ControlPoints.ToArray(), changedSpline.Derivations.ToArray()); //changedSpline.LinesOfSpline = lines; }
public void RefreshHermiteSplineInCanvas(HermiteSpline changedSpline, Canvas canvas, SplineDrawer engine) { //treba zmazat vsetky liny meneneho splinu RemoveInCanvas(canvas, changedSpline.LinesOfSpline); List <Line> lines = engine.HermiteSplineLines(changedSpline.Knots.ToArray(), changedSpline.ControlPoints.ToArray(), changedSpline.Derivations.ToArray()); changedSpline.LinesOfSpline = lines; }
public void RefreshGlobalBSplineInCanvas(GlobalBSpline changedSpline, Canvas canvas, SplineDrawer engine) { RemoveInCanvas(canvas, changedSpline.LinesOfSpline); // RemoveInCanvas(canvas, changedSpline.ControlPointsEllipses); // RemoveInCanvas(canvas, changedSpline.DragEllipses); // canvas.Children.Remove(changedSpline.LeftDerivationEllipse); //canvas.Children.Remove(changedSpline.RightDerivationEllipse); List <Line> lines = engine.GlobalBSplineLines(changedSpline.Degree, changedSpline.Knots.ToArray(), changedSpline.FunctionValues.ToArray(), changedSpline.LeftDerivation, changedSpline.RightDerivation, true); changedSpline.LinesOfSpline = lines; //changedSpline = engine.InteractiveGlobalBSpline(changedSpline.Degree, // changedSpline.Knots.ToArray(), // changedSpline.FunctionValues.ToArray(),changedSpline.LeftDerivation, changedSpline.RightDerivation, // true); }
public void RemoveCPFromHermiteSpline(HermiteSpline changedSpline, int changedCPIndex, Canvas canvas, SplineDrawer engine) { try { //TREBA PORIESIT DERIVACIE RemoveInCanvas(canvas, changedSpline.DragEllipses); RemoveInCanvas(canvas, changedSpline.LinesOfSpline); changedSpline.Knots.RemoveAt(changedCPIndex); changedSpline.ControlPoints.RemoveAt(changedCPIndex); changedSpline = engine.InteractiveHermiteSpline(changedSpline.Knots.ToArray(), changedSpline.ControlPoints.ToArray(), changedSpline.Derivations.ToArray()); } catch (ArgumentOutOfRangeException) { } }
public void RefreshClampedSplineInCanvas(ClampedSpline changedSpline, Canvas canvas, SplineDrawer engine) { //treba zmazat vsetky liny meneneho splinu RemoveInCanvas(canvas, changedSpline.LinesOfSpline); var dersAndLines = engine.ClampedSplineDerivationsAndLines(changedSpline.Knots.ToArray(), changedSpline.ControlPoints.ToArray(), changedSpline.Derivations[0], changedSpline.Derivations[changedSpline.Derivations.Count - 1]); changedSpline.Derivations = dersAndLines.Item1; changedSpline.LinesOfSpline = dersAndLines.Item2; //Canvas.SetLeft(changedSpline.LeftDerivationEllipse,MathOperations.); // var leftDerWACoord = // MathOperations.LinearFunction(changedSpline.Knots[0]-1,changedSpline.Knots[0],changedSpline.ControlPoints[0],changedSpline.Derivations[0]); // Canvas.SetTop(changedSpline.LeftDerivationEllipse,TransformCoordinates.WorldAreaToPlotAreaY(leftDerWACoord,_plotArea,_worldArea)); }