关于Revit 共享参数的那点事

本文深入解析Revit中共享参数的定义与应用,介绍其在项目文档和族文档中的强大功能,包括创建、管理和代码实现步骤,以及使用时的注意事项。
关注公众号及时获取文章更新

根据Autodesk官方的定义,共享参数是参数定义,可用于多个族或项目中。 它最牛掰的功能在于可以直接在项目文档里给族添加参数  >>>>  就是这么简单粗暴,来我们一起了解一下Revit 中这个神奇的参数定义功能!


目录

 1. 共享参数的概念

2. 操作方法

3. 代码实现

4. 注意事项


 1. 共享参数的概念

刚才已经提到过了共享参数是用于参数定义的,而且它不仅可以在族文档中定义参数,还可以在项目文档中再定义参数,简直逆天!不仅如此,它的作用对象是族类别(注意不是族类型,族类别包括:墙啊、结构柱啊、公制常规模型等等),这些参数随后可以用于创建明细表,这是一般参数没有的待遇呀!最重要的是,共享参数定义保存在与任何族文件或 Revit 项目不相关的txt文件中,这样就可以从其他族或项目中访问此文件,不用重复定义啦!

话不多说,直接上效果图!

2. 操作方法

(1)首先你得找到“共享参数”的功能按钮在哪吧

  • 它位于“管理”面板下,和Dynamo大兄弟在一个面板下哦!

(2) 创建共享参数定义文件

  • 点击创建按钮,选择文件保存的路径,如果有已经定义好的文件直接浏览即可。

(3) 创建参数组,方便对参数的管理。

(4) 新建一个参数作为测试,我这边取了一个“MyDefinition”的文字类型参数。

(5)点击“确定”之后,在管理面板下打开“项目参数”

(6)添加参数,参数类型为“共享参数”,点击进行参数选择

  •  选择“MyGroup”参数组下的参数定义,并确定。

  •  设定共享参数的类型和参数的分组位置!

(7) 添加共享参数的作用类别,可多选。

(8)确定之后,验证是否成功,查看常规模型是否存在名为“MyDefinition”的文字类型参数。

3. 代码实现


