Revit共享参数是通过创建一个.txt类型的文件来保存相关信息,一旦与项目保存完毕之后,共享参数也就变成了项目参数(项目参数无法通过API创建),项目参数是保存在Revit项目里面的,所以此时这个.txt文件是可以删除的。

 using Autodesk.Revit.DB;
using System;
using System.IO;
using System.Reflection; namespace HelloRevit
{
public class RevitApiUtils
{
/// <summary>
/// 创建共享参数
/// </summary>
/// <param name="doc">Document对象</param>
/// <param name="groupName">共享参数组名</param>
/// <param name="definitionName">共享参数名</param>
/// <param name="builtInCategory">需要参数绑定的类型</param>
/// <param name="builtInParameterGroup">参数所属的属性类型</param>
/// <param name="parameterType">参数数据类型</param>
/// <param name="isInstanceParameter">是否实例参数</param>
public static void AddSharedParameters(Document doc, string groupName, string definitionName, BuiltInCategory builtInCategory, BuiltInParameterGroup builtInParameterGroup, ParameterType parameterType, bool isInstanceParameter)
{
var assemblyPath = Assembly.GetExecutingAssembly().Location;
var index = assemblyPath.IndexOf("\\", StringComparison.Ordinal);
var rootPath = assemblyPath.Substring(, index);
var sharedParameterPath = Path.Combine(rootPath, "RevitSharedParameters.txt");
if (File.Exists(sharedParameterPath))
{
File.Delete(sharedParameterPath);
}
var categorySet = new CategorySet();
var category = doc.Settings.Categories.get_Item(builtInCategory);
categorySet.Insert(category);
if (!File.Exists(sharedParameterPath))
{
try
{
File.Create(sharedParameterPath);
}
catch (Exception)
{
ThrowNewException("异常!");
}
}
//设置共享参数文件
doc.Application.SharedParametersFilename = sharedParameterPath;
//打开共享参数文件
var definitionFile = doc.Application.OpenSharedParameterFile();
if (definitionFile == null)
{
ThrowNewException("无法打开共享参数文件");
return;
}
//获取共享参数组
var definitionGroups = definitionFile.Groups;
//获取参数组
var group = definitionGroups.get_Item(groupName) ?? definitionGroups.Create(groupName);
if (group == null)
{
ThrowNewException("创建共享参数组失败!");
return;
} //获取参数定义
var definition = group.Definitions.get_Item(definitionName);
if (definition == null)
{
var externalDefinitionCreationOptions = new ExternalDefinitionCreationOptions(definitionName, parameterType);
definition = group.Definitions.Create(externalDefinitionCreationOptions);
} ElementBinding binding;
if (isInstanceParameter)
{
binding = doc.Application.Create.NewInstanceBinding(categorySet);
}
else
{
binding = doc.Application.Create.NewTypeBinding(categorySet);
} bool isSuccess = doc.ParameterBindings.Insert(definition, binding, builtInParameterGroup); if (!isSuccess)
{
ThrowNewException("共享参数绑定失败!");
} //删除共享参数txt文件,从某种意义上讲,绑定之后的共享参数就变成了项目参数只针对当前项目存在
File.Delete(sharedParameterPath);
} public static void ThrowNewException(string msg)
{
throw new Exception(msg);
} }
}

Revit通过API创建共享参数的更多相关文章

  1. Revit API 操作共享参数和项目参数

    1.获取共享参数 private string GetSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp) { Strin ...

  2. Revit Family API 创建参考平面

    使用API来编辑族时,使用doc.FamilyCreate.NewReferencePlane();创建参考平面. )         {  ];         }         // canno ...

  3. 【Revit API】创建共享参数

    话不多说,直接上代码 var app = doc.Application; app.SharedParametersFilename = sharedParamFilePath; Definition ...

  4. Revit Family API 添加材质参数设置可见性

    start //添加类型 void AddType(FamilyManager familyMgr, string name, double w, double d) {     FamilyType ...

  5. Revit Family API 添加参数与尺寸标注

    使用FamilyManager其他的与普通添加参数与标注没区别. [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Man ...

  6. 数据存储之 SharedPreference 共享参数 (转)

        在上一讲中,我们学习了如何将数据存储在SD卡中[数据存储之File文件存储 [即SD卡的写入与读取]],这是一种存储方式,这一讲我们来学习一下使用SharedPreferences存储数据. ...

  7. 使用Azure REST API创建虚拟机

    Hollis Yao, Shihao Rong  使用REST API创建虚拟机之前,首先要确保Azure订阅中已经建好了"云服务"和"存储账号".如果没有的话 ...

  8. [Effective JavaScript 笔记]第22条:使用arguments创建可变参数的函数

    第21条讲述使用可变参数的函数average.该函数可处理任意数量的参数并返回这些参数的平均值. 如何创建可变参数的函数 1.实现固定元数的函数 书上的版本 function averageOfArr ...

  9. 共享参数ContentProvider 类与数据库绑定,如何通过共享参数测试类,测试数据库的增删改查功能

    Intent可以传一个对象 当两个界面之间跳转时,需要传递一个对象过去,是通过使用Bundle类,并且实体类需要serializable实现序列化,传递方法如下: 定义一个静态常量作为key值 pub ...

随机推荐

  1. 使用Onenote & Evernote & VSC+Markdown构建个人笔记系统

    Onenote & Evernote & VSC+Markdown构建个人笔记系统 umeowbing(转载请注明出处) 1 Why 笔记本太多,全部带着太重,查找起来也很麻烦-- 笔 ...

  2. Jmeter----A接口response中body的某一个参数传递给B接口request的body中使用(参数的传递)

    示例:将接口"获取待办列表"response中body的id值传递给接口"删除待办"request的body中使用: 操作步骤如下: 第一步:给"获取 ...

  3. 【TCP协议】(3)---TCP粘包黏包

    [TCP协议](3)---TCP粘包黏包 有关TCP协议之前写过两篇博客: 1.[TCP协议](1)---TCP协议详解 2.[TCP协议](2)---TCP三次握手和四次挥手 一.TCP粘包.拆包图 ...

  4. Python进阶:设计模式之迭代器模式

    在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础 ...

  5. Spring Boot入门(二):使用Profile实现多环境配置管理&如何获取配置文件值

    在上一篇博客Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件中,我们新建了一个最原始的Spring Boot项目,并使用了更为流行的yaml配置文件. ...

  6. 号称“新至强,可拓展,赢当下”的Xeon可拓展处理器有多逆天?

    目前企业数据中心正在发生重大变化,许多企业正在经历基于在线服务和数据的广泛转型.他们将这些数据用于功能强大的人工智能和分析应用程序,这些应用程序可以将其转化为改变业务的洞察力,然后推出可以使这些洞察力 ...

  7. nginx + lua 限制ip地址访问

    实验环境:docker + openresty 我限制的5秒钟内允许访问两次效果图: default.conf  代码如下: lua_shared_dict my_limit_count_store ...

  8. SpaceSyntax【空间句法】之DepthMapX学习:唠叨(目录)

    最近花大力气学习了空间句法这一理论,以及其相关软件DepthMapX. 我觉得吧,你要是能搜索到这理论,这一软件名,这篇博客,那我甚至都不用介绍这软件是干什么用的——好吧,还是会说一下的. 虽然不知道 ...

  9. Windows Server 2016-命令行方式管理Windows服务

    Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序. 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显 ...

  10. windows根据端口号杀进程

    有时候eclipse会被卡死, 结束进程后重新启动项目会出现端口已经被占用 这时候需要杀掉进程 1, cmd打开dos窗口 2, netstat -ano | findstr "端口号&qu ...