Revit二次开发小白学习笔记8——元素编辑

Revit二次开发入门教程一(工具篇) 前言 BIM诞生的背景 Revit在BIM中扮演的角色 1. Revit在BIM设计中的角色 2. Revit在BIM开发中的角色 3. Revit在BIM社区的角色 Revit二次开发入门 开发前准备 1. 订购并安装Autodesk Revit(或安装试用版) 2. 安装Visual Studio 3. 安装Revit AddIn-Manager 安装步骤: 4. 安装... 阅读详情

1.对元素编辑的几种方法

  • ElementTransormUtils的移动(Move)、旋转(Rotate)和镜像
  • 文档类Document的删除Delete()
  • 阵列类型的创建
  • 族编辑的一些基本类和方法
  • 获取Parameter参数进行修改

2.移动元素

2.1.说明

2.1.1.ElementTransformUtils类的方法

  • 使用给定的向量移动一个元素:MoveElement(Document,ElementId,XYZ)
  • 使用给定的向量移动多个元素:MoveElements(Document,ICollection,XYZ)

2.1.2.Location类的方法

  • 移动一个元素: bool Move(XYZ)

2.1.3.注意

  • 基于标高的元素不能向上或向下移动,即不能改变Z轴坐标值,但可以移动元素到同一标高内的任意位置
  • 当移动一个元素时,其他元素可能会跟着移动。如移动墙,墙上的窗户会跟着移动
  • 如果元素被钉住,即Pinned属性是true时,则表示这个元素不能被移动

2.2.ElementTransformUtils.MoveElement()方法

//移动元素
//得到向量 
XYZ translation = XYZ.BasisX * ToMM(1000);//向X轴正方向移动1000mm
//XYZ translation = XYZ.BasisX.Negate() * ToMM(1000);//向X轴负方向移动1000mm
//必须使用事务来进行移动
using (Transaction transaction = new Transaction(document, "移动"))
{
    transaction.Start();
    ElementTransformUtils.MoveElement(document, new ElementId(204351),translation);
    transaction.Commit();
}

2.3.ElementTransformUtils.MoveElements()方法

//移动多个元素
//得到向量 
XYZ translation = XYZ.BasisX.Negate() * ToMM(1000);
//必须使用事务来进行移动
using (Transaction transaction = new Transaction(document, "移动"))
{
    transaction.Start();
    IList<Reference> references = uIDocument.Selection.PickObjects(Autodesk.Revit.UI.Selection.ObjectType.Element);
    List<ElementId> elementIds = new List<ElementId>();
    foreach (Reference item in references)
    {
        elementIds.Add(item.ElementId);
    }
    //移动多个要素
    ElementTransformUtils.MoveElements(document,elementIds,translation);
    transaction.Commit();
}

2.4.FamilyInstance.Location.Move()方法

//元素移动
//得到向量 
XYZ translation = XYZ.BasisX.Negate() * ToMM(1000);
//必须使用事务来进行移动
using (Transaction transaction = new Transaction(document, "移动"))
{
    transaction.Start();
    IList<Reference> references = uIDocument.Selection.PickObjects(Autodesk.Revit.UI.Selection.ObjectType.Element);
    List<ElementId> elementIds = new List<ElementId>();
    foreach (Reference item in references)
    {
        elementIds.Add(item.ElementId);
    }
    //移动多个要素
    //ElementTransformUtils.MoveElements(document,elementIds,translation);
    foreach (ElementId id in elementIds)
    {
        FamilyInstance familyInstance = document.GetElement(id) as FamilyInstance;
        bool result = familyInstance.Location.Move(translation);//如果移动成功,返回True,否则False
    }
    transaction.Commit();
}

3.元素旋转

3.1.说明

3.1.1.ElementTransformUtils类的方法

  • 旋转一个元素:RotateElements(Document, ElementId,Line,double)
  • 旋转多个元素:RotateElements(Document,ICollection,Line,double)

3.1.2.Location类的方法

  • 旋转一个元素:bool Rotate(Line,double)

3.1.3.注意事项

  • 旋转轴是有限线,若是无限线会导致旋转失败。
  • 旋转轴一般要求与元素LoactionCurve所在的平面垂直,否则很可能会旋转失败。

3.2.ElementTransformUtils.RotateElement()方法

基于旋转轴逆时针旋转

