Example #1
0
 public void deleteShape(Shapes.Cylinder cylinder)
 {
     string[] seriesNames = cylinderSeriesNames(cylinder);
     foreach (string name in seriesNames)
     {
         Series series = chart.Series[name];
         chart.Series.Remove(series);
     }
 }
Example #2
0
        private string[] cylinderSeriesNames(Shapes.Cylinder cylinder)
        {
            string face0 = String.Format("cylinderFace0_{0}", cylinder.Name);
            string face1 = String.Format("cylinderFace1_{0}", cylinder.Name);
            string sides = String.Format("cylinderSides_{0}", cylinder.Name);

            string[] series = { face0, face1, sides };
            return(series);
        }
Example #3
0
 public void plotSetup(Shapes.Cylinder cylinder, System.Drawing.Color color)
 {
     string[] series = cylinderSeriesNames(cylinder);
     foreach (string name in series)
     {
         chart.Series.Add(name);
         chart.Series[name].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
         chart.Series[name].Color     = color;
     }
 }
Example #4
0
 public void Plot(Shapes.Cylinder cylinder, p3D.Point3D p1, p3D.Point3D p2, double rot_x, double rot_y, double rot_z, bool rendered)
 {
     string[] series = cylinderSeriesNames(cylinder);
     foreach (var name in series)
     {
         chart.Series[name].Points.Clear();
     }
     if (rendered)
     {
         cylinderPlotterRendered(cylinder, p1, p2, rot_x, rot_y, rot_z);
     }
     else
     {
         cylinderPlotterWire(cylinder, p1, p2, rot_x, rot_y, rot_z);
     }
     chartSizer(chart);
 }
Example #5
0
        private void cylinderPlotterRendered(Shapes.Cylinder cylinder, p3D.Point3D p1, p3D.Point3D p2, double rot_x, double rot_y, double rot_z)
        {
            string[]     seriesNames = cylinderSeriesNames(cylinder);
            p3D.Vector3D p1p2        = new p3D.Vector3D(p2.X - p1.X, p2.Y - p1.Y, p2.Z - p1.Z);
            Random       rand        = new Random();

            p3D.Point3D  p_rand = new p3D.Point3D(rand.NextDouble() * 100.0, rand.NextDouble() * 100.0, rand.NextDouble() * 100.0);
            p3D.Vector3D pv0    = new p3D.Vector3D(p_rand.X - p1.X, p_rand.Y - p1.Y, p_rand.Z - p1.Z);
            p3D.Vector3D r0     = p3D.Vector3D.CrossProduct(p1p2, pv0);
            p3D.Vector3D s0     = p3D.Vector3D.CrossProduct(p1p2, r0);
            r0.Normalize();
            s0.Normalize();
            p3D.Point3D[] q         = new p3D.Point3D[4];
            double        nfacets   = cylinder.Facet_number;
            double        theta_inc = Math.PI * 2.0 / 360;

            for (double theta = 0; theta < Math.PI * 2.0; theta += theta_inc)
            {
                int n = 0;
                q[n].X = p1.X + cylinder.Radius * Math.Cos(theta) * r0.X + cylinder.Radius * Math.Sin(theta) * s0.X;
                q[n].Y = p1.Y + cylinder.Radius * Math.Cos(theta) * r0.Y + cylinder.Radius * Math.Sin(theta) * s0.Y;
                q[n].Z = p1.Z + cylinder.Radius * Math.Cos(theta) * r0.Z + cylinder.Radius * Math.Sin(theta) * s0.Z;
                n++;
                q[n].X = p2.X + cylinder.Radius * Math.Cos(theta) * r0.X + cylinder.Radius * Math.Sin(theta) * s0.X;
                q[n].Y = p2.Y + cylinder.Radius * Math.Cos(theta) * r0.Y + cylinder.Radius * Math.Sin(theta) * s0.Y;
                q[n].Z = p2.Z + cylinder.Radius * Math.Cos(theta) * r0.Z + cylinder.Radius * Math.Sin(theta) * s0.Z;
                Convert3DTo2D(rot_x, rot_y, rot_z, p2.X, p2.Y, p2.Z, ref x, ref y, ref z);
                chart.Series[seriesNames[2]].Points.AddXY(x, y);
                Convert3DTo2D(rot_x, rot_y, rot_z, q[1].X, q[1].Y, q[1].Z, ref x, ref y, ref z);
                chart.Series[seriesNames[2]].Points.AddXY(x, y);
                Convert3DTo2D(rot_x, rot_y, rot_z, q[0].X, q[0].Y, q[0].Z, ref x, ref y, ref z);
                chart.Series[seriesNames[2]].Points.AddXY(x, y);
                Convert3DTo2D(rot_x, rot_y, rot_z, p1.X, p1.Y, p1.Z, ref x, ref y, ref z);
                chart.Series[seriesNames[2]].Points.AddXY(x, y);
            }
        }
