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

【ROS】ROS局域网下多机通讯方法

最近工作中需要用到多机通讯,这里稍微总结一下使用方法。一、网络配置ifconfig这里举个例子,主机的IP地址为192.168.1.127,从机的IP地址为192.168.1.126;之后可测试一下能否互相ping通,成功后进行下一步。

weixin_43326110的博客 3361

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

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

摘花换酒的专栏 3990

利用Matlab实现矩形波导电磁场分布图的绘制

1.利用Matlab实现矩形波导电磁场分布图的绘制;2.学会使用 Matlab 进行数值计算,并绘出相应的图形;通过Matlab 计算并绘出任意时刻金属矩形波导的主模 TE10 模的电磁场分布图。波导尺寸、工作频率及时刻均由外部给定。(1)矩形波导中传输的主模为TE10模。设金属波导尺寸为a*b,TE10模的截止波长为2*a。其电磁场分量可推导表示如下:.......1-1上式中各参量如下:......1-2。

qq_26335381的博客 3058

Unity URP项目里Post Processing死活没效果?别慌,这5个坑我帮你踩过了

本文详细解析了Unity URP项目中Post Processing效果失效的五大常见问题,包括渲染管线配置冲突、Volume作用域误判、摄像机参数漏配、Layer层级冲突和Profile引用异常。通过实际项目案例和代码示例,提供专业级解决方案,帮助开发者快速排查并修复后处理效果不生效的问题。

weixin_33721427的博客 334

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

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

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

探测器反向偏压_光探测器PN结原理

1 光探测原理在光的作用下,当光敏物质中的电子直接吸收光子的能量足以客服原子核的束缚时,电子就会从基态被激发到高能态,脱离原子核的束缚,在外电场作用下参与导电,因而产生了光电效应。(这里需要说明的是,如果光子不是直接与电子起作用而是能量被固体晶格振动吸收,引起固体的温度升高,导致固体电学性质的改变,这种情况就不是光电效应而是热电效应)。根据所用结的种类的不同,可分为PN结,PIN 结型,...

weixin_42489104的博客 2548

Revit API: 创建族实例 FamilyInstance

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

极客BIM工作室 7066

MOSFET导通电阻Rdson全解析:物理组成、公式推导与工程选型要点

在功率电子设计中,MOSFET作为核心开关器件,其导通电阻Rdson直接决定导通损耗与系统效率。从半导体物理角度看,Rdson并非单一固定值,而是由源极电阻、沟道电阻、累积层电阻、JFET区电阻、漂移区电阻及衬底电阻等多个分量串联而成,并随栅极驱动电压、结温以及击穿电压等级发生显著变化。理解Rdson的物理来源与数学表达,有助于工程师在低压大电流与高压小电流等不同场景中合理选型、优化驱动电压并准确估算热损耗。文章从沟道电阻公式出发,深入剖析耐压与导通电阻的物理矛盾、温度系数的影响规律,并给出数据手册参数的正

weixin_29163857的博客 197

【2025年华为秋招(AI)-11月19日-第二题(200分)- 终端款型聚类识别】(题目+思路+Java&C++&Python解析+在线测试)

该摘要总结了题目要求、输入输出格式、KMeans算法的实现步骤以及关键点。以下是150字内的摘要: 本文提出基于KMeans算法对终端型号进行聚类的方法。通过包间隔时长、连接持续时长、漫游前后信号强度4个特征,使用欧氏距离度量相似度。算法采用固定初始化策略(前k个样本作为初始质心),经过分配-更新迭代,直至质心移动小于1e-8或达到最大迭代次数。最终输出各簇样本数并按升序排列,解决了终端型号自动分类问题。示例显示该方法能有效识别3-4类终端,并准确统计每类数量。

m0_73659489的博客 141

NewFamilyIntance报错 The symbol is not active

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

wula1994的博客 191

C#版OpenCV:OpenCVSharp 最详细最全面教程(万字详细总结)

OpenCVSharp 是一个用于 .NET 环境的 OpenCV 包装库,它提供了一种简便的方法来利用 OpenCV 的功能进行图像和视频处理。OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉和机器学习软件库,最初由 Intel 研发并发布。OpenCVSharp 让 C# 和其他 .NET 语言的开发者可以方便地访问 OpenCV 的强大功能。// 打印 OpenCV 版本信息Cv2。

仰望星空的博客 2万+

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

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

广州比目鱼的博客 8695

【RH850/U2A】:功能安全

功能安全相关

3130

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

qq_43026206的博客 3072

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

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

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

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

广州比目鱼的博客 5424

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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、付费专栏及课程。

余额充值