private void CreateSharInfo(Application revitApp, Document revitDoc)
        {
            try
            {
                string sharedParametersFilename = @"C:\Users\炳勇\OneDrive\桌面\shared-parameters.txt";
                string groupName = "MyGroup";
                string definitionName = "MyDefinition";
                ParameterType parameterType = ParameterType.Text;
                CategorySet categorySet = new CategorySet();
                Category wallCategory = revitDoc.Settings.Categories.get_Item(BuiltInCategory.OST_GenericModel);
                categorySet.Insert(wallCategory);
                bool instanceParameter = true;
                BuiltInParameterGroup parameterGroup = BuiltInParameterGroup.PG_DATA;
                if (!System.IO.File.Exists(sharedParametersFilename))
                {
                    try
                    {
                        System.IO.StreamWriter sw = System.IO.File.CreateText(sharedParametersFilename);
                        sw.Close();
                    }
                    catch (Exception)
                    {
                        throw new Exception(string.Format("Can't create shared parameter file:{0}", sharedParametersFilename));
                    }
                }
                revitApp.SharedParametersFilename = sharedParametersFilename;

                DefinitionFile definitionFile = revitApp.OpenSharedParameterFile();
                if (definitionFile == null)
                {
                    throw new Exception("Can not open shared parameter file");
                }

                DefinitionGroups groups = definitionFile.Groups;
                DefinitionGroup group = groups.get_Item(groupName);
                if (group == null)
                {
                    group = groups.Create(groupName);
                }
                Definition definition = group.Definitions.get_Item(definitionName);
                if (definition == null)
                {
                    definition = group.Definitions.Create(new ExternalDefinitionCreationOptions(definitionName, parameterType));
                }
                ElementBinding binding = null;
                if (instanceParameter)
                {
                    binding = revitApp.Create.NewInstanceBinding(categorySet);
                }
                else
                {
                    binding = revitApp.Create.NewTypeBinding(categorySet);
                }
                bool insertSuccess = revitDoc.ParameterBindings.Insert(definition, binding, parameterGroup);
                if (!insertSuccess)
                {
                    throw new Exception("Failed to bind definition to category");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

4. 注意事项

  • 共享参数不仅可以通过代码进行创建,还能提取并赋值,修改方法可参照其他类型参数更改的代码:Revit API 修改项目文档中族参数的几个要点
  • 新建共享参数文件时,必须采用unicode编码,否则系统无法识别;
  • 共享参数的定义文件删除后,并不会影响到已经添加到模型中的参数;
  • 好像没有什么要注意的了!

 

<think>好的,用户之前询问了工程软件标注取值的机制以及穿透取值的方法,现在他们又针对Revit共享参数穿透机制提出问题。我需要先理解用户的具体需求。用户可能在使用Revit时遇到了参数共享的问题,或者想要在不同项目或族之间传递数据,特别是在涉及多个文件或协作时。 首先,我需要回顾Revit共享参数机制。共享参数Revit中允许在不同族、项目之间共享自定义参数的功能,与项目参数不同,共享参数存储在外部文件中,可以被多个项目或族引用。用户提到的“穿透机制”可能指的是如何通过这些共享参数在不同文件中传递数据,比如从链接模型或外部文件中获取参数值。 接下来,我需要确定用户可能的应用场景。他们可能在处理大型项目,需要多个团队协作,或者在整合不同专业的模型时,需要参数的一致性。例如,建筑模型中的某个参数可能需要传递到结构或MEP模型中,或者在不同族之间保持参数同步。 然后,考虑用户可能的困惑。他们可能想知道如何正确设置共享参数文件,如何在不同项目中应用这些参数,以及如何确保数据能够正确传递和更新。此外,权限管理和版本控制可能也是他们关心的问题,尤其是在多人协作时。 我需要详细解释共享参数的创建步骤、如何绑定到不同类别,以及如何通过API或手动方式实现跨模型的数据穿透。同时,要提到注意项,比如参数命名规范、文件管理、更新机制和权限控制,这些都是实际应用中容易出问题的地方。 另外,用户可能对实际应用案例感兴趣,比如在机电专业中使用共享参数获取建筑标高,或者在结构模型中同步荷载数据。这些例子能帮助他们更好地理解机制的实际应用。 最后,确保回答结构清晰,分步骤说明,并强调最佳实践,比如优先使用原生功能、合理规划参数结构等。同时,提醒用户注意性能优化和错误处理,避免数据冲突或版本问题。</think>Revit共享参数穿透机制是其实现跨项目、跨族参数传递的核心功能,以下从技术原理到应用实践进行详细说明: --- ### 一、底层实现原理 1. **参数存储结构** - 共享参数文件(.txt)独立于项目文件,采用ASCII编码存储 - GUID唯一标识机制确保参数全局唯一性 - 参数分类树形结构(GROUP→PARAM结构) 2. **数据关联方式** ```python # 伪代码示例:参数绑定流程 def bind_shared_parameter(): 加载共享参数文件 → 选择参数GUID → 绑定到目标类别 → 设置参数类型(实例/类型) ``` 3. **元数据穿透路径** ```mermaid graph LR A[源文件参数] -->|GUID匹配| B(共享参数文件) B -->|参数定义映射| C[目标文件参数] ``` --- ### 二、穿透机制实现步骤 1. **基础配置** - 创建共享参数文件(建议按专业分库管理) - 定义参数时需指定: - 参数组别(如"结构分析") - 参数类型(长度/面积/文字等) - 参数分组(标识数据/分析结果等) 2. **跨项目穿透** - 链接模型参数穿透: ```revit 链接模型属性 → 勾选"共享位置和标高" → 使用"报告参数"捕获链接模型参数 ``` - 明细表穿透: 通过共享参数创建跨模型可用的明细表字段 3. **跨族穿透** - 在族编辑器中绑定共享参数 - 通过嵌套族实现参数传递: ```revit 父族参数 → 关联共享参数 → 嵌套子族继承参数 → 项目文件最终绑定 ``` --- ### 三、高级穿透技巧 1. **公式级穿透** ```revit =if(共享参数A > 1000, 共享参数B, 共享参数C*0.5) ``` - 支持跨参数公式计算 - 可穿透调用其他族的共享参数 2. **API增强穿透** ```csharp // C#示例:通过API穿透获取参数 FilteredElementCollector collector = new FilteredElementCollector(doc); var param = collector.WhereElementIsNotElementType() .FirstOrDefault(e => e.LookupParameter("共享参数名称") != null
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核小青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值