//元素旋转
//获取对象
ElementId elementId = new ElementId(204577);
Wall wall = document.GetElement(elementId) as Wall;
//获取旋转轴
Curve curve = (wall.Location as LocationCurve).Curve;
XYZ xyz = curve.GetEndPoint(0);
//XYZ xyz = (curve.GetEndPoint(0) + curve.GetEndPoint(1))/2;//中心点
Line line = Line.CreateBound(xyz,new XYZ(xyz.X,xyz.Y,xyz.Z + 1));
//创建事务旋转
using (Transaction transaction = new Transaction(document, "要素旋转"))
{
    transaction.Start();
    ElementTransformUtils.RotateElement(document, elementId, line, Math.PI / 2);
    transaction.Commit();
}

3.3.ElementTransformUtils.RotateElements()方法

//元素旋转

//获取旋转轴
XYZ xyz = uIDocument.Selection.PickPoint();//选取点作为旋转轴起点
Line line = Line.CreateBound(xyz,new XYZ(xyz.X,xyz.Y,xyz.Z + 1));
//创建事务旋转
using (Transaction transaction = new Transaction(document, "要素旋转"))
{
    transaction.Start();
    List<ElementId> ids = new List<ElementId>();
    //框选待旋转要素
    IList<Reference> reference = uIDocument.Selection.PickObjects(Autodesk.Revit.UI.Selection.ObjectType.Element);
    foreach (Reference item in reference)
    {
        ids.Add(item.ElementId);
    }
    ElementTransformUtils.RotateElements(document, ids, line, -1 * Math.PI / 3);
    transaction.Commit();
}

3.4.Element.Location.Rotate()方法

//元素旋转

//获取旋转轴
XYZ xyz = uIDocument.Selection.PickPoint();//选取点作为旋转轴起点
Line line = Line.CreateBound(xyz,new XYZ(xyz.X,xyz.Y,xyz.Z + 1));
//创建事务旋转
using (Transaction transaction = new Transaction(document, "要素旋转"))
{
    transaction.Start();
    List<ElementId> ids = new List<ElementId>();
    //框选待旋转要素
    IList<Reference> reference = uIDocument.Selection.PickObjects(Autodesk.Revit.UI.Selection.ObjectType.Element);
    foreach (Reference item in reference)
    {
        ids.Add(item.ElementId);
    }
    FilteredElementCollector elementCollector1 = new FilteredElementCollector(document, ids);
    //过滤Wall要素对象
    IList<Element> elements1 = elementCollector1.OfClass(typeof(Wall)).ToElements();
    foreach (Element item in elements1)
    {
        item.Location.Rotate(line, Math.PI / 2);
    }

    transaction.Commit();
}
Revit二次开发基本流程,必看保姆级别文章内容,超级详细没有之一,小白看了都能做出来 隐式变量 (string a = “字符串” 等于 var a = “字符串” 其中string 我们用var 代替)推荐使用拓展包 https://www.nuget.org/packages/xml.Revit.Toolkit。运行 dotnet new install xml.Revit.Templates 安装更新项目模板。新建项目中找到 xml.Revit.Templates 模板输入项目名称完成项目创建。该模板包含用于快速创建 Revit 附加命令的项目模板。输入项目名称 (建议用英文) 阅读详情

相关推荐

【Revit二次开发学习笔记】获取元素后对元素的属性进行修改

在上一篇笔记中 【Revit二次开发学习笔记】选取元素,获取长度 https://blog.youkuaiyun.com/zyandyz001/article/details/90702238 再稍微修改一下,对属性进行修改 见以下代码: //过滤外墙 FilteredElementCollector filteredElements = new Filtered...

zyandyz001的博客 1730

【REVIT二次开发教程】01-“你好,Revit”

REVIT二次开发课程系列

weixin_45460408的博客 5223

Revit二次开发1、Revit事务(Transaction)

Revit二次开发 1、事务(Transcation)TranscationTransactionModeTranscation的实现其它相关SubTranscationTransactionGroupRegenerationJournalingAttribute结束语 [本内容个人为学习笔记,部分文字来自网络] Transcation 在改变Revit中模型时,需要使用Transaction事务来进行处理,也就是创建、修改、删除Revit模型时,必须使用Transcation,在Transcation进行

zwz2111的博客 5937

Revit二次开发教程 - 零基础小白也能开发自己的Revit插件

