Revit二次开发 自适应族添加放样融合

大多数博客给出的方案都是如何在有自适应族的情况下进行修改定位点或是将数据传入自适应族,如何直接在族文件中创建自适应模型并将点转换为自适应点,连接自适应点成为自适应路径这种方式没有文章介绍.
在这里插入图片描述

下面的代码中给出了如何在自适应族文件中创建参照点并转换为自适应点连接成为路径,最终创建放样融合的办
法.

        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){var uiDoc = commandData.Application.ActiveUIDocument; // UIDocument var doc = uiDoc.Document;// 定义路径的起点和终点var pathStart = new XYZ(0, 0, 0);var pathEnd = new XYZ(0, 0, 10);// 定义第一个轮廓的点(底部轮廓)var bottomProfilePoints = new List<XYZ>{new XYZ(-2, -2, 0),  // 左下new XYZ(2, -2, 0),   // 右下new XYZ(2, 2, 0),    // 右上new XYZ(-2, 2, 0)    // 左上};// 定义第二个轮廓的点(顶部轮廓)var topProfilePoints = new List<XYZ>{new XYZ(-3, -3, 10),  // 左中new XYZ(3, -3, 10),  // 右下new XYZ(3, 3, 10),   // 上中new XYZ(-3, 3, 10)   // 左上};// 创建轮廓线var bottomProfile = CreateClosedCurveLoop(bottomProfilePoints);var topProfile = CreateClosedCurveLoop(topProfilePoints);// 创建路径var path = Line.CreateBound(pathStart, pathEnd);// 执行事务using (Transaction transaction = new Transaction(doc, "Create Sweep Form")){transaction.Start();// 创建自适应点var refStart = doc.FamilyCreate.NewReferencePoint(pathStart);AdaptiveComponentFamilyUtils.MakeAdaptivePoint(doc, refStart.Id, AdaptivePointType.PlacementPoint);var refEnd = doc.FamilyCreate.NewReferencePoint(pathEnd);AdaptiveComponentFamilyUtils.MakeAdaptivePoint(doc, refEnd.Id, AdaptivePointType.PlacementPoint);// 设置自适应点编号AdaptiveComponentFamilyUtils.SetPlacementNumber(doc, refStart.Id, 1);AdaptiveComponentFamilyUtils.SetPlacementNumber(doc, refEnd.Id, 2);// 创建自适应路径var refPoints = new ReferencePointArray();refPoints.Append(refStart);refPoints.Append(refEnd);var refCurve = doc.FamilyCreate.NewCurveByPoints(refPoints);// 创建草图平面var bottomSketchPlane = SketchPlane.Create(doc, Plane.CreateByNormalAndOrigin(XYZ.BasisZ, pathStart));var topSketchPlane = SketchPlane.Create(doc, Plane.CreateByNormalAndOrigin(XYZ.BasisZ, pathEnd));var pathSketchPlane = SketchPlane.Create(doc, Plane.CreateByThreePoints(pathStart, pathEnd, pathStart + new XYZ(-1, 0, 0)));// 创建轮廓的参考数组var refArrArray = new ReferenceArrayArray();refArrArray.Append(CreateReferenceArrayFromCurveLoop(doc, bottomProfile, bottomSketchPlane));refArrArray.Append(CreateReferenceArrayFromCurveLoop(doc, topProfile, topSketchPlane));// 创建路径的参考数组var pathRefArray = new ReferenceArray();var pathModelCurve = doc.FamilyCreate.NewModelCurve(path, pathSketchPlane);pathRefArray.Append(refCurve.GeometryCurve.Reference);// 创建放样融合形状var form = doc.FamilyCreate.NewSweptBlendForm(true, pathRefArray, refArrArray);transaction.Commit();}//var collector = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).WhereElementIsNotElementType();//foreach (Element ele in collector)//{//    var comment = ele.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS);//    TaskDialog.Show("Revit", comment.AsString());//    break;//}//var selection = uiDoc.Selection.PickObject(ObjectType.Element);//var ele = doc.GetElement(selection) as Wall;//var locationCurve = ele.Location as LocationCurve;var point0 = (locationCurve.Curve as Edge).GetEndPoint(0);//var point1 = (locationCurve.Curve).GetEndPoint(1);TaskDialog.Show("Revit", $"S: {point0.X} , {point0.Y} , E: {point1.X} , {point1.Y}");//TaskDialog.Show("Revit", $"S: {double.MinValue}");//var tess = (locationCurve.Curve).Tessellate();//TaskDialog.Show("Revit", $"S: {tess[0].X} , {tess[0].Y} , E: {tess[1].X} , {tess[1].Y} , count : {tess.Count}");//using (Transaction trans = new Transaction(doc,"create"))//{//    trans.Start();//    var pipe5 = Pipe.Create(doc, new ElementId(621821), new ElementId(6323162), new ElementId(7984255), new XYZ(10, 10, 15), new XYZ(17, 10, 15));//    //var pipe5 = doc.GetElement(new ElementId(8028066)) as Pipe;//    var pipe5 = doc.GetElement(new ElementId(8028405)) as Duct;//    var pipe8 = Pipe.Create(doc, new ElementId(621821), new ElementId(6323162), new ElementId(7984255), new XYZ(18, 0, 15), new XYZ(18, 20, 15));//    //var pipe8 = doc.GetElement(new ElementId(8028069)) as Pipe;//    var pipe8 = doc.GetElement(new ElementId(8028423)) as Duct;//    //ConnectWithTakeoff(doc, pipe8, pipe5);//    Wall.Create(doc,CreateWallBoundaryList(),new ElementId(7301614),new ElementId(7984255),false);//    trans.Commit();//}return Result.Succeeded;}/// <summary>/// 根据点列表创建闭合的曲线环/// </summary>/// <param name="points">点列表</param>/// <returns>闭合的曲线环</returns>CurveArray CreateClosedCurveLoop(List<XYZ> points){var curveArray = new CurveArray();for (int i = 0; i < points.Count; i++){var startPoint = points[i];var endPoint = points[(i + 1) % points.Count]; // 闭合环curveArray.Append(Line.CreateBound(startPoint, endPoint));}return curveArray;}/// <summary>/// 从曲线环创建参考数组/// </summary>/// <param name="doc">当前文档</param>/// <param name="curveLoop">曲线环</param>/// <param name="sketchPlane">草图平面</param>/// <returns>参考数组</returns>ReferenceArray CreateReferenceArrayFromCurveLoop(Document doc, CurveArray curveLoop, SketchPlane sketchPlane){var refArray = new ReferenceArray();foreach (Curve curve in curveLoop){var modelCurve = doc.FamilyCreate.NewModelCurve(curve, sketchPlane);refArray.Append(modelCurve.GeometryCurve.Reference);}return refArray;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于VMware的ubuntu与vscode建立ssh连接

1.首先安装openssh服务 sudo apt update sudo apt install openssh-server -y 2.启动并检查ssh服务状态 到这里可以按q退出 之后输入命令 &#xff1a; ip a 红色挡住的部分就是我们要的地址&#xff0c;这里就不展示了哈 3.配置vscode 打开vscode 搜索并安装&#xff1a;…

解决SetWindowCompositionAttribute使控件文本透明的问题

用以下参数调用该API&#xff0c;能实现类似Aero的模糊透明效果。 参数具体含义见 https://zhuanlan.zhihu.com/p/569258181 http://www.memotech.de/WindowComposition/Text.txt http://www.memotech.de/WindowComposition/WindowComposition.zip DWORD accent[4] { 3,0,0,0 …

使用 DeepSeek-R1 与 AnythingLLM 搭建本地知识库

一、下载地址Download Ollama on macOS 官方网站&#xff1a;Ollama 官方模型库&#xff1a;library 二、模型库搜索 deepseek r1 deepseek-r1:1.5b 私有化部署deepseek&#xff0c;模型库搜索 deepseek r1 运行cmd复制命令&#xff1a;ollama run deepseek-r1:1.5b 私有化…

SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言

目录 一、环境准备 1、MySQL 8.0 和 Navicat 下载安装 2、准备好的表和数据文件&#xff1a; 二、SQL语言简述 1、数据库基础概念 2、什么是SQL 3、SQL的分类 4、SQL通用语法 三、DDL&#xff08;Data Definition Language&#xff09;&#xff1a;数据定义语言 1、操…

Java篇之继承

目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…

使用SpringBoot发送邮件|解决了部署时连接超时的bug|网易163|2025

使用SpringBoot发送邮件 文章目录 使用SpringBoot发送邮件1. 获取网易邮箱服务的授权码2. 初始化项目maven部分web部分 3. 发送邮件填写配置EmailSendService [已解决]部署时连接超时附&#xff1a;Docker脚本Dockerfile创建镜像启动容器 1. 获取网易邮箱服务的授权码 温馨提示…

TensorFlow简单的线性回归任务

如何使用 TensorFlow 和 Keras 创建、训练并进行预测 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 8.完整代码 1. 数据准备与预处理 我们将使用一个简单的线性回归问题&#xff0c;其中输入特征 x 和标…

vue入门到实战 三

目录 3.1 v-bind 3.1.1 v-bind指令用法 ​编辑3.1.2 使用v-bind绑定class 3.1.3 使用v-bind绑定style 3.2.1 v-if指令 3.2.1 v-if指令 3.2.2 v-show指令 ​3.3 列表渲染指令v-for 3.3.1 基本用法 3.3.2 数组更新 3.3.3 过滤与排序 3.4 事件处理 3.4.1 使用v-on指令…

《苍穹外卖》项目学习记录-Day10订单状态定时处理

利用Cron表达式生成器生成Cron表达式 1.处理超时订单 查询订单表把超时的订单查询出来&#xff0c;也就是订单的状态为待付款&#xff0c;下单的时间已经超过了15分钟。 //select * from orders where status ? and order_time < (当前时间 - 15分钟) 遍历集合把数据库…

解决MacOS安装软件时提示“打不开xxx软件,因为Apple无法检查其是否包含恶意软件”的问题

macOS 系统中如何开启“任何来源”以解决安装报错问题&#xff1f; 大家好&#xff01;今天我们来聊聊在使用 macOS 系统 时&#xff0c;遇到安装应用软件时出现报错的情况。这种情况常常发生在安装一些来自第三方开发者的应用时&#xff0c;因为 macOS 会默认阻止不明开发者的…

【FreeRTOS 教程 六】二进制信号量与计数信号量

目录 一、FreeRTOS 二进制信号量&#xff1a; &#xff08;1&#xff09;二进制信号量作用&#xff1a; &#xff08;2&#xff09;二进制信号量与互斥锁的区别&#xff1a; &#xff08;3&#xff09;信号量阻塞时间&#xff1a; &#xff08;4&#xff09;信号量的获取与…

C++模板编程——可变参函数模板之折叠表达式

目录 1. 什么是折叠表达式 2. 一元左折 3. 一元右折 4. 二元左折 5. 二元右折 6. 后记 上一节主要讲解了可变参函数模板和参数包展开&#xff0c;这一节主要讲一下折叠表达式。 1. 什么是折叠表达式 折叠表达式是C17中引入的概念&#xff0c;引入折叠表达式的目的是为了…

DeepSeek回答禅宗三重境界重构交易认知

人都是活在各自心境里&#xff0c;有些话通过语言去交流&#xff0c;还是要回归自己心境内在的&#xff0c;而不是靠外在映射到股票和技术方法&#xff1b;比如说明天市场阶段是不修复不接力节点&#xff0c;这就是最高视角看整个市场&#xff0c;还有哪一句话能概括&#xff1…

数据结构【链栈】

基于 C 实现链表栈&#xff1a;原理、代码与应用 一、引言 栈就是一个容器&#xff0c;可以当场一个盒子&#xff0c;只能一个一个拿&#xff0c;一个一个放&#xff0c;而且是从上面放入。 有序顺序栈操作比较容易【会了链栈之后顺序栈自然明白】&#xff0c;所以我们这里只…

成绩案例demo

本案例较为简单&#xff0c;用到的知识有 v-model、v-if、v-else、指令修饰符.prevent .number .trim等、computed计算属性、toFixed方法、reduce数组方法。 涉及的功能需求有&#xff1a;渲染、添加、删除、修改、统计总分&#xff0c;求平均分等。 需求效果如下&#xff1a…

C++:抽象类习题

题目内容&#xff1a; 求正方体、球、圆柱的表面积&#xff0c;抽象出一个公共的基类Container为抽象类&#xff0c;在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径)&#xff0c;以及求表面积的纯虚函数area()。由此抽象类派生出…

Java面试题2025-并发编程基础(多线程、锁、阻塞队列)

并发编程 一、线程的基础概念 一、基础概念 1.1 进程与线程A 什么是进程&#xff1f; 进程是指运行中的程序。 比如我们使用钉钉&#xff0c;浏览器&#xff0c;需要启动这个程序&#xff0c;操作系统会给这个程序分配一定的资源&#xff08;占用内存资源&#xff09;。 …

AI智慧社区--百度地图

数据库&#xff1a; 前端实现 页面代码 <template><div class"app-container"><baidu-map class"bm-view" :center"center" :zoom"zoom" ready"initMap"><!-- 定位 --><bm-geolocation anchor…

WSL2中安装的ubuntu搭建tftp服务器uboot通过tftp下载

Windows中安装wsl2&#xff0c;wsl2里安装ubuntu。 1. Wsl启动后 1&#xff09;Windows下ip ipconfig 以太网适配器 vEthernet (WSL (Hyper-V firewall)): 连接特定的 DNS 后缀 . . . . . . . : IPv4 地址 . . . . . . . . . . . . : 172.19.32.1 子网掩码 . . . . . . . .…

一、TensorFlow的建模流程

1. 数据准备与预处理&#xff1a; 加载数据&#xff1a;使用内置数据集或自定义数据。 预处理&#xff1a;归一化、调整维度、数据增强。 划分数据集&#xff1a;训练集、验证集、测试集。 转换为Dataset对象&#xff1a;利用tf.data优化数据流水线。 import tensorflow a…