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();
            }
        }
Exemple #5
0
        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
        }
Exemple #7
0
        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();
 }