Dynamo_关于参数赋值

写写关于Dynamo参数赋值

为单个对象赋单个参数值

请添加图片描述
最容易理解,SetParameterByName需要输入三个参数,元素对象(数据类型:Element),参数名称(数据类型:String),参数值(数据类型:None/Integer/Double/String/Element)

注意,输入的参数值的数据类型需要与指向的参数相符,例如指向的参数需要输入布尔值,如果输入了字符串则会报错

为单个对象赋多个参数值

两种方法,第一种是直接在后面加SetParameterByName节点,如果只是修改两个参数,这样操作最快,复制改改输入就好

请添加图片描述

如果修改的参数多,可以给SetParameterByName输入参数列表及值列表,要注意列表项要一一对应

请添加图片描述

为多个对象各赋单个参数值

当多个对象的参数值都是一样的时候,实现很简单,直接往SetParameterByName传入element列表就好

请添加图片描述

如果多个对象的参数值有可能不一样,可将参数值作为列表输入

请添加图片描述

为多个对象各赋多个参数值

这种情况列表结构开始复杂,但也是业务中最常碰到的场景

请添加图片描述

使用Python Script节点实现

也可以用python自定义一个节点,那样不管哪种情况拿起直接用就好

核心方法就是将参数与参数值的输入都处理成二维列表,然后用统一的遍历逻辑进行参数写入

下面代码

# 导入所需的模块
import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.DB import *
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager# 获取Dynamo中的Revit文档
doc = DocumentManager.Instance.CurrentDBDocument# 元素
elements = UnwrapElement(IN[0]) if isinstance(IN[0], list) else [UnwrapElement(IN[0])]# 参数
input_parameters = IN[1]# 值
input_values = IN[2]# 统一输入
def process_input(input_data, elements_count):dimensions = get_list_dimensions(input_data)if not dimensions:  # 非列表情况,将元素包含到一个二维列表中return [[input_data] for _ in range(elements_count)]elif len(dimensions) == 1:  # 一维列表情况,重复一维列表成为二维列表return [input_data] * elements_countelif len(dimensions) == 2:  # 二维列表情况return input_dataelse:raise ValueError("检查输入数据的维度")# 修改参数
def modify_parameter(element, parameter, value):param = element.LookupParameter(parameter)if param:try:TransactionManager.Instance.EnsureInTransaction(doc)param.Set(value)TransactionManager.Instance.TransactionTaskDone()return elementexcept Exception as e:TransactionManager.Instance.TransactionTaskDone()return Noneelse:return None# 获取列表的维度
def get_list_dimensions(ls):if isinstance(ls, list):return [len(ls)] + get_list_dimensions(ls[0])else:return []# 检查参数与参数值数量是否一致
def check_matching_lengths(parameters, values):flattened_parameters = [item for sublist in parameters for item in sublist]flattened_values = [item for sublist in values for item in sublist]if len(flattened_parameters) != len(flattened_values):raise ValueError("参数与参数值的数量未对应")output = []
modified_elements = set()
try:parameters = process_input(input_parameters, len(elements)) # 1) 处理参数输入values = process_input(input_values, len(elements)) # 2) 处理值输入check_matching_lengths(parameters, values) # 3) 检查数量是否一致for element, element_params, element_values in zip(elements, parameters, values):#4) 修改for parameter, value in zip(element_params, element_values):modified_element = modify_parameter(element, parameter, value)if modified_element and modified_element not in modified_elements:output.append(modified_element)modified_elements.add(modified_element)
except ValueError as ve:output.append(str(ve))OUT = output

为实例对象的类型参数赋值

见过很多次初学者都提出过的赋值问题,由于对实例和类型理解得不深刻,不知道如何为类型赋值

逻辑很简单,获取到实例后,先由实例获取到类型,然后再对类型的参数做修改

请添加图片描述

注意,修改类型参数会将修改影响到所有相关的实例

遇过的一些坑

重复名称的参数

一些情况下,一个实例可能出现名称一样的两个参数,仅通过参数名称,可能会指向错误的参数

请添加图片描述

请添加图片描述

对于这种情况,通常需要增加更多的判断条件,例如是否软件自带参数,是否共享参数,甚至直接使用固定的ID等,才可以指向准确的参数

错误的参数类型

基础却又容易忽略的问题,当需要修改的参数很多的时候,时常会忽略了参数的类型

有一次跑脚本发现一直抱错,排除半天才发现居然忽略了这个基础问题

而有时一些参数的命名又容易让人产生误导,例如一个命名为“长度”的自定义参数,输入实际上被设置为字符串(有意或无意),而调试时容易将其理解为数值,导致输入错误

所以还是要注意输入的参数类型

不要在生产项目中调试数据

关于数据的写入,如果出现了错误,有时会非常隐蔽,

常见的情况是调试的时候往A参数写了数据,后续可能又将脚本修改调整到了其他参数,但此时A参数上的数据并没有被清除或回撤,如果这个是生产项目,而A参数后续又会被用到其他地方,则可能带来一些不可预料的影响

所以在编写及调试脚本的时候,不要直接在生产项目中进行)

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

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

相关文章

【JAVA基础】- 同步非阻塞模式NIO详解

【JAVA基础】- 同步非阻塞模式NIO详解 文章目录 【JAVA基础】- 同步非阻塞模式NIO详解一、概述二、常用概念三、NIO的实现原理四、NIO代码实现客户端实现服务端实现 五、同步非阻塞NIO总结 一、概述 NIO(Non-Blocking IO)是同步非阻塞方式来处理IO数据。…

【ChatGPT 指令大全】怎么使用ChatGPT辅助程式开发

