玩着3dmax把Python学了-01

news2024/10/7 3:14:52

3ds Max 2022以前的版本要借助Python的api来实现Python编程达到编辑绘图脚本的功能,但是好消息来了,3ds Max 2022 起,MaxPlus 不再作为 3ds Max 的 Python API 包含在内。而是3ds Max 将 Python 3.7 的标准版本包涵其中了,位于 [3ds Max Install]\Python37 下。可以将标准的预编译扩展库与此版本的 Python 配合使用。

参考官网:https://help.autodesk.com/view/MAXDEV/2024/ENU/?guid=MAXDEV_Python_using_pymxs_html

文章目录

  • 一、让3dmax带着我写代码
    • 1、打开宏录制
    • 2、支持的python版本
    • 3、开始我们的python
    • 4、创建一个几何体
    • 引入库文件
    • 修改位置:
    • 带参数创建
    • 通过选择来移动
    • 改个颜色吧
    • 给个材质吧!
    • 增加修改器
    • 复制
    • 设置坐标系
  • 二、转战maxscript编辑器
    • 2、整一个动画
    • 3、整一个图形拉伸试试
    • 4、旋转

一、让3dmax带着我写代码

我们初次使用3dmax来写Python脚本肯定会遇到各种困难,关键是会面临有问题不知道去问谁的窘境和尴尬。现在好了,我们可以让3dmax的宏录制带着我们来编写Python代码。

1、打开宏录制

首先,我们可以按快捷键F11来打开脚本监听器,如下图(记得勾选宏录制为Enable):

在这里插入图片描述

2、支持的python版本

在这里插入图片描述

3、开始我们的python

在这里插入图片描述

4、创建一个几何体

要创建几何体,我们必须导入pymxs runtime库,方式如下:

from pymxs import runtime as mxs

比如我们要创建一个几何体box,一句话:

 pymxs.runtime.box(name="box001")

这里name后面表示名称的字符串可以是单引号也可以是双引号,这个不影响正确性。
除此意外你还可以创建sharp

 pymxs.runtime.circle(name="circle001")
pymxs.runtime.rectangle(name="rect001")

在这里插入图片描述

引入库文件

当然,如果每次都写一个 pymxs.runtime,那很麻烦,我们还是将这个库引入后方便后面多次使用,代码如下:

from pymxs import runtime as mxs
mxs.box(name="box001")

在这里插入图片描述

属性修改:官网属性修改

修改位置:

https://help.autodesk.com/view/MAXDEV/2024/ENU/?guid=MAXDEV_Python_using_pymxs_pymxs_module_html
咱们挪挪吧,下面的代码就是想box001移动到200,200,200的位置:

t1=mxs.getNodeByName("box001") #通过节点名称获取box001对象
t1.position = rt.Point3(200,200,200)

带参数创建

或者,我们在新建的时候,给点参数吧,否则每次都在原点。

mxs.box(pos=rt.Point3(75,75,0))

带参数创建了一个茶壶,并且事后指定它的半径和位置及分段。

teapot_position=pymxs.runtime.point3(100,20,10)
my_teapot = pymxs.runtime.teapot(radius=50, pos=teapot_position, segments=2)
from pymxs import runtime as rt

t1 = rt.teapot()
t2 = rt.teapot(pos=rt.point3(20,20,0))

通过选择来移动

pp=pymxs.runtime.selection[0]
pp.position=rt.point3(200,200,200);

改个颜色吧

sb=rt.selection[0]
sb.wirecolor=rt.color(120,0,0)

给个材质吧!

材质修改,可以直接借助maxscript脚本
rt.execute(“$Box*.material = standard()”)
https://help.autodesk.com/view/MAXDEV/2024/ENU/?guid=MAXDEV_Python_using_pymxs_pymxs_materials_html
当然,我们既然选择了python脚本,那么我们还是希望能够通过Python脚本来实现

m = pymxs.runtime.standardMaterial()
m.diffuse = pymxs.runtime.color(100,10,10)
m.specular = pymxs.runtime.color(100,0,0)

有了上面的材质,我们可以给我们创建的几何体来赋予材质了

m = pymxs.runtime.standardMaterial()
m.diffuse = pymxs.runtime.color(100,10,10)
m.specular = pymxs.runtime.color(100,0,0)
t = pymxs.runtime.teapot()
t.material=m

我们刚刚是以标准材质为例来展示材质的创建和修改的,当然,我们知道,3dmax中有三种典型的材质Standard, Physical, 及 MultiMaterial我们后面将对其逐个讲解。

增加修改器

其实,我们可以编辑一下box啦

加载修改器代码:

