Maxscript到Python转换工具教程

news2025/6/14 12:04:30

Maxscript到Python转换器教程

Maxscript到Python转换器采用MAXScript程序,将其解析为语法树,然后从语法树中生成等效的Python代码。通过提供python的自动翻译,帮助python程序员理解maxscript示例。

【项目状况】

将正确解析最正确的maxcript语法

解析错误报告不足(尝试翻译无效的maxscript代码将不是一种有趣的体验)

代码生成器仍然不支持某些maxscript构造。大多数时候,当事情无法转换为python时,生成的代码中会发出警告,解释原因。

对插件、工具、自定义属性等结构进行解析,但python支持要么不存在,要么受到限制

一些生成的python构造可能是正确的,但很尴尬(因为以这种方式实现它更容易)

【实例】

下面是一段Maxscript代码:

renderers.current = Default_Scanline_Renderer()
delete $VoxelBox*
rbmp = render outputsize:[32,32] channels:#(#zdepth) vfb:off
z_d = getchannelasmask rbmp #zdepth
progressstart "Rendering Voxels..."
for y = 1 to rbmp.height do
(
 if not progressupdate (100.0 * y / rbmp.height) then exit
 pixel_line = getpixels rbmp [0,y-1] rbmp.width
 z_line = getpixels z_d [0,y-1] rbmp.width
 for x = 1 to rbmp.width do
 (
  b = box width:10 length:10 height:(z_line[x].value/2)
  b.pos = [x*10,-y*10,0]
  b.wirecolor = pixel_line[x]
  b.name = uniquename "VoxelBox"
 )--end x loop
)--end y loop
progressend()

将其翻译成以下python代码:(本质上与zdepthchannel相同,但进行了机械翻译)。

'''Converted from MAXScript to Python with Maxscript到Python转换器'''
from pymxs import runtime as rt
import mxsshim
rt.renderers.current = rt.default_scanline_renderer()
rt.delete(mxsshim.path("$VoxelBox*"))
rbmp = rt.render(outputsize=rt.point2(32, 32), channels=rt.array(rt.name("zdepth")), vfb=False)
z_d = rt.getchannelasmask(rbmp, rt.name("zdepth"))
rt.progressstart("Rendering Voxels...")
for y in range(int(1), 1 + int(rbmp.height)):
    if not rt.progressupdate(100.0 * y / rbmp.height):
        break
    pixel_line = rt.getpixels(rbmp, rt.point2(0, y - 1), rbmp.width)
    z_line = rt.getpixels(z_d, rt.point2(0, y - 1), rbmp.width)
    for x in range(int(1), 1 + int(rbmp.width)):
        b = rt.box(width=10, length=10, height=(z_line[x - 1].value / 2))
        b.pos = rt.point3(x * 10, -y * 10, 0)
        b.wirecolor = pixel_line[x - 1]
        b.name = rt.uniquename("VoxelBox")
# end x loop
# end y loop
rt.progressend()

该代码使用parsec.将maxscript语法解析为语法树

然后,它在语法树上应用各种转换(不是以非常有效的方式,而是以相对简单的方式)

然后它从这个语法树中发出python代码

【使用方法】

from MaxscriptPython转换器 import topy
 
(output, _) = topy("rotate $ (angleaxis 90 [1,0,0])")
print(output)

这将打印:

'''Converted from MAXScript to Python with MaxscriptPython转换器'''
from pymxs import runtime as rt
import mxsshim
import pymxs
rt.rotate(mxsshim.path("$"), rt.angleaxis(90, rt.point3(1, 0, 0)))

请注意,生成的代码依赖于mxsshim.py,这是python中maxscript构造的一个非常早期且不完整的模拟层。

Maxscript到Python转换器本站下载:

https://download.csdn.net/download/mufenglaoshi/88591167

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

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

相关文章

Linux 进程(三)

Linux进程状态的查看: 这是Linux内核源代码对于进程状态的定义: R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。 S睡眠状态(sleeping): 意味着进程在…

Redis高效缓存:加速应用性能的利器

目录 引言 1. Redis概述 1.1 什么是Redis? 1.2 Redis的特点 2. Redis在缓存中的应用 2.1 缓存的重要性 2.2 Redis作为缓存的优势 2.3 缓存使用场景 3. Redis在实时应用中的应用 3.1 实时数据处理的挑战 3.2 Redis的实时数据处理优势 3.3 实时应用中的Red…

Nodejs+vue基于微信小程序的高校餐厅食品留样管理系统uniapp

任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于nodejs小程序技术设计并实现了小程序。采用B/S结构,…

【技术分享】远程透传网关-单网口快速实现西门子S7-200 串口PLC程序远程上下载

