1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Revit二次开发—载入族并交互式放置

Revit二次开发—载入族并交互式放置

时间:2023-04-20 16:03:05

相关推荐

Revit二次开发—载入族并交互式放置

文章目录

核心代码问题一:按esc取消放置时报错问题二:如何在放置一个族实例之后退出放置问题三:已存在所载入族时,如何正常放置参考资料

核心代码

using (Transaction tx = new Transaction(doc)){tx.Start("Transaction Name");Family family = null;var str = "xxx.rfa";doc.LoadFamily(str, out family);mit();// 交互式放置之前需要结束事务if (family != null){var symbol = doc.GetElement(family.GetFamilySymbolIds().FirstOrDefault()) as FamilySymboluidoc.PromptForFamilyInstancePlacement(symbol);}}

问题一:按esc取消放置时报错

利用 try-catch 捕获异常,并设置该异常不予处理,代码如下:

try{}catch (Exception ex){//用户取消异常,不抛出异常信息if (!(ex is Autodesk.Revit.Exceptions.OperationCanceledException)){throw ex;}}

问题二:如何在放置一个族实例之后退出放置

思路:注册文档更新事件,事情响应时给Revit窗口发送两次ESC

问题三:已存在所载入族时,如何正常放置

Family family = null;// 过滤当前文档是否存在该族FilteredElementCollector collector = new FilteredElementCollector(doc);collector.OfClass(typeof(Family));IList<Element> CollectorList = collector.ToElements();foreach (var elem in CollectorList){var familyItem = elem as Family;// str是要载入族的名称if (familyItem.Name == Path.GetFileNameWithoutExtension(str)){family = familyItem;break;}}// 如果未载入过,则载入该族if (family == null){doc.LoadFamily(str, out family);}// 交互式放置uidoc.PromptForFamilyInstancePlacement(doc.GetElement(family.GetFamilySymbolIds().FirstOrDefault()) as FamilySymbol);

参考资料

Send Keys to Application Programmatically Using C#

Building Coder(Revit 二次开发) - 放置族实例

Revit二次开发知识分享(十一)放置实例

Revit二次开发知识分享(十二)给Revit发送Esc按键

Revit二次开发 用户Esc取消异常处理

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。