public static bool TryTransformPushPinData(Pushpin data, Model model, out PushPinData transformedData)
{
if (model != null)
{
transformedData = new PushPinData(data);
if (!Path.GetExtension(new Uri(model.FileName).LocalPath)
.Equals(".nwd", StringComparison.OrdinalIgnoreCase))
{
Transform3D modelToWorldTransform = GetModelToWorldTransform(model);
transformedData.Location = TransformPoint(data.Location, modelToWorldTransform);
transformedData.Eye = TransformPoint(data.Eye, modelToWorldTransform);
transformedData.Target = TransformPoint(data.Target, modelToWorldTransform);
}
if (transformedData.IsOrthographic && transformedData.OrthographicHeight.HasValue)
{
double num = Autodesk.Navisworks.Api.Interop.LcOaUnit.ScaleFactor(model.Units,
Autodesk.Navisworks.Api.Application.MainDocument.Models.First.Units);
transformedData.OrthographicHeight *= num;
}
return true;
}
transformedData = null;
return false;
}
private static Transform3D GetModelToWorldTransform(Model model)
{
double value = Autodesk.Navisworks.Api.Interop.LcOaUnit.ScaleFactor(
model.Units,
Autodesk.Navisworks.Api.Application.MainDocument.Models.First.Units);
Transform3DComponents transform3DComponents = model.Transform.Factor();
transform3DComponents.Scale = transform3DComponents.Scale.Multiply(value);
return transform3DComponents.Combine();
}
private static double[] TransformPoint(double[] pnt, Transform3D transform)
{
return LinearUtils.Vector3DToArray(new Vector3D(pnt[0], pnt[1], pnt[2]).Multiply(transform.Linear).Add(transform.Translation));
}