吾生有涯 学海无涯
析模有界 知识无界

SpaceClaim开发|03 读取外部输入参数

SpaceClaim的脚本文件文件保存为py格式时,可以在外部对脚本文件进行编辑,在实际应用中只需要确保运行时传递给SpaceClaim的脚本文件中的参数是正确的即可。这很容易通过文本替换的方式实现。

然而,当SpaceClaim脚本保存为scscript格式时,此脚本文件为二进制文件,无法在SpaceClaim外部进行编辑和修改,也就无法通过文本替换的方式实现参数化。

在命令行中,SpaceClaim可以带参数运行。其参数开关为:/ScriptArgs。调用形式如下所示:

SpaceClaim.exe /RunScript="d:cylinder.scscript" /ScriptArgs="10,20"

其中所有参数包含在/ScriptArgs后面的引号中,多个参数以逗号分隔开,注意逗号之间不能有空格。

同时,在脚本文件中也要编写相应的参数接收代码,注意所有参数都是以字符串的形式传入脚本中,因此在脚本中可能需要对传入的参数进行相应的类型转换。

如下面的脚本:

# Python Script, API Version = V251
# cylinder.scscript
radius = float(args[0])
height = float(args[1])

# 草绘圆
plane = Plane.PlaneZX
result = ViewHelper.SetSketchPlane(plane)
origin = Point2D.Create(MM(0), MM(0))
result = SketchCircle.Create(origin, MM(radius))
# EndBlock

# 实体化草绘
mode = InteractionMode.Solid
result = ViewHelper.SetViewMode(mode, Info1)
# EndBlock

# 拉伸 1 个面
selection = Face1
options = ExtrudeFaceOptions()
options.ExtrudeType = ExtrudeType.Add
result = ExtrudeFaces.Execute(selection, MM(height), options, Info2)
# EndBlock

此脚本接收两个参数(分别为args[0]与args[1]),并将它们转换为float类型,然后分别赋值给变量radiusheight,这两个变量在后续的建模脚本中会用到。

采用以上方法适合传递参数不太多时,当然理论上在命令行中传递的参数并没有受到限制,只是不太优雅。比较优雅的方式是将参数写在文件中,然后将文件名作为参数传递给脚本,在脚本中接收文件名并解析文件中的参数。参数文件可以使用简单的txt文本文件,也可以使用json、xml之类的结构化文件。

如采用下面的json文件:

{
    "params":
    {
        "radius":20,
        "height":40
    }
}

将json文件保存为json.json。此时可以在脚本中使用下面的代码读取参数:

import json

# 读取JSON文件
with open('test.json''r'as file:
    data = json.load(file)  # 解析JSON数据

    # 提取节点数据
    radius = data['params']['radius']
    height = data['params']['height']

    # 验证数据完整性
    if radius isNoneor height isNone:
        raise ValueError("JSON文件缺少radius或height字段")
        

修改完毕后的脚本文件为:

# Python Script, API Version = V251
# cylinder.scscript

import json

filePath = args[0]
with open(filePath,'r'as file:
    data = json.load(file)
    radius = float(data['params']['radius'])
    height = float(data['params']['height'])

# 草绘圆
plane = Plane.PlaneZX
result = ViewHelper.SetSketchPlane(plane)
origin = Point2D.Create(MM(0), MM(0))
result = SketchCircle.Create(origin, MM(radius))
# EndBlock

# 实体化草绘
mode = InteractionMode.Solid
result = ViewHelper.SetViewMode(mode, Info1)
# EndBlock

# 拉伸 1 个面
selection = Face1
options = ExtrudeFaceOptions()
options.ExtrudeType = ExtrudeType.Add
result = ExtrudeFaces.Execute(selection, MM(height), options, Info2)
# EndBlock

调用脚本命令修改为:

SpaceClaim.exe /RunScript="d:cylinder.scscript" /ScriptArgs="d:test.json"

这样,再多的参数也不用担心了,只需要专注于修改json文件中的内容即可。


(完)

本篇文章来源于微信公众号: CFD之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《SpaceClaim开发|03 读取外部输入参数》
文章链接:https://www.topcfd.cn/40703/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册