Dynamo_关于参数赋值

news2025/2/19 8:32:00

写写关于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_count
    elif len(dimensions) == 2:  # 二维列表情况
        return input_data
    else:
        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 element
        except Exception as e:
            TransactionManager.Instance.TransactionTaskDone()
            return None
    else:
        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.coloradmin.cn/o/863754.html

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

相关文章

Glide 的超时控制相关处理

作者:newki 前言 Glide 相信大家都不陌生,各种源码分析,使用介绍大家应该都是烂熟于心。但是设置 Glide 的超时问题大家遇到过没有。 我遇到了,并且掉坑里了,情况是这样的。 调用接口从网络拉取用户头像&#xff0c…

SSH隧道搭建简单使用

参考: https://www.zsythink.net/archives/2450 https://luckyfuture.top/ssh-tunnel#SSH%E9%9A%A7%E9%81%93 https://zhuanlan.zhihu.com/p/561589204?utm_id0 SSH隧道(搭建SSH隧道绕过防火墙): ssh命令除了登陆外还有代理转发…

ASL国产CS5212规格书 DP转VGA 替代RTD2166低成本方案 兼容IT6516设计原理图

CS5212可替代兼容瑞昱RTD2166和联阳T6516,ASL集睿致远这款芯片是一种高性能的DP显示端口到VGA转换器芯片。它结合了DisplayPort输入接口和模拟RGB DAC输出接口,嵌入式单片机基于工业标准8051核心。 CS5212适用于多个细分市场和显示器应用程序&#xff1…

YOLOv8 : TAL与Loss计算

YOLOv8 : TAL与Loss计算 1. YOLOv8 Loss计算 YOLOv8从Anchor-Based换成了Anchor-Free,检测头也换成了Decoupled Head,论文和网络资源中有大量的介绍,本文不做过多的概述。 Decoupled Head具有提高收敛速度的好处,但另一方面讲&am…

华为OD机试真题 Java 实现【城市聚集度】【2023 B卷 200分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

Linux网络服务之DNS域名解析

重要的DNS域名解析 一、DNS概述1.1 DNS简介1.2 本地hosts文件1.3 DNS架构1.4 查询方式 二、DNS域名解析原理2.1 解析类型2.2 原理详解2.3 举例 三、bind服务端程序3.1 什么是bind?3.2 配置文件详解3.2.1 主配置文件概述及内容主要格式3.2.2 域名文件概述及内容主要格…

leetcode118. 119.杨辉三角

118 题目: 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 思路: 可以发现从第三行开始,从第二个元素到倒数第二个元素,每个元素都…

电视盒子什么品牌好?实测20天后分享电视盒子推荐

电视盒子可以让老旧电视机重生,解决卡顿、资源少等问题,只需要联网就能观看海量视频资源。不过对于电视盒子如何选购很多人并不了解,我通过对比十几款主流电视盒子后整理了这份电视盒子推荐清单,跟着我一起看看电视盒子什么品牌好…

记一件异常访问记录

一、问题描述 某安全护网期间,web日志中大量出现异常账户请求,虽然报404错误,但是不同异常账号的连续尝试在特殊时期,还是令人担忧. 进程如下:/usr/bin/python2 -Es /usr/sbin/tuned -l -P 二、处理及说明 1&#x…

涛思数据联合长虹佳华、阿里云 Marketplace 正式发布 TDengine Cloud

近日,涛思数据联合长虹佳华,正式在阿里云 Marketplace 发布全托管的时序数据云平台 TDengine Cloud,为用户提供更加丰富的订购渠道。目前用户可通过阿里云 Marketplace 轻松实现 TDengine Cloud 的订阅与部署,以最低的成本搭建最高…

跨境多语言商城源码搭建--定制代码+源码开源

搭建一个跨境多语言商城需要以下步骤: 1. 确定需求:首先,需要明确商城的功能和需求,比如支持哪些语言、支持哪些支付方式、支持哪些货币等。根据需求来决定使用的开发语言和技术栈。 2. 寻找源码:可以在互联网上搜索…

赛码网-上台阶(dp) 100%AC代码(C)

———————————————————————————————————— ⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。 ⏩最近在准备秋招,一直在练习编程。 ⏩本篇文章对赛码网的上台阶 题目做一个…

【Pytorch:nn.Embedding】简介以及使用方法:用于生成固定数量的具有指定维度的嵌入向量embedding vector

文章目录 1、nn.Embedding2、使用场景 1、nn.Embedding 首先我们讲解一下关于嵌入向量embedding vector的概念 1)在自然语言处理NLP领域,是将单词、短语或其他文本单位映射到一个固定长度的实数向量空间中。嵌入向量具有较低的维度,通常在几…

医院国际医疗中心智能化系统规划设计方案[81页PPT]

导读:原文《医院国际医疗中心智能化系统规划设计方案[81页PPT]》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff…

如何对分布式光伏发电站进行智能化监测?安科瑞 顾语欢

—、概述 随着“双碳”目标提出及逐步落实,本就呈现出较好发展势头的分布式光伏发展有望大幅提速。“双碳”目标意味 着国家产业结构的调整,未来10年,新能源装机将保持在110GW以上的年增速,这里面包含集中式光伏电站和分布式光伏…

02 - git 文件重命名

第一种方式: mv kongfu_person.txt kongfu.txt git add .第二种方式: git mv kongfu_person.txt kongfu.txt

Baklib: 逆袭语雀的在线帮助中心,知识库管理工具

1. 介绍 在现代的技术发展中,知识管理变得越来越重要。特别是对于企业来说,拥有一个高效的知识库管理工具可以极大地提高工作效率和团队合作。Baklib就是这样一款在线帮助中心和知识库管理工具,它可以帮助企业集中管理和共享知识&#xff0c…

红帽8.2版本CSA题库:第七题配置 NTP

红帽8.2版本CSA题库:第七题配置 NTP systemctl status chronyd #查看状态 yum -y install chrony #如果没有安装,就安装一下 vim /etc/chrony.conf server materials.example.com iburst :wq syste…

MySQL缓存策略

文章目录 一、MySQL缓存方案的作用二、提高MySQL访问性能的方式2.1 读写分离2.1.1 是什么?2.1.2 解决了什么?2.1.3 原理是什么? 2.2 连接池2.1.1 是什么?2.1.2 解决了什么?2.1.3 原理是什么? 2.3 异步连接2…