【Revit二次开发】楼板、天花板、屋顶和洞口

article/2025/9/28 17:00:43

  • 介绍
  • 代码

介绍

Creates a slab within the project with the given horizontal profile using the default floor style.

public Floor NewSlab(CurveArray profile,Level level,Line slopedArrow,double slope,bool isStructural
)

在这里插入图片描述

在Revit二次开发中,楼板、天花板、屋顶和洞口都是Revit中的构件类型,可以使用Revit API来创建、修改和删除这些构件。

楼板(Floor):在Revit中,楼板是由一个或多个边界定义的平面构件。可以使用Floor类来创建、修改和删除楼板。下面是一个创建楼板的示例:

// 创建一个新的楼板
Floor floor = doc.Create.NewFloor(profile, floorType, level, false);

其中,profile是一个CurveArray对象,表示楼板的边界,floorType是楼板类型,level是楼板所在的标高。

天花板(Ceiling):在Revit中,天花板是一个平面构件,它被放置在房间上方,可以用于隐藏房间的结构和设备。可以使用Ceiling类来创建、修改和删除天花板。下面是一个创建天花板的示例:

// 创建一个新的天花板
Ceiling ceiling = doc.Create.NewCeiling(level, profile, ceilingType);

其中,level是天花板所在的标高,profile是一个CurveArray对象,表示天花板的边界,ceilingType是天花板类型。

屋顶(Roof):在Revit中,屋顶是由一个或多个边界定义的斜面构件。可以使用FootPrintRoof类或ExtrusionRoof类来创建、修改和删除屋顶。下面是一个创建屋顶的示例:

// 创建一个新的足迹屋顶
FootPrintRoof roof = doc.Create.NewFootPrintRoof(profile, roofType, level, false);

其中,profile是一个CurveArray对象,表示屋顶的边界,roofType是屋顶类型,level是屋顶所在的标高。

洞口(Opening):在Revit中,洞口可以用于在墙、楼板等构件中创建一个洞,以便放置门、窗等构件。可以使用Opening类来创建、修改和删除洞口。下面是一个创建洞口的示例:

// 创建一个新的洞口
Opening opening = doc.Create.NewOpening(host, plane, true);

其中,host是包含洞口的构件,plane是洞口所在的平面。

这些示例只是Revit API中创建这些构件的一种方法,可以根据自己的需要选择不同的方法。另外,创建这些构件之前,需要先定义它们的类型、标高等信息。

代码


