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

news2024/11/23 23:56:00

介绍

需要安装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.coloradmin.cn/o/1898680.html

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

相关文章

第N7周:seq2seq翻译实战-pytorch复现-小白版

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 理论基础 seq2seq&#xff08;Sequence-to-Sequence&#xff09;模型是一种用于机器翻译、文本摘要等序列转换任务的框架。它由两个主要的递归神经网络&#…

BSI 第七届万物互联智慧高峰论坛:主题:拥抱AI时代,标准赋能组织实现可持续发展

BSI 第七届万物互联智慧高峰论坛&#xff1a;主题&#xff1a;拥抱AI时代&#xff0c;标准赋能组织实现可持续发展 主要收到 BSI 温女士的邀请参加的本次论坛。还是学到的很多 。 在科技日新月异的时代背景下&#xff0c;BSI 第七届万物互联智慧高峰论坛于[时间&#xff1a;6…

【HICE】搭建不同的主机名访问web服务

1.首先进入1.conf.d编辑内容&#xff0c;再重启服务&#xff0c;关闭防火墙 2.部署网页haha.html和xixi.html 3.在vim /etc/hosts增加域名 3.在window中进行本地解析的编辑 4.浏览器的验证

阿里云安装rabbitMQ

1、首先看linux 版本 uname -a如果时centos 7 可以参考其他文档。我这里是centos 8 这个很重要 。网上全是按centos7 按照。导致我前面一直安装不上 各种问题。 2、查看rabbitmq 对应 erl 的版本下载 https://www.rabbitmq.com/docs/which-erlang 选择rabbitmq 3.11.19 选择…

【线性代数的本质】矩阵与线性变换

线性变化要满足两点性质&#xff1a; 直线&#xff08;连续的点&#xff09;在变换后还是直线。原点不变。 假设有坐标轴&#xff08;基底&#xff09; i ^ \widehat{i} i 和 j ^ \widehat{j} j ​&#xff1a; i ^ [ 1 0 ] , j ^ [ 0 1 ] \widehat{i}\begin{bmatrix} 1 \…

Facebook广告被拒:常见原因以及避免屏蔽的方法

大多数情况下&#xff0c;广告被屏蔽是因为违反了规则&#xff0c;这不仅仅是因为审核因素。有些规则并不明显&#xff0c;也没有在任何地方指定。例如&#xff0c;在广告中使用广告政策中未列出的停用词&#xff1b;审核算法确定照片描绘的模特过于暴露。下面小编将为你介绍Fa…

四款主流电脑监控软件(电脑监控软件主要优势)

在现代企业环境中&#xff0c;确保员工的工作效率和企业信息的安全成为了管理者的重要任务。电脑监控软件作为一种有效的管理工具&#xff0c;能够帮助企业实现这些目标。固信电脑监控软件在这方面表现尤为出色&#xff0c;本文将详细介绍固信电脑监控软件的优势及其主要功能&a…

【腾讯内推】腾讯2025校招/青云计划/社招——长期有效

及时跟进进度&#xff0c;保证不让简历石沉大海&#xff01; 涵盖NLP/CV/CG/ML/多模态/数据科学/多媒体等各方向! 定向匹配优质团队/竞争力薪酬/覆盖全球工作地点! 招聘对象: 本硕博:2024年1月-2025年12月毕业的同学 目前最热岗位: 技术研究-自然语言处理 技术研究-计算机视觉 …

pdf压缩,pdf压缩在线网页版,在线压缩pdf网站

在数字化时代&#xff0c;pdf文件已经成为我们工作、学习和生活中不可或缺的一部分。然而&#xff0c;pdf文件往往体积庞大&#xff0c;传输效率低下&#xff0c;还占用大量存储空间。如何在不影响文件质量的前提下&#xff0c;减小pdf文件的大小呢&#xff1f;今天&#xff0c…

【RT-thread studio 下使用STM32F103-学习sem-信号量-初步使用-线程之间控制-基础样例】

