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 工具集设计完成。
构件显示功能
在当前视图选择需在三维视图中显示的构件,无选择默认当前视图所有可见构件。
执行命令后生成新的三维视图,来显示这些构件,其他构件会自动隐藏,并将该三维视图切换为当前视图。
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
如有更好实现方法,还请大牛们指点!
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:30 编辑
这二天弄了一下,才把功能区规划好,编写了一个楼层平面设置。revit 二次开发还真要花时间呀。
支持右键新建、删除,也支持回车或双击新建,智能取名。
功能区规划:
大漠都开始研究Revit 二次开发了 厉害! 一直玩delphi,刚刚开始学习C#语言,感觉revit二次开发还是C#方便,毕竟revit SDK 有大量C#实例。 頂一下 頂一下 给予鼓励。 看看 BUCUO 的顶顶顶顶顶顶顶顶顶顶 厉害 大漠我想知道这个插件有什么用 lixianguo11 发表于 2015-6-25 08:06
大漠我想知道这个插件有什么用
第一个插件查看内部参数。
第二个插件实时调试命令。 不错啊,继续学习