[摘要] 前段时间想到一个点,为了保证项目数据的统一,应当禁止载入未知来源的族,所有可以载入的族应由管理员审核通过存放在企业
前段时间想到一个点,为了保证项目数据的统一,应当禁止载入未知来源的族,所有可以载入的族应由管理员审核通过存放在企业族库内。那幺就需要Revit在族载入前对族进行检查,匹配路径或其他信息。其实严格的来讲还需要禁止编辑族,以及在拒绝载入后需要向管理员反馈信息。这里通过二次开发先简单实现载入族时进行对族进行自检的这幺一个简单的功能,后面如果有机会希望可以对整个功能进行深化。
思路是通过API中FamilyLoadingIntoDocument这个事件实现这个功能。当族载入的时候,触发事件,判断族是否满足条件,满足则允许载入,否则取消载入族的事务。判断的方法有很多,我这里检查的是族的路径以及检查族文件内的一个参数,实际应用的时候可以选择更加合适的一些条件。
以下代码:
public class Class1 : IExternalApplication { public Result OnStartup(UIControlledApplication application) { //注册事件 application.ControlledApplication.FamilyLoadingIntoDocument += new EventHandler<FamilyLoadingIntoDocumentEventArgs>(checkFamily); return Result.Succeeded; } public Result OnShutdown(UIControlledApplication application) { //注销事件 application.ControlledApplication.FamilyLoadingIntoDocument -= new EventHandler<FamilyLoadingIntoDocumentEventArgs>(checkFamily); return Result.Succeeded; } private void checkFamily(object sender, FamilyLoadingIntoDocumentEventArgs e) { //获取族的存放路径 string familyPath = e.FamilyPath; if (familyPath != @"D:Test") { e.Cancel(); TaskDialog.Show("错误","禁止载入未审核的族,请联系管理员XXX"); } else { //获取族的文档 Document familyDoc = e.Document.Application.OpenDocumentFile(familyPath +"//"+ e.FamilyName +".rfa"); //创建族管理器 FamilyManager familyManager = familyDoc.FamilyManager; //获取族类型 FamilyType familyType = familyManager.CurrentType; if (familyType == null) { familyType = familyManager.NewType("标准"); } //获取参数 FamilyParameter familyParameter = familyManager.get_Parameter("测试参数"); //判断 if (familyParameter == null || familyType.AsString(familyParameter) !="允许载入") { if (e.Cancellable) { e.Cancel(); TaskDialog.Show("错误","禁止载入未审核的族,请联系管理员XXX"); } } familyDoc.Close(); } } }