在选项卡上方的【Any CPU】下拉打开配置管理器,(或右键【解决方案资源管理器】中的项目名称,选择【属性】),修改活动解决方案平台为 x64。指的是手动提交模式。Revit API要求,对Revit文档的一系列修改操作,例如添加、删除或更新模型中的元素,必须在一个事务中进行。VS自带反编译工具,点击提示框上方的代码,可以查看源码,在开发过程中用来查询或调用源码中的类、方法、数据类型、枚举等。返回【引用管理器】,勾选后点击【确定】。选择右上角【解决方案管理器】中的【引用】,右键点击,选择【添加引用】。

ZHANGXUEKUN2的博客 5035

【Revit二次开发学习笔记】选取元素,获取长度

以下是几种基础的类图 下面主要是选取元素以及获取长度的实例程序 直接上代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.UI; us...

zyandyz001的博客 1503

Revit二次开发——图元(元素)编辑

例如,如果在坐标点(O,0, 0)新创建了一个柱子,然后移动它到新的坐标点(10, 20, 30),这个柱子将会移动到(10, 20, 0),而不是(10, 20, 30)。移动元素集的方法也会出现这种情况。元素的几个重要的属性包括: Category(类别),Location(位 置),Levelld(标 高),Groupld(组),Id, UniqueId(唯一 Id)等等。API提供了移动元素的方法,可以把-一个或者几个元素从一个地方移动到另一个地方,从精确程度来说,和UI的移动命令是一样的。....

weixin_44037272的博客 2682

Revit二次开发-基础流程

本文主要介绍了Revit二次开发的基础流程,包含完成一些Revit基本操作的代码示例。

MilletQ的博客 3021

Revit中Category、Family、FamilySymbol与FamilyInstance图文详解(Revit二次开发)

Revit中Category、Family、FamilySymbol与FamilyInstance图文详解(Revit二次开发) 在Revit中除了Category、Family、FamilySymbol、FamilyInstance这四个概念对于初学者来说,很容易搞混淆。这里通过一张图来说明我对这四个概念的理解: 在Revit二次开发中,可以用FilteredElementCollector、OfClass、OfCategory等方法来获取族实例、族类型,如 FilteredElementCollect

weixin_46433786的博客 4608

Revit二次开发资料汇总

一、背景 现在越来越多的小伙伴加入了Revit二次开发的阵营,刚入门,资料去哪找?如何开始二次开发?有没有可以带我的老司机?…等都是让小伙伴头疼的问题。因此笔者这篇文章就给大家分享了一些解决问题的观点,还收集了一些不错的二次开发资源,供大家学习参考,希望能帮助到大家。 二、基本认识 2.1我该采取什么语言? revit二次开发优先考虑使用C#语言,理由如下: 目前市面上关于revit二次开发的书...

黑夜の骑士的博客 2万+

Revit二次开发入门

Revit二次开发入门 订购并安装Autodesk Revit 安装Visual Studio 安装Revit AddIn-Manager 安装步骤: 找到安装Revit解压后的文件夹,找到\Utilities\SDK目录,并运行RevitSDK.exe; 指定安装目录(安装步骤实际上只是把一个文件夹解压,不需要太在意目标文件夹); 在中找到文件AddIn-Manager.dll以及AddIn-Manager.addin,将这两个文件复制到C:\ProgramData\Autodesk\Revit\Add

weixin_41943515的博客 1870

Revit二次开发——结构模型构件自动扣减

对'HelloWorld'说不,一起来写'有福扣减' 有福BIM的第四篇原创文章! 阅读前望知悉: 我晓得各位读者和粉丝中不乏C#二开大佬 有福作为一个二开新手(编程泥腿子) 自知对编程的语法或定义的理解浅薄 故此文不敢称之‘教程’ 仅作为‘技术分享’与‘学习笔记’之类尚可 这个系列被我称为《零基础Revit二次开发》 可有意思的事 从另一个角度来看 真正的零基础(不会C#、没有任何编程经验、R...

