【Revit】Revit二次开发错误及警告屏蔽弹窗方法
public class BeeFaceFailureHandler : IFailuresPreprocessor { public string ErrorMessage { set; get; } public string ErrorSeverity { set; get; } public BeeFaceFailureHandler() { ErrorMessage = ""; ErrorSeverity = ""; } public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor) { IList<FailureMessageAccessor> failureMessages = failuresAccessor.GetFailureMessages(); foreach (FailureMessageAccessor failureMessageAccessor in failureMessages) { FailureDefinitionId id = failureMessageAccessor.GetFailureDefinitionId(); try { ErrorMessage = failureMessageAccessor.GetDescriptionText(); } catch { ErrorMessage = "Unknown Error"; } try { FailureSeverity failureSeverity = failureMessageAccessor.GetSeverity(); ErrorSeverity = failureSeverity.ToString(); if (failureSeverity == FailureSeverity.Warning) { //if (failureMessageAccessor.GetDescriptionText() == "同一位置处具有相同实例。这将导致在明细表中重复计算。.") //{ // List<ElementId> c = failureMessageAccessor.GetFailingElementIds().ToList(); // if (c.Count > 1) // { // failuresAccessor.DeleteElements(new List<ElementId>() { c[1] }); // } //} //else //{ // 如果是警告,则禁止消息框 failureMessageAccessor.GetDefaultResolutionCaption(); //} failuresAccessor.DeleteWarning(failureMessageAccessor); } else { // 如果是错误:则取消导致错误的操作,但是仍然继续整个事务 if (ErrorMessage.Contains("线太短")) { failureMessageAccessor.SetCurrentResolutionType(FailureResolutionType.DeleteElements); failuresAccessor.ResolveFailure(failureMessageAccessor); return FailureProcessingResult.ProceedWithCommit; } //else //{ // failuresAccessor.DeleteWarning(failureMessageAccessor); // return FailureProcessingResult.ProceedWithCommit; //} } } catch (Exception ex) { } } return FailureProcessingResult.Continue; } [Description("这个方法用在事务开始前,在FailureHandler初始化后调用")] /// <summary> /// 这个方法用在事务开始前,在FailureHandler初始化后调用 /// </summary> public static void SetFailedHandlerBeforeTransaction(IFailuresPreprocessor failureHandler, Transaction transaction) { FailureHandlingOptions failureHandlingOptions = transaction.GetFailureHandlingOptions(); failureHandlingOptions.SetFailuresPreprocessor(failureHandler); // 这句话是关键 //failureHandlingOptions.SetClearAfterRollback(true); transaction.SetFailureHandlingOptions(failureHandlingOptions); } }
调用方法:
Transaction tran = new Transaction(doc, "测试"); var failure = new BeeFaceFailureHandler(); BeeFaceFailureHandler.SetFailedHandlerBeforeTransaction(failure, tran); tran.Start(); //------- tran.Commit();
下面讲一下之前碰到的创建楼板的一个错误:边界边缘线彼此相交.边界等高线不可扭曲
解决方案:
1. 板的”结构“属性不要勾选,或者
2. 板的”启用分析模型“不要勾选
对应的,我们可以再创建floor之后,马上调用下面的任何一段代码:
1.floor.get_Parameter(BuiltInParameter.STRUCTURAL_ANALYTICAL_MODEL).Set(0);
2.floor.get_Parameter(BuiltInParameter.FLOOR_PARAM_IS_STRUCTURAL).Set(0);
如果不需要分析模型,请使用方法2,如果既不需要分析模型又不需要钢筋,请使用方法1.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2018-04-27 【转】JS对Cookie的读写删除
2016-04-27 【转】【WPF】WPF 登录窗口关闭时打开主窗口