using Autodesk.Revit.DB.Structure;
using System.Collections.Generic;namespace Autodesk.Revit.DB
{public class Wall : HostObject{public CurtainGrid CurtainGrid { get; }public WallType WallType { get; set; }public double Width { get; }public StructuralWallUsage StructuralUsage { get; set; }public bool Flipped { get; }public bool IsStackedWall { get; }public bool IsStackedWallMember { get; }public ElementId StackedWallOwnerId { get; }public WallCrossSection CrossSection { get; set; }public XYZ Orientation { get; }public ElementId SketchId { get; }public static Wall Create(Document document, Curve curve, ElementId levelId, bool structural);public static Wall Create(Document document, IList<Curve> profile, bool structural);public static Wall Create(Document document, IList<Curve> profile, ElementId wallTypeId, ElementId levelId, bool structural);public static Wall Create(Document document, IList<Curve> profile, ElementId wallTypeId, ElementId levelId, bool structural, XYZ normal);public static Wall Create(Document document, Curve curve, ElementId wallTypeId, ElementId levelId, double height, double offset, bool flip, bool structural);public bool CanHaveProfileSketch();public Sketch CreateProfileSketch();public void Flip();public IList<ElementId> GetStackedWallMemberIds();public bool IsWallCrossSectionValid(WallCrossSection wallCrossSection);public void RemoveProfileSketch();}
}
//============代码片段4-7 创建默认墙============
ElementId levelId = new ElementId(311);
using (Transaction transaction = new Transaction(RevitDoc))
{transaction.Start("Create wall");Wall wall = Wall.Create(RevitDoc, Line.CreateBound(new XYZ(0, 0, 0), new XYZ(100, 0, 0)), levelId, false);transaction.Commit();
}//============代码片段4-8 创建梯形墙============
IList<Curve> curves = new List<Curve>();
curves.Add(Line.CreateBound(new XYZ(100, 20, 0), new XYZ(100, -20, 0)));
curves.Add(Line.CreateBound(new XYZ(100, -20, 0), new XYZ(100, -10, 10)));
curves.Add(Line.CreateBound(new XYZ(100, -10, 10), new XYZ(100, 10, 10)));
curves.Add(Line.CreateBound(new XYZ(100, 10, 5), new XYZ(100, 20, 0)));
using (Transaction transaction = new Transaction(RevitDoc))
{transaction.Start("Create wall");Wall wall = Wall.Create(RevitDoc, curves, false);transaction.Commit();
}//============代码片段4-9 创建正反两面墙============
ElementId levelId = new ElementId(311);
ElementId wallTypeId = new ElementId(397);
IList<Curve> curves = new List<Curve>();// 创建第一面墙
XYZ[] vertexes = new XYZ[] { new XYZ(0, 0, 0), new XYZ(0, 100, 0), new XYZ(0, 0, 100) };
for (int ii = 0; ii < vertexes.Length; ii++)
{if (ii != vertexes.Length - 1)curves.Add(Line.CreateBound(vertexes[ii], vertexes[ii + 1]));elsecurves.Add(Line.CreateBound(vertexes[ii], vertexes[0]));
}
Wall wall = null;
using (Transaction transaction = new Transaction(RevitDoc))
{transaction.Start("Create wall 1");wall = Wall.Create(RevitDoc, curves, wallTypeId, levelId, false, new XYZ(-1, 0, 0));transaction.Commit();
}// 创建第二面墙,面朝向相反
curves.Clear();
vertexes = new XYZ[] { new XYZ(0, 0, 100), new XYZ(0, 100, 100), new XYZ(0, 100, 0) };
for (int ii = 0; ii < vertexes.Length; ii++)
{if (ii != vertexes.Length - 1)curves.Add(Line.CreateBound(vertexes[ii], vertexes[ii + 1]));elsecurves.Add(Line.CreateBound(vertexes[ii], vertexes[0]));
}
using (Transaction transaction = new Transaction(RevitDoc))
{transaction.Start("Create wall 2");wall = Wall.Create(RevitDoc, curves, wallTypeId, levelId, false, new XYZ(1, 0, 0));transaction.Commit();
}//============代码片段4-10 创建墙,并设置高度,偏移和是否翻转============
ElementId levelId = new ElementId(311);
ElementId wallTypeId = new ElementId(397);using (Transaction transaction = new Transaction(RevitDoc))
{transaction.Start("Create wall");Wall wall = Wall.Create(RevitDoc, Line.CreateBound(new XYZ(0, 0, 0), new XYZ(0, 100, 0)), wallTypeId, levelId, 200, 300, true, false);transaction.Commit();
}//============代码片段4-11 创建三角形墙============
CurveArray curveArray = new CurveArray();
curveArray.Append(Line.CreateBound(new XYZ(0, 0, 0), new XYZ(100, 0, 0)));
curveArray.Append(Line.CreateBound(new XYZ(100, 0, 0), new XYZ(0, 100, 0)));
curveArray.Append(Line.CreateBound(new XYZ(0, 100, 0), new XYZ(0, 0, 0)));
using (Transaction transaction = new Transaction(RevitDoc))
{transaction.Start("Create floor");Floor floor = RevitDoc.Create.NewFloor(curveArray, false);transaction.Commit();
}//============代码片段4-12 创建屋顶============
using (Transaction transaction = new Transaction(RevitDoc))
{View view = RevitDoc.ActiveView;//先创建一个参照平面XYZ bubbleEnd = new XYZ(0, 0, 0);XYZ freeEnd = new XYZ(0, 100, 0);XYZ thirdPnt = new XYZ(0, 0, 100);transaction.Start("Create reference plane");ReferencePlane plane =RevitDoc.Create.NewReferencePlane2(bubbleEnd, freeEnd, thirdPnt, view);transaction.Commit();//创建屋顶前准备参数Level level = RevitDoc.GetElement(new ElementId(311)) as Level;RoofType roofType = RevitDoc.GetElement(new ElementId(335)) as RoofType;CurveArray curveArray = new CurveArray();curveArray.Append(Line.CreateBound(new XYZ(0, 0, 50), new XYZ(0, 50, 100)));curveArray.Append(Line.CreateBound(new XYZ(0, 50, 100), new XYZ(0, 100, 50)));//创建屋顶transaction.Start("Create roof");RevitDoc.Create.NewExtrusionRoof(curveArray, plane, level, roofType, 10, 200);transaction.Commit();
}//============代码片段4-13 创建带洞口屋顶============
using (Transaction transaction = new Transaction(RevitDoc))
{//创建屋顶前准备参数Level level = RevitDoc.GetElement(new ElementId(311)) as Level;RoofType roofType = RevitDoc.GetElement(new ElementId(335)) as RoofType;CurveArray curveArray = new CurveArray();//屋顶外边框curveArray.Append(Line.CreateBound(new XYZ(0, 0, 0), new XYZ(30, 0, 0)));curveArray.Append(Line.CreateBound(new XYZ(30, 0, 0), new XYZ(30, 30, 0)));curveArray.Append(Line.CreateBound(new XYZ(30, 30, 0), new XYZ(0, 30, 0)));curveArray.Append(Line.CreateBound(new XYZ(0, 30, 0), new XYZ(0, 0, 0)));//在中间添加洞口curveArray.Append(Line.CreateBound(new XYZ(5, 5, 0), new XYZ(5, 15, 0)));curveArray.Append(Line.CreateBound(new XYZ(5, 15, 0), new XYZ(15, 5, 0)));curveArray.Append(Line.CreateBound(new XYZ(15, 5, 0), new XYZ(5, 5, 0)));//创建屋顶transaction.Start("Create roof");ModelCurveArray modelCurveArray = new ModelCurveArray();FootPrintRoof roof =RevitDoc.Create.NewFootPrintRoof(curveArray, level, roofType, out modelCurveArray);//设置屋顶坡度ModelCurve curve1 = modelCurveArray.get_Item(0);ModelCurve curve3 = modelCurveArray.get_Item(2);roof.set_DefinesSlope(curve1, true);roof.set_SlopeAngle(curve1, 0.5);roof.set_DefinesSlope(curve3, true);roof.set_SlopeAngle(curve3, 1.6);transaction.Commit();
}//============代码片段4-14 创建独立实例============
// place a furniture at (0,0,0)
FamilySymbol familySymbol = RevitDoc.GetElement(new ElementId(99774)) as FamilySymbol;
using (Transaction transaction = new Transaction(RevitDoc))
{transaction.Start("Create standard-alone instance");FamilyInstance familyInstance = m_creation.NewFamilyInstance(new XYZ(0, 0, 0), familySymbol, StructuralType.NonStructural);transaction.Commit();Trace.WriteLine(familyInstance.Id);
}//============代码片段4-15 墙上创建门============
// 在墙上创建一扇门
FamilySymbol familySymbol = RevitDoc.GetElement(new ElementId(49480)) as FamilySymbol;
Level level = RevitDoc.GetElement(new ElementId(30)) as Level;
Wall hostWall = RevitDoc.GetElement(new ElementId(180736)) as Wall;
using (Transaction transaction = new Transaction(RevitDoc))
{transaction.Start("Create standard-alone instance");FamilyInstance familyInstance = m_creation.NewFamilyInstance(new XYZ(0, 0, 0), familySymbol, hostWall, level, StructuralType.NonStructural);transaction.Commit();Trace.WriteLine(familyInstance.Id);
}//============代码片段4-16 创建柱子============
// place a column at (0,0,0),
FamilySymbol familySymbol = RevitDoc.GetElement(new ElementId(52557)) as FamilySymbol;
Level level = RevitDoc.GetElement(new ElementId(331)) as Level;
using (Transaction transaction = new Transaction(RevitDoc))
{transaction.Start("Create a level based instance");FamilyInstance familyInstance = m_creation.NewFamilyInstance(new XYZ(0, 0, 0), familySymbol, level, StructuralType.NonStructural);transaction.Commit();Trace.WriteLine(familyInstance.Id);
}