【RT-thread studio 下使用STM32F103-学习sem-信号量-初步使用-线程之间控制-基础样例】 1、前言2、环境3、事项了解&#xff08;1&#xff09;了解sem概念-了解官网消息&#xff08;2&#xff09;根据自己理解&#xff0c;设计几个使用方式&#xff08;3&#xff09;不建议运行…

RedHat / CentOS安装FTP服务

本章教程,记录在RedHat / CentOS中安装FTP的具体步骤。FTP默认端口:21 1、安装 epel 源 yum install -y epel-release2、安装 pure-ftpd yum -y install pure-ftpd3、修改默认配置 # 默认配置位于 /etc/pure-ftpd/pure-ftpd.conf,在配置文件中找到下面几个参数进行修改:#…

Vmware环境下ESXi主机 配置上行链路、虚拟交换机、端口组、VMkernel网卡

一、适用场景 1、使用专业服务器跑多种不同的业务&#xff0c;每种业务可能所需运行的server环境不同&#xff0c;有的需要Linux server CentOS7/8、kali、unbuntu……有的需要windows server2008、2003、2016、2019、2022…… 2、本例采用的是VMware ESXi6.7 update 3版本&am…

一个项目学习Vue3---Class和Style绑定

看下面一段代码学习此部分内容 <template><button click"stateChang">状态切换</button><div :class"{font-color:classObject.openColor,font-weight:classObject.openWeight}">颜色和粗细变化</div><div :class"…

东芝 TB5128FTG 强大性能的步进电机驱动器

TB5128FTG它以高精度和高效能为设计理念&#xff0c;采用 PWM 斩波方法&#xff0c;并内置时钟解码器。通过先进的 BiCD 工艺制造&#xff0c;这款驱动器提供高达 50V 和 5.0A 的输出额定值&#xff0c;成为广泛应用场景中的强劲解决方案。 主要特性 TB5128FTG 拥有众多确保高…

2024暑假集训第三次考试

3004. Sleepy Cow Sorting 思路分析 这道题是一道思维题。 这个就要结合之前学习过的算法&#xff0c;看这个题目的排序方式&#xff0c;我们就理所当然的想到了插入排序&#xff0c;也是这道题的正解。只需要看看前面有几个数是无序的就是需要排的次数。转换一下&#xff0c;也…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十二)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 32 节&#xff09; P32《31.通知-基础通知》 基础文本类型通知&#xff1a;briefText 没有用&#xff0c;写了也白写。 长文本类型…

哪里还可以申请免费一年期的SSL证书?

目前&#xff0c;要申请免费一年期的SSL证书&#xff0c;选项较为有限&#xff0c;因为多数供应商已转向提供短期的免费证书&#xff0c;通常有效期为90天。不过&#xff0c;有一个例外是JoySSL&#xff0c;它仍然提供一年期的免费SSL证书&#xff0c;但是只针对教育版和政务版…

可灭新能源锂电池火灾!自动灭火贴到底多少钱一个?

不需要人工干预&#xff0c;想贴哪里就贴哪里&#xff0c;一旦发生火灾就可以立即自动灭火。你敢相信现代的灭火器已经进化到这个地步了吗&#xff1f; 没错&#xff0c;小编说的就是最近大火的全氟己酮自动灭火贴。跟传统灭火器相比&#xff0c;它拥有体积小巧、高效灭火、安…

2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024)

2024第二届电子通信与计算机科学技术国际会议(ICECCST 2024) 会议简介 2024第二届电子通信与计算机科学技术国际会议&#xff08;ICECCST 2024&#xff09;是一次重要的学术盛会&#xff0c;将在中国厦门举行。会议的主要目的是为全球的电子通信和计算机科学技术领域的专家、…

查找——数据结构与算法 总结7

目录 7.1 查找的相关概念 7.2 线性表的查找 7.2.1 顺序查找&#xff08;Linear Search&#xff09; 7.2.2 折半查找&#xff08;Binary Search&#xff09; 判定树&#xff08;折半查找判定树&#xff09;&#xff1a;描述折半查找判定过程的二叉树 7.3 树表的查找 7.31…