分享

【新提醒】Revit二次开发 RevitLookUp安装说明

 求真我 2015-12-17
    学习了二年的BIM应用,突然对Revit二次开发感兴趣了,Revit二次开发要深入的话离不开RevitLookUp,下面给大家介绍一下这个插件,并提供RevitLookUp 2015、2016下载。    我已在VS2013中分别生成RevitLookUp 2015及RevitLookUp 2016版的RevitLookUp.dll库文件,但没做界面汉化。
    根据你的安装版本将以下文件复制到相应目录里。
    1、Revit 2015
    RevitLookup.zip (133.37 KB, 下载次数: 220)
    解压后把二个文件复制到:C:\Users\Administrator\AppData\Roaming\Autodesk\Revit\Addins\2015
   

   2、Revit 2016
    RevitLookup 2016.zip (135.64 KB, 下载次数: 113)
    解压后把二个文件复制到:C:\Users\Administrator\AppData\Roaming\Autodesk\Revit\Addins\2016
   
   3、启动revit 2015或2016版后,应该在软件的附加模块中可以看到如下外部工具
   

   4、加载后revit 软件操作截图
   内部参数和值一目了然。
   
  5、此贴将不断更新,直到revit 工具集设计完成。




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

2、执行构件显示命令后

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

  c#源码如下:
  #region DAMO_gjxs = 构件显示
    [Transaction(TransactionMode.Manual)]
    [Regeneration(RegenerationOption.Manual)]
    [Journaling(JournalingMode.NoCommandData)]
    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.zip (33.39 KB, 下载次数: 102)
将以上文件解压后放在以下目录(如果是默认安装的话,通常会是在这里),当然类库文件随便你放哪,记得修改配置文件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 二次开发还真要花时间呀。

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多