103 lines
3.1 KiB
C#
103 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using Autodesk.Revit.Attributes;
|
|
using Autodesk.Revit.DB;
|
|
using Autodesk.Revit.UI;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace IFC_Revit_Interop
|
|
{
|
|
// Token: 0x02000017 RID: 23
|
|
[Transaction( TransactionMode.Manual)]
|
|
[Regeneration(0)]
|
|
public class LinkedFileManager : IExternalCommand
|
|
{
|
|
// Token: 0x06000075 RID: 117 RVA: 0x00006B8C File Offset: 0x00004D8C
|
|
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
|
|
{
|
|
Document document = commandData.Application.ActiveUIDocument.Document;
|
|
SaveFileDialog saveFileDialog = new SaveFileDialog();
|
|
saveFileDialog.Title = "导出一级链接关系";
|
|
saveFileDialog.Filter = "json files (*.json)|*.json";
|
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
return LinkedFileManager.GetLinkFileInfo(document, saveFileDialog.FileName);
|
|
}
|
|
return (Result)1;
|
|
}
|
|
|
|
// Token: 0x06000076 RID: 118 RVA: 0x00006BE0 File Offset: 0x00004DE0
|
|
public static Result GetLinkFileInfo(Document doc, string resultPath)
|
|
{
|
|
List<Element> list = new FilteredElementCollector(doc).OfCategory((BuiltInCategory)(-2001352)).ToList<Element>();
|
|
List<LinkInstance> list2 = new List<LinkInstance>();
|
|
Result result;
|
|
try
|
|
{
|
|
foreach (Element element in list)
|
|
{
|
|
RevitLinkInstance revitLinkInstance = element as RevitLinkInstance;
|
|
if (revitLinkInstance != null)
|
|
{
|
|
RevitLinkType revitLinkType = doc.GetElement(revitLinkInstance.GetTypeId()) as RevitLinkType;
|
|
if (revitLinkType != null && !revitLinkType.IsNestedLink)
|
|
{
|
|
LinkInstance linkInstance = new LinkInstance();
|
|
linkInstance.fileName = revitLinkType.Name;
|
|
linkInstance.attachmentType = revitLinkType.AttachmentType.ToString();
|
|
Transform transform = revitLinkInstance.GetTransform();
|
|
linkInstance.transform = new MyTransform();
|
|
linkInstance.transform.basisX = new double[]
|
|
{
|
|
transform.BasisX.X,
|
|
transform.BasisX.Y,
|
|
transform.BasisX.Z
|
|
};
|
|
linkInstance.transform.basisY = new double[]
|
|
{
|
|
transform.BasisY.X,
|
|
transform.BasisY.Y,
|
|
transform.BasisY.Z
|
|
};
|
|
linkInstance.transform.basisZ = new double[]
|
|
{
|
|
transform.BasisZ.X,
|
|
transform.BasisZ.Y,
|
|
transform.BasisZ.Z
|
|
};
|
|
linkInstance.transform.origin = new double[]
|
|
{
|
|
transform.Origin.X * 304.79999999999995,
|
|
transform.Origin.Y * 304.79999999999995,
|
|
transform.Origin.Z * 304.79999999999995
|
|
};
|
|
linkInstance.transform.scale = transform.Scale;
|
|
list2.Add(linkInstance);
|
|
}
|
|
}
|
|
}
|
|
File.WriteAllText(resultPath, JsonConvert.SerializeObject(new FileLinkInfo
|
|
{
|
|
linkInstances = list2,
|
|
fileName = Path.GetFileName(doc.PathName)
|
|
}));
|
|
result = 0;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
result = (Result)(-1);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Token: 0x04000076 RID: 118
|
|
private const double _inch_to_mm = 25.4;
|
|
|
|
// Token: 0x04000077 RID: 119
|
|
private const double _foot_to_mm = 304.79999999999995;
|
|
}
|
|
}
|