EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

大漠风沙 发表于 2015-6-19 18:40:53

Revit二次开发 RevitLookUp安装说明

本帖最后由 大漠风沙 于 2015-6-22 22:13 编辑

    学习了二年的BIM应用,突然对Revit二次开发感兴趣了,Revit二次开发要深入的话离不开RevitLookUp,下面给大家介绍一下这个插件,并提供RevitLookUp 2015、2016下载。    我已在VS2013中分别生成RevitLookUp 2015及RevitLookUp 2016版的RevitLookUp.dll库文件,但没做界面汉化。
    根据你的安装版本将以下文件复制到相应目录里。
    1、Revit 2015
   
    解压后把二个文件复制到:C:\Users\Administrator\AppData\Roaming\Autodesk\Revit\Addins\2015
   
   2、Revit 2016
   
    解压后把二个文件复制到:C:\Users\Administrator\AppData\Roaming\Autodesk\Revit\Addins\2016
   
   3、启动revit 2015或2016版后,应该在软件的附加模块中可以看到如下外部工具
   
   4、加载后revit 软件操作截图
   内部参数和值一目了然。
   5、此贴将不断更新,直到revit 工具集设计完成。


大漠风沙 发表于 2015-7-9 22:13:42

构件显示功能
在当前视图选择需在三维视图中显示的构件,无选择默认当前视图所有可见构件。
执行命令后生成新的三维视图,来显示这些构件,其他构件会自动隐藏,并将该三维视图切换为当前视图。
1、楼层平面

2、执行构件显示命令后

3、再次执行该命令(或按设置的快捷键),会回到原楼层平面。如已创建过该视图的三维视图,则该命令为楼层平面和三维视图之间相互切换。

c#源码如下:
#region DAMO_gjxs = 构件显示
   
   
   
    public class DAMO_gjxs : IExternalCommand //外部命令
    {
      public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elems)
      {
            UIDocument uidoc = cmdData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            if (doc.IsFamilyDocument)//感觉族文档没必要
            {
                MessageBox.Show("该操作仅适用项目文档,不适用族文档!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return Result.Succeeded;
            }                        
            try
            {
                Autodesk.Revit.DB.View view = doc.ActiveView;//当前视图
                ICollection<ElementId> ids = uidoc.Selection.GetElementIds();//选择对象
                if (0 == ids.Count)//如果没有选择
                {
                  if (view is ViewSection)//当前视图为立面视图且没有选择对象时退出
                  {
                        return Result.Succeeded;
                     }
                      else if (view is View3D)//当前视图为三维视图且没有选择对象时切换至原楼层平面视图
                     {
                         FilteredElementCollector collectL = new FilteredElementCollector(doc);
                         ICollection<Element> collectionL = collectL.OfClass(typeof(Autodesk.Revit.DB.View)).ToElements();
                         foreach (Element element in collectionL)
                         {
                           Autodesk.Revit.DB.View v = element as Autodesk.Revit.DB.View;
                           if (view.ViewName == "三维视图_" + v.ViewType.ToString() + "_" + v.ViewName)
                           {
                                 if (!v.IsTemplate)
                                 {
                                     uidoc.ActiveView = v;
                                     break;
                                 }
                           }
                         }
                         return Result.Succeeded;                  
                     }//未选择对象时列出当前视图所有可见对象
                     FilteredElementCollector collector = new FilteredElementCollector(doc, view.Id).WhereElementIsNotElementType();
                     ids = collector.ToElementIds();
                }
                Transaction ts = new Transaction(doc, "Create_View3D");
                ts.Start();
                bool fg = true;
                FilteredElementCollector collect = new FilteredElementCollector(doc);
                ICollection<Element> collection = collect.OfClass(typeof(View3D)).ToElements();
                View3D view3d = null;
                foreach (Element element in collection)
                {
                  View3D v = element as View3D;
                  if (v.ViewName == "三维视图_" + view.ViewType.ToString() +"_"+ view.ViewName)
                  {
                        if (!v.IsTemplate)
                        {
                        view3d =v
                        fg = false;//已生成过当前视图的三维视图
                        break;
                        }
                  }
                }
                if (fg)
                {               
                   ViewFamilyType viewFamilyType = null;
                   collect = new FilteredElementCollector(doc);
                   var viewFamilyTypes = collect.OfClass(typeof(ViewFamilyType)).ToElements();
                   foreach (Element e in viewFamilyTypes)
                   {
                     ViewFamilyType v = e as ViewFamilyType;
                     if (v.ViewFamily == ViewFamily.ThreeDimensional)
                     {
                           viewFamilyType = v;
                           break;
                     }
                   }
                   view3d = View3D.CreateIsometric(doc, viewFamilyType.Id);
                   view3d.ViewName = "三维视图_" + view.ViewType.ToString() + "_" + view.ViewName;
                }
                ts.Commit();
                uidoc.ActiveView = view3d;//设置生成的三维视图为当前视图
                Transaction tss = new Transaction(doc, "View3D_HideElements");
                tss.Start();
                if (fg)
                {
                view = doc.ActiveView;
                collect = new FilteredElementCollector(doc, view.Id).WhereElementIsNotElementType();
                ICollection<ElementId> idss = collect.ToElementIds();
                ICollection<ElementId> ds = idss;
                ds = idss.Except(ids).ToList();
                ids.Clear();
                foreach (ElementId id in ds)
                {
                  Element element = doc.GetElement(id);
                  if (element.CanBeHidden(view) == true)
                  {
                        ids.Add(id);
                  }
                }
                view.HideElementsTemporary(ids);//临时隐藏其他图元
                }
                tss.Commit();
            }
            catch (Exception msg)
            {
               return Result.Cancelled;
            }
            return Result.Succeeded;
      }
    }
    #endregion
    如有更好实现方法,还请大牛们指点!

