Parameter of Revit API – 19: Add FamilyParameter (FamilyManager.AddParameter)

 

New family parameters (FamilyParameter) can be added to a family document through the FamilyManager.AddParameter() method. It has three different signatures and the most popular one accepts parameters of the parameter name, parameter group (BuiltInParameterGroup), parameter type ParameterType ()  and a flag to indicate if the FamilyParameter applies to instance or type.

The FamilyParameter can also be associated with a Dimension through its Label property when necessary.

The following method can create a FamilyParameter, set its value, and associate it with a Dimension:

public static void RawAddFamilyParamterAndSetValue(Dimension dim, FamilyManager famMan, FamilyType ft,
            string name, BuiltInParameterGroup group, ParameterType type, bool isInstance, object value)
        {
            FamilyParameter fp = famMan.AddParameter(name, group, type, isInstance);
            if( value!= null ) RawSetFamilyParameterValue(famMan, ft, fp, value);
            //if (value != null) fp.SetValue(famMan, ft, value);
            if( dim != null )   dim.Label = fp;
        }

        public static void RawSetFamilyParameterValue(FamilyManager fm, FamilyType ft, FamilyParameter fp, object value)
        {
            FamilyType curFamType = fm.CurrentType;
            fm.CurrentType = ft;

            try
            {
                switch (fp.StorageType)
                {
                    case StorageType.None:
                        break;
                    case StorageType.Double:
                        if (value.GetType().Equals(typeof(string)))
                        {
                            fm.Set(fp, double.Parse(value as string));
                        }
                        else
                        {
                            fm.Set(fp, Convert.ToDouble(value));
                        }
                        break;
                    case StorageType.Integer:
                        if (value.GetType().Equals(typeof(string)))
                        {
                            fm.Set(fp, int.Parse(value as string));
                        }
                        else
                        {
                            fm.Set(fp, Convert.ToInt32(value));
                        }
                        break;
                    case StorageType.ElementId:
                        if (value.GetType().Equals(typeof(ElementId)))
                        {
                            fm.Set(fp, value as ElementId);
                        }
                        else if (value.GetType().Equals(typeof(string)))
                        {
                            fm.Set(fp, new ElementId(int.Parse(value as string)));
                        }
                        else
                        {
                            fm.Set(fp, new ElementId(Convert.ToInt32(value)));
                        }
                        break;
                    case StorageType.String:
                        fm.Set(fp, value.ToString());
                        break;
                }
            }
            catch
            {
                throw new Exception("Invalid Value Input!");
            }
            finally
            {
                fm.CurrentType = curFamType;
            }
        }

The help method RawSetFamilyParameterValue() has been introduced before. The FamilyParameter Writer can generate it in no time. If necessary the extension method can be generated as well and be used in the method RawAddFamilyParamterAndSetValue() instead.

FamilyParameter Creator of RevitAddinWizardcan take care of all these.

时间: 2024-10-07 10:37:15

Parameter of Revit API – 19: Add FamilyParameter (FamilyManager.AddParameter)的相关文章

minSdk(API 26) > deviceSdk(API 19)解决方式

运行项目时出现"minSdk(API 26) > deviceSdk(API 19)"的提示,因为我用的是手机是sdk(API19)的,而项目要求是最低版本是minSdk(API 26),在我的模拟器或手机上面是不能运行 解决办法:一.也就是最低版本是sdk19及以下,点开了build.gradle,将里面的minSdk改成19或者小于19即可. 注意点:如果项目中用到了API 21及以上的东西,那么在运行的时候还是会报错的,提示你找不到资源,你只有这台测试机,你可以将使用到的地

【Revit API】调用Revit内部命令PostableCommand

Revit内置了一些命令,直接调用Revit操作方式. 可以去API文档查询PostableCommand枚举,还是很多的. 话不多说,直接上代码 var commandId = RevitCommandId.LookupPostableCommandId(PostableCommand.LineStyles); if (app.CanPostCommand(commandId)) { app.PostCommand(commandId); } 原文地址:https://www.cnblogs.

revit API 实现可停靠窗口

---恢复内容开始--- 1.新建类库项目,项目中新建WPF用户控件(UserControl)得到名为UserControl1的实例. revit中可停靠窗口的父类为page类,同时也继承了IDockablePaneProvider接口. 所以需要将相关地方改为图中所示内容. 2.接下来需要在隐藏代码中实现接口中的SetupDockablePane()函数以初始化窗口状态. 1 public void SetupDockablePane(DockablePaneProviderData Data

【Revit API】梁的净高分析

原理就是,先从梁的LocationCurve上取点,然后向板的上表面投影.如果有投影点,再从投影点(板上)向梁的底面投影,这时候如果有投影点的话就能得到距离了. 运用该分析的第一条件是梁是在板的上方,勿忘哈! var beamBottomFaces = FaceUtils.GetBottomFaces(beam); //这个方法是自己封装的 if (null != beamBottomFaces && beamBottomFaces.Any()) { var beamLocationCur

【Revit API】获取链接模型中构件

话不多说,直接代码 var doc = commandData.Application.ActiveUIDocument.Document; FilteredElementCollector linkInstances = new FilteredElementCollector(doc); linkInstances = linkInstances.WherePasses(new ElementClassFilter(typeof(RevitLinkInstance))); if (linkI

第三方登录插件.NET版XY.OAuth-CSharp

XY.OAuth-CSharp GitHub:XY.OAuth-CSharp OSChina:XY.OAuth-CSharp 第三方登录插件.NET版 使用 首先,从NuGet上安装"XY.OAuth" 然后在项目配置文件的根节点下"configuration"的子节点"appSettings"中添加如下下配置信息: 1 <!--第三方登录配置 Start--> 2 <!-- 客户端ID --> 3 <add key

Revit 2015 API 的全部变化和新功能

这里从SDK的文章中摘录出全部的API变化.主要是希望用户用搜索引擎时能找到相关信息: Major changes and renovations to the Revit API APIchanges .NET 4.5 Revit's API is now built with and requires .NET 4.5 forcompilation. VisualC++ runtime 11 update 4 (Visual Studio 2012) Revit is now built w

Revit 2017 编程须要用Visual Studio2015 +.NET Framework 4.52

一年一度的Revit产品公布时刻,我们抢先想各位介绍下Revit 2017的变化和新功能 Major changes and renovations to the Revit API API changes .NET 4.6 All Revit API binaries are now built targeting .NET 4.5.2. However, Revit uses the runtime from .NET 4.6. At a minimum, add-ins will need

如何编程在Revit里创建长度小于0.8mm的线

Revit不知为何出有一个奇怪的规矩,那就是无法绘制长度小于 0.8mm的长度的线. (0.8mm等于 32分之一英寸). 导致很多小的短线无法绘制. 在轻钢薄壁构件里,其厚度有的只有0.5, 有的是0.7, 均无法绘制. 这给Revit的工作带来一些局限性. 这里有一个用编程的办法来绕弯路创建小于0.8mm, 其用法确实有点难以想到. 首先我们创建一个长度放大100倍的长线. 然后给这个线添加尺寸约束,并绑定到一个参数上. 最后指定参数的值为实际长度. 最后删除标准和临时参数. 这样就可以绘制