Bcfier.XbimXplorer.MainWindow.GenerateViewpoint C# (CSharp) Method

GenerateViewpoint() private static method

private static GenerateViewpoint ( DrawingControl3D control3D ) : Bcfier.Bcf.Bcf2.VisualizationInfo
control3D DrawingControl3D
return Bcfier.Bcf.Bcf2.VisualizationInfo
        private static VisualizationInfo GenerateViewpoint(DrawingControl3D control3D)
        {
            try
            {
                var v = new VisualizationInfo();
                // it is a orthogonal view
                if (control3D.Viewport.Orthographic)
                {
                    // ReSharper disable once RedundantNameQualifier
                    var cam = control3D.Viewport.Camera as System.Windows.Media.Media3D.OrthographicCamera;

                    if (cam != null)
                        v.OrthogonalCamera = new OrthogonalCamera
                        {
                            // todo: this works internally, but we must ensure it's compatible with other bcf viewers
                            CameraViewPoint =
                            {
                                X = cam.Position.X,
                                Y = cam.Position.Y,
                                Z = cam.Position.Z
                            },
                            CameraUpVector =
                            {
                                X = cam.UpDirection.X,
                                Y = cam.UpDirection.Y,
                                Z = cam.UpDirection.Z
                            },
                            CameraDirection =
                            {
                                X = cam.LookDirection.X,
                                Y = cam.LookDirection.Y,
                                Z = cam.LookDirection.Z
                            },
                            ViewToWorldScale = cam.Width
                        };
                }
                // it is a perspective view
                else
                {
                    // todo: this works internally, but we must ensure it's compatible with other bcf viewers
                    var cam = control3D.Viewport.Camera as System.Windows.Media.Media3D.PerspectiveCamera;
                    if (cam != null)
                        v.PerspectiveCamera = new PerspectiveCamera()
                        {
                            CameraViewPoint =
                            {
                                X = cam.Position.X,
                                Y = cam.Position.Y,
                                Z = cam.Position.Z
                            },
                            CameraUpVector =
                            {
                                X = cam.UpDirection.X,
                                Y = cam.UpDirection.Y,
                                Z = cam.UpDirection.Z
                            },
                            CameraDirection =
                            {
                                X = cam.LookDirection.X,
                                Y = cam.LookDirection.Y,
                                Z = cam.LookDirection.Z
                            },
                            FieldOfView = cam.FieldOfView
                        };
                }

                /* todo components list to be implemented

                //COMPONENTS PART
                var versionName = "XbimXplorer BCFIer Plugin";
                v.Components = new List<Component>();

                var visibleElems = new FilteredElementCollector(doc, doc.ActiveView.Id)
                    .WhereElementIsNotElementType()
                    .WhereElementIsViewIndependent()
                    .ToElementIds();
                var hiddenElems = new FilteredElementCollector(doc)
                        .WhereElementIsNotElementType()
                        .WhereElementIsViewIndependent()
                        .Where(x => x.IsHidden(doc.ActiveView)
                                    ||
                                    !doc.ActiveView.IsElementVisibleInTemporaryViewMode(
                                        TemporaryViewMode.TemporaryHideIsolate, x.Id)).ToList();
                    //would need to check how much this is affecting performance

                var selectedElems = uidoc.Selection.GetElementIds();

                //include only hidden elements and selected in the BCF
                if (visibleElems.Count() > hiddenElems.Count())
                {
                    foreach (var elem in hiddenElems)
                    {
                        v.Components.Add(new Component
                        {
                            OriginatingSystem = versionName,
                            IfcGuid = IfcGuid.ToIfcGuid(ExportUtils.GetExportId(doc, elem.Id)),
                            Visible = false,
                            Selected = false,
                            AuthoringToolId = elem.Id.IntegerValue.ToString()
                        });
                    }
                    foreach (var elem in selectedElems)
                    {
                        v.Components.Add(new Component
                        {
                            OriginatingSystem = versionName,
                            IfcGuid = IfcGuid.ToIfcGuid(ExportUtils.GetExportId(doc, elem)),
                            Visible = true,
                            Selected = true,
                            AuthoringToolId = elem.IntegerValue.ToString()
                        });
                    }
                }
                //include only visible elements
                //all the others are hidden
                else
                {
                    foreach (var elem in visibleElems)
                    {
                        v.Components.Add(new Component
                        {
                            OriginatingSystem = versionName,
                            IfcGuid = IfcGuid.ToIfcGuid(ExportUtils.GetExportId(doc, elem)),
                            Visible = true,
                            Selected = selectedElems.Contains(elem),
                            AuthoringToolId = elem.IntegerValue.ToString()
                        });
                    }
                }
                */
                return v;

            }
            catch (Exception ex)
            {
                MessageBox.Show("Error generating viewpoint", "exception: " + ex);
            }
            return null;
        }