作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在执行 IExternalCommand
时,我可以通过 ExternalCommandData
轻松获取应用程序和文档
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Transaction trans = new Transaction(doc);
在执行 IExternalApplication
时,没有 ExternalCommandData
对象。我需要找到当前打开的 Revit 文件的路径。如何通过 IExternalApplication
访问 Document
?
最佳答案
您也可以这样做(在 IExternalApplication.OnStartup
中),但它依赖于 UIControlledApplication
对象的未记录的功能。我从 Revit 2012 到 2017 一直使用这种技术,所以我想这是一个稳定的假设:
var versionNumber = uiControlledApplication.ControlledApplication.VersionNumber;
var fieldName = versionNumber == "2017" ? "m_uiapplication" : "m_application";
var fi = uiControlledApplication.GetType().GetField(
fieldName, BindingFlags.NonPublic | BindingFlags.Instance);
var uiApplication = (UIApplication)fi.GetValue(uiControlledApplication);
```
想法是使用内省(introspection)来访问UIControlledApplication
对象的非公共(public)字段(m_uiapplication
)。这是 UIApplication
类型。
关于c# - 从 IExternalApplication 获取当前应用程序和文档 - Revit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42382320/
在执行 IExternalCommand 时,我可以通过 ExternalCommandData 轻松获取应用程序和文档 UIApplication uiApp = commandDa
我是一名优秀的程序员,十分优秀!