private void Open3DView(VisualizationInfo v)
{
try
{
// {
//
Tuple<Point3D, Vector3D, Vector3D, ViewpointProjection, double> tuple = GetViewCoordinates(v);
if (tuple == null)
{
MessageBox.Show("Viewpoint not formatted correctly.", "Viewpoint Error", MessageBoxButton.OK, MessageBoxImage.Error);
return;
}
Document oDoc = Autodesk.Navisworks.Api.Application.ActiveDocument;
// get current viewpoint
// Viewpoint oCurVP = oDoc.vi.CurrentViewpoint.ToViewpoint;
// get copy viewpoint
Viewpoint oCopyVP = new Viewpoint();
oCopyVP.AlignDirection(tuple.Item3);
oCopyVP.AlignUp(tuple.Item2);
oCopyVP.Projection = tuple.Item4;
// **** CUSTOM VALUE FOR TEKLA **** //
// otherwise = 1
// **** CUSTOM VALUE FOR TEKLA **** //
const double TEKLA = 1.25;
double x = tuple.Item5 / TEKLA;
if (oCopyVP.Projection == ViewpointProjection.Orthographic)
{
oCopyVP.Position = tuple.Item1;
oCopyVP.FocalDistance = 1;
//top center point of view
Point3D xyzTL = oCopyVP.Position.Add(tuple.Item2.Multiply(x));
oCopyVP.SetExtentsAtFocalDistance(1, xyzTL.DistanceTo(oCopyVP.Position));
}
else
{
//double angle = tuple.Item5 * Math.PI / 180;
// MessageBox.Show(tuple.Item5.ToString() + " " +(Math.Tan(angle / 2)*2).ToString());
oCopyVP.FocalDistance = tuple.Item5;
//oCopyVP.SetExtentsAtFocalDistance(Math.Tan(angle / 2) * 2, Math.Tan(angle / 2) * 2 / oCopyVP.AspectRatio);
oCopyVP.Position = tuple.Item1;
}
//SavedViewpoint sv = new SavedViewpoint(oCopyVP);
//sv.DisplayName = "test view";
//sv.Guid = Guid.NewGuid();
//oDoc.SavedViewpoints.AddCopy(sv);
oDoc.CurrentViewpoint.CopyFrom(oCopyVP);
if (v.Components != null && v.Components.Any())
{
// ModelItemCollection selected = new ModelItemCollection();
List<ModelItem> attachedElems = new List<ModelItem>();
List<ModelItem> elems = oDoc.Models.First.RootItem.DescendantsAndSelf.ToList<ModelItem>();
foreach (var item in elems.Where(o => o.InstanceGuid != Guid.Empty))
{
string ifcguid = IfcGuid.ToIfcGuid(item.InstanceGuid).ToString();
if (v.Components.Any(o => o.IfcGuid == ifcguid))
attachedElems.Add(item);
}
if (attachedElems.Any())//avoid to hide everything if no elements matches
{
if (MySettings.Get("selattachedelems") == "0")
{
List<ModelItem> elemsVisible = new List<ModelItem>();
foreach (var item in attachedElems)
{
elemsVisible.AddRange(item.AncestorsAndSelf);
}
foreach (var item in elemsVisible)
elems.Remove(item);
oDoc.Models.ResetAllHidden();
oDoc.Models.SetHidden(elems, true);
}
else
{
oDoc.CurrentSelection.Clear();
oDoc.CurrentSelection.AddRange(attachedElems);
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
//setVisibility(v);
}
public Tuple<Point3D, Vector3D, Vector3D, Autodesk.Navisworks.Api.ViewpointProjection, double> GetViewCoordinates(VisualizationInfo viewport)