有福BIM - 马有福 2944

Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)

Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)安装Revit 2019Visual Studio 2017Revit SDK 2019配置AddinManagerRevit Lookup 安装 系统:Windows 10家庭中文版64位 Revit 2019 ; Visual Studio 2017(用于代码编写) ; Revit SDK 2019 (用...

qq_36754364的博客 2万+

Revit 及 Revit二次开发入门笔记

加入BIM相关行业后,虽然是个门外汉,但是还是下决心好好钻研,尽快创造些价值。 BIM中很关键的软件Revit已下载。我下载的是2017版本,看了几节Revit视频教程,算是有了初步的了解。因为我的工作主要与Revit二次开发相关,因此着手准备了二次开发相关的资料和软件。前几天双十一前买了本《二次开发基础教程》同济大学出版社的,是Autodesk官方出品,翻开书看内容就觉得很正派。按照书中的要求

alexlanxy的博客 1万+

revit二次开发获取元素所有的曲线

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection...

qq_34968766的博客 1622

Revit二次开发实例:平面元素和点坐标的拾取

Revit二次开发实例:平面元素和点坐标的拾取 前言 Revit二次开发中经常会遇到拾取平面元素或者点的坐标,下面我记录一段代码,仅供参考 一、引用导入 做Revit插件开发首先要添加引用:RevitAddInUtility、RevitAPI、RevitAPIUI等。 二、使用步骤 1.定义 定义如下: UIDocument m_document; 2.实现 直接贴代码: /// <summary> /// Implement this method as an external com

weixin_40024183的博客 1815

revit二次开发——如何选取元素(revit2016)

revit二次开发——如何选取元素(revit2016) 这是我在网上和书中比较写出的代码,可能不是太成熟,希望大家多多指教 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit....

Sakura030的博客 3495

Revit 二次开发 - 访问链接文件

昨天和一位Revit二次开发人员讨论了关于如何访问链接文件(Linked File)的问题。因为之前没有涉及过,所以写了简单的测试代码验证,现分享如下: 1. Revit 2012 中提供 TransmissionData 类访问链接文件的路径和状态     通过 TransmissionData 可以很方便地访问(读/写)当前文档中链接文档的路径和加载状态属性;     但是我

摘花换酒的专栏 5300

C++ bitset总结

数据结构bitset 术语:某1位置位是置1,某一位复位是某一位清零。 文章目录数据结构bitset一、3种初始化方式二、位访问三、位操作四、 位集操作总结实战练习 一、3种初始化方式 bitset<32> tmp; //默认构造函数,默认全0。 bitset<32> tmp(-1); //从整形数构造 bitset<32> tmp("101"); //从包含1和0的字符串构造 二、位访问 bitset<32> tmp(256)

qq_43807092的博客 721

Revit 二次开发 获得元素相交的其他元素

根据自己的需求来使用 第二种有时会出现过滤不出来 第一种方法 思路是根据这个元素得到一个包围这个元素的盒子 和要过滤的相交元素的类别 组合成一个 筛选器 /// &lt;summary&gt; /// 获取相交元素 boundingBox /// &lt;/summary&gt; /// &lt;param name="ele...

m0_37867305的博客 2080

将AAL图谱对应到Yeo7大网络中【原理,代码分析】

本文介绍了将AAL2图谱映射到Yeo7大功能网络的方法。通过整合皮层(Yeo2011)、小脑(Buckner2011)和纹状体(Choi2012)三个区域的功能网络图谱,采用投票机制确定每个AAL区域的网络归属。具体步骤包括:1)统计每个AAL区域体素在各网络图谱中的分布;2)选择体素数量最多的网络作为该区域的最终标签。该方法实现了从解剖结构到功能网络的映射,可获得120个AAL区域对应的7大功能网络标签。

yes666666的博客 2206

使用 MATLAB/Simulink 构建一个 压水堆核电机组的反应堆控制与功率调节系统 仿真模型

本文通过Simulink构建压水堆核电机组的反应堆控制与功率调节模型,详细介绍了建模流程:从中子点动力学核心方程、反应性反馈模型(控制棒、多普勒和慢化剂效应)、一回路热工模型到完整的闭环控制系统。教程包含系统结构设计、参数设置、模块连接方法,以及典型负荷变化场景的仿真分析,帮助读者理解核反应堆动态特性和控制原理。同时提供了进阶建模建议,如分布参数模型和先进控制策略的应用。该模型为教学简化版,强调核能系统的机理建模与Simulink实现方法,适合核工程与控制领域的学习者参考实践。

amy_mhd的博客 186
上一篇: Revit二次开发小白学习笔记7——Revit元素过滤器
下一篇: Python开发环境配置笔记1——软件安装
ping_Kingzero
博客等级 码龄8年 180粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ping_Kingzero

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值