Revit通过API创建共享参数
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创建共享参数的更多相关文章
- Revit API 操作共享参数和项目参数
1.获取共享参数 private string GetSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp) { Strin ...
- Revit Family API 创建参考平面
使用API来编辑族时,使用doc.FamilyCreate.NewReferencePlane();创建参考平面. ) { ]; } // canno ...
- 【Revit API】创建共享参数
话不多说,直接上代码 var app = doc.Application; app.SharedParametersFilename = sharedParamFilePath; Definition ...
- Revit Family API 添加材质参数设置可见性
start //添加类型 void AddType(FamilyManager familyMgr, string name, double w, double d) { FamilyType ...
- Revit Family API 添加参数与尺寸标注
使用FamilyManager其他的与普通添加参数与标注没区别. [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Man ...
- 数据存储之 SharedPreference 共享参数 (转)
在上一讲中,我们学习了如何将数据存储在SD卡中[数据存储之File文件存储 [即SD卡的写入与读取]],这是一种存储方式,这一讲我们来学习一下使用SharedPreferences存储数据. ...
- 使用Azure REST API创建虚拟机
Hollis Yao, Shihao Rong 使用REST API创建虚拟机之前,首先要确保Azure订阅中已经建好了"云服务"和"存储账号".如果没有的话 ...
- [Effective JavaScript 笔记]第22条:使用arguments创建可变参数的函数
第21条讲述使用可变参数的函数average.该函数可处理任意数量的参数并返回这些参数的平均值. 如何创建可变参数的函数 1.实现固定元数的函数 书上的版本 function averageOfArr ...
- 共享参数ContentProvider 类与数据库绑定,如何通过共享参数测试类,测试数据库的增删改查功能
Intent可以传一个对象 当两个界面之间跳转时,需要传递一个对象过去,是通过使用Bundle类,并且实体类需要serializable实现序列化,传递方法如下: 定义一个静态常量作为key值 pub ...
随机推荐
- Eureka的功能特性及相关配置
1.服务提供者1.1服务注册服务提供者启动时,会通过rest请求的方式将自己注册到Eureka Server上,同时带上了自身服务的一些元数据信息.Eureka Server接收到请求后,将元数据信息 ...
- 亲测可用,iptables实现NAT转发。
环境 服务器A:192.168.1.7 服务器B: 192.168.1.160 需求 实现将本机(192.168.1.7:7410)端口流量转发给(192.168.1.160:9200). 1. 内核 ...
- 我为什么放弃MySQL?最终选择了MongoDB
最近有个项目的功能模块,为了处理方便,需要操作集合类型的数据以及其他原因.考虑再三最终决定放弃使用MySQL,而选择MongoDB. 两个数据库,大家应该都不陌生.他们最大的区别就是MySQL为关系型 ...
- 服务端预渲染之Nuxt(爬坑篇)
Nuxt是解决SEO的比较常用的解决方案,随着Nuxt也有很多坑,每当突破一个小技术点的时候,都有很大的成就感,在这段时间里着实让我痛并快乐着.在这里根据个人学习情况,所踩过的坑做了一个汇总和总结. ...
- Linux挖矿病毒 khugepageds详细解决步骤
一.背景 最近公司一台虚拟机被攻击,其中一种挖矿病毒.会伪CPU数.即如果用top命令只能看到一个cpu.并且负载不高.实际上整个负载300%以上,及时定时任务关掉也不起作用. 二.言归正传开始干掉这 ...
- Andorid之页面布局优化
文章大纲 一.为什么要进行页面布局优化二.页面布局优化实操三.项目源码下载四.参考文章 一.为什么要进行页面布局优化 在开发Android时,会遇到某些是通用的布局,我们常将一些通用的视图提取到一 ...
- ContentProvider和ContentResolver的使用
ContentProvider ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通 ...
- Apache Flink 介绍
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483660&idx=1&sn=ecf01cfc8 ...
- Windows Server 2016-命令行批量导出AD用户列表信息
本章节为大家带来如何通过Powershell或ldifde命令行方式导出域用户列表信息,方便大家日常运维工作中使用. Powershell方式导出现有Staff目录下所有用户信息列表: Get-ADU ...
- Microsoft Edge浏览器下载文件乱码修复方法
随着Windows10的普及,Microsoft Edge自带浏览器使用频率逐渐提升,在日常使用过程中我们会发现一个常规的问题是使用Edge进行日常文件下载的时候,N多情况下可能都是乱码,同样的下载链 ...