public void deleteShape(Shapes.Cylinder cylinder) { string[] seriesNames = cylinderSeriesNames(cylinder); foreach (string name in seriesNames) { Series series = chart.Series[name]; chart.Series.Remove(series); } }
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); }
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; } }
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); }
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); } }
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); } } }