public MainWindow() { InitializeComponent(); axes = new WireObject(@"axes", @"Resources\axes.wo"); wo_object = null; }
public async Task Render_SimpleLine() { await TestUtilities.InitializeWithGraphicsAsync(); using (var memRenderTarget = new MemoryRenderTarget(1024, 1024)) { memRenderTarget.ClearColor = Color4.CornflowerBlue; // Get and configure the camera var camera = (PerspectiveCamera3D)memRenderTarget.Camera; camera.Position = new Vector3(0f, 5f, -7f); camera.Target = new Vector3(0f, 0f, 0f); camera.UpdateCamera(); // Define scene await memRenderTarget.Scene.ManipulateSceneAsync(manipulator => { var wireObject = new WireObject { LineData = new[] { new Line( new Vector3(-0.5f, 0f, -0.5f), new Vector3(0.5f, 0f, -0.5f)), new Line( new Vector3(0.5f, 0f, -0.5f), new Vector3(0.5f, 0f, 0.5f)), new Line( new Vector3(0.5f, 0f, 0.5f), new Vector3(-0.5f, 0f, 0.5f)), new Line( new Vector3(-0.5f, 0f, 0.5f), new Vector3(-0.5f, 0f, -0.5f)) }, Color = Color4.RedColor }; manipulator.AddObject(wireObject); }); await memRenderTarget.AwaitRenderAsync(); // Take screenshot var screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync(); // TestUtilities.DumpToDesktop(screenshot, "Blub.png"); // Calculate and check difference var isNearEqual = BitmapComparison.IsNearEqual( screenshot, TestUtilities.LoadBitmapFromResource("Drawing3D", "SimpleLine.png")); Assert.IsTrue(isNearEqual, "Difference to reference image is to big!"); } }
private void mi_reset_Click(object sender, RoutedEventArgs e) { s_ox_rotate.Value = s_oy_rotate.Value = s_oz_rotate.Value = 0; tb_ox_scalling.Text = tb_oy_scalling.Text = tb_oz_scalling.Text = "100"; tb_ox_shift.Text = tb_oy_shift.Text = tb_oz_shift.Text = "0"; s_total_scale.Value = 100; if (wo_object != null) { wo_object = wo_object.Clone(); } SceneRedrawing(); }
private void mi_load_convex_object_Click(object sender, RoutedEventArgs e) { FileDialog loadObjectFileDialog = FileDialogHandler(); if (loadObjectFileDialog == null) { MessageBox.Show("nothing is selected"); } else { wo_object = new ConvexWireObject(loadObjectFileDialog.SafeFileName, loadObjectFileDialog.FileName); SceneRedrawing(); } }
public async Task Render_SimpleLine() { await UnitTestHelper.InitializeWithGrahicsAsync(); using (MemoryRenderTarget memRenderTarget = new MemoryRenderTarget(1024, 1024)) { memRenderTarget.ClearColor = Color4.CornflowerBlue; // Get and configure the camera PerspectiveCamera3D camera = memRenderTarget.Camera as PerspectiveCamera3D; camera.Position = new Vector3(0f, 5f, -7f); camera.Target = new Vector3(0f, 0f, 0f); camera.UpdateCamera(); // Define scene await memRenderTarget.Scene.ManipulateSceneAsync((manipulator) => { WireObject wireObject = new WireObject(); wireObject.LineData = new Line[] { new Line( new Vector3(-0.5f, 0f, -0.5f), new Vector3(0.5f, 0f, -0.5f)), new Line( new Vector3(0.5f, 0f, -0.5f), new Vector3(0.5f, 0f, 0.5f)), new Line( new Vector3(0.5f, 0f, 0.5f), new Vector3(-0.5f, 0f, 0.5f)), new Line( new Vector3(-0.5f, 0f, 0.5f), new Vector3(-0.5f, 0f, -0.5f)), }; wireObject.LineColor = Color4.RedColor; manipulator.Add(wireObject); }); // Take screenshot GDI.Bitmap screenshot = await memRenderTarget.RenderLoop.GetScreenshotGdiAsync(); //screenshot.DumpToDesktop("Blub"); // Calculate and check difference bool isNearEqual = BitmapComparison.IsNearEqual( screenshot, Properties.Resources.ReferenceImage_SimpleLine); Assert.True(isNearEqual, "Difference to reference image is to big!"); } }
// methods for drawing on canvas private void DrawingWO(WireObject wo, bool isClone) { WireObject projected_wo = null; Vector3 projection_vec; switch (lb_projection_type.SelectedIndex) { case 0: // test mode - orthographic projection (xy) projected_wo = SceneProcessor.PreparingOrthographicProjection(wo); projection_vec = SceneProcessor.orthographic_projection_vec; break; case 1: // first mode - "free projection" projected_wo = SceneProcessor.PreparingFreeProjection(wo); projection_vec = SceneProcessor.free_projection_vec; break; case 2: // second mode - isometric projection, angle = pi / 3 projected_wo = SceneProcessor.PreparingIsometricProjection(wo); projection_vec = SceneProcessor.isometric_projection_vec; break; default: logs.Add(new Log() { Time = DateTime.Now.ToString(), Action = "Drawing WO", Logs = "drawing skipped" }); // log action return; } // draw projection for (int i = 0; i < wo.Ridge.Count; i++) { if (wo.EdgeVisibility(wo.Ridge[i], projection_vec)) { CanvasArea.Children.Add(SceneProcessor.PreparatingLine(projected_wo.Ridge[i].Color, projected_wo.Ridge[i].P1.X, projected_wo.Ridge[i].P1.Y, projected_wo.Ridge[i].P2.X, projected_wo.Ridge[i].P2.Y, isClone)); } } logs.Add(new Log() { Time = DateTime.Now.ToString(), Action = "Drawing WO", Logs = projected_wo.Name + " are drawn" }); // log_action }
public static async Task ResetScene(RenderLoop targetRenderLoop) { await targetRenderLoop.Scene.ManipulateSceneAsync(manipulator => { // Clear the scene first manipulator.Clear(); // Define layers var bgLayer = manipulator.AddLayer("BACKGROUND"); var gridLayer = manipulator.AddLayer("GRID"); manipulator.SetLayerOrderId(bgLayer, 0); manipulator.SetLayerOrderId(gridLayer, 1); manipulator.SetLayerOrderId(Scene.DEFAULT_LAYER_NAME, 2); // Build new background layer with fullscreen texture (layer BACKGROUND) var sourceBackgroundTexture = new AssemblyResourceLink( typeof(App), "Assets.Background.dds"); var resBackgroundTexture = manipulator.AddTextureResource(sourceBackgroundTexture); var objBackgroundTexture = new FullscreenTexture(resBackgroundTexture); objBackgroundTexture.Tag1 = new ModelViewerSceneObjectMetadata(true); manipulator.AddObject(objBackgroundTexture, bgLayer.Name); // Add bottom grid (layer GRID) var resGridGeometry = manipulator.AddResource( _ => new GeometryResource(new Grid3DGeometryFactory { TileWidth = 0.05f, TilesX = 50, TilesZ = 50 })); var gridMesh = manipulator.AddMeshObject(resGridGeometry, gridLayer.Name); gridMesh.YPos = -0.5f; gridMesh.Name = Constants.OBJ_NAME_GRID; gridMesh.Tag1 = new ModelViewerSceneObjectMetadata(true); // Add bounding box (layer GRID) var unitCube = new WireObject( Color4.GreenColor, new BoundingBox( new Vector3(-0.5f, -0.5f, -0.5f), new Vector3(0.5f, 0.5f, 0.5f))); unitCube.Name = Constants.OBJ_NAME_UNIT_CUBE; unitCube.Tag1 = new ModelViewerSceneObjectMetadata(true); manipulator.AddObject(unitCube, gridLayer.Name); }); }
private void mi_remove_from_scene_Click(object sender, RoutedEventArgs e) { wo_object = null; SceneRedrawing(); }