准备工作 一台可联网操作的电脑一台单网口的远程透传网关及博达远程透传配置工具网线一条,用于实现网络连接一台西门子S7-200 PLC及其编程软件一个9针串口头及连接线,用于连接PLC一张4G卡或WIFI天线实现通讯(使用4G联网则插入4G SIM卡,WIFI联…

科研学习|论文解读——Open government research over a decade: A systematic review

Open government research over a decade: A systematic review 十年来的开放政府研究:一个系统性综述 摘要 在过去十年中,对开放政府的学术研究蓬勃发展。然而,对开放政府的全面审查是有限的。这一研究空白不仅阻碍了我们对开放政府整体知…

蓝桥杯物联网竞赛_STM32L071_7_LORA发送接收

理论: LoRa(长距离低功耗无线射频)是利用无线电频谱中的电磁波进行通信的一种技术。它使用无线电频段中的射频信号来传输数据。电磁波是一种波动形式的能量,具有特定的频率和波长,可以传播在真空和大多数介质中&#x…

自动化之旅:掌握Ansible常用模块的实用技巧

1 Ansible部署 1.1 三台机器配置 1台主控机器 2台被控机器 1.2 安装 dnf install ansible -yansible方便控制多台主机,比shell效率更高 1.3 配置文件 /etc/ansible/ansible.conf ##全局配置文件,默认很少修改 /etc/ansible/hosts ##全局主机清单清单文件2 构建…

如何精准操作无人机自动停机坪?

无人机自动停机坪通过自主导航和避障功能,实现了无人机的自主降落和起飞,在无人机技术领域起到了至关重要的作用。停机坪不仅仅是无人机的起降平台,还具备自动换电或充电等功能,为无人机的自动化提供了关键支持。为更有效地操作无…

多线程(初阶六:单例模式)

目录 一、单例模式的简单介绍 二、饿汉模式 三、懒汉模式 四、饿汉模式和懒汉模式的线程安全问题分析 1、饿汉模式(线程安全) 2、懒汉模式(线程不安全) 解决懒汉模式的线程安全问题 ①给写操作打包成原子 ②去除冗余操作 …

『测试基础』| 如何理解测试用例管理和缺陷管理?

『测试管理攻略』| 如何理解测试用例管理和缺陷管理? 1 测试用例定义2 测试用例设计原则3 测试用例的评审4 测试如何维护?5 用例的作用6 用例管理工具7 缺陷关注的重点8 缺陷分析9 缺陷管理工具 1 测试用例定义 测试用例(TestCase&#xff0…

[山东大学操作系统课程设计]实验三

0.写在前面(重点) 由于一些突发事件,导致目前大家手里或多或少都有了完整版的答案了。甚至很多学长学姐们写的代码远比我写的要好很多。 但是这个系列我觉得还是稍微坚持下去一点,或许某些地方可以帮到未来的同学们。 还是那句话,有需要可…

百度智能云文字识别使用问题解决合集

1.创建试用程序时需要16位的签名MD5 解决方法:使用Java8 201版本及以下的jdk创建签名 下载地址:http://www.codebaoku.com/jdk/jdk-oracle-jdk1-8.html#jdk8u201 生成签名代码:keytool -genkeypair -v -keystore D:\key.jks -storetype PKC…

rdf-file:SM2加解密

一:SM2简介 SM2是中国密码学算法标准中的一种非对称加密算法(包括公钥和私钥)。SM2主要用于数字签名、密钥交换和加密解密等密码学。 生成秘钥:用于生成一对公钥和私钥。公钥:用于加密数据和验证数字签名。私钥&…

YOLOv8改进 | 2023 | 给YOLOv8换个RT-DETR的检测头(重塑目标检测前沿技术)

一、本文介绍 本文给大家带来是用最新的RT-DETR模型的检测头去替换YOLOv8中的检测头。RT-DETR号称是打败YOLO的检测模型,其作为一种基于Transformer的检测方法,相较于传统的基于卷积的检测方法,提供了更为全面和深入的特征理解,将…

Safe and Practical GPU Computation in TrustZone论文阅读笔记

Safe and Practical GPU Computation in TrustZone 背景知识: youtube GR视频讲解链接:ASPLOS’22 - Session 2A - GPUReplay: A 50-KB GPU Stack for Client ML - YouTube GPU软件栈: 概念:"GPU软件栈"指的是与GPU硬件…

【代码】基于改进差分进化算法的微电网调度研究matlab

程序名称:基于改进差分进化算法的微电网调度研究 实现平台:matlab 代码简介:了进一步提升差分进化算法的优化性能,结合粒子群(PSO)算法的进化机制,提出一种混合多重随机变异粒子差分进化算法(DE-PSO)。所提算法不仅使用粒子群差分变异策略和…

⭐ Unity 里让 Shader 动画在 Scene 面板被持续刷新

写 Unity Shader的时候,只有播放状态下的 Game 面板能看到Shader 顺畅的动态效果,不方便。 想要带有动态效果的 Shader 在 Scene 面板持续更新动画,只需要打开一个开关就能让 Scene 持续刷新动画了。 感谢大家的观看,您的点赞和关…

nrm安装以及常用命令

做为开发者,我们经常会使用到淘宝镜像去安装一些包。基本上设置的都是cnpm这种。但是这一长串其实很难记住。这时,我们可以用nrm进行镜像的切换更为方便。 npm install -g cnpm --registryhttps://registry.npm.taobao.org 安装方法 npm install nrm …

代码随想录算法训练营第38天| 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

JAVA代码编写 动态规划(Dynamic Programming) 一个问题可以划分为多个子问题,且子问题之间有关联,就可以使用动态规划。 动态规划问题步骤: 确定dp数组(dp table)以及下标的含义确定递推公式…

Linux操作系统 2.Linux基础命令

Linux基础命令,掌握这一套清晰的讲解就够啦! 本篇博客给大家带来的是Linux的基础命令和vi编辑器 感谢大家收看~ 一、Linux目录结构 Linux的目录结构是一个树形结构,Linux只有一个根目录 / 所有文件都存在/下面 Linux路径的描述方式 Linux系…