RevitAPI: 在墙上创建灯具族实例

通过RevitAPI创建墙 本次为大家展示如何通过使用RevitAPI创建一面墙: 1、找到创建墙的方法(共有五个重载)       1) Create(Document, IList(Of (Curve>)>>), Boolean)       2) Create(Document, Curve, ElementId, Boolean)       3) Create(Document, IList(Of 阅读详情

有人碰到一个比较头疼的问题,就是试了好多种Document.Create.NewFamilyInstance的重载,都无法把想要的东西在墙上创建出来。

下图就是他想要创建的墙上的灯具:


我们手工放置的时候,可以发现它是放在墙的某个面上的,所以,基本可以排除其他NewFamilyInstance的重载函数,而只锁定下面的几个:

NewFamilyInstance(Reference, Line position, FamilySymbol)
NewFamilyInstance(Reference, XYZ location, XYZ referenceDirection, FamilySymbol)
NewFamilyInstance(Face, Line position, FamilySymbol)
NewFamilyInstance(Face, XYZ location, XYZ referenceDirection, FamilySymbol)
而该实例是放置在一个点的位置,所以我们决定使用这个方法:

NewFamilyInstance(Reference, XYZ location, XYZ referenceDirection, FamilySymbol)

观察该方法的几个参数,第一个Reference,应该就是面的引用,第二个是放置点的位置,第三个是旋转方向,第四个就是族类型了。

那么如何获得面的引用?

RevitAPI有一个类叫HostObjectUtils,提供了几个方法可以方便的获得宿主元素的面,比如GetSideFaces就是专门用来获取墙的侧面的。

var reference = HostObjectUtils.GetSideFaces(wall, ShellLayerType.Interior).First();
ShellLayerType用来指明是内墙还是外墙,.First()用来获取第一个引用,一般一面墙只有一个侧面嘛。

接下来就简单了,整个代码如下:

FamilySymbol familySymbol = GetFamilySymbol("Switch board");
ElementId elementId = new ElementId(308696);
Wall wall = RevitDoc.GetElement(elementId) as Wall;
var reference = HostObjectUtils.GetSideFaces(wall, ShellLayerType.Interior).First();
if (wall != null)
{
    var instance = RevitDoc.Create.NewFamilyInstance(reference, 
        new XYZ(13.3997604933275,-1.35161192601243,9.0571329707487),
        new XYZ(0,0,0),
        familySymbol);
    if (instance == null)
        TaskDialog.Show("ERROR", "Instance is null!");
}
这里我们不需要旋转实例,所以referenceDirection直接设为(0,0,0)了。

然而新的问题出现,API创建的和手工创建的并不是完全一样的,

手工创建的如下图:


API创建的是这样的:



很显然,手工创建的Elevaion是可以编辑的,而API创建的是无法编辑的!

那怎么办?

经过仔细观察,我们发现,API创建的实例还有另外一个属性和手工创建的不一样,那就是Schedule Level,或者叫“明细表标高”,API创建出来的值是空的。


所以,我们只要修改到和手工创建一样就可以啦。

Parameter parameter = instance.get_Parameter(
    BuiltInParameter.INSTANCE_SCHEDULE_ONLY_LEVEL_PARAM);
if (parameter != null)
{
    parameter.Set(new ElementId(311));
}





Revit(11)-元素-根据族名称创建族实例并移动 系列文章目录 Revit开发中异常记录 Revit (1) - CAD - 获取图层 Revit (2) - CAD - 获取CAD文字 Revit (3) - 二开 -创建柱子 Revit (4) - 二开 -批量创建柱子 Revit (5) - 二开 -创建墙体 Revit (6) - Teigha - LayerTable Revit (7) - Teigha - BlockTable Revit(8)-数据结构-类别、族概念 Revit(9)-元素-元素的获取 Revit(10)-参数-参数的获取与 阅读详情

相关推荐

Autodesk Revit软件二次开发:RevitAPI中自定义族类型与参数化编程

在Autodesk Revit中,族是构成建筑模型的基本单元,可以是门窗、家具、设备等。族类型则是族的变体,允许我们创建具有不同属性和参数的多个实例,而无需重新创建整个族。例如,一个门族可以有多种类型,每种类型具有不同的尺寸或材质。族类型的概念使得在项目中使用和管理族更加灵活和高效。族类型在Revit中通过类型属性来定义,这些属性可以是尺寸、材质、颜色等。当创建一个新的族类型时,我们实际上是创建了一组新的类型属性,这些属性可以被设置为特定的值,从而定义了该类型的具体特征。

kkchenjj的博客 1367

Revit开发NewFamilyInstance技巧之创建梁

在RevitAPI中调用NewFamilyInstance是一件比较麻烦的事情, 这个函数居然有十几种重载, 下面我们尝试重这十几种中去找到用来创建梁的那个函数, 我们首先可以 获取梁的Family,然后输出Family的FamilyPlacementType 发现他是CurveDrivenStructural,根据这个媒介的英语字面意思,我猜测 他创建的函数,应该要包括Curv

The_Eyes的博客 5315

QuickFix Java 实战(一)协议解析、环境搭建与首个应用

本文是QuickFix Java实战系列的第一篇,详细介绍了FIX协议的核心原理与QuickFix/J引擎的实战应用。内容涵盖FIX协议的标签化通信机制、QuickFix/J库的两种下载方法、协议定义文件解析,并通过一个完整的模拟订单发送示例,指导读者快速搭建首个FIX应用环境,实现消息生成与会话通信。

dog123的博客 496

Building Coder(Revit 二次开发) - NewFamilyInstance() 重载版本的选择

今天开始恢复中断了三个月的 Building Coder 翻译任务。认真回顾了中断之前的工作和 Jeremy 的帖子,决定从他老人家 2011 年的文章开始,争取在半年内赶上他的更新进度。 原文链接:NewFamilyInstance Overloads 如大家所知, NewFamilyInstance() 方法是 Revit API 中用于创建族实例的 API,而且它有多个重载的版本

摘花换酒的专栏 3990

基于单片机的自动喷淋系统设计【毕业设计】

随着人民生活质量提高与生活节奏的加快,城市居民对于花草绿植的家庭培养与装饰需求增加,随之因浇灌植物的需要,智能浇花系统的市场逐渐扩大。现有自动浇花系统大部分只能通过设置固定浇水时间而难以实现适时、适量浇水,或在植物环境土壤含水量低时进行报警而并不能实际补水。为克服局限性而设计以单片机为控制中心的自动浇花系统。通过湿度传感器检测目标植物环境土壤湿度数据,再经ADCO832将其放大转换为数字量,由单片机读取输出向LCD1602 显示屏显示并通过比对键盘向单片机所设置的湿度范围而利用中断服务程序进行补水需求判断。

qq_48771816的博客 1712

混合部署 操作系统混合部署

在openEuler Embedded 22.03中,已经集成了OpenAMP相关支持,并与openEuler的SIG Zephyr合作实现了openEuler Embedded与实时操作系统Zephyr在QEMU平台上的混合部署。具体的混合部署方式取决于设备的硬件和软件支持。例如,可以使用虚拟机软件(如VirtualBox)在Linux操作系统上运行Android虚拟机,从而实现Linux和Android的混合部署。需要注意的是,混合部署涉及到设备的硬件和软件兼容性,以及操作系统的配置和管理。

dianqicyuyan的博客 1767

如何编程创建/布置基于面的设置,比如风口

原文链接: http://blog.youkuaiyun.com/joexiongjin/article/details/7750732 作者:  叶雄进 , Autodesk ADN   问: 使用Document.NewFamilyInstance方法,可以布置不基于面的风口;布置基于面的风口的时候,不管参数如何设置,都只会布置到楼层平面上。用什么方法才能正确布置基于面的风口。谢谢。

我爱Revit —— BIM应用及BIM应用软件解决方案专栏 3031

Arduino ESP32S3 基础入门教学大纲

ESP32环境、Arduino

追梦 3548

Revit API: 创建族实例 FamilyInstance

前言 族(Family)作为 Revit 的一个核心,API 提供了很好的支持。本文是我自己对族相关的认识,供自己以后查询和参考。 创建族实例 代码来源 Revit 官方文档。 如果你找到某个 element 的创建方法,那么它多半在 Autodesk.Revit.Creation.Document。 下面是创建族实例相关接口,参数的不同表明他们适用于不同的族类型。如果你使用了错误的接口,族实例可...

极客BIM工作室 7066

安全运营面试总结

答案可以在我的博客中查找 1.自我介绍 2.TCP/IP七层模式 3.端口号(常见协议 数据库) 4.Owasp top 10 5.渗透测试过程 6.漏扫工具 7.中间件漏洞 8.应急响应 9.项目 10.SQL注入类型 11.TCP 三次握手 四次挥手 12.你有什么要问我的 1.自我介绍 2.项目介绍 3.宽字节注入的原理 4.渗透流程 5....

qq_51577576的博客 4413

AI 辅助编程全景:演进、提效场景与未来趋势

本文系统梳理了AI辅助编程的发展历程与应用场景。演进路径分为三代:从代码补全工具(2023)、对话式助手(2024)到自主编程代理(2025)。在软件全生命周期中,AI可显著提升各环节效率:需求分析阶段节省30-60%文档编写时间;设计阶段缩短40-60%技术调研周期;编码阶段通过智能补全提升55%任务速度;测试阶段减少30-60%测试编写时间。数据显示,2025年84%开发者使用AI工具,41%代码由AI生成,平均每周节省3.6小时。AI正推动开发者角色从编写者转变为审核者,但复杂业务逻辑和架构设计仍需人

甘蓝的专栏 473

NewFamilyIntance报错 The symbol is not active

使用NewFamilyIntance时,有时会弹出The symbol is not active报错,有时不弹出。

wula1994的博客 191

Oracle EBS 如何处理MMT表错误-WIP 实体未定义或不具有期间余额项

错误说明:WIP 实体未定义或不具有期间余额项。(The wip entity is either not defined or does not have a period balance entry)由于工单的创建日期为4月份,工单的余额表记录的期间是4月份,而3月份工单余额表中没有记录。公司将上一个新的库存组织,有一部分测试的工单创建日期在4月份,而工单的发放日期、发料事务处理日期和完工事务处理日期均在3月份。1、关闭3月份库存会计期,待定事务处理存在未计成本物料/WMS。成本类型: PAC成本。

陈显平的专栏-Oracle EBS 653

RevitAPI之如何载入族再创建族实例(以门为例)

如何放置类型为“0762 x 2032 mm”的门实例?

广州比目鱼的博客 8695

《使用R包ggtree进行进化树的绘制与美化》

都2023年了,才去使用Y叔早在2018年发表的进化树构建利器——ggtree。刚好最近在做基因家族分析,进化树的构建与美化确实有点麻烦,先前使用MEGA11进行了绘制,但图像简陋,于是导出了nwk文件,准备使用其他软件进行美化。这里,我使用ggtree包进行操作。

沉香best的博客 6898

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

RevitAPI--AddParameter为族文件添加参数

在项目文件中,加载某个族文件,并为族文件添加参数,并设置参数值 下面以添加文本参数为例 UIApplication uiApp = commandData.Application; UIDocument uiDoc = uiApp.ActiveUIDocument; Document doc = uiDoc.Document; string...

qq_43026206的博客 3072

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

RevitAPI之怎样在族、族类型、族实例之间相互获取

从族实例获取族类型 ①   FamilySymbol symbol = familylnstance. Symbol ②  FamilySymbol symbol = RevitDoc. GetElement(familyInstance.GetTypeId()) as FamilySymbol; 从族类型获取族 Family family = symbol

广州比目鱼的博客 5424

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

RevitAPI: 新建系统族类型并创建族实例

昨天有客户问到如何通过API实现下面的步骤: 1. 新建一个系统族,并修改参数 2. 使用该系统族创建一个族实例,例如创建墙。 回答: 1. 新建族实例我们可以使用ElementType.Duplicate(string)方法,因为系统族是不允许用户创建的,我们只能复制一个。 2. 创建系统族可以使用形如Wall.Create方法或者Document.Create.NewFloor这样的

BIM背后的技术 8818

RevitAPI创建族并载入到工程文档中

四个注意点: 1、在族文档中创建拉伸时,需要开启事务,开启事务时使用的文档必须是族文档 2、在族文档中创建草图工作平面时,使用的文档必须是族文档 3、将族文档导入工程文档时,不能开启事务,否则会抛出异常 4、LoadFamily方法的调用者是族文档,参数是目标工程文档 cla...

chuozhong0622的博客 346

revit二次开发-创建族

通过文件路径载入族并点击任意一点创建实例​​​​​​​

ultramand的博客,重生之我在cad上二次开发猛猛敲C#代码~ 2287

【Revit二次开发】族

族样板可以是基于主体的样板, 也可以是独立的样板。在当前文档中,如果加载了一些构建族,并创建了这些族的族实例,那么,对某个族实例进行EditFamily操作,将会进人到族编辑的文档中,可以对族进行修改。在当前文档中,如果加载了一些构建族,并创建了这些族的族实例,那么,对某个族实例进行EditFamily操作,将会进人到族编辑的文档中,可以对族进行修改。如果用面向对象语言中的概念来讲,族相当于类模板(Class Template),族类型相当于类(Class) ,族实例相当于对象(Object)。

weixin_44037272的博客 3522

RevitAPI之在墙上创建门(基于宿主)

如果XYZ location如果超出 了宿主本身的范围,创建可能会失败,并有错误框弹出,提示无法创建。

广州比目鱼的博客 1611

Revit新建族并创建拉伸

主要使用RevitAPI中创建命令Document.FamilyCreate.NewExtrusion,此处Document需为族文档。 代码如下: [Transaction(TransactionMode.Manual)] public class Class1 : IExternalCommand { public Result Execute(ExternalCommandData ...

碎碎念的安静的博客 2950

RevitAPI之获取洞口边界及在墙上开洞

如果是长方形边界,使用BoundaryRect属性,其他形状边界使用BoundaryCurves属性

广州比目鱼的博客 3136

Revit开发之创建基于面的实例

下面两个方法用来创建基于面的族实例:

广州比目鱼的博客 2794

RevitAPI(四) 移动、旋转、删除、修改

注意:使用元素名字查找元素的时候,需要注意本地化的问题,因为不同语言的Revit版本的参数名字是不一样的,比如中文版的叫“长度”的参数,英文叫“Length”,同样的程序(比如上面的例子),在英文里面就会出问题。在界面上,共享参数好像是一系列的参数,但是实际上只是一些参数的定义,比如参数的名字、类型、分组等。而此时,从某种意义上说,绑定之后的共享参数实际上变成项目参数。项目参数保存在Revit⑩里,所以删除共享参数或者共享参数文件,都不会对项目参数产生影响,哪怕项目参数是通过共享参数创建的。

DaggerL2的博客 1920
上一篇: RevitAPI: 如何在详图构件上创建尺寸标注
下一篇: RevitAPI: 如何在族里面创建一条带颜色的二维线?
AaronLuu
博客等级 码龄12年 613粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值