Files
SZ-IFC/IFC_Revit_Interop_VERSION_2018/IFC_Revit_Interop/LinkedFileManager.cs

103 lines
3.1 KiB
C#
Raw Normal View History

2026-02-23 16:55:57 +08:00
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;
}
}