大漠风沙 发表于 2015-6-22 22:01:55

Revit 二次开发还离不开插件管理器-AddInManager,这样就可以实时调试命令了,而不用退出Revit程序和重新打开项目工程。
下面的revit AddInManager 2015\2016都可以使用,其实还是原来的2014版。

将以上文件解压后放在以下目录(如果是默认安装的话,通常会是在这里),当然类库文件随便你放哪,记得修改配置文件AddInManager.dll的路径。
C:\ProgramData\Autodesk\Revit\Addins\2016

C:\ProgramData\Autodesk\Revit\Addins\2015
1、实时调试的修改前截图:



2、修改命令代码重新编译后运行命令截图

3、工具集功能区截图



大漠风沙 发表于 2015-6-25 21:25:30

本帖最后由 大漠风沙 于 2015-6-25 21:30 编辑

这二天弄了一下,才把功能区规划好,编写了一个楼层平面设置。revit 二次开发还真要花时间呀。

支持右键新建、删除,也支持回车或双击新建,智能取名。
功能区规划:

admin 发表于 2015-6-19 18:53:43

大漠都开始研究Revit 二次开发了   厉害!

大漠风沙 发表于 2015-6-19 19:02:33

一直玩delphi,刚刚开始学习C#语言,感觉revit二次开发还是C#方便,毕竟revit SDK 有大量C#实例。

shyu 发表于 2015-6-20 08:15:56

頂一下

shyu 发表于 2015-6-20 08:16:02

頂一下

.﹠迷雾... 发表于 2015-6-20 16:50:25

给予鼓励。

LJJ 发表于 2015-6-21 09:55:21

看看

caokaili2015 发表于 2015-6-21 16:00:42

BUCUO

LWL0709 发表于 2015-6-24 15:07:56

的顶顶顶顶顶顶顶顶顶顶

hdj0304 发表于 2015-6-24 22:24:49

厉害

lixianguo11 发表于 2015-6-25 08:06:46

大漠我想知道这个插件有什么用

大漠风沙 发表于 2015-6-25 14:57:24

lixianguo11 发表于 2015-6-25 08:06
大漠我想知道这个插件有什么用

第一个插件查看内部参数。
第二个插件实时调试命令。

冯~ 发表于 2015-6-25 17:27:16

不错啊,继续学习
页: [1] 2 3 4 5
查看完整版本: Revit二次开发 RevitLookUp安装说明