private void Form1_Load(object sender, EventArgs e) { oldClientSize = this.ClientSize; settings = new Settings(); renderManager = new RenderManager(); renderManager.CreateDefaultControl(); /* if (!renderManager.CreateControl("MeshRenderer.SharpGL2.dll", new string[] { "SharpGL.dll" })) { renderManager.CreateDefaultControl(); if (frmLog == null) { frmLog = new FormLog(); } frmLog.AddItem("Failed to initialize OpenGL.", true); } */ var control = renderManager.RenderControl; if (control != null) { this.splitContainer1.Panel2.Controls.Add(control); // Initialize control control.BackColor = Color.Black; control.Dock = DockStyle.Fill; control.Font = new Font("Consolas", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))); control.Location = new System.Drawing.Point(0, 0); control.Name = "renderControl1"; control.Size = new Size(703, 612); control.TabIndex = 0; control.Text = "meshRenderer1"; renderManager.Initialize(); } else { DarkMessageBox.Show("Ooops ...", "Failed to initialize renderer."); } renderData = new RenderData(); }
public void SetData(RenderData data) { renderer.SetData(data); }
/// <summary> /// Export the mesh to PNG format. /// </summary> /// <param name="mesh">The current mesh.</param> /// <param name="filename">The PNG filename.</param> /// <param name="width">The desired width (pixel) of the image.</param> public void Export(Mesh mesh, string filename, int width) { // Get mesh data -- TODO: Use RenderControl's RenderData RenderData data = new RenderData(); data.SetMesh(mesh); // Check file name if (String.IsNullOrWhiteSpace(filename)) { filename = String.Format("mesh-{0}.png", DateTime.Now.ToString("yyyy-M-d-hh-mm-ss")); } Bitmap bitmap; // Check if the specified width is reasonable if (width < 2 * Math.Sqrt(mesh.Vertices.Count)) { bitmap = new Bitmap(400, 200); Graphics g = Graphics.FromImage(bitmap); g.Clear(colors.Background); string message = String.Format("Sorry, I won't render {0} points on such a small image!", mesh.Vertices.Count); SizeF sz = g.MeasureString(message, SystemFonts.DefaultFont); g.SmoothingMode = SmoothingMode.AntiAlias; g.DrawString(message, SystemFonts.DefaultFont, colors.Point, 200 - sz.Width / 2, 100 - sz.Height / 2); g.Dispose(); } else { var bounds = data.Bounds; // World margin on each side float margin = (float)bounds.Height * 0.05f; float scale = width / ((float)bounds.Width + 2 * margin); var target = new Rectangle(0, 0, width, (int)((bounds.Height + 2 * margin) * scale)); bitmap = new Bitmap(width, target.Height, PixelFormat.Format32bppPArgb); Zoom zoom = new Zoom(); zoom.Initialize(target, bounds); Graphics g = Graphics.FromImage(bitmap); g.Clear(colors.Background); g.SmoothingMode = SmoothingMode.HighQuality; MeshRenderer meshRenderer = new MeshRenderer(data, colors); meshRenderer.Render(g, zoom); g.Dispose(); } if (Path.GetExtension(filename) != ".png") { filename += ".png"; } bitmap.Save(filename, ImageFormat.Png); }