Example #6
0
        private void cylinderPlotterWire(Shapes.Cylinder cylinder, p3D.Point3D p1, p3D.Point3D p2, double rot_x, double rot_y, double rot_z)
        {
            string[]     seriesNames = cylinderSeriesNames(cylinder);
            p3D.Vector3D p1p2        = new p3D.Vector3D(p2.X - p1.X, p2.Y - p1.Y, p2.Z - p1.Z);
            Random       rand        = new Random();

            p3D.Point3D  p_rand = new p3D.Point3D(rand.NextDouble() * 100.0, rand.NextDouble() * 100.0, rand.NextDouble() * 100.0);
            p3D.Vector3D pv0    = new p3D.Vector3D(p_rand.X - p1.X, p_rand.Y - p1.Y, p_rand.Z - p1.Z);
            p3D.Vector3D r0     = p3D.Vector3D.CrossProduct(p1p2, pv0);
            p3D.Vector3D s0     = p3D.Vector3D.CrossProduct(p1p2, r0);
            r0.Normalize();
            s0.Normalize();
            double theta_inc = Math.PI * 2.0 / 36;

            for (double theta = 0; theta < Math.PI * 2.0; theta += theta_inc)
            {
                p3D.Point3D n = new p3D.Point3D(0.0, 0.0, 0.0);
                n.X = p1.X + cylinder.Radius * Math.Cos(theta) * r0.X + cylinder.Radius * Math.Sin(theta) * s0.X;
                n.Y = p1.Y + cylinder.Radius * Math.Cos(theta) * r0.Y + cylinder.Radius * Math.Sin(theta) * s0.Y;
                n.Z = p1.Z + cylinder.Radius * Math.Cos(theta) * r0.Z + cylinder.Radius * Math.Sin(theta) * s0.Z;
                Convert3DTo2D(rot_x, rot_y, rot_z, n.X, n.Y, n.Z, ref x, ref y, ref z);
                chart.Series[seriesNames[0]].Points.AddXY(x, y);
            }

            p3D.Vector3D p2p1 = new p3D.Vector3D(p1.X - p2.X, p1.Y - p2.Y, p1.Z - p2.Z);
            p3D.Vector3D pv1  = new p3D.Vector3D(p_rand.X - p2.X, p_rand.Y - p2.Y, p_rand.Z - p2.Z);
            p3D.Vector3D r1   = p3D.Vector3D.CrossProduct(p2p1, pv1);
            p3D.Vector3D s1   = p3D.Vector3D.CrossProduct(p2p1, r1);
            r1.Normalize();
            s1.Normalize();
            for (double theta = 0; theta < Math.PI * 2.0; theta += theta_inc)
            {
                p3D.Point3D n = new p3D.Point3D(0.0, 0.0, 0.0);
                n.X = p2.X + cylinder.Radius * Math.Cos(theta) * r1.X + cylinder.Radius * Math.Sin(theta) * s1.X;
                n.Y = p2.Y + cylinder.Radius * Math.Cos(theta) * r1.Y + cylinder.Radius * Math.Sin(theta) * s1.Y;
                n.Z = p2.Z + cylinder.Radius * Math.Cos(theta) * r1.Z + cylinder.Radius * Math.Sin(theta) * s1.Z;
                Convert3DTo2D(rot_x, rot_y, rot_z, n.X, n.Y, n.Z, ref x, ref y, ref z);
                chart.Series[seriesNames[1]].Points.AddXY(x, y);
            }

            p3D.Point3D[] q       = new p3D.Point3D[4];
            double        nfacets = cylinder.Facet_number;

            for (double i = 0; i < nfacets; i++)
            {
                int    n      = 0;
                double theta1 = i * 2 * Math.PI / nfacets;
                double theta2 = (i + 1) * 2 * Math.PI / nfacets;
                q[n].X = p1.X + cylinder.Radius * Math.Cos(theta1) * r0.X + cylinder.Radius * Math.Sin(theta1) * s0.X;
                q[n].Y = p1.Y + cylinder.Radius * Math.Cos(theta1) * r0.Y + cylinder.Radius * Math.Sin(theta1) * s0.Y;
                q[n].Z = p1.Z + cylinder.Radius * Math.Cos(theta1) * r0.Z + cylinder.Radius * Math.Sin(theta1) * s0.Z;
                n++;
                q[n].X = p2.X + cylinder.Radius * Math.Cos(theta1) * r0.X + cylinder.Radius * Math.Sin(theta1) * s0.X;
                q[n].Y = p2.Y + cylinder.Radius * Math.Cos(theta1) * r0.Y + cylinder.Radius * Math.Sin(theta1) * s0.Y;
                q[n].Z = p2.Z + cylinder.Radius * Math.Cos(theta1) * r0.Z + cylinder.Radius * Math.Sin(theta1) * s0.Z;
                n++;
                q[n].X = p1.X + cylinder.Radius * Math.Cos(theta2) * r0.X + cylinder.Radius * Math.Sin(theta2) * s0.X;
                q[n].Y = p1.Y + cylinder.Radius * Math.Cos(theta2) * r0.Y + cylinder.Radius * Math.Sin(theta2) * s0.Y;
                q[n].Z = p1.Z + cylinder.Radius * Math.Cos(theta2) * r0.Z + cylinder.Radius * Math.Sin(theta2) * s0.Z;
                n++;
                q[n].X = p2.X + cylinder.Radius * Math.Cos(theta2) * r0.X + cylinder.Radius * Math.Sin(theta2) * s0.X;
                q[n].Y = p2.Y + cylinder.Radius * Math.Cos(theta2) * r0.Y + cylinder.Radius * Math.Sin(theta2) * s0.Y;
                q[n].Z = p2.Z + cylinder.Radius * Math.Cos(theta2) * r0.Z + cylinder.Radius * Math.Sin(theta2) * s0.Z;
                int[] points = { 0, 1, 3, 2 };
                for (int j = 0; j < 4; j++)
                {
                    Convert3DTo2D(rot_x, rot_y, rot_z, q[points[j]].X, q[points[j]].Y, q[points[j]].Z, ref x, ref y, ref z);
                    chart.Series[seriesNames[2]].Points.AddXY(x, y);
                }
            }
        }