my_modifier = pymxs.runtime.taper()
my_modifier.amount = 2.0
my_modifier.curve = 1.5
pymxs.runtime.addmodifier(my_teapot, my_modifier)
from pymxs import runtime as rt

my_teapot = rt.teapot()
rt.convertTo(my_teapot, rt.editable_poly)
my_mod = rt.UVWMap()
rt.addModifier(my_teapot, my_mod)

直接调用maxscript的指令也可以,如下代码就是调用maxscript的box()创建了一个box

pymxs.runtime.execute('box()')

如果打开文件

pymxs.runtime.execute('max file open')

复制

 sb=rt.selection[0]
rt.copy(sb)

设置坐标系

pymxs.runtime.toolMode.coordsys(pymxs.runtime.Name("world"))

二、转战maxscript编辑器

基于上面的测试和实验,我们初步了解了Python脚本如何调用3dmax的基本指令,我们不可能永远这么测试下去,玩玩还可以,如果我们想编写一个插件或者有正式作用的脚本,还是要在maxscript中来进行,尽管他的只能感知和语法提示作用还不好(如果我们真要编写比较复杂的脚本后面我们将转战pycharm或者sublime text或者VSCode)。

2、整一个动画

rt = pymxs.runtime
t = rt.teapot()
with pymxs.animate(True):
    # go to frame 0
    with pymxs.attime(0):
        t.pos = rt.point3(0,0,0)
    # go to frame 100
    with pymxs.attime(100):
        t.pos = rt.point3(100,100,100)

上面这个动画将我们创建的茶壶从原点移动到100,100,100的位置,耗时100帧。

3、整一个图形拉伸试试

rt.rectangle()
shp=rt.selection[0]
shp.position=rt.point3(100,100,0)
rt.convertTo(shp, rt.editable_poly)

通过convertTo转化为了一个可编辑多边形

4、旋转

https://help.autodesk.com/view/MAXDEV/2024/ENU/?guid=MAXDEV_Python_using_pymxs_pymxs_objects_html

# define function for rotating only the pivot point
def RotatePivotOnly( obj, rotation):
    rotValInv=rt.inverse (rt.r2q(rotation))
    with pymxs.animate(False):
        obj.rotation*=rotValInv
        obj.objectoffsetpos*=rotValInv
        obj.objectoffsetrot*=rotValInv


b=rt.box(pos=rt.Point3(75,75,0)) # create a 25x25x25 box, vertex 1 at [62.5,62.5,0] (world)
rt.convertToMesh (b) # convert box to mesh so we can access the vertex location
DumpXForms(b) # print transforms
b.pivot= rt.Point3(50,50,0)# move pivot only to [50,50,0]
DumpXForms (b) # print transforms
rotation = rt.EulerAngles( 0, 0, 35)
RotatePivotOnly (b, rotation) # rotate pivot only 35 degrees about local Z
DumpXForms (b)# print transforms

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

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

相关文章

MySQL监控告警及可视化:Zabbix+Percona PMP实现(Part II)

MySQL监控告警及可视化:ZabbixPercona PMP实现(Part II) PMP插件安装PMP监控脚本配置Web界面导入PMP模板 服务器清单如下: 服务器IP配置OS版本服务器角色172.16.175.x4c8gCentOS 7.7MySQL Server172.16.175.y4c8gCentOS 7.7Zabbi…

Python——基于YOLOV8的车牌识别(源码+教程)

目录 一、前言 二 、完成效果 三、 项目包 四、运行项目 (教程) 一、前言 YOLOv8LPRNet车牌定位与识别https://www.bilibili.com/video/BV1vk4y1E7MZ/ 最近做了有一个车牌识别的小需求,今天完成了,在此记录和分享 首先&#x…

NECCS|全国大学生英语竞赛C类|听力|短篇新闻|听写填空|16:40~17:10+17:30~18:10

目录 一、听写填空 1. 题型 2. 技巧 (1)利用间隙 浏览全文 积极预测 (2)边听边记 (3)注重检查 二、短篇新闻 1. 试题解读 2. 解题技巧 (1)预测要点,有的放矢 …

【五一创作】机械臂速成小指南(二十四):逆运动学的雅可比方法

👨‍🏫🥰🥳需要机械臂相关资源的同学可以在评论区中留言哦🤖😽🦄 指南目录📖: 🎉🎉机械臂速成小指南(零点五)&#xff…

Redis消息队列

消息队列(Message Queue),字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色: 消息队列:存储和管理消息,也被称为消息代理(Message Broker) 生产者:发送消…

【hello Linux】线程概念

