private void Init()
        {
            NCartesianChart chart = (NCartesianChart)nChartControl.Charts[0]; //3d график

            NTriangulatedSurfaceSeries surface = new NTriangulatedSurfaceSeries(); //создаём треугольную поверхность

            //подключаем зум
            NZoomTool zt = new NZoomTool();
            zt.BeginDragMouseCommand = new NMouseCommand(MouseAction.Wheel, MouseButton.Middle, 0);
            zt.ZoomStep = 20;

            //зум инструмент добавляем в контролу
            nChartControl.Controller.Tools.Add(zt);

            //доп. инструменты подключаем для управления (вращения и приближения)
            nChartControl.Controller.Tools.Add(new NSelectorTool());
            nChartControl.Controller.Tools.Add(new NTrackballTool());

            //очень важная
            nChartControl.Settings.JitterMode = JitterMode.Enabled;
            nChartControl.Settings.JitteringSteps = 1;

            //настройка 3d график
            //включаем поддержку 3d
            chart.Enable3D = true;
            chart.Width = 50;
            chart.Height = 50;
            chart.Depth = 50;
            chart.Projection.SetPredefinedProjection(PredefinedProjection.PerspectiveTilted);

            //добавляем 3d поверхность в 3d график
            chart.Series.Add(surface);

            //настройки для поверхности
            surface.FrameMode = SurfaceFrameMode.Contour;  //сетка или контур
            surface.Name = dataType;  //название графика

            //настройка названия осей
            chart.Axis(StandardAxis.PrimaryY).ScaleConfigurator.Title.Text = "Высота";  //название оси Y
            chart.Axis(StandardAxis.PrimaryX).ScaleConfigurator.Title.Text = "Ширина";   //название оси X
            NStandardScaleConfigurator scale = (NStandardScaleConfigurator)chart.Axis(StandardAxis.PrimaryX).ScaleConfigurator;
            chart.Axis(StandardAxis.Depth).ScaleConfigurator.Title.Text = "Долгота";    //название оси Z
            NStandardScaleConfigurator scaler = (NStandardScaleConfigurator)chart.Axis(StandardAxis.Depth).ScaleConfigurator;

            //заливка поверхности
            surface.FillMode = SurfaceFillMode.Zone;

            AddData(surface);
        }
예제 #2
0
        private void MouseModeComboBox_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            NTool tool = null;
            bool  bEnableCreatePointControls = false;

            switch (MouseModeComboBox.SelectedIndex)
            {
            // Create Point
            case 0:
                bEnableCreatePointControls = true;
                break;

            // Trackball
            case 1:
                tool = new NTrackballTool();
                break;

            // Zoom
            case 2:
                tool = new NZoomTool();
                break;

            // Offset
            case 3:
                tool = new NOffsetTool();
                break;
            }

            nChartControl1.Controller.Tools.Clear();

            if (tool != null)
            {
                nChartControl1.Controller.Tools.Add(tool);
            }

            CreatePointAtPlaneComboBox.Enabled = bEnableCreatePointControls;

            if (CreatePointAtPlaneComboBox.SelectedIndex == 0)
            {
                XZPlaneValueNumericUpDown.Enabled = bEnableCreatePointControls;
                XYPlaneValueNumericUpDown.Enabled = false;
            }
            else
            {
                XZPlaneValueNumericUpDown.Enabled = false;
                XYPlaneValueNumericUpDown.Enabled = bEnableCreatePointControls;
            }
        }
예제 #3
0
        public void generateSurface()
        {
            NCartesianChart chart;

            //nChartControl1.Clear();
            NTriangulatedSurfaceSeries surface;

            NZoomTool zt = new NZoomTool();

            zt.BeginDragMouseCommand = new NMouseCommand(MouseAction.Wheel, MouseButton.Middle, 0);
            zt.ZoomStep = 20;


            nChartControl1.Controller.Tools.Add(zt);

            nChartControl1.Controller.Tools.Add(new NSelectorTool());
            nChartControl1.Controller.Tools.Add(new NTrackballTool());

            nChartControl1.Settings.JitterMode     = JitterMode.Enabled;
            nChartControl1.Settings.JitteringSteps = 1;

            chart = (NCartesianChart)nChartControl1.Charts[0];

            chart.Enable3D = true;
            chart.Width    = chart.Height = chart.Depth = 50;
            chart.Projection.SetPredefinedProjection(PredefinedProjection.PerspectiveTilted);

            surface = new NTriangulatedSurfaceSeries();

            chart.Series.Add(surface);

            surface.FrameMode = SurfaceFrameMode.Mesh;

            surface.FillMode = SurfaceFillMode.Zone;

            for (int i = 0; i < resultX.Count(); i++)
            {
                surface.XValues.Add(resultX[i]);
                surface.ZValues.Add(resultZ[i]);
                surface.Values.Add(resultY[i]);
            }
        }
