标签: MaxScript

  • 3dsmax maxscript教程-间隔取一个多边形面小脚本

    3dsmax maxscript教程-间隔取一个多边形面小脚本

    重新编写一段关于editpoly间隔一格取一个面的算法,我之前也写过一个类似的算法,但是觉得算法太过于依赖数学运算而不是3dsmax maxscript的运算流程的,数学运算的通用性感觉不大好,而且修改繁琐,这次改进的算法就简练多了,可重用性还不错,只要稍微修改几个参数就能得到各式各样的效果,

    算法分解:

    –建立空数组

    n=#()

    –分列数。就是一个网格格子纵向的数量

    k=32

    –数组n的系列排序,初始量为1

    u=1

    –for循环 a的值等于网格的行数量

    for a =0 to 20 do

    (

    –mod是取余数的运算,当余数等于0时运算代码,不等于0时运行代码

    if (mod a 2)==0 then

    (

    –在if语句中嵌套for循环函数,当等于0时,做k值范围内的循环运算,b的值每次加2取值

    for  b=1 to k by 2 do

    (

    –数组赋值

    n[u]=a*k+b

    u+=1

    )

    )

    else

    (

    –同上

    for  b=2 to k by 2 do

    (

    n[u]=a*k+b

    u+=1

    )

    )

    )

    –定义变量m,把n数组的数据类型转化为bitarray

    m=n as bitarray

    –选择bitarray值的曲面

    $.EditablePoly.SetSelection #Face m

     

  • maxscript09-3dsmax的保留字和标点符号

    maxscript09-3dsmax的保留字和标点符号

    所谓保留字指的是:不能用于命名变量名或标示符的字符串, 否则系统会弹出错误信息.

    完整的保留字表格

    2013102401

    标点和符号
    它们是用来分隔和组合句子的, 或者用于特殊的数学运算

  • maxscript08-标示符

    标示符的概念

    在maxscript里, 变量、参数、函数等都有自己的名字,这些名字称之为标示符

    我之前写写过的类似“mybox”就是标示符

     

    合法的标示符

    标示符内包括字母、数字、和下划线

    不合法的标示符

    以数字开头 比如“3dscg”

    包含空格 3dscg com

    包含问号 3dscg?

    包含其他字符,比如3dscg(com),其中“(com)”不是合法字符

     

    语法中标示符的表示方法(就是标示符的标示符这样理解的)

    <Var name>

    标示符被引用的时候在标示符前加”#”

    #<var name>

     

    单引号的作用

    在单引号内可以引用一些不合法的字符, 比如空格, 括号等

    比如: b.lefttime(left)

    $box01.modifiers[#’ffd 4x4x4′]

  • maxscript07-赋值,属性,操作符,方法,字面变量

    ​赋值的格式

    变量名=变量值

    变量名:以字母或者”下划线”开始, 后面接数量的字符

    变量值: 字符, 数量 ,表达式都可以

    例如mybox=”这是一个盒子”

    另外变量名称是不区分大小写的

     

    类的概念

    3dsmax 中,”类”就是数据类型, 而数据和”对象”属于同一个概念, 那类也称之为对象类型. 比如box就是一个类(box这种对象的类型), 当然也不能认知为”一个具体 的盒子”, 它是”盒子”这种类型物体的总称.

    对于”类”来说, 我们是可以对它定义”属性”和制定”操作方法”的.

    比如定义盒子的大小高度颜色等, 移动缩放盒子则是操作方法

     

    属性: 可获取类的参数 .height .wirecolor等

    操作(也称为方法): 可以调用某一构造的函数 . 比如移动或旋转一个对象, 向一个物体添加修改器等操作

    操作符: 为对象类的数值定义数学的运算的符号 比如 + – * /等等

    字面常量: 所有类的字面形式 [0, 0,0 ]是point3的字面常量, “hello world”就是string的字面常量(笔者注:这个还是不是很理解其含义, 大概意思应该是说point3的位置表现就是用[0,0,0]这样的形式的字符表示的吧)

  • maxscript06-源代码的布局与规划

    maxscript06-源代码的布局与规划

    ​断句的规则

    比如:a+b/c+c/e*g-d/a这条语句

    正确的断句分行是

    a+b/c+

    c/e*g-d/a

    如果写成

    a+b/c

    +c/e*g-d/a

    则会出现错误的提示, 因为第一句已经是一个完整的表达式了,系统会输出正确的结果, 而第二句是错误的表达式

    如果是真的想要第一句是一个完整的表达式句子, 那样可以在第一句 的结束位置加上””(反斜杠), 如下

    a+b/c

    +c/e*g-d/a

    加上反斜杠后系统会继续上一行和延续下一行.

    同一行运行几个表达式

    当需要在同一行放几个表达式的时候, 表达式之间用”:” 隔开. 如

    a+b/c : c/e*g-d/a

     

    注释

    为了增加程序的可读性, 适当添加注释语言是必要的

    注释的规则是

    程序语句  –注释内容

    当程序读取到”–“之后, “–“后面的内容是不被运行的. 例如

    a+b/c  –这是四则运算

  • maxscript的自学笔记05-认识数据类型和运算

    maxscript的自学笔记05-认识数据类型和运算

    在一个max脚本中包含另一个脚本文件的写法

    include “脚本名称的字符串”

    例如:include “abc.ms”

    maxscript的数据类型

    1. 数字 :比如1 2 3, 7.0 8.0
    2. 字符:比如hello ,注意字符必须放在””里面
    3. 数组:数组是一组数据的集合. 定义数组的地方法有几种, 一是”#()” ,表示空的数组. 二是”#(<expr>,<expr>)”, <expr>可以是数字, 字符, 表达式等各种类型的数据.

    在maxscript中执行max的命令

    格式是 max 一级菜单命令 二级菜单命令 [三级菜单命令](三级菜单命令是可选的)

    例如:使用max打开文件命令的写法

    max file open

    再例如: 把物体改变为box显示模式

    max box mode

     maxscript中的数学运算

    与中学所学的法则一样, 例如求一个半径为2.5的球体体积, 则如下方式输入

    V=4/3*pi*2.5^3

    输出的结果是49.0874

    字符串之间也可以运算

    A= “3dscg.com是什么网站?”

    B= “它是一个个人创办的3d软件学习网站.”

    A+B

    上面的语句输出的内容是: “3dscg.com是什么网站?它是一个个人创办的3d软件学习网站.”

    随机函数的运算

    规则:random 数字1 数字2

    输出:数字1和2之间的随机值

    例如:random 50 500

    随机输出的值是221

    递增函数

    这没搞明白,以后再学习了

  • maxscript自学笔记04-使用代码制作简单动画教程

    maxscript自学笔记04-使用代码制作简单动画教程

    创建一段maxscript的动画

    ​animate on –这个是动画的开关

    动画书写格式是

    animate on

    (

    ​动画的代码

    )

    比如

    mybox=box()

    animate on

    (

    at time 0(mybox.pos=[0,0,0];mybox.wirecolor=red)

    at time 100(mybox.pos=[1000,0,0];mybox.scale=[2,2,5];mybox.wirecolor=white)

    )

    这段代码的意思是:

    0祯一个box在0坐标的位置, 颜色是红色(但是这里为什么不是红色原因弄不明白,暂且不管了)

    逐渐到100祯的时候, box向X轴方向移动1000的单位, 体积按2 2 5的比例方法,颜色也变成了白色(我原来的构想是让box从蓝色逐渐过渡到白色的,但是没能实现, 只能等以后精通代码了在说了.)

  • maxscript自学笔记03

    maxscript自学笔记03

    创建一个box

    mybox=box()

    改变box的颜色

    mybox.wirecolor=(color 0 50 0)

    改变box的位置, 位置用逗号隔开

    mybox.pos=[50,0,0]这个位置是物体的绝对位置

    改变物体的大小,中括号括起来,逗号隔开参数

    mybox.scale=[1.5,1.5,1.5]

    移动box, 书写格式 move 变量名 中括号内填写参数,参数逗号隔开

    move mybox [50,0,0]

    缩放对象 书写格式 scale 变量名 中括号内填写参数,参数逗号隔开

    scale mybox [0.5,0.5,0.5]

    旋转对象 书写格式 rot 变量名=eulerangles x,y.z

     

    创建修改器 书写格式 addmodifier 变量名 小括号内(修改器名称 修改器参数名:参数值)

    addmodifier mybox (twist angle:30)

    再次修改修改器的参数 书写格式 变量名.修改器名称.修改器参数名=参数

    mybox.twist.angle=60

     

  • maxscript自学笔记02

    maxscript自学笔记02

    converttopoly $

    [box type=”shadow” ]转化为可编辑多边形 $符号表示当前选中对象[/box]

    polyop.getnumverts $

    [box type=”shadow” ]polyop是poly对象类型后加”.”连接poly类型的属性参数. getnumverts是获取poly点的数量.[/box]

    ds=polyop.getnumverts $

    for i=1 to ds do

    (

    qiuti=copy $sphere01

    qiuti.pos=polyop.getvert $ i

    )

    [box type=”shadow” ]ds是自定义变量,这个变量的储存的数值是getnumverts获取的值. for i to ds do:指的是的让i在”ds”之间做循环运算, do 表示运算. 括弧内是运算的指令. qiuti是自定义变量名称. 赋予变量的指令是copy $sphere01, copy复制物体, 复制的对象是名称为sphere01的物体. qiuti.pos 这句话是变量qiuti的位置. polyop.getvert $ i 这句话意思是: 多边形对象第”i”个位置的点坐标 qiuti.pos=poly.getverts $ i 就是指把获取的点坐标赋予给球体的位置坐标.[/box]

    mian=polyop.getnumfaces $torus01

    [box type=”shadow” ]mian是自定义变量 polyop.getnumfaces $torus01是获取名称为torus01的poly物体的面数量. 并将这个数量赋予mian这个自定义变量 [/box]

    polyop.setfaceselection $torus01 #{(random 1 mian)}

    [box type=”shadow” ]polyop.setfaceselection $torus01 进入名称为torus01这个poly对象的面选择级别 #{(random 1 mian)} 这语句表示选择面的位置id. random 表示随机选择,随机的范围在1和mian这个变量之间[/box]

    mian=polyop.getnumfaces $torus01

    for i=1 to 200 do

    (

    polyop.setfaceselection $torus01 #{(random 1 mian)}

    $torus01.extrudefaces (random 5 20)

    )

    ​[box type=”shadow” ]$torus01.etrudefaces 表示挤出选择的面 [/box]

    下面是随机挤出面的模型渲染图

    模型下载点击这里[button color=”green” size=”medium” link=”http://urlxf.qq.com/?rma2Unn” target=”blank” ]点击下载模型[/button]

    max

  • MaxScript自学笔记01

    MaxScript自学笔记01

    建立一个盒子

    mybox=box()

    mybox是一个变量, box()是系统创建盒子的函数,后面的括号表示默认创建一个默认参数的盒子。如果要创建具有参数的盒子,可以怎么表达:

    mybox=box length:20 width:20 height:20

    注意每一个参数之间一定要用空格隔开,参数的数值用冒号连接。

     

    修改盒子的参数

    修改参数需要知道参数的名称,比如length、width、height、name等等。

    修改参数的表达式:”变量“+”.“+”参数名称“=”新的值“,比如

    mybox.length=100

    再比如:mybox.name=”改变盒子的名字“,改变的数量是中文或其他字符串的时候,一定要用引号括起来。

     

    获取对象的参数:showclass

     

    使用方法,以方块(box)为例showclass “box.*”

    box是系统变量,”.“是连接符, ”*“是通配符,表示任何字符或字符串。

    这样会列出box内所有的参数

    Box : GeometryClass {10,0}.height : float

    .length : float

    .lengthsegs : integer

    .width : float

    .widthsegs : integer

    .mapcoords : boolean

    .heightsegs : integer

    OK

    改变物体参数

     

    表达式 备注
    mybox.wirecolor=bluemybox.wirecolor=color(color 50 255 152) blue是系统内定的颜色值,此外还有其他系统内定的颜色值:white、black、red、orange等等。非系统定义的要用RGB方式表达颜色,数值用空格隔开。
    mybox.pos=[0,50,0] 改变物体的位置,数值用中括号括起来,XYZ三个坐标用逗号间隔开
    mybox.scale=[1.5,1.5,1.5] 改变物体的大小,数值用中括号括起来,XYZ三个坐标用逗号间隔开