using System.Windows.Forms; using System.Drawing; using Drawing3d; namespace Sample { public partial class Form1 : Form { MyDevice Device = new MyDevice(); public Form1() { InitializeComponent(); Device.WinControl = this; } } public class MyDevice:OpenGlDevice { Texture T = new Texture(); Line MyLine = new Line(new xy(0, 0), new xy(2.5, 2)); Arc MyArc = new Arc(new xy(0, 0), 2, System.Math.PI / 3, 0, true); Bezier MyBezier = new Bezier(new xy(0, 0), new xy(1, 1), new xy(2, -1), new xy(3, 0)); QSpline MyQSpline = new QSpline(new xy(0, 0), new xy(3, 0), new xy(2.5, 2), 1.5); BSpline MyBSpline = new BSpline(); Nurbs2d MyNurbs = new Nurbs2d(); public override void OnPaint() { base.OnPaint(); LightEnabled = false; PolygonMode = PolygonMode.Line; // Line PushMatrix(); Translate(-5, 1, 0); drawCurve(MyLine); xyArray Pts = new xyArray(2); Pts[0] = MyLine.A; Pts[1] = MyLine.B; DrawPoints(Pts); drawText(Font,new xyz(1, 2, 0), "Line", 0); PopMatrix(); // Arc PushMatrix(); Translate(-1, 1, 0); drawCurve(MyArc); Pts[0] = MyArc.A; Pts[1] = MyArc.B; DrawPoints(Pts); drawText(Font,new xyz(1, 2, 0), "Arc", 0); PopMatrix(); // Bezier PushMatrix(); Translate(3, 1, 0); drawCurve(MyBezier); drawText(Font,new xyz(1, 2, 0), "Bezier", 0); Pts = new xyArray(4); Pts.FromArray(MyBezier.Points); DrawPoints(Pts); PopMatrix(); // QSpline PushMatrix(); Translate(-5, -1.5, 0); drawCurve(MyQSpline); drawText(Font,new xyz(1, 2, 0), "QSpline", 0); Pts = new xyArray(3); Pts[0] = MyQSpline.A; Pts[1] = MyQSpline.ControlPoint; Pts[2] = MyQSpline.B; DrawPoints(Pts); // BSpline PopMatrix(); PushMatrix(); Translate(-1, -1.5, 0); drawCurve(MyBSpline); drawText(Font,new xyz(1, 2, 0), "BSpline", 0); DrawPoints(MyBSpline.ControlPoints); PopMatrix(); // Nurbs PushMatrix(); Translate(3, -1.5, 0); drawCurve(MyNurbs); drawText(Font,new xyz(1, 2, 0), "Nurbs", 0); DrawPoints(MyBSpline.ControlPoints); PopMatrix(); LightEnabled = true; } void DrawPoints(xyArray Pts) { LightEnabled = false; for (int i = 0; i < Pts.Count; i++) drawPoint(Pts[i].toXYZ(), 0.2, true); LightEnabled = true; } Drawing3d.Font Font = new Drawing3d.Font("Modern"); protected override void OnCreated() { base.OnCreated(); BackColor = Color.White; Font.FontSize = 0.5; // Initialization of MyBspline & MyNurbs xyArray ControlPoints = new xyArray(10); ControlPoints[0] = new xy(0, 0); ControlPoints[1] = new xy(0.25, 3 / 3f); ControlPoints[2] = new xy(3 / 3f, 5 / 3f); ControlPoints[3] = new xy(4 / 3f, 1 / 3f); ControlPoints[4] = new xy(5 / 3f, 0); ControlPoints[5] = new xy(7 / 3f, 0); ControlPoints[6] = new xy(8 / 3f, -1 / 3f); ControlPoints[7] = new xy(9 / 3f, 3 / 3f); ControlPoints[8] = new xy(10 / 3f, 5 / 3f); ControlPoints[9] = new xy(11 / 3f, 1 / 3f); // Interpolationdegree MyBSpline.Degree = 2; MyBSpline.ControlPoints = ControlPoints; // The same Controlpoints MyNurbs.ControlPoints = ControlPoints; // Interpolationdegree MyNurbs.Degree = 3; MyNurbs.Weights = new double[] { 1, 0.3, 1, 0.2, 4, 1, 1.3, 1, 2, 1 }; } } }