首页 > 其他分享 >Revit二次开发-利用DMU让墙实现不自动连接

Revit二次开发-利用DMU让墙实现不自动连接

时间:2023-03-20 18:26:03浏览次数:33  
标签:return WallUpdater UpdaterId DMU doc 二次开发 wallUpdater public Revit

- 利用IUpdater接口实现墙的不自动连接,这个功能从Revit2017开始,官方已经添加了。
- https://github.com/iamlovedit/RevitDevSamples.git

直接上代码:

实现 IUpdater接口

public class WallUpdater : IUpdater
    {
        public UpdaterId UpdaterId { get; }
        public ElementFilter ElementFilter { get; } = new ElementClassFilter(typeof(Wall));
        public ChangeType ChangeType { get; } = Element.GetChangeTypeElementAddition();
        public WallUpdater(AddInId addinId)
        {
            UpdaterId = new UpdaterId(addinId, addinId.GetGUID());
        }
        public void Execute(UpdaterData data)
        {
            Document m_doc = data.GetDocument();
            IEnumerable<Wall> m_addedWalls = data.GetAddedElementIds().Select(m_doc.GetElement).OfType<Wall>();
            foreach (var wall in m_addedWalls)
            {
                for (int i = 0; i < 2; i++)
                {
                    if (WallUtils.IsWallJoinAllowedAtEnd(wall, i))
                    {
                        WallUtils.DisallowWallJoinAtEnd(wall, i);
                    }
                }
            }
        }

        public string GetAdditionalInformation()
        {
            return "Disallow Walls Join";
        }

        public ChangePriority GetChangePriority()
        {
            return ChangePriority.InteriorWalls | ChangePriority.FloorsRoofsStructuralWalls;
        }

        public UpdaterId GetUpdaterId()
        {
            return UpdaterId;
        }

        public string GetUpdaterName()
        {
            return "WallUpdater";
        }
    }

IExternalCommand

[Transaction(TransactionMode.Manual)]
    public class MakeWallsDisjoin : IExternalCommand
    {
        private UIDocument m_uidoc;
        private Document m_doc;
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            m_uidoc = commandData.Application.ActiveUIDocument;
            m_doc = m_uidoc.Document;
            WallUpdater m_wallUpdater = new WallUpdater(commandData.Application.ActiveAddInId);
            UpdaterRegistry.RegisterUpdater(m_wallUpdater, m_doc);
            UpdaterRegistry.AddTrigger(m_wallUpdater.UpdaterId, m_wallUpdater.ElementFilter, m_wallUpdater.ChangeType);
            return Result.Succeeded;
        }
    }

 

标签:return,WallUpdater,UpdaterId,DMU,doc,二次开发,wallUpdater,public,Revit
From: https://www.cnblogs.com/youngala/p/17237239.html

相关文章

  • Revit二次开发-连续选择同一类别的图元
    今天看到有群员有个需求:在选择的图元的时候第一次选中后,后面的选中的图元也只能是第一次选中的同类别图元。比如说我第一次选中了门,后面选择的图元也只能是门直接上代码~......
  • Revit二次开发-Revit与非模态插件窗口中的DataGrid互选
    今天在群里看到一位群友有这样的一个需求,需要在插件的非模态窗口Datagrid控件中列出当前视图的所有图元,然后在窗口中选中一项的同时选中Revit中的Element。或者在Revit中选......
  • Revit二次开发-在Revit选项卡面板添加扩展Tab
    最近在查Revitapi手册的时候,偶然发现了一个好玩的接口。这个接口用来扩展Revit选项卡的Tab,于是我就自定义了一个拓展的tab。 拓展类如下:TabbedDialogExtension这个类......
  • Monkey二次开发 -- Monkey jar包构建
      前面已经下载好了Android源码,可以在对应目录下构建二次开发后的monkeyjar包了;  当前环境:Ubuntu16.04,Andorid10源码。 1.初始化环境  cd进入android源码根目......
  • 软件项目的二次开发
    我寻找到一个名为“餐厅信息管理程序”的软件项目,其目的是要实现客户点菜的过程,客户结账和账目的管理这些功能。原程序基本实现了以上功能,并在此基础上增加了管理员界......
  • 网上购书系统二次开发
    项目来源:大一下学期同学C++大作业项目,做的是一个网上购书系统开发,功能如下书籍信息显示客户信息显示选购书籍结算总额订单显示使用说明退出系统页面端项目......
  • 二次开发——体育赛事新闻项目改进
     一、项目来源:在b站视频的评论里搜到了java的前端页面项目源码的zip文件,将源码的zip文件解压后用idea打开,打开后部署Tomcat,并将源码包中的数据库资源打开在MySQL中,连接......
  • 二次开发-员工信息管理系统
    本程序主要实现对员工的信息管理,为1925223夏海涛同学的c语言期末大作业。程序会将输入的信息按照指引分别存入不同的文件,主要由结构体以及文件读取实现,按照不同序号可以实......
  • 二次开发网上二手书城
     此次我索要到了大三的学长做过的一个项目:《上海海洋大学图书交易系统》的项目文件,其运行时的页面如图:      进入网页 用户登录页面  ......
  • 航空客运管理系统二次开发
    在这次软件项目中,我在csdn论坛中搜索寻找到了一个航空客运管理系统,对这个项目进行了研究,提出一些个人看法和更改原帖:(12条消息)航空客运管理系统(数据结构)-CSDN博客这是......