http://chatgpt.dhexx.cn/article/KD7unx5N.shtml

相关文章

Revit二次开发——选集

选集 选集用户选集过滤的用户选集 选集 选择图元后运行外部命令获取选择的内容 Revit API中定义了单选、多选、框选等方式的用户选集&#xff0c;用户可以十分方便的使用鼠标和键盘完成这三种方式的图元选择。Revit API根据三种用户选集各自的特点&#xff0c;封装了多种实现…

Revit二次开发——族的基础

族 族族编辑族实例 族 Revit将族分为系统族、内建族、标准构件族。 系统族&#xff1a;系统族是在 Autodesk Revit 中预定义的族&#xff0c;包含基本建筑构件&#xff0c;例如墙、窗和门。例如&#xff1a;基本墙系统族包含定义内墙、外墙、基础墙、常规墙和隔断墙样式的墙类…

Revit二次开发-CurveLoop的闭合处理

在Revit二次开发中&#xff0c;生成solid体块的时候&#xff0c;截面一般使用的CurveLoop这个数据结构。 笔者在使用CurveLoop的使用&#xff0c;给它Append某个几何的时候&#xff0c;老出异常捕获&#xff1a; XXXXXX. 英文不打了&#xff0c;就是不连续的意思。 查阅api发…

【Revit二次开发】族

