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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 790|回复: 1
打印 上一主题 下一主题

Revit二次开发之“显示或隐藏视图中未选中的元素”

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12396

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-9 13:15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
方法是先隐藏全部元素,再显示选中的。//显示或隐藏视图中未选中的元素
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
//[Journaling(JournalingMode.NoCommandData)]
public
class HideUnHideUnSelectInView : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref
string message, ElementSet elements)
    {
        UIDocument uiDoc = commandData.Application.ActiveUIDocument;
        Selection selection = uiDoc.Selection;
        Autodesk.Revit.DB.View view = uiDoc.Document.ActiveView;

        Transaction ts =
new Transaction(uiDoc.Document, "HideUnHide");
        ts.Start();

        //先把所有可隐藏的元素隐藏,再把选中的元素显示
        ElementSet elementSet =
new ElementSet();
        //遍历风管
        FilteredElementCollector collectorDuct =
new FilteredElementCollector(uiDoc.Document);
        collectorDuct.OfClass(typeof(Duct)).OfCategory(BuiltInCategory.OST_DuctCurves);//风管,直接用类名

foreach (Element el in collectorDuct)
        {
            if (el.CanBeHidden(view) ==
true)
            {
                elementSet.Insert(el);
            }
        }
        //遍历墙
        FilteredElementCollector collectorWall =
new FilteredElementCollector(uiDoc.Document);
        collectorWall.OfClass(typeof(Wall)).OfCategory(BuiltInCategory.OST_Walls);//墙,直接用类名

foreach (Element el in collectorWall)
        {
            if (el.CanBeHidden(view) ==
true)
            {
                elementSet.Insert(el);
            }
        }
        //遍历窗
        FilteredElementCollector collectorWindow =
new FilteredElementCollector(uiDoc.Document);
        collectorWindow.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Windows);//窗,类型是FamilyInstance

foreach (Element el in collectorWindow)
        {
            if (el.CanBeHidden(view) ==
true)
            {
                elementSet.Insert(el);
            }
        }
        //遍历门
        FilteredElementCollector collectorDoor =
new FilteredElementCollector(uiDoc.Document);
        collectorDoor.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Doors);//门,类型是FamilyInstance

foreach (Element el in collectorDoor)
        {
            if (el.CanBeHidden(view) ==
true)
            {
                elementSet.Insert(el);
            }
        }
        view.Hide(elementSet);

        //判断在此视图下是否可以隐藏

foreach (Element el in selection.Elements)
        {
            if (el.CanBeHidden(view) ==
true)
            {
                elementSet.Clear();
                elementSet.Insert(el);
                view.Unhide(elementSet);
            }
        }

        ts.Commit();
        return Result.Succeeded;
    }
}

//显示全部元素
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
//[Journaling(JournalingMode.NoCommandData)]
public
class ShowAllInView : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref
string message, ElementSet elements)
    {
        UIDocument uiDoc = commandData.Application.ActiveUIDocument;
        Selection selection = uiDoc.Selection;
        Autodesk.Revit.DB.View view = uiDoc.Document.ActiveView;

        Transaction ts =
new Transaction(uiDoc.Document, "HideUnHide");
        ts.Start();

        //先把所有可隐藏的元素隐藏,再把选中的元素显示
        ElementSet elementSet =
new ElementSet();
        //遍历风管
        FilteredElementCollector collectorDuct =
new FilteredElementCollector(uiDoc.Document);
        collectorDuct.OfClass(typeof(Duct)).OfCategory(BuiltInCategory.OST_DuctCurves);//风管,直接用类名

foreach (Element el in collectorDuct)
        {
            if (el.CanBeHidden(view) ==
true)
            {
                elementSet.Insert(el);
            }
        }
        //遍历墙
        FilteredElementCollector collectorWall =
new FilteredElementCollector(uiDoc.Document);
        collectorWall.OfClass(typeof(Wall)).OfCategory(BuiltInCategory.OST_Walls);//墙,直接用类名

foreach (Element el in collectorWall)
        {
            if (el.CanBeHidden(view) ==
true)
            {
                elementSet.Insert(el);
            }
        }
        //遍历窗
        FilteredElementCollector collectorWindow =
new FilteredElementCollector(uiDoc.Document);
        collectorWindow.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Windows);//窗,类型是FamilyInstance

foreach (Element el in collectorWindow)
        {
            if (el.CanBeHidden(view) ==
true)
            {
                elementSet.Insert(el);
            }
        }
        //遍历门
        FilteredElementCollector collectorDoor =
new FilteredElementCollector(uiDoc.Document);
        collectorDoor.OfClass(typeof(FamilyInstance)).OfCategory(BuiltInCategory.OST_Doors);//门,类型是FamilyInstance

foreach (Element el in collectorDoor)
        {
            if (el.CanBeHidden(view) ==
true)
            {
                elementSet.Insert(el);
            }
        }
        view.Unhide(elementSet);

        ts.Commit();
        return Result.Succeeded;
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

8

主题

702

帖子

1224

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1224
2F
发表于 2014-2-20 14:30:50 | 只看该作者
路过!!! 不发表意见……
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-9-29 14:25

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表