目录 写程式 解读程式码 重构程式码 解 bug 写测试 写 Regex 总结 在当今快节奏的数字化世界中,程式开发变得越来越重要和普遍。无论是开发应用程序、网站还是其他软件,程式开发的需求都在不断增长。然而,有时候我们可能会遇到各种问题…

PCL 计算外接圆的半径

目录 一、算法原理1、计算公式2、主要函数3、源码解析二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。爬虫自重。 一、算法原理 1、计算公式

【毕业项目】自主设计HTTP

博客介绍:运用之前学过的各种知识 自己独立做出一个HTTP服务器 自主设计WEB服务器 背景目标描述技术特点项目定位开发环境WWW介绍 网络协议栈介绍网络协议栈整体网络协议栈细节与http相关的重要协议 HTTP背景知识补充特点uri & url & urn网址url HTTP请求和…

springboot家政服务管理系统java家务保姆资源 jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 springboot家政服务管理系统 系统1权限:管…

C# PDF加盖电子章

winform界面 1.选择加签pdf按钮代码实现 private void button1_Click(object sender, EventArgs e){OpenFileDialog op new OpenFileDialog();op.Filter "PDF文件(*.pdf)|*.pdf";bool flag op.ShowDialog() DialogResult.OK;if (flag){string pdfPath Path.Get…

c语言进阶部分详解(数据在内存中的存储)

大家好,今天要进行梳理的内容是数据在内存中的存储相关内容。 在C语言中,数据在内存中的存储是一个非常重要的概念。了解数据在内存中的存储方式可以帮助我们更好地理解程序的执行过程,优化内存使用,提高程序的性能。 目录 一.数…

《论文阅读13》Efficient Urban-scale Point Clouds Segmentationwith BEV Projection

一、论文 研究领域: 城市级3D语义分割论文:Efficient Urban-scale Point Clouds Segmentationwith BEV Projection论文链接 注: BEV: Birds Eye View BEV投影是指鸟瞰视角(Birds Eye View,简称BEV)的一种从上方观看对象或场景的…

gin和gorm框架安装

理论上只要这两句命令 go get -u gorm.io/gorm go get -u github.com/gin-gonic/gin然而却出现了问题 貌似是代理问题,加上一条命令 go env -w GOPROXYhttps://goproxy.cn,direct 可以成功安装 安装gorm的数据库驱动程序 go get -u gorm.io/driver/mysql

go错误集(持续更新)

1.提示以下报错 Build Error: go build -o c:\Users\Administrator\Desktop__debug_bin2343731882.exe -gcflags all-N -l . go: go.mod file not found in current directory or any parent directory; see ‘go help modules’ (exit status 1) 解决办法: go …

AJAX-笔记(持续更新中)

文章目录 Day1 Ajax入门1.AJAX概念和axios的使用2. 认识URL3.URL的查询参数4.常用的请求方法和数据提交5.HTTP协议-报文6.接口文档7.form-serialize插件8.案例用户登录 Day2 Ajax综合案bootstrap弹框图书管理图片上传更换背景个人信息设置 Day3 AJAX原理XMLHttpRequestPromise封…

机器学习笔记:李宏毅ChatGPT:生成式学习的两种策略

1 策略1 “各个击破”——autoregressive model “各个击破”——一个一个生成出来 2 策略2 : “一次到位”——non-autoregressve model 一步到位,全部生成出来 2.1 non-autoregressive model 如何确定长度? 两种策略 策略1:始…

【1572. 矩阵对角线元素的和】

来源:力扣(LeetCode) 描述: 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1: 输入:mat [[1,2,3]…

MATLAB | 绘图复刻(十一) | 截断的含散点及误差棒的分组柱状图

hey大家好久不见,本期带来一篇绘图复刻,居然已经出到第11篇了,不知道有朝一日有没有机会破百,本期绘制的是《PNAS》期刊中pnas.2200057120文章的figure03,文章题目为Intranasal delivery of full-length anti-Nogo-A a…

数据库新闻速递 -- POSTGRESQL 正在蚕食数据库市场 (翻译)

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 ,在新加的朋友会分到3群&#xff…

HTML详解连载(1)

HTML详解连载(1) HTML定义HTML 超文本标记语言标签语法注意拓展 HTML基本骨架解释VS Code 快速生成骨架:标签的关系父子关系(嵌套关系)兄弟关系(并列关系) 代码格式注释 标题标签标签名:h1-h6(双…

分布式数据库视角下的存储过程

存储过程很好呀,那些用不好的人就是自己水平烂,不接受反驳!我就有过这样念头,但分布式数据库,更倾向少用或不用存储过程。 1 我从C/S时代走来 C/S架构时代的末期最流行开发套件是PowerBuilder和Sybase数据库&#xf…

unity vscode 代码关联 跳转 BUG

一早打开电脑发现代码关联失效了,目测可能跟昨天一些插件更新有关 结论 就这货,开了就没法提示代码关联,估计预览版全是BUG。 另一个坑 同期有个unity插件也是预览版,“非常好使”,当场去世。评论点开有好几个人说用…

【C++面向对象】--- 继承 的奥秘(上篇)

个人主页:平行线也会相交💪 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C之路】💌 本专栏旨在记录C的学习路线,望对大家有所帮助🙇‍ 希望我们一起努力、成长&…

第三篇|金融人数据来源有哪些

数据对于金融行业真的很重要,那么金融人有哪些途径查数据呢? 国内: 1. 国家统计局 这个应该是无论什么行业都使用最频繁的网站,每个月都会固定发上个月资产投资数据 、工业增加值和利润数据等常规数据,其他数据也会…