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 ...
随机推荐
- 关于socket.io的使用
这段时间学习了socket.io,用它写了小项目,在此总结下它的基本使用方式和一些要点. socket.io是基于Node.js和WebSocket协议的实时通信开源框架,它包括客户端的JavaScr ...
- 干货,一文带你超详细了解Session的原理及应用
session 简介 session 是我们 jsp 九大隐含对象的一个对象. session 称作域对象,他的作用是保存一些信息,而 session 这个域对象是一次会话期间使用同一个对象.所以这个 ...
- gulp、browsersync代理跨域
//gulpfile.js "use strict"; const gulp = require("gulp"), newer = require(" ...
- 分析Class类和ClassLoader类下的同名方法getResourceAsStream
在读取本地资源的时候我们经常需要用到输入流,典型的场景就是使用Druid连接池时读取连接池的配置文件.Java为我们提供了读取资源的方法getResourceAsStream(),该方法有三种: Cl ...
- Vue 进阶之路(二)
之前的文章我们初识了 vue,对其原理,数据绑定和方法进行了简单的演示,本篇将对 vue 插值表达式,v-text,v-html 进行讲解. <!DOCTYPE html> <htm ...
- Python猫荐书系列:文也深度学习,理也深度学习
最近出了两件大新闻,相信大家可能有所耳闻. 我来当个播报员,给大家转述一下: 1.中国队在第 11 界罗马尼亚数学大师赛(RMM)中无缘金牌.该项赛事是三大国际赛事之一,被誉为中学奥数的最高难度.其中 ...
- 使用bootstrap table 数据绑定
1.最近一直在用bootstrap table 这个前端框架做项目,下面是使用bootstrap table 的一些总结 这个使用.Net 中MVC做的: 2.这个是基本的boostrap table ...
- jquery实现照片墙
jquery照片墙 由15张图片构成,大致思路:随机生成所有图片-->点击其中一张变为一张大图-->点击大图又变回多张 主要用到jquery实现 先来看看效果 html: <div ...
- 海康相机SDK二次开发只有视频无声音问题
海康SDK相信做企业开发的的同仁,在项目中经常会用到,毕竟使用范围这么广. 本次就开发遇到的奇葩问题来说明一下我们的解决方案. 场景 虽然海康有4200客户端,但是对于高度定制化的项目,肯定不能再使用 ...
- ArcPy 将mxd格式转换为msd格式
在控制程序进行地图服务更新时,如果只是修改MXD中的渲染是不行的,需要写脚本将MXD转换为MSD,替换原有的MSD文件,并重新启动地图服务,这样才能读取到新的渲染方式. 附上Python代码: # - ...