目录 1. 线程概念的铺设 2. Linux线程概念 2.1 什么是线程 2.2 线程的优点 2.3 线程的缺点 2.4 线程异常 2.5 线程用途 3. Linux进程VS线程 4. Linux线程控制 4.1 POSIX线程库 4.2 创建线程 4.3 进程ID和线程ID 4.4 线程终止 4.5 线程等待 4.6 分离线程 Linux🌷 1…

FPGA时序约束(六)时序例外约束

系列文章目录 FPGA时序约束(一)基本概念入门及简单语法 FPGA时序约束(二)利用Quartus18对Altera进行时序约束 FPGA时序约束(三)时序约束基本路径的深入分析 FPGA时序约束(四)主时…

解除Word的编辑保护【简单版】

首先,我们遇到的情况是下图这样的: 点一下停止保护,是下图这样的: 开始解决: 第一种方式:另存为Word Xml 存好了, 打开如下图(我用VS打开的,最好找个能够格式化代码的编…

C++---区间DP---棋盘分割(每日一道算法2023.5.2)

注意事项: 涉及到"矩阵/二维前缀和"的一些知识,建议先理解那篇文章。 题目: 将一个 88 的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了…

echarts数据可视化-动态柱状图

效果如下: 此处用的echarts柱状图为:Axis Align with Tick 本文的要讨论的内容: 1、柱状图样式修改 2、多数据的缩放展示 柱状图样式修改 // 数据 const city reactive([{ value: 335, name: 长沙 },{ value: 310, name: 武汉 },{ value: …

C++类和对象 ——构造函数

C拷贝构造函数详解 什么是拷贝构造函数?拷贝构造函数的特征默认拷贝构造函数为什么需要显示定义构造函数?拷贝构造函数的调用场景什么时候不需要自己定义拷贝构造函数 什么是拷贝构造函数? 在现实生活中,拷贝构造函数就好像我们上…

Linux服务器 容器化部署新版Jenkins

安装Docker 先安装yml yum install -y yum-utils device-mapper-persistent-data lvm2设置加速镜像(阿里云镜像) sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装docker yum -y install d…

智慧工厂人员定位系统源码,实现对工厂内的人车、物、料等的精确定位

智慧工厂人员定位系统源码 技术架构:Java vue spring boot 系统概述: 采用UWB定位技术,通过在厂区内布设一定数量的定位基站,实时精确地定位员工、车辆、物品上微标签位置,零延时地将人、车、物的位置信息显示在工厂…

数据结构(六)—— 二叉树(2)遍历

文章目录 递归三要素一、深度优先遍历(前中后序)1.1 递归遍历1.1.1 前序(中左右)1.1.2 中序(左中右)1.1.3 后序(左右中) 1.2 迭代遍历1.2.1 前序1.2.2 后序1.2.3 中序 二、广度优先遍…

创建前、中、后序二叉树

创建前、中、后序二叉树 一、前序二叉树二、中序二叉树二、后序二叉树 一、前序二叉树 规则:根->左->右 前序遍历结果:ABCDEFGHK 二、中序二叉树 规则:左->根->右 中序遍历结果:ABCDEFG 二、后序二叉树 规则&a…

浅尝ChatGPT使用之Python字典嵌套排序

一、背景 所负责的项目从v1.0升级到v2.0之后,发送到kafka的Json数据字段顺序和内容有所改变, v1.0版本推送数据样例: {"name": "小王子","author": "安托万德圣-埃克苏佩里(1900-1944&#…

1.Hive基础

1.简介 作用:将结构化数据映射为一张表,并提供类sql功能 本质:将HQL转化成MapReduce程序 (1)Hive处理的数据存储在HDFS ​ (2)Hive分析数据底层的实现是MapReduce ​ (3&#x…

keil5固件库版本的工程建立

keil5固件库版本的工程建立 一、一个文件夹,如图再建立4个文件夹 二、准库往上图四个文件夹里粘贴 从标准库里面把Libraries里面的两个文件夹全部复制到新建文件夹Libraries里面 三、来对新建的Libraries里面的两个文件夹进行更改 STM32F10x_StdPeriph_Driver这个…

ajax与json

title: 15 ajax与json date: ‘2023-3-29’ 从一个例子开始 传统的方式进行前后端交互是什么样子的&#xff1f; <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <html> <head><me…

python cms建站教程:Wagtail建站(二、修改主页与自定义后台管理)

不得不说python的中文cms建站教程实在是太少了&#xff0c;直接用Django/Flask这样的框架从头开始写又实在是有点麻烦&#xff0c;自己摸索着写一点使用Wagtail建站的方法&#xff0c;仅供参考。Wagtail是一款基于Django框架的CMS建站工具&#xff0c;可以为你的网站提供一个比…