网淘吧Visual Components、Flexsim 仿真技术博客 | Python、C#、Delphi xe 机器人编程教程 - 网淘吧

Python 脚本控制零件材质在按下按钮时变色(黄铜→绿/红) - Python Programming - visual compents 疑难解答

2026-04-03 新闻来源:网淘吧 围观:42
电脑广告
手机广告

Benji

大家好,

如果我想要一个零件的材质在按下 HMI 按钮时变为绿色或红色,零件的 Python 脚本应该怎么写?原始颜色是黄铜色,每个零件有一个属性 ID,值为1(表示绿色)或2(表示红色),该属性需要在仿真前手动输入,并在按下按钮时变为相应的颜色。

这是我目前零件脚本的样子(目前只尝试一个零件)。仿真开始时零件是黄铜色,但按下按钮后仍然是黄铜色:
零件:

image

image501×301 25.7 KB

from vcScript import *

comp = getComponent()

def apply_material_recursive(node, material):
    node.MaterialInheritance = VC_MATERIAL_FORCE_INHERIT
    node.NodeMaterial = material
    for child in node.Children:
        apply_material_recursive(child, material)

def set_self_material(material):
    if material is None:
        return 
    apply_material_recursive(comp, material)


ts_id_prop = comp.getProperty("TS_ID")            # Integer: 1=green, 2=red (set manually)
brass_prop = comp.getProperty("Brass Material")   # Ref<Material>
green_prop = comp.getProperty("Green Material")   # Ref<Material>
red_prop   = comp.getProperty("Red Material")     # Ref<Material>

def set_brass():
    set_self_material(brass_prop.Value)

def reveal_color():
    ts_id = ts_id_prop.Value
    if ts_id == 1:
        set_self_material(green_prop.Value)
    elif ts_id == 2:
        set_self_material(red_prop.Value)
    else:
        set_brass()

def OnReset():
    set_brass()

def OnStart():
    set_brass()

def on_scan(signal):
    
    if signal.Value:
        reveal_color()

scan_in = comp.findBehaviour("ScanIn")  # Boolean Signal on the TS
if scan_in:
    scan_in.OnValueChange = on_scan

# Initial state
set_brass()

提前感谢!

最好使用 OnSignal 在信号变化时触发脚本。

不要忘记添加信号和 PythonScript 之间的连接(见截图)。



1 个赞

感谢回复。我想知道当颜色传感器的射线接触到方块时,是否可以同样实现材质变化?也就是说,方块的材质仅在射线接触时变化,而不是使用按钮?

提前感谢

Color Sensor.vcmx(17.4 KB)

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

文章底部电脑广告
手机广告位-内容正文底部

相关文章

上网淘巴领天猫淘宝优惠券,一年省好几千。

广告  ×

您是本站第938088名访客 今日有0篇新文章/评论