【Revit二次开发】创建rvt文件,但不打开Revit

介绍

需要安装Revit,但不用打开Revit加载插件,而是运行一个控制台应用,就可以创建一个rvt文件(更多读写功能都可自行添加)。

本文内容主要参考:博客1,但对内容进行了简化,只保留了最核心的内容。

本文以Revit2019为例做了测试,有博客2说Revit2022不支持该功能。

示例

  1. 创建.net framework4.7.2的控制台应用
  2. 在【引用】中引入Revit2019安装目录中三个dll:RevitNET.dllRevitAddInUtility.dllRevitAPI.dll
  3. 创建一个工具类RevitContext用来配置Revit API环境。
    下文代码中的Revit路径写死了,可自行修改或增加配置文件。
using Autodesk.Revit;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.DB;
using System;
using System.Configuration;
using System.Linq;
using System.Reflection;namespace TestRvt
{public class RevitContext{public static RevitContext Instance { get; } = new RevitContext();private static Product _product;public static Application App => _product.Application;static RevitContext(){var revitDir = @"C:\Program Files\Autodesk\Revit 2019";//revitDir = LoadConfig();//可以自行读取配置文件,读取自己的Revit安装路径//从config中读取revit的路径AddEnvironmentPaths(revitDir);} private static void AddEnvironmentPaths(params string[] paths){var path = new[] { Environment.GetEnvironmentVariable("PATH") ?? string.Empty };var newPath = string.Join(System.IO.Path.PathSeparator.ToString(), path.Concat(paths));Environment.SetEnvironmentVariable("PATH", newPath);}public static void Init(){_product = Product.GetInstalledProduct();var clientId = new ClientApplicationId(Guid.NewGuid(), "AppName", "RevitAPI");_product.Init(clientId, "I am authorized by Autodesk to use this UI-less functionality.");}public static void Exit(){_product?.Exit();}}
}
  1. 写入rvt的代码
using Autodesk.Revit.DB;
using System;
using System.IO;namespace TestRvt
{public class Program{static Program(){        RevitContext.Init();//尝试合并到RevitContext中,但未成功,会报错}[STAThread]static void Main(string[] args){ var app = RevitContext.App;  var projectrTemplate = app.DefaultProjectTemplate;var document = app.NewProjectDocument(projectrTemplate);//清空所有楼层平面视图var elements = new FilteredElementCollector(document);var levels = elements.OfClass(typeof(Level)).Cast<Level>();using (var tran = new Transaction(document)){tran.Start("test");document.Delete(levels.Select(x => x.Id).ToList());tran.Commit();}//创建一个平面视图Level level = null;using (var tran = new Transaction(document)){tran.Start("创建楼层标高");level = Level.Create(document, 0);level.Name = "MyLevel0";var classFilter = new ElementClassFilter(typeof(ViewFamilyType));var filterElements = new FilteredElementCollector(document);var floorViewFamily = filterElements.WherePasses(classFilter).Cast<ViewFamilyType>().First(x => x.ViewFamily == ViewFamily.FloorPlan);ViewPlan view = ViewPlan.Create(document, floorViewFamily.Id, level.Id);tran.Commit();}//创建墙var p1 = new XYZ(0,0,0);var p2 = new XYZ(0,10,0);var p3 = new XYZ(5,10,0);using (var tran = new Transaction(document)){tran.Start("创建墙");Wall.Create(document, Line.CreateBound(p1, p2), level.Id, false);Wall.Create(document, Line.CreateBound(p2, p3), level.Id, false);tran.Commit();}document.SaveAs("./r.rvt");RevitContext.Exit();Console.WriteLine("Over");Console.ReadLine();                        }}
}

效果图:

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCL从理解到应用【03】KDTree 原理分析 | 案例分析 | 代码实现

前言 本文分析KDTree的原理&#xff0c;集合案例深入理解&#xff0c;同时提供源代码。 三个案例&#xff1a;K近邻搜索、半径内近邻搜索、近似最近邻搜索。方法对比&#xff0c;如下表所示&#xff1a; 特性K近邻搜索半径内近邻搜索近似最近邻搜索描述查找K个最近邻点查找指…

[环境搭建] 使用nginx搭建 hls 媒体服务器

1. 安装nginx 略 2.配置 hls 流媒体服务 修改 nginx 配置文件相关代码块为如下&#xff1a; http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash_max_size 2048;include /etc/nginx/mime.types;default_type application/octet-stream;access…

nginx-限制客户端并发数

文章目录 前言一、ngx_http_limit_conn_module二、指令介绍1. limit_conn_zone2.limit_conn3. limit_conn_log_level4. limit_conn_status 案例未限制限制 总结 前言 瞬时大量用户访问服务器&#xff0c;导致服务器超载而宕机。 恶意请求攻击服务器&#xff0c;导致服务器超载…

西安邀请媒体报道,附媒体名单

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 西安市&#xff0c;作为中国古都之一&#xff0c;不仅拥有…

Astro新前端框架首次体验

Astro新前端框架首次体验 1、什么是Astro Astro是一个静态网站生成器的前端框架&#xff0c;它提供了一种新的开发方式和更好的性能体验&#xff0c;帮助开发者更快速地构建现代化的网站和应用程序。 简单来说就是&#xff1a;Astro这个是一个网站生成器&#xff0c;可以直接…

代码随想录训练营Day59

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、比较含退格的字符串 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 今天是跟着代码随想录刷题的第59天&#xff0c;今天最后一天复…

DisFormer:提高视觉动态预测的准确性和泛化能力

最新的研究进展已经显示出目标中心的表示方法在视觉动态预测任务中可以显著提升预测精度&#xff0c;并且增加模型的可解释性。这种表示方法通过将视觉场景分解为独立的对象&#xff0c;有助于模型更好地理解和预测场景中的变化。 尽管在静态图像的解耦表示学习方面已经取得了一…

基于SpringBoot的乐校园二手书交易管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言 Java 数据库 MySQL 技术 SpringBoot框架 工具 Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册界面 二手图书界面 个人中心界面 摘要 乐校园…

亚马逊自动化仓储繁忙的一天

早晨:准备与启动 6:00 AM - 系统启动 自动化仓储系统在清晨开始启动,操作员检查各项系统和设备的状态,确保所有机器人、传送带和扫描设备都正常运行。仓储管理系统(WMS)加载当天的订单数据,准备开始处理。 6:30 AM - 早班员工到达 早班员工到达仓库,换上工作服和安全装…

Qt提升控件失败的解决办法

在 Qt Creator 中&#xff0c;通常是可以通过继承已有的类来创建新的子类的。如果您想要将 QGraphicsView 提升为新建的子类&#xff0c;可以按照以下步骤进行操作&#xff1a; 打开 Qt Creator&#xff0c;并打开您的项目。打开包含 QGraphicsView 的头文件&#xff08;例如 …

go Channel原理 (四)

Channel 设计原理 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存。 在主流编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存。 Go 可以使用共享内存加互斥锁进行通信&#xff0c;同时也提供了一种不同的并发模型&#xff0c;即通…

试用笔记之-VB微信支付支付宝支付源代码

首先下载VB微信支付&支付宝支付源代码 http://www.htsoft.com.cn/download/VB6WeiXin_ZhiFuBao_ZhiFu.rar

Docker国内可用镜像源

近期因为特殊原因国内可以的镜像源都挂了&#xff0c;找到了一个目前可使用的。 打开终端&#xff0c;设置 registry mirror [rootbogon debian_nginx_php7133]# cat /etc/docker/daemon.json {"registry-mirrors": ["https://dockerhub.icu"] } 您在 /…

引用个数为什么会影响内存泄漏 c++例子

在C++中,内存泄漏通常与手动管理内存有关,而不是直接由引用计数引起,因为C++标准库本身并不提供自动的引用计数功能。但是,我们可以通过一个例子来间接说明引用(或指针)管理不当如何导致内存泄漏,尤其是当涉及复杂对象结构和所有权关系时,这种管理不当往往体现在循环引…

【一念发动便是行】念头,就是命运

一个个恶念累积就是负能量&#xff0c;念头就是命运&#xff0c;克除恶念&#xff0c;防范念头&#xff0c;念头都有能量&#xff0c;学圣学须内外庄严检肃&#xff0c;言语有灵 多数人的问题都是出在念头上&#xff0c;念头&#xff0c;就是自己的命运&#xff1b; 当我们对自…

Linux--信号(万字详解!超完整!)

目录 0.预备知识 0.1.基本概念 0.2.信号的捕捉 0.3.理解信号的发送与保存 1.信号的产生&#xff08;阶段一&#xff09; 1.通过kill命令&#xff0c;向指定进程发送指定的信号 2.通过终端按键产生信号&#xff1a;ctrlc&#xff08;信号2&#xff09;&#xff0c;ctrl\(…

【python】PyQt5控件尺寸大小位置,内容边距等API调用方法实战解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

ACID及事务隔离级别

2&#xff09;ACID及事务隔离级别 ACID四大特性解释 原子性&#xff08;Atomicity&#xff09;&#xff1a;一个事务内的操作&#xff0c;要么全部成功&#xff0c;要么全部失败。一致性&#xff08;Consistency&#xff09;&#xff1a;数据库从一个一致性状态&#xff0c;转移…

第十二章 执行引擎

一、执行引擎概述 概述 执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都有代码执行能力&#xff0c;其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的&#xff0c;而虚拟机的执行引…

使用docker创建nginx容器部署前端项目

一、docker部署nginx服务 1、创建本地文件 本地创建nginx文件夹&#xff0c;并在其下创建www、config、logs三个文件夹 2、docker拉取nginx镜像 docker pull nginx 3、创建nginx容器 docker run -d --name nginx -p 8088:80 nginx 4、将nginx.conf容器配置拷贝到本地创建…