族 族族实例族文档Revit API中族文档相关类族参数和族类型 族 Revit将族分为系统族、内建族、标准构件族。 Autodesk revit中的所有图元都是基于族的。 系统族&#xff1a;系统族是在 Autodesk Revit 中预定义的族&#xff0c;包含基本建筑构件&#xff0c;例如墙、窗和门。例…

Revit二次开发放样融合CreateSweptBlendGeometry

生成solid的放样融合接口为CreateSweptBlendGeometry&#xff0c;参数描述如下&#xff1a; 1&#xff09;Curve pathCurve&#xff1a;路径只要一个线 2&#xff09; IList<double> pathParams&#xff1a;数组大小和截面数组一样&#xff0c;作用是定位截面数组每个截…

Revit二次开发入门

Revit二次开发入门 订购并安装Autodesk Revit安装Visual Studio安装Revit AddIn-Manager 安装步骤&#xff1a; 找到安装Revit解压后的文件夹&#xff0c;找到\Utilities\SDK目录&#xff0c;并运行RevitSDK.exe&#xff1b; 指定安装目录&#xff08;安装步骤实际上只是把一个…

Revit二次开发01-开发环境的配置(Revit2018+Visual Studio 2015)

1.软件简介 1.1 Revit 2018 SDK Revit SDK包含RevitAPI的帮助文档以及带源码的案例&#xff0c;Revit SDK需要与Revit的版本保持一致。Revit SDK中的Add-In Manager是Revit的官方插件&#xff0c;用来加载revit的插件&#xff0c;RevitAPI.chm是RevitAPI的帮助文档。 1.2 Revi…

Revit二次开发有几种方式?做Revit二次开发的必看!

Revit二次开发有三种方式&#xff1a;外部命令&#xff08;IExternalCommand&#xff09;、外部应用(IExternalApplication)和宏(Macro)。下面将简要说明外部应用、宏的开发过程&#xff0c;并着重说明外部命令的开发过程。 1.宏&#xff08;Macro&#xff09; 宏是基于RevitAP…

Revit二次开发案例一(第1讲)

这期起&#xff0c;将为大家带来二次开发的小案例讲解&#xff0c;通过借助Revit建模与二次开发&#xff0c;帮助大家快速提高开发水平&#xff0c;快快参加吧&#xff01;&#xff01;&#xff01; 族实例是通过族类型创建的&#xff0c;而创建族实例是Revit二次开发尤其重要…

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

本教程全程采用VS2022&#xff0c;Revit2022。 1.新建项目 打开VS2022&#xff0c;创建新项目&#xff0c;选择项目类型为C#&#xff0c;Windows&#xff0c;然后点击下一步。 2.添加引用 选择右上角【解决方案管理器】中的【依赖项】&#xff0c;右键点击&#xff0c;选择【…

运放的差分放大电路

