Beispiel #1
0
        private void glC_Paint(object sender, PaintEventArgs e)
        {
            if (!loaded) // Play nice
            {
                return;
            }
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            //GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();

            DrawGrid();
            DrawTraectory(Sr.Traectory);
            DrawGraphPoints(GraphPoints);
            #region Pautinka
            GL.Color3(Color.Red);
            double r = 1;
            GL.Begin(PrimitiveType.Lines);
            for (int i = 0; i < 12; i++)
            {
                GL.Vertex2(0, 0);
                GL.Vertex2(kx * r * Math.Cos(i * Math.PI / 6) / 2.0, ky * r * Math.Sin(i * Math.PI / 6) / 2.0);
            }
            GL.End();
            #endregion
            GLC.SwapBuffers();
        }
Beispiel #2
0
 private void OnMouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
 {
     if (e.Delta > 0)
     {
         kx *= 1.1f;
         ky  = kx;
     }
     if (e.Delta < 0)
     {
         kx /= 1.1f;
         ky  = kx;
     }
     GLC.Invalidate();
 }
Beispiel #3
0
        private void glC_MouseMove(object sender, MouseEventArgs e)
        {
            double x1  = e.X;
            double y1  = e.Y;
            double ex1 = (x1 - GLC.Width / 2.0) / (GLC.Width / 2.0);

            stCoord.Text = string.Format("X={0} Y={1} ex={2}", x1, y1, ex1);

            if (e.Button == MouseButtons.Right)
            {
                x = PointToClient(Cursor.Position).X *(z + 1);
                y = (-PointToClient(Cursor.Position).Y + GLC.Height) * (z + 1);
            }
            GLC.Invalidate();
        }
Beispiel #4
0
        private void OpenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                switch (ofd.FilterIndex)
                {
                case 0:
                    Points.Clear();
                    using (TextReader tr = File.OpenText(ofd.FileName))
                    {
                        string line;
                        double px, py, pz, pw;
                        while ((line = tr.ReadLine()) != null)
                        {
                            Console.WriteLine(line);
                            string[] vals = line.Split('\t');
                            double.TryParse(vals[0], out px);
                            double.TryParse(vals[1], out py);
                            double.TryParse(vals[2], out pz);
                            double.TryParse(vals[3], out pw);
                            Points.Add(new Point4D()
                            {
                                X = px, Y = py, Z = pz, W = pw
                            });
                        }
                    }
                    bArtRun.Visible = false;
                    break;

                case 1:
                    Sr.Load(ofd.FileName);
                    pg1.SelectedObject = Sr;
                    bArtRun.Visible    = false;
                    break;
                }
                GLC.Invalidate();
            }
        }
Beispiel #5
0
        private void dgw_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            Point4D p        = new Point4D();
            var     oldValue = dgw[e.ColumnIndex, e.RowIndex].Value;
            var     newValue = e.FormattedValue;

            Console.WriteLine(string.Format("{0} {1} {2}", "CellValidating", oldValue, newValue));
            switch (e.ColumnIndex)
            {
            case 0:
                p   = Points[e.RowIndex];
                p.X = double.Parse(newValue.ToString());
                Points[e.RowIndex] = p;
                break;

            case 1:
                p   = Points[e.RowIndex];
                p.Y = double.Parse(newValue.ToString());
                Points[e.RowIndex] = p;
                break;

            case 2:
                p   = Points[e.RowIndex];
                p.Z = double.Parse(newValue.ToString());
                Points[e.RowIndex] = p;
                break;

            case 3:
                p   = Points[e.RowIndex];
                p.W = double.Parse(newValue.ToString());
                Points[e.RowIndex] = p;
                break;
            }
            GLC.Refresh();
            dgw.Refresh();
        }
