Revit API 加载族并生成实例图元
在Revit API中加载族可以使用Doc.LoadFamily方法,传入要加载的族文件路径名,但是这种方式有一种缺点,就是如果族文件在当前工程中没有加载的话则返回成功,如果已经加载过,则返回失败,也就是拿不到FamilySymbol实例,而根据族生成实例图元又需要这个FamilySymbol。网上看到有些帖子说可以传入IFamilyLoadOptions实例就可以,但是笔者多次尝试,该方法均没有成功,始终返回失败,无奈放弃这种方法,改为在当前工程中查找该族是否加载过,如果加载则直接返回FamilySymbol实例,否则加载族文件,下面贴出代码。
该代码在Revit 2016 + VS2013下调试通过:
public class CreateFamilyInstance : IExternalCommand
{
private class FamilyLoadOptions : IFamilyLoadOptions
{
public bool OnFamilyFound(bool familyInUse, out bool overwriteParameterValues)
{
overwriteParameterValues = true;
return true;
} public bool OnSharedFamilyFound(Family sharedFamily, bool familyInUse, out FamilySource source, out bool overwriteParameterValues)
{
source = FamilySource.Family;
overwriteParameterValues = true;
return true;
}
} private FamilySymbol FindFamilySymbol(Document rvtDoc, string familyName, string symbolName)
{
FilteredElementCollector collector = new FilteredElementCollector(rvtDoc);
FilteredElementIterator itr = collector.OfClass(typeof(Family)).GetElementIterator();
itr.Reset();
while (itr.MoveNext())
{
Autodesk.Revit.DB.Element elem = (Autodesk.Revit.DB.Element)itr.Current;
if (elem.GetType() == typeof(Autodesk.Revit.DB.Family))
{
if (elem.Name == familyName)
{
Autodesk.Revit.DB.Family family = (Autodesk.Revit.DB.Family)elem;
foreach (Autodesk.Revit.DB.ElementId symbolId in family.GetFamilySymbolIds())
{
Autodesk.Revit.DB.FamilySymbol symbol = (Autodesk.Revit.DB.FamilySymbol)rvtDoc.GetElement(symbolId);
if (symbol.Name == symbolName)
{
return symbol;
}
}
}
}
}
return null;
} public Autodesk.Revit.UI.Result Execute(ExternalCommandData cmdData,
ref string message, Autodesk.Revit.DB.ElementSet elements)
{
UIApplication app = cmdData.Application;
Document doc = app.ActiveUIDocument.Document;
Transaction trans = new Transaction(doc, "ExComm");
trans.Start();
Family fs = null;
FamilySymbol symbol = null;
doc.LoadFamily(@"C:\\ProgramData\\Autodesk\\RVT 2016\\Libraries\\China\\结构\\柱\\混凝土\\混凝土柱-T形.rfa",
new FamilyLoadOptions(), out fs);
if (fs != null)
{
foreach (ElementId symbolId in fs.GetFamilySymbolIds())
{
Element elem = doc.GetElement(symbolId);
if (null != elem)
{
symbol = elem as FamilySymbol;
if (null != symbol)
{
TaskDialog.Show("Info", symbol.Name);
TaskDialog.Show("Info", symbol.FamilyName); break;
}
}
}
}
else
{
symbol = FindFamilySymbol(doc, "混凝土柱-T形", "标准");
if (null != symbol)
{
TaskDialog.Show("Info", symbol.Name);
TaskDialog.Show("Info", symbol.FamilyName);
}
} if (null != symbol)
{
if (!symbol.IsActive)
symbol.Activate();
XYZ point = new XYZ(10, 10, 10);
//创建族实例
FamilyInstance fi = doc.Create.NewFamilyInstance(point, symbol,
Autodesk.Revit.DB.Structure.StructuralType.Column);
}
else
{
TaskDialog.Show("erorr", "FamilySymbol为空");
}
trans.Commit(); return Autodesk.Revit.UI.Result.Succeeded;
}
}
Revit API 加载族并生成实例图元的更多相关文章
- [原][译][osgearth]API加载地球(OE官方文档翻译)
原文参考:http://docs.osgearth.org/en/latest/developer/maps.html#programmatic-map-creation 本人翻译水平有限... 加载 ...
- ArcGIS Javascript API 加载高德在线地图扩展
利用ArcGIS JavaScript API加载高德在线地图的扩展 /** * Created by WanderGIS on 2015/7/15. */ define(["dojo/_b ...
- PHP+Ajax点击加载更多列表数据实例
一款简单实用的PHP+Ajax点击加载更多列表数据实例,实现原理:通过“更多”按钮向服务端发送Ajax请求,PHP根据分页参数查询将最新的几条记录,数据以JSON形式返回,前台Query解析JSON数 ...
- 三种动态加载js的jquery实例代码另附去除js方法
!-- 这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getscript("test.js&quo ...
- CS.动态加载DLL.动态生成.运行代码.BS.AutoFac管理实现类
以英雄联盟为例.界面上经常有Load....xxxx.dll.一般都是加载子系统.比如装备系统.英雄系统等.在实际开发中很多项目非常庞大.都会分割成独立子解决方案开发.后期就需要加载回来.一般都是利用 ...
- js实现『加载更多』功能实例
DEMO : 滚动加载示例 关于如何实现『加载更多』功能,网上有插件可用,例如比较著名的使用iscroll.js实现的上拉加载更多.下拉刷新功能. 但实际用起来却是很麻烦.由于是第三方插件,要按照对方 ...
- web工程中web.xml元素加载顺序以及配置实例
简介 web.xml是web工程的配置文件,容器加载web工程时,会首先从WEB-INF中查询web.xml,并加载其中的配置信息,可以将web.xml认为是web工程的入口. web.xml中包含有 ...
- 详谈 Unity3D AssetBundle 资源加载,结合实际项目开发实例
第一次搞资源更新方面,这里只说更新,加载,AssetBundle资源加载,谈谈自己的理解,以及自己在项目中遇到的那些神坑,现在回想一下,真的是自己跪着过来的,说多了,都是泪. 我这边是安卓AssetB ...
- js实现动态加载脚本的方法实例汇总
本文实例讲述了js实现动态加载脚本的方法.分享给大家供大家参考,具体如下: 最近公司的前端地图产品需要做一下模块划分,希望用户用到哪一块的功能再加载哪一块的模块,这样可以提高用户体验. 所以到处查 ...
随机推荐
- CoderForce 148D-Bag of mice (概率DP求概率)
题目大意:美女与野兽在玩画鸽子的游戏.鸽子在用黑布遮住的笼子里,白色的有w只,黑色的有b只,每次拿出一只作画,谁先画到白色的鸽子谁就赢.美女首先画,因为野兽太丑,它每次画的时候都会吓跑一只鸽子,所有出 ...
- 硬盘分区表知识——详解硬盘MBR (转)
Ref: http://www.blogjava.net/galaxyp/archive/2010/04/25/319344.html 硬盘是现在计算机上最常用的存储器之一.我们都知道,计算机之所以神 ...
- page上BeanId与ActionType中的ParameterId
今天遇到一件有意思的异常. 一个基于EO的VO在页面加载进来之后就CreateRow了一行数据,主键HeaderId也相应的插入了值,但是在保存的时候,老是报HeaderId不能为空的异常. 经查,页 ...
- SpringMVC实现RESTful服务
SpringMVC实现RESTful服务 这里只说service,controller层的代码.Mapper层则直接继承Mapper<T>则可以,记住mybatis-config.xml一 ...
- iOS UI-手势(Gesture)
#import "ViewController.h" @interface ViewController ()<UIActionSheetDelegate> @prop ...
- springmvc基础流程
转载:http://blog.csdn.net/zuoluoboy/article/details/19766131 注意:springmvc多个拦截器执行流程:每个拦截器的方法preHandler顺 ...
- python数据类型高阶
python是近年来使用最广泛的一种编程语言,不管是做web开发,还是网络爬虫,亦或是数据分析等,大家都在选择python来完成这些任务:我想最重要一点就是python学起来很简单,另一个点就是pyt ...
- MySql Server 5.7的下载及安装详细步骤
1.下载安装包 1)找到官网下载地址(https://dev.mysql.com),选择downloads,找到windows
- 玩转X-CTR100 l STM32F4 l DHT11温湿度传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] DHT11数字温湿度传感器是一款含有已校准数字信号输 ...
- 注解实现struts2零配置
零配置指的是不经过配置文件struts.xml配置Action 首先:导入jar struts2-convention-plugin-2.3.24.1.jar package com.action ...