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;
}