精华内容
下载资源
问答
  • Revit二次开发

    2016-07-28 18:27:48
    Revit 二次开发入门 Revit 二次开发的完整过程 遍历Revit内部对象 过滤器的使用 访问和编辑对象的参数 调试工具RevitLookup 深入学习Revit编程
  • revit二次开发

    2017-11-23 15:12:28
    revit二次开发教学视频,讲了一些revit API的引用。。
  • revit 二次开发

    2019-01-19 19:52:24
    revit二次开发ppt
  • Revit二次开发说难也难,说容易也容易,关键看客官你的情况和兴趣。要想做Revit二次开发,首先需要有一些开发的基础知识,尤其是.NET的开发语言(首选C#,或者VB.NET也行)。其次要知道Revit相关的一些基本概念。有了...

    Revit二次开发说难也难,说容易也容易,关键看客官你的情况和兴趣。

    要想做Revit二次开发,首先需要有一些开发的基础知识,尤其是.NET的开发语言(首选C#,或者VB.NET也行)。其次要知道Revit相关的一些基本概念。

    有了上面的基础,入门就是手到擒来的事(当然入门后要转成高手,还是需要磨练的,不是一朝一夕就可以完成的)。

    (1)准备工作

    开发前需要先安装对应的软件,包括

    AutodeskRevit

    VisualStudioExpress(如果是企业或土豪,请使用收费版VS)

    (2)创建项目

    打开VisualStudio,单击菜单栏“File”→“New”→“Project…”,或者按快捷键(Ctrl+Shift+N),打开“NewProject”对话框。在该对话框中,选择“VisualC#”→“Windows”,在“Templates”中选择“ClassLibrary”,在“Name”栏中输入项目名称“HelloRevit”,单击“OK”。

    注:Revit不同版本要求的最低.NETFramework版本不一样。例如2017至少需要4.5.2版本。

    (3)添加引用

    选择“SolutionExplorer”的“References”节点,右击选择“AddReference…”,打开“AddReference”对话框。在该对话框中,选择“Browse”选项卡,进入Revit安装目录(根据本地情况选择对应安装目录,例如:C:ProgramFilesAutodeskRevit2017,具体根据客官安装的Revit版本不同而不同),选择“RevitAPI.dll”以及“RevitAPIUI.dll”两个动态链接库,单击“OK”添加到项目引用。

    (4)代码编写

    接下来,就可以开始编写具体代码了。项目创建后VisualStudio会默认创建一个Class1.cs文件,该文件包含一个public类Class1,代码如下:

    namespace HelloRevit

    {

    publicclass Class1

    {

    }

    }

    请将以上代码替换为下面的代码(后面会有代码的详细解释):

    namespace HelloRevit

    {

    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.ReadOnly)]

    public class Class1 : Autodesk.Revit.UI.IExternalCommand

    {

    public Autodesk.Revit.UI.Result Execute(Autodesk.Revit.UI.ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)

    {

    Autodesk.Revit.UI.TaskDialog.Show("Hello", "Hello Revit!");

    return Autodesk.Revit.UI.Result.Succeeded;

    }

    }

    }

    也可以通过使用using关键字简化下面的代码,简化更改后的代码如下:

    using Autodesk.Revit.Attributes;

    using Autodesk.Revit.UI;

    using Autodesk.Revit.DB;

    namespace HelloRevit

    {

    [Transaction(TransactionMode.ReadOnly)]

    public class Class1 : IExternalCommand

    {

    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

    {

    TaskDialog.Show("Hello", "Hello Revit!");

    return Result.Succeeded;

    }

    }

    }

    注:所有的Revit插件功能都以外部命令的方式存在,每一个外部命令都必须继承于IExternalCommand。命令类还必须实现Execute接口,该接口包含三个参数:

    commandData:包含Revit应用程序的各种信息,包括文档、应用程序接口、当前视图等等。用户需要的所有信息都从该参数获取。

    message:主要用于当命令执行遇到问题时给用户报告的错误信息,所以仅当返回值为Result.Cancelled或Result.Failed时,传入该参数的值才会对用户可见。可以将一些异常信息放入该参数以提示用户问题原因。

    elements:也是当命令执行遇到问题时给用户报告错误时使用,因此它跟message参数一样仅当返回值为Result.Cancelled或Result.Failed时有用。该参数包含一个元素集,开发人员可以通过该元素集告知用户哪些元素有问题。

    (5)注册外部命令

    要让Revit能使用外部命令,除了对应的项目和代码,还需要对命令进行注册。Revit通过后缀名为.addin的文件(该文件实际为xml格式)来进行注册。具体步骤如下:

    1)新建一个文本文件,并将文件名改为“HelloRevit.addin”(请确认文件名不是“HelloRevit.addin.txt”)。然后在该文件中输入以下内容,并保存:

    C:ProjectsHelloRevitinHelloRevit.dll

    2FA16D42-9AE3-491d-A919-1A3B04701B9F

    HelloRevit.Class1

    YourCompany

    A.AddInType="Command"表明该库是一个外部命令

    B.Assembly是编译的“HelloRevit.dll”文件的具体路径,请改为本机路径

    C.AddInId是一个全局的GUID值,每个外部命令都应该包含一个自己的GUID值(不同命令不能AddInId重复)

    D.FullClassName指类的名称(这里是Class1,请注意一定要将命名空间名称加上,例如HelloRevit,否则命令执行时会找不到对应的接口)

    E.VendorId指明该命令的厂商,请自定义使用厂商的名称

    2)文件保存好之后需要将该文件放入特定目录,如果你希望该插件只有当前用户可用,需要将文件放入:%appdata%AutodeskRevitAddins2017;

    如果你希望所有用户都可以使用该插件,则将文件放入C:ProgramDataAutodeskRevitAddins2017

    (6)执行命令

    所有步骤完成后,启动Revit,功能区中将出现一个“附加模块”选项卡。

    单击“外部工具”下拉列表中的“HelloRevit.Class1”,执行后将弹出一个窗口显示“HelloRevit”。

    展开全文
  • 二次开发revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档2019-07-08赞( 0 )记录一下CAD二次开发的一些简单实例。 1、helloworld 2、画一个圆 3、画一条直线 4、取得图层下的所有对象id 5、...

    二次开发

    revit二次开发|bim软件二次开发|revit二次开发教程|Revit二次开发技术文档2019-07-08赞( 0 )

    记录一下CAD二次开发的一些简单实例。 1、helloworld 2、画一个圆 3、画一条直线 4、取得图层下的所有对象id 5、得到当前图层的所有object的id 6、取得当前所有图层名称 7、添加图层 using System; us...

    2019-07-08赞( 0 )

    Revit读取cad的文字信息需要借助Teigha的开源dll,在程序中添加下图中红色框的dll文件的引用,其他的dll文件全部放在同一个文件夹中即可,运行的时候,会自动把这些dll文件全部复制到bin文件当中,同时,在Revit中运行插件...

    2019-07-08赞( 2 )

    直接用dynamo的模块来弄逻辑关系,其实也挺麻烦的,尤其是要用到方法,循环等等,更甚。所以能够书写Python代码可以做到事半功倍。 首先来用python来写第一个代码快,来hello dynamo一下。 然后我们用Python代码块来画...2019-07-08赞( 0 )

    cad格式的道路线形的空间曲线往往是由多段线画的,尤其是道路中的缓和曲线。按图纸的表达,其实应该是一条nurbspline曲线。      这里按照多段线来解决revit中的空间曲线问题。      其实revit的api里的曲线要...2019-07-08赞( 0 )

    提取模型线边缘并将之变成模型线主要是为了方便建桥梁的护栏,因为选择护栏的路线必须是在平面上,这点暂时不好解决。 但是前一个问题还是可以解决的。 using System; using System.Collections.Generic; ...2019-07-08赞( 0 )

    revit二次开发中nurbspline曲线的表现形式实际上是一系列的直线组成的。 由于revit只支持直线或者圆曲线的钢筋变成钢筋。所以不能将nurbspline曲线转成钢筋,所以可以先将nurbspline模型线转连续的直线,然后再转成...2019-07-08赞( 0 )

    用lookup查看材料很具有误导性。 找半天才找出原因,要想找到全部材料必须通过CompoundStructureLayer来查找。 附上代码(两种找材料的方式): using System; using System.Collection...2019-07-08赞( 1 )

    自适应构件族有着强大的功能,在桥梁建模里非常实用。 自适应族重要的类:AdaptiveComponentInstanceUtils 自适应族实例化:CreateAdaptiveComponentInstance 得到自适应点的ID:GetI...

    2019-07-08赞( 0 )

    自适点的局部坐标系可以通过lookup找到。修改自适应点的局部坐标系可以直接修改transform。 其中x axis、y axis、z axis的具体含义见图1. 其中自适应点的旋转实际上就是绕x轴旋转,另外x axis的方向实际上就是线...

    2019-07-08赞( 0 )

    dynamo作为revit的利器,相当有用。而且它里面的好多类库是revit的api里没有的,那有没有什么办法可以直接用dynamo里的类?当然有啦! 步骤:1、在二次开发的引用中,引用“ProtoGeometry.dll”这个dll文件和...

    2019-07-08赞( 0 )

    revit读取材料的外观信息不能通过lookup来搞定,所以读取起来稍微有点麻烦。但是在revit二次开发的官方基础教程里有相关的解释。          这里就以一个墙体为例,读取墙体材料的所有外观信息(如下图)。这里主要...2019-07-08赞( 0 )

    其实建连续刚构桥也不是很难,主要是用代码来驱动族而已。好多牛人用dynamo来做这件事情,我觉得也挺好,我也用过dynamo来操作过,但是用起来还是没有插件爽。         其实代码也挺简单的,这里就直接放主要的代码吧。核...2019-07-08赞( 0 )

    上一个方法对于直线的连续刚构桥行得通,但对于有平纵曲线的连续刚构桥还是行不通,这里主要是族的原因,因为带平纵曲线的连续刚构桥每一个节段都可以算作一个异形结构。人工建死族的话,耗时耗力,而且效果还不好。这就需要用到二次开发来解决。 首先得明确...

    2019-07-08赞( 0 )

    做好了插件,后面一步就需要把插件加载到面板上了。 这里revit专门为加载插件提供了一系列api。具体api的介绍看revit二次开发官方教程第10章。但这里讲得很泛,缺少完整代码的实际例子。另外有个难点(textbox),我现在也没搞清楚...

    2019-07-08赞( 0 )

    Revit自身带的钢筋功能比较鸡肋,哪怕是用在它所擅长的建筑结构里,也是坑得飞起。很多情况,特别是异形结构,几乎不能准确建好钢筋模型。 所以这里,我就想了一个办法利用revit给桥梁加钢筋。桥梁其实包含了很多异形结构,更坑的是桥梁的钢筋几乎...2019-07-08赞( 1 )

    在Revit里建桥本身就是一件麻烦事情,然后在桥里加上预应力钢筋更麻烦。 所以这里就需要了解其规则,然后做相应的预应力钢筋插件。预应力比较好的输入方法首推Midas Civil。 基于这种方法做的预应力钢筋插件见视频: http://v.y...

    2019-07-08赞( 0 )

    开发到最后都是在跟数学打交道,revit作为一款三维建模软件,表达的是各种结构的空间关系,二次开发中自然也包括大量的向量计算。 好在revit 的api里已经事先提供了很多向量的运算,方便开发人员使用,免得自己写方法。 首先通过帮助文档看一...

    2019-07-08赞( 0 )

    Revit体量的放样功能最多,而恰巧官方出版的那本经典的二次开发教程这方面的内容讲得特别少。然而,以我开发桥梁方面的插件发现,异形结构也就在体量或者自适应构建族里好解决一些,所以准备讲一下这方面的内容。 其实,自适应构件族里的放样功能跟体量...

    2019-07-08赞( 0 )

    Revit的场地地形其实没有什么特别的,其实它就是一个面而已,创建这个面用下面这个方法: Form NewFormByCap(bool isSolid, ReferenceArray profile);  如果是做成五花肉那种的,就用另一个...2019-07-08赞( 0 )

    这里以Revit的自带的钢筋功能为例(非Revit自带的钢筋功能见我的优酷自频道) 具体步骤: 1)进行开发之前,要把钢筋导入到Revit里面。 2)如果钢筋族的形状不够项目用的话,可以自己做钢筋族 3)了解Revit的钢筋的功能(  Re...

    1

    共 5 页

    展开全文
  • Revit二次开发示例

    2021-02-20 14:29:12
    Revit二次开发示例
  • Revit二次开发说难也难,说容易也容易,关键看客官你的情况和兴趣。要想做Revit二次开发,首先需要有一些开发的基础知识,尤其是.NET的开发语言(首选C#,或者http://VB.NET也行)。其次要知道Revit相关的一些基本概念...

    Revit二次开发说难也难,说容易也容易,关键看客官你的情况和兴趣。

    要想做Revit二次开发,首先需要有一些开发的基础知识,尤其是.NET的开发语言(首选C#,或者http://VB.NET也行)。其次要知道Revit相关的一些基本概念。

    有了上面的基础,入门就是手到擒来的事(当然入门后要转成高手,还是需要磨练的,不是一朝一夕就可以完成的)。

    (1)准备工作

    开发前需要先安装对应的软件,包括Autodesk Revit

    Visual Studio Express (如果是企业或土豪,请使用收费版VS)

    (2)创建项目

    打开Visual Studio,单击菜单栏“File”→“New”→“Project…”,或者按快捷键(Ctrl+Shift+N),打开“New Project”对话框。在该对话框中,选择“Visual C#”→“Windows”,在“Templates”中选择“Class Library”,在“Name”栏中输入项目名称“HelloRevit”,单击“OK”。

    注:Revit不同版本要求的最低.NET Framework版本不一样。例如2017至少需要4.5.2版本。

    (3)添加引用

    选择“Solution Explorer”的“References”节点,右击选择“Add Reference…”,打开“Add Reference”对话框。在该对话框中,选择“Browse”选项卡,进入Revit安装目录(根据本地情况选择对应安装目录,例如:C:\ProgramFiles\Autodesk\Revit 2017,具体根据客官安装的Revit版本不同而不同),选择“RevitAPI.dll”以及“RevitAPIUI.dll”两个动态链接库,单击“OK”添加到项目引用。

    (4)代码编写

    接下来,就可以开始编写具体代码了。项目创建后Visual Studio会默认创建一个Class1.cs文件,该文件包含一个public类Class1,代码如下:

    namespace HelloRevit

    {

    publicclass Class1

    {

    }

    }

    请将以上代码替换为下面的代码(后面会有代码的详细解释):

    namespace HelloRevit

    {

    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.ReadOnly)]

    public class Class1 : Autodesk.Revit.UI.IExternalCommand

    {

    public Autodesk.Revit.UI.Result Execute(Autodesk.Revit.UI.ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)

    {

    Autodesk.Revit.UI.TaskDialog.Show("Hello", "Hello Revit!");

    return Autodesk.Revit.UI.Result.Succeeded;

    }

    }

    }

    也可以通过使用using关键字简化下面的代码,简化更改后的代码如下:

    using Autodesk.Revit.Attributes;

    using Autodesk.Revit.UI;

    using Autodesk.Revit.DB;

    namespace HelloRevit

    {

    [Transaction(TransactionMode.ReadOnly)]

    public class Class1 : IExternalCommand

    {

    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

    {

    TaskDialog.Show("Hello", "Hello Revit!");

    return Result.Succeeded;

    }

    }

    }

    注:所有的Revit插件功能都以外部命令的方式存在,每一个外部命令都必须继承于IExternalCommand。命令类还必须实现Execute接口,该接口包含三个参数:commandData:包含Revit应用程序的各种信息,包括文档、应用程序接口、当前视图等等。用户需要的所有信息都从该参数获取。

    message:主要用于当命令执行遇到问题时给用户报告的错误信息,所以仅当返回值为Result.Cancelled或Result.Failed时,传入该参数的值才会对用户可见。可以将一些异常信息放入该参数以提示用户问题原因。

    elements:也是当命令执行遇到问题时给用户报告错误时使用,因此它跟message参数一样仅当返回值为Result.Cancelled或Result.Failed时有用。该参数包含一个元素集,开发人员可以通过该元素集告知用户哪些元素有问题。

    (5)注册外部命令

    要让Revit能使用外部命令,除了对应的项目和代码,还需要对命令进行注册。Revit通过后缀名为.addin的文件(该文件实际为xml格式)来进行注册。具体步骤如下:

    1)新建一个文本文件,并将文件名改为“HelloRevit.addin”(请确认文件名不是“HelloRevit.addin.txt”)。然后在该文件中输入以下内容,并保存:

    C:\Projects\HelloRevit\bin\HelloRevit.dll

    2FA16D42-9AE3-491d-A919-1A3B04701B9F

    HelloRevit.Class1

    YourCompany

    AddInType="Command"表明该库是一个外部命令

    Assembly是编译的“HelloRevit.dll”文件的具体路径,请改为本机路径

    AddInId是一个全局的GUID值,每个外部命令都应该包含一个自己的GUID值(不同命令不能AddInId重复)

    FullClassName指类的名称(这里是Class1,请注意一定要将命名空间名称加上,例如HelloRevit,否则命令执行时会找不到对应的接口)

    VendorId指明该命令的厂商,请自定义使用厂商的名称

    2)文件保存好之后需要将该文件放入特定目录,如果你希望该插件只有当前用户可用,需要将文件放入:%appdata%\Autodesk\Revit\Addins\2017;

    如果你希望所有用户都可以使用该插件,则将文件放入C:\ProgramData\Autodesk\Revit\Addins\2017\

    (6)执行命令

    所有步骤完成后,启动Revit,功能区中将出现一个“附加模块”选项卡。

    单击“外部工具”下拉列表中的“HelloRevit.Class1”,执行后将弹出一个窗口显示“Hello Revit”。

    展开全文
  • Revit二次开发例子

    2018-01-17 09:24:07
    BIM二次开发,Revit二次开发 案例,本人在学习Revit二次开发,并小有成就
  • revit 二次开发实践

    2019-02-13 14:16:58
    revit 二次开发实践1
  • Revit 二次开发 例子代码
  • REVIT二次开发.rar

    2020-03-03 21:10:07
    revit二次开发所需要的一些资料合计,包括C#书籍,revit二次开发基础教程、API指南等
  • Revit二次开发入门:第二章RevitAPI基本概念本章内容1.学习写出“Hello Revit”创建一个C#项目添加引用复制本地改为False添加引用,实现接口书写代码,添加属性修改项目属性生成解决方案加载DLL文件2.扩展Revit的...

    Revit二次开发入门:第二章RevitAPI基本概念

    本章内容

    1.学习写出“Hello Revit”

    创建一个C#项目

    添加引用

    复制本地改为False

    添加引用,实现接口

    书写代码,添加属性

    修改项目属性生成解决方案

    加载DLL文件

    2.扩展Revit的方式

    Revit API是建立在Revit产品的基础之上的。他是一个类库,需要在Revit运行时才能够工作。通过强大的Revit API,可以添加用户基于Revit API开发的插件来扩展和增强Revit功能和应用。

    外部命令IExternalCommand。IExternalCommand是Revit API用户通过外部命令来扩展Revit时必须在外部命令中实现接口。

    IExternalCommand:UI vs. DB

    UIApplication:创建菜单

    UIDocument:用户和文档的交互

    Application:处理文档

    Document:处理元素

    IExternalCommand:Result,message,elements

    Result:

    Succeeded:执行成功

    Cancelled:取消执行

    Failed:执行失败——回滚事务

    message:

    失败提示信息,出现在提示框

    elements:

    失败相关元素,被高亮

    外部应用IExternalApplication创建开发者可以通过实现IExternalApplication来添加自己的应用。

    Revit同样通过.addin文件识别和加载实现IExternalApplication的外部插件。

    宏Macro宏是一种程序,旨在通过实现重复任务的自动化来节省你的时间。每个宏可执行一系列预定义的步骤来完成特定任务。这些步骤是可重复的,操作是可预见的。下图是宏管理器在Revit中的位置。宏管理器是一个用户界面,可用于:

    启动Revit宏IDE,在改IDE中可以添加、编辑、构建和调式宏

    运行先前构建的宏

    3.了解Application/Document/Element

    API主要对象结构

    Revit与Office一样,使用多文档模型。在Revit API的类结构中,应用类和文档类是处于最顶层的。

    Application应用类

    Application类便是一个Revit应用,提供对文档、选项以及其它应用范围的数据的访问和设置

    Document文档类

    Document类用于表示打开的Autodesk Revit工程

    Element元素的分类与对象结构

    元素在Revit里面尤其重要,用户能够看见的大多数对象都是元素,比如墙、族、族类型、族实例、标高、轴网、视图等等。

    Revit中大多数类都是继承自元素

    下图数一个族、族实例类图

    什么要进行Revt二次开发

    提高工作效率:使用API进行批量操作扩展Revit自身功能:对Revit不完善的功能进行修补或者添加没有的功能与其他系统对接:进一步对接各种分析软件或模拟软件等本课代码

    usingAutodesk.Revit.Attributes;usingAutodesk.Revit.DB;usingAutodesk.Revit.UI;namespaceHelloRevit { [TransactionAttribute(TransactionMode.Manual)] [RegenerationAttribute(RegenerationOption.Manual)]publicclassClass1 : IExternalCommand {publicResultExecute(ExternalCommandDatacommandData, refstringmessage, ElementSetelements) {TaskDialog.Show("Hello", "我的第一个Revit创建!");returnResult.Succeeded; } }}

    展开全文
  • Revit二次开发资料汇总

    万次阅读 多人点赞 2019-05-29 19:48:27
    现在越来越多的小伙伴加入了Revit二次开发的阵营,刚入门,资料去哪找?如何开始二次开发?有没有可以带我的老司机?…等都是让小伙伴头疼的问题。因此笔者这篇文章就给大家分享了一些解决问题的观点,还收集了一些不错...
  • revit二次开发基础教程
  • Revit二次开发入门.docx

    2021-02-25 17:18:56
    Revit 二次开发入门教程,简单易懂
  • 使用Revit二次开发,commandData.Application.OpenAndActivateDocument打开文件时,revit可能会弹出找不到参照等提示框,此资源可避免提示框的弹出
  • Revit 二次开发

    千次阅读 2011-08-12 22:21:18
    作为业界老大,Autodesk早...和AutoCAD等拳头产品一脉相承,允许第三方进行二次开发也是Revit设计的核心理念之一。作为一个程序员,我有幸参与了东南大学建筑系工业化住宅体系的研发工作。并基于Revit为体系进行了信息
  • revit二次开发helloWorld示例,详细介绍了revit二次开发入门基础知识
  • Revit二次开发
  • IExternalCommand是Revit API用户通过外部命令来扩展功能的接口。IExternalCommand接口只有一个抽象函数Excute。重载这个函数来实现IExternalCommand,Excute函数将作为外部命令的主函数被调用
  • revit二次开发, 工作需要 收集的插件、文档、小工具合集。 希望可以让新入手的朋友少走点弯路 使用Revit建模中避免降低机器性能的5个技巧、需要用到所有模型类别与注释类别的BuiltInCategory值、RevitSDK, lookup...
  • Revit二次开发基础教程-附件资源
  • revit二次开发入门

    2018-03-17 09:51:43
    Revit二次开发入门--创建一个简单的程序,创建一个简单的Revit外部命令程序【Revit2017+VS2015】: 1、打开VS,我的版本是VS2015,点击【新建项目】→【Visual C#】→【类库】,然后输入程序名称,如:Hello World...
  • revit二次开发生成空间曲线,在Revit中建模根据标高轴网方式建模,没有空间曲线的概念。
  • Revit二次开发从入门到精通学习之路 Autodesk Joe Ye叶雄进 Mar. 20 2013 MSN:yexiongjin@hotmail.comRevit在国内的应用越来越广泛, Revit 2013在速度和功能上有显著的提高,所以现在对Revit应用关注更多。...
  • revit 二次开发 addinutility插件源码,有需要的人可以自己下载编译。资源比较完整了
  • Autodesk Revit二次开发基础教程,非常好的BIM二次开发图书
  • AEC DevBlog(Revit 二次开发)- 使用 Revit API 选取三维点原文链接:Picking 3D points using Revit API作为 Revit 二次开发人员,我们很熟悉如何使用 Selection.PickPoint() 在二维平面上选取一个点。由于 Revit ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,061
精华内容 824
关键字:

revit二次开发