该放大器的传递函数为&#xff1a;    若R1 R3 且R2 R4&#xff0c;则公式 1 简化为&#xff1a; 应用电路&#xff1a; 电路一&#xff1a; 用运放做电流采样&#xff0c;再用单片机AD采集处理。 注&#xff1a; 1、Rp10、Rp11、Cp8、Cp9&#xff0c;是对输入做的RC…

模电(十四)差分放大电路

目录 差分放大电路 双端输入双端输出 Q点分析 抑制共模信号 放大差模信号 双端输入单端输出 Q点分析 差模信号分析 共模信号分析 单端输入双端输出 单端输入单端输出 四种接法比较 具有恒流源的差分放大电路 差分放大电路的改进 差分放大电路 采用引入支流负反馈&a…

差分放大电路基础

该放大器的传递函数为&#xff1a; 若R1 R3 且R2 R4&#xff0c;则公式 1 简化为&#xff1a; 应用电路&#xff1a; 电路一&#xff1a; 用运放做电流采样&#xff0c;再用单片机AD采集处理。 注&#xff1a; 1、Rp10、Rp11、Cp8、Cp9&#xff0c;是对输入做的RC滤波&…

6.深入浅出:差分放大电路——参考《模拟电子技术基础》清华大学华成英主讲

如果你想理解差分电路共模信号和差模信号&#xff0c;共模放大倍数&#xff0c;差模放大倍数&#xff0c;共模抑制比等&#xff0c;本文或许能给你比较系统的认知&#xff0c;主要包括&#xff1a; 什么是零点漂移&#xff1f; 引入差分电路 两个共射极放大电路对称布置&…

差分放大电路的构成(零点漂移、差分放大电路是怎么构成的、共模信号、差模信号)

差分放大电路的构成 直接耦合放大电路 零点漂移现象 输入短接&#xff0c;输入为零的时候&#xff0c;输出不是一条直线&#xff0c;就是交流量不是零。 一、产生原因 温漂&#xff0c;温度变化使静态工作点发生变化&#xff0c;产生零点漂移 二、抑制温漂的方法 加射极电阻…

干货 | 教你轻松掌握差分放大电路,看完这篇不踩坑

要想掌握差分放大电路&#xff0c;首先就要知道什么是差分放大电路以及它的作用。 差分放大电路是模拟集成运算放大器输入级所采用的的电路形式&#xff0c;差分放大电路是由对称的两个基本放大电路&#xff0c;通过射极公共电阻耦合构成的&#xff0c;对称的意思就是说两个三极…

全差分运算放大器浅析

全差分放大器(Fully-Differential)是一种应用在将单端信号转换为差分信号&#xff0c;或者将差分信号转换为差分信号的芯片。 全差分放大器的配置特点&#xff0c;就是全对称匹配。即两侧输入阻抗配置完全一致&#xff08;阻抗包括源内阻&#xff09;&#xff0c;反馈配置完全…

运算放大器——4种基本运放电路(同相放大、反相放大、加法器、差分放大电路)实际设计中需要考虑的实际问题

运算放大器——4种基本运放电路(同相放大、反相放大、加法器、差分放大电路)在实际设计中需要考虑的实际问题 前言 第一篇博客就从运放入手吧&#xff0c;话不多说。正文开始&#xff1a;想必大家对运放电路都熟悉的再不能熟悉了。可是这里为什么又再拿出来写呢&#xff1f;肯…

高压电压采样之差分放大电路

在高压电压采样方案研究一文中提到&#xff0c;可以使用差分放大电路进行高压电压采样。如下图&#xff1a;   该方案有缺陷&#xff0c;如下。整车车身与12V电池负极连接到一起&#xff0c;同属于低压电路&#xff0c;我们可以称之为大地。没有绝对的绝缘体&#xff0c;电池…

电子电路:差分放大器分析

1. 差分放大器与共模抑制比 1.1差分放大器 差分放大器有两个输入端和一个输出端&#xff0c;它可以获取两个输入电压之间的差值&#xff0c;并将这个差值放大后送到输出端&#xff0c;差分放大器的模型如下&#xff1a; 输入电压 v i 1 , v i 2 v_{i1}, v_{i2} vi1​,vi2​…