Beispiel #6
0
        //

        private void btnMakePoints_Click_1(object sender, EventArgs e)
        {
            Point4D       p4d;
            List <double> times = new List <double>();
            double        currentTime = 0;
            double        dt, path, truepath, lastpath, lasttime, firstpath;
            double        Lx, Ly, Lz;
            double        px, py, pz;
            double        dx, dy, dz;
            int           nP;

            double.TryParse(cbTR.Text, out dt);
            GraphPoints.Clear();
            while (!queue.IsEmpty)
            {
                queue.TryDequeue(out p4d);
            }
            Console.WriteLine(string.Format("queue.Count {0}", queue.Count));
            lasttime  = 0;
            firstpath = 0;
            px        = Points[0].X;
            py        = Points[0].Y;
            pz        = Points[0].Z;
            GraphPoints.Add(new Point3D()
            {
                X = px, Y = py, Z = pz
            });
            times.Add(currentTime);
            Console.WriteLine(string.Format("Точка[{0}] {1} {2}", GraphPoints.Count, px, py));
            for (int i = 0; i < Points.Count - 1; i++)
            {
                Console.WriteLine();
                path = getDist(Points[i], Points[i + 1]);
                Lx   = Points[i + 1].X - Points[i].X;
                Ly   = Points[i + 1].Y - Points[i].Y;
                Lz   = Points[i + 1].Z - Points[i].Z;

                dx = Points[i].W * Lx / Math.Sqrt(Lx * Lx + Ly * Ly + Lz * Lz);
                dy = Points[i].W * Ly / Math.Sqrt(Lx * Lx + Ly * Ly + Lz * Lz);
                dz = Points[i].W * Lz / Math.Sqrt(Lx * Lx + Ly * Ly + Lz * Lz);
                Console.WriteLine(string.Format("dx {0} dy {1}", dx, dy));

                if (lasttime > 0)
                {
                    Console.WriteLine(string.Format("Начальное время {0}", dt - lasttime));
                    GraphPoints.RemoveAt(GraphPoints.Count - 1);
                    times.RemoveAt(times.Count - 1);
                    px          += (dt - lasttime) * dx;
                    py          += (dt - lasttime) * dy;
                    pz          += (dt - lasttime) * dz;
                    currentTime += dt - lasttime;
                    GraphPoints.Add(new Point3D()
                    {
                        X = px, Y = py, Z = pz
                    });
                    times.Add(currentTime);
                    Console.WriteLine(string.Format("Точка[{0}] {1} {2}", GraphPoints.Count, px, py));
                    firstpath = Math.Sqrt(Math.Pow((dt - lasttime) * dx, 2) + Math.Pow((dt - lasttime) * dy, 2) + Math.Pow((dt - lasttime) * dz, 2));
                    path     -= firstpath;
                }
                nP       = (int)Math.Floor(path / (Points[i].W * dt));
                truepath = nP * Points[i].W * dt;
                Console.WriteLine(string.Format("Отрезок {0} Длина {1} ЦелаяДлина {2} Точок={3}", i, path, truepath, nP));
                for (int j = 0; j < nP; j++)
                {
                    px          += dt * dx;
                    py          += dt * dy;
                    pz          += dt * dz;
                    currentTime += dt;
                    GraphPoints.Add(new Point3D()
                    {
                        X = px, Y = py, Z = pz
                    });
                    times.Add(currentTime);
                    Console.WriteLine(string.Format("Точка[{0}] {1} {2}", GraphPoints.Count, px, py));
                }
                lastpath = path - truepath;
                lasttime = lastpath / Points[i].W;
                Console.WriteLine(string.Format("ПоследняяДлина {0} ПоследнееВремя={1}", lastpath, lasttime));
                if (lasttime > 0)
                {
                    px          += lasttime * dx;
                    py          += lasttime * dy;
                    pz          += lasttime * dz;
                    currentTime += lasttime;
                    GraphPoints.Add(new Point3D()
                    {
                        X = px, Y = py, Z = pz
                    });
                    times.Add(currentTime);
                    Console.WriteLine(string.Format("Точка[{0}] {1} {2}", GraphPoints.Count, px, py));
                }
            }
            GLC.Invalidate();
            for (int i = 0; i < GraphPoints.Count; i++)
            {
                queue.Enqueue(new Point4D()
                {
                    X = GraphPoints[i].X, Y = GraphPoints[i].Y, Z = GraphPoints[i].Z, W = times[i]
                });
            }
            times = null;
            Console.WriteLine(string.Format("GraphPoints.Count = {0} Queue ={1}", GraphPoints.Count, queue.Count));
            //TestPoint();

            // HACH:

            /*
             * Ray.Hz.Clear();
             * Ray.Hz.AddRange(Sr.Profile.Select(p => (double)p.z).ToArray());
             *
             * Ray.Cz.Clear();
             * Ray.Cz.AddRange(Sr.Profile.Select(p => (double)p.c).ToArray());
             */

            bArtRun.Visible = true;
        }
Beispiel #7
0
 private void GLC_MouseUp(object sender, MouseEventArgs e)
 {
     lbDown = false;
     //glX += 0.1;
     GLC.Invalidate();
 }