Dynamo_参数化造型3

本文探讨了使用Dynamo结合Python API处理图片信息,生成与品牌LOGO匹配的格栅天花造型的过程。从获取图片明度信息到坐标点集的生成,再到与格栅几何进行布尔运算,详细记录了实现步骤与遇到的技术挑战。
部署运行你感兴趣的模型镜像

 

之前看见过一些设计是利用格栅天花的多个缝隙填充成一个品牌LOGO的,忽然有一个想法想用图片生成这种格栅内的造型,然而功力不够,按照思路做出来的东西和想象的相差还是有点大,这里还是把这次的失败记录下来。

演示

 

思路

开始思路是将图片读取进Dynamo,通过Dynamo获取图片的明度信息(使用的图片LOGO为白色,背景为黑色),结合图片的尺寸,在有明度的位置创建一系列的坐标点,然后再通过点生成面,面生成体,最后将LOGO和格栅做一个布尔差集,就可以获得LOGO的几何。

实际操作的时候遇到一些问题,首先是Dynamo(2.0.3版本)中没有节点可以取得插入图片的位置,于是需要使用Python调用一下API,识别图片的BoundingBox获取位置。然后比较棘手的是获得点集后,我本想用ConvexHull节点取外边线的,做到这步的时候才惊醒ConvexHull只能求凸包,取不了凹型的外边缘,翻了一下没有其他合适的节点,网上查了一些资料后发现好像点集生成凹外边缘线并没有这么简单,于是改用创建立方体的方法将LOGO生成出来,实际效果感觉不是太好,不规则的地方太多,看来要完美解决的话还是需要抽时间补充一下图形学的知识了。

节点解析

节点总览

读取体量格栅的几何

格栅使用了体量的方法创建,于是几何提取到Dynamo有点绕,需要将项目里的格栅族与体量面做一个相交检测,过滤出目标格栅几何。

获得格栅几何后,还需要提取出格栅天花的位置及厚度,用作LOGO的生成。

获取图片信息

图片需要取得图片路径、源图片尺寸、图片实例尺寸、图片实例的位置、像素明度这几个信息。

图片路径、源图片尺寸、图片实例尺寸这些直接通过类型参数或者实例参数读取即可,这些信息是将图像读进Dynamo或者是后面生成点集的必要数据;

图片实例的位置没有节点可以直接获得,这里使用了PythonScript调用了Revit的API,通过读取实例的BoundingBox,取得MinPoint,用这个点作为LOGO的建模基准;

像素明度通过节点Color.Brightness获取即可,获得的列表还需要做一次倒序,要不然生成的几何是倒过来的。

PythonScript节点代码

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

import clr

# 导入 RevitAPI 和 RevitAPIUI
clr.AddReference("RevitAPI")
clr.AddReference("RevitAPIUI")
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.UI import *

# 导入几何体转换和元素转换方法
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

# 导入 DocumentManager 和 TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

# 取得文档和程序
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

imageInstance = UnwrapElement(IN[0])

box = imageInstance.get_BoundingBox(doc.GetElement(imageInstance.OwnerViewId))

OUT = Autodesk.Revit.DB.Point.Create(Autodesk.Revit.DB.XYZ(box.Min.X,box.Min.Y,box.Min.Z)).ToProtoType()

生成位置集合

这里逻辑就是判断像素明度是否大于0,过滤出大于0的列表索引,然后去空,构造出行列的索引列表,再结合图像尺寸,就可以生成有明度的XY坐标位置集合。

生成LOGO

剩下的就比较简单了,通过坐标生成点集合,再生成立方体,将立方体合并成一个几何后与格栅几何做布尔差集,就能获得LOGO的几何。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

使用 Dynamo 制作 Revit 参数化族是一种高效的方式,可以显著提高建模效率和参数化控制能力。Dynamo 作为 Revit 的可视化编程工具,允许用户通过节点连接的方式实现自动化建模与参数化设计。以下是实现 Dynamo 制作 Revit 参数化族的主要步骤和方法。 ### ### 1. 准备族模板 在 Revit 中创建一个族文件(.rfa),选择合适的族类别,例如“常规模型”或“窗”等。根据设计需求设置好族的基准参照面、工作平面以及必要的参数框架。这一步可以手动完成,也可以通过 Dynamo 自动创建基础几何体[^1]。 ### ### 2. 在 Dynamo 中定义参数与逻辑 在 Dynamo 中,可以定义族的尺寸参数、类型参数和实例参数,并将这些参数绑定到几何体的生成逻辑中。例如,通过数字输入节点、滑块或 Excel 表格导入参数值,构建参数驱动的建模流程。 ```python # 示例:在 Dynamo 中定义参数 number_node = NumberSequence(start=0, end=10, step=1) ``` ### ### 3. 创建几何体并绑定参数 利用 Dynamo 的几何节点(如 `Point.ByCoordinates`, `Line.ByStartPointEndPoint`, `Solid.ByUnion` 等)构建族的几何形态。所有几何体的尺寸和位置应通过参数控制,确保模型的可调整性。 ```python # 示例:通过参数创建长方体 length = 1000 width = 500 height = 200 box = Solid.Rectangle(width, length).Extrude(height) ``` ### ### 4. 将几何体载入到 Revit 族中 通过 `FamilyInstance.ByGeometry` 或 `Family.Create` 等节点将 Dynamo生成的几何体导入到 Revit 族中。此步骤需要确保几何体与族的基准面和参数正确对齐[^3]。 ### ### 5. 定义共享参数与类型参数 在 Dynamo 中可以调用 `FamilyManager` API 创建共享参数或类型参数,并将其绑定到族实例中。这一步通常需要 Python 脚本节点来调用 Revit API 实现更复杂的参数操作[^4]。 ```python # 示例:通过 Python 脚本添加参数 clr.AddReference('RevitAPI') from Autodesk.Revit.DB import * doc = DocumentManager.Instance.CurrentDBDocument familyManager = doc.FamilyManager familyManager.AddParameter("Width", BuiltInParameterGroup.PG_GEOMETRY, ParameterType.Length, True) ``` ### ### 6. 测试与优化 完成族的创建后,在 Revit 中加载族并进行参数修改测试,确保几何体能够按照预期响应参数变化。对于复杂的族,建议将部分操作保留在 Revit 族编辑器中完成,如材质贴附、嵌套族插入等,以提升效率和展示效果[^1]。 ### ### 7. 扩展功能与自动化 结合 Dynamo 的自适应组件(Adaptive Component)功能,还可以实现更高级的参数化设计,例如幕墙系统、复杂曲面结构等。通过 `AdaptiveComponent.ByPoints` 节点,可以在任意曲面上布置自适应族,实现动态建模[^3]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值