예제 #4
0
        private void DragModeComboBox_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            NDragTool dragTool = null;

            if (nChartControl1.Controller.Tools.Count > 0)
            {
                dragTool = nChartControl1.Controller.Tools[0] as NDragTool;
            }

            if (dragTool != null)
            {
                dragTool.Drag -= new EventHandler(OnViewChange);
                dragTool       = null;
            }

            nChartControl1.Controller.Tools.Clear();

            switch (DragModeComboBox.SelectedIndex)
            {
            // Trackball
            case 1:
                dragTool = new NTrackballTool();
                break;

            // Zoom
            case 2:
                dragTool = new NZoomTool();
                break;

            // Offset
            case 3:
                dragTool = new NOffsetTool();
                break;
            }

            if (dragTool != null)
            {
                dragTool.Drag += new EventHandler(OnViewChange);
                nChartControl1.Controller.Tools.Add(dragTool);
            }
        }
예제 #5
0
        public static NChartControl GenerateChart(string func)
        {
            NZoomTool zt = new NZoomTool();

            zt.BeginDragMouseCommand = new NMouseCommand(MouseAction.Wheel, (MouseButton)System.Windows.Forms.MouseButtons.Middle, 0);
            zt.ZoomStep = 16;

            NChartControl nChartControl1 = new NChartControl();

            nChartControl1.Controller.Tools.Add(new NSelectorTool());
            nChartControl1.Controller.Tools.Add(new NTrackballTool());
            nChartControl1.Controller.Tools.Add(zt);
            nChartControl1.Legends[0].Mode = LegendMode.Disabled;

            NTriangulatedSurfaceSeries triangulatedSurface = new NTriangulatedSurfaceSeries();

            triangulatedSurface.UsePreciseGeometry       = true;
            triangulatedSurface.AutomaticPalette         = true;
            triangulatedSurface.SyncPaletteWithAxisScale = false;
            triangulatedSurface.PaletteSteps             = 6;
            triangulatedSurface.FrameMode = SurfaceFrameMode.Mesh;

            NCartesianChart chart = (NCartesianChart)nChartControl1.Charts[0];

            chart.Enable3D             = true;
            chart.Width                = width;
            chart.Depth                = depth;
            chart.Height               = height;
            chart.BoundsMode           = BoundsMode.Fit;
            chart.Projection.Type      = ProjectionType.Perspective;
            chart.Projection.Elevation = 30;
            chart.Projection.Rotation  = -60;
            chart.LightModel.SetPredefinedLightModel(PredefinedLightModel.NorthernLights);
            chart.Series.Add(triangulatedSurface);

            string[] f2 = func.Split(Char.Parse("="));
            if (f2.Length == 2)
            {
                if (f2[0] == "y" || f2[0] == "f(x)") // f-cja w postaci y=costam
                {
                    float x, z;
                    try
                    {
                        for (x = startx; x < width; x++)     //x
                        {
                            for (z = startz; z < depth; z++) //z
                            {
                                NCalc.Expression ex = new NCalc.Expression(f2[1]);
                                ex.Parameters["x"] = x;
                                ex.Parameters["z"] = z;

                                ex.EvaluateParameter += delegate(string name, ParameterArgs args)
                                {
                                    if (name == "x")
                                    {
                                        args.Result = x;
                                    }
                                    else if (name == "z")
                                    {
                                        args.Result = z;
                                    }
                                };
                                var y = ex.Evaluate();

                                triangulatedSurface.XValues.Add(x);
                                triangulatedSurface.ZValues.Add(z);
                                triangulatedSurface.Values.Add(y);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("Sprawdź, czy poprawnie wpisałeś równanie!", "Nie pykło");
                        return(null);
                    }
                }
                else
                {
                    MessageBox.Show("Niepoprawny zapis funkcji!", "Nie pykło");
                }
            }
            else
            {
                MessageBox.Show("Niepoprawny zapis funkcji!", "Nie pykło");
            }

            return(nChartControl1);
        }