首页 > 其他分享 >【Revit】 Revit二次开发针对墙创建剖切面

【Revit】 Revit二次开发针对墙创建剖切面

时间:2023-08-12 22:46:37浏览次数:34  
标签:wall XYZ Transform transform var 切面 二次开发 viewSection Revit

任何一个视图View,有三个方向,分别是ViewDirection(朝着观察者的方向),RightDirection(朝着屏幕的右边),UpDirection(朝着屏幕的上边)。

ViewSection.CreatSection方法,可以创建剖面,该方法中的第三个参数是一个BoundingBoxXYZ类型:sectionBox。

sectionBox.Transform.BasisZ的值指定了生成的剖面的ViewDirection;

sectionBox.Transform.BasisY的值指定了生成的剖面的UpDirection;

sectionBox.Transform.BasisX的值指定了生成的剖面的RightDirection;

直接上代码:

        /// <summary>
        /// 创建墙剖面图
        /// </summary>
        /// <param name="wall">墙</param>
        /// <param name="viewFamilyType"></param>
        /// <param name="centerloc">中间点的位置(单位英寸)</param>
        /// <param name="direction">方向(单位英寸)</param>
        /// <param name="depth">深度(单位英寸)</param>
        /// <returns></returns>
        private Element CreateWallSection(Wall wall, ViewFamilyType viewFamilyType, XYZ centerloc, XYZ direction, double depth = 5)
        {
            try
            {
                if (wall == null) return null;
                var line = ((wall.Location as LocationCurve).Curve as Autodesk.Revit.DB.Line);
                var length = line.Length / 2 + 0.5;
                var box = wall.get_BoundingBox(null);
                var min = new XYZ(-length, box.Min.Z, 0);
                var max = new XYZ(length, box.Max.Z, depth);
                var center = new XYZ(centerloc.X, centerloc.Y, (box.Min.Z + box.Max.Z) / 2);

                Transform transform = Transform.Identity;
                transform.Origin = center;
                transform.BasisX = -direction.CrossProduct(XYZ.BasisZ).Normalize();
                transform.BasisY = XYZ.BasisZ;
                transform.BasisZ = direction;
                var newbox = new BoundingBoxXYZ() { Min = min, Max = max, Transform = transform };

                ViewSection viewSection = null;
          //开事务
                TransactionUtils.InvokeTransaction(_doc, "创建墙剖面", () =>
                {
                    viewSection = ViewSection.CreateSection(_doc, viewFamilyType.Id, newbox);
                    viewSection.SetViewName("剖面_" + wall.Id.IntegerValue);
                    viewSection.CropBoxActive = true;
                    viewSection.DisplayStyle = DisplayStyle.ShadingWithEdges;
                    viewSection.DetailLevel = ViewDetailLevel.Fine;
                    viewSection.IsolateElementTemporary(wall.Id);
                });
                return viewSection;
            }
            catch
            { return null; }
        }

其中:

//筛选对应的类型,此处使用了自己写的扩展方法
ViewFamilyType viewFamilyType = _doc.WherePasses(new ElementClassFilter(typeof(ViewFamilyType))).FirstOrDefault(x => ViewFamily.Section == (x as ViewFamilyType).ViewFamily) as ViewFamilyType;

 

标签:wall,XYZ,Transform,transform,var,切面,二次开发,viewSection,Revit
From: https://www.cnblogs.com/mqxs/p/17625708.html

相关文章

  • java面向切面编程---AOP之环绕通知
    packagecom.xlkh.bigscreen.common.aspect;importcom.alibaba.fastjson.JSON;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.xlkh.bigscreen.common.utils.RedisDeviceUtil;importcom.xlkh.bigscreen.service.bigscreen.BigscreenRedisService;imp......
  • 切面实现下单请求防重提交功能(自定义注释@repeatSubmit)
    该切面功能适用场景下单请求多次提交,导致生成多个相同的订单解决方案前端解决:限制点击下单按钮为1次后失效。不足:用户体验下降,能绕过前端后端解决:防重提交切面解决,自定义注释实现该功能(如下)步骤:自定义注释类RepeatSubmit创建切面并有该注释绑定,在切面类实现防重提......
  • 面向切面编程
    本文,我们来谈谈面向切面编程。什么是面向切面编程面向切面编程(AspectOrientedProgram,简称AOP)是一种编程范式,用于解藕系统中的横切关注点。这很抽象。我们换种理解~面向切面编程把业务功能分为核心、非核心两部分。比如:核心业务功能:用户登陆、增加数据、删除数据非核心业务功能:......
  • 面向切面编程
    使用AOP的优势:提高代码的可重用性业务代码编码更简洁业务代码维护更高效业务功能拓展更便捷AOP的使用:1)方式一:2)方式二:使用自定义注解  ......
  • 基于个人微信的二次开发
    基于API开发可以有很多功能模块用来自动管理微信消息。服务端调用接口目录1、基础消息类型2、客户端发送的心跳包HeartBeatReq=1001;3、消息接收确认回复(接收或拒绝接收)MsgReceivedAck=1002;4、错误单独提升为一种消息类型Error=1003;可开发的功能包括但不限于:好友管理:添......
  • Revit如何设置快捷键
    1.文件下拉-选项2.选择用户界面3.设定快捷键......
  • 基于个微机器人的二次开发
    使用微信ipad协议来开发微信机器人,可以开发的项目很多,例如一些娱乐机器人、云发单系统,私域流量的智能管理和营销拓客,还有一些自动采集和发朋友圈的云端系统等。每个行业都有需求这样的系统应用,在线教育、金融、电商已经一些个人微商应用。可开发的功能包括但不限于:好友管理:添加......
  • Revit二次开发-用GDI+绘制线样式
      最近有个需求就是将动态讲当前文档中的线样式绘制出来,并且显示在自己的UI上。查阅了一下api文档以及吉米大佬的博客,并且这篇博客中受到启发填充样式绘制然后自己琢磨了一下,成功将线样式绘制出来了。但是目前有个问题就是圆点我在dashpattern里面设置的是1f的单位,如果图片......
  • Revit二次开发-获取族类型以及族参数值
      在族环境中获取当前族的所有族类型以及族类型对应的所有参数和参数值。直接上代码~publicoverrideResultExecute(ExternalCommandDatacommandData,refstringmessage,ElementSetelements){vardoc=commandData.Application.ActiveUIDocument......
  • odoo _register_hook和_patch_methods组合使用,实现日志功能,效果和java的切面类似
    _register_hook方法是在odoo启动,加载模块时调用,可以在调用期间对某个的模型进行功能增强,比如增加日志下面是一个简单的示例:classLog(models.Model):_name="cn.com.brandmax.log"_description="日志"def_make_read(self):defread(self,fields=N......