Exemple #1
0
        private static GeometryModel3D[] GetCameraPlanar(CameraPosition camera)
        {
            List <GeometryModel3D> models = new List <GeometryModel3D>();

            var model = new MeshGeometryModel3D();

            var length = (camera.FocalLength / Math.Sqrt(Math.Pow(camera.Height, 2) + Math.Pow(camera.Width, 2)));

            var p1 = camera.CameraCenter +
                     length * (CameraPosition.GetCornerPointToAxis(camera, camera.Orientation,
                                                                   CameraPosition.Direction.TopLeft));

            var p2 = camera.CameraCenter +
                     length * (CameraPosition.GetCornerPointToAxis(camera, camera.Orientation,
                                                                   CameraPosition.Direction.TopRight));

            var p3 = camera.CameraCenter +
                     length * (CameraPosition.GetCornerPointToAxis(camera, camera.Orientation,
                                                                   CameraPosition.Direction.BottomRight));

            var p4 = camera.CameraCenter +
                     length * (CameraPosition.GetCornerPointToAxis(camera, camera.Orientation,
                                                                   CameraPosition.Direction.BottomLeft));

            model.Geometry = PrimitiveBuilder.GetRect(p1.ToVector3(), p2.ToVector3(), p3.ToVector3(), p4.ToVector3());

            //model.Material = new PhongMaterial
            //{
            //    DiffuseMap = new BitmapImage(new Uri(camera.File))
            //};

            ////model.Material = PhongMaterials.Yellow;

            ////Viewport.Items.Add(model);
            //models.Add(model);

            var linemodel = new LineGeometryModel3D();
            var lb        = new LineBuilder();

            lb.AddLine(camera.CameraCenter.ToVector3(), p1.ToVector3());
            lb.AddLine(camera.CameraCenter.ToVector3(), p2.ToVector3());
            lb.AddLine(camera.CameraCenter.ToVector3(), p3.ToVector3());
            lb.AddLine(camera.CameraCenter.ToVector3(), p4.ToVector3());
            lb.AddLine(p1.ToVector3(), p2.ToVector3());
            lb.AddLine(p2.ToVector3(), p3.ToVector3());
            lb.AddLine(p3.ToVector3(), p4.ToVector3());
            lb.AddLine(p4.ToVector3(), p1.ToVector3());
            lb.AddLine(p1.ToVector3(), p3.ToVector3());
            lb.AddLine(p2.ToVector3(), p4.ToVector3());

            linemodel.Geometry = lb.ToLineGeometry3D();
            linemodel.Color    = LUT.GetRandomColor();

            linemodel.Name = "PlanarCamera_" + Path.GetFileName(camera.File).Split('.').First() + "_" + camera.Id;

            models.Add(linemodel);

            MeshBuilder         mb = new MeshBuilder();
            MeshGeometryModel3D modelCameraCenter = new MeshGeometryModel3D();

            mb.AddSphere(camera.CameraCenter.ToVector3(), 0.03);
            mb.AddSphere(p1.ToVector3(), 0.03);
            modelCameraCenter.Geometry = mb.ToMeshGeometry3D();

            modelCameraCenter.Material = new PhongMaterial()
            {
                DiffuseColor = linemodel.Color,
                AmbientColor = linemodel.Color
            };


            //models.Add(modelCameraCenter);

            return(models.ToArray());
        }