Maxscript入门教程:Print与Format命令

2023-12-13 05:19:15

本文对Maxscript中的“Print”和“Format”命令之间的差异进行了一些小小的研究,得出的结论主要的差异是它们的结果中的引号“”。

“Print”很简单,直接使用,在调试时非常有用。为了工作,它只需要一个字符串(这是两个引号“”之间的一个正常句子)或变量,例如:

print "I love maxscript"
"I love maxscript"
Print $.pos -- this will print the position of the selected object
[10,10,0]

如果你想在$.pos和string等值之间混合,你必须在值后面使用(as string)命令将位置转换为字符串,如下所示:

print ("objPos="+ $.pos as string)
Result:
"objPos=[10,10,0]"

如果您想打印一个对话框,其中每行都包含一个句子,那么我们必须在每行后面添加(\n):

print?"How are you today?\n I'm fine, thanx\n"
Result:
"How are you today?
?I'm fine, thanx
"

到目前为止,一切都很好,但print命令有一些局限性,例如,当你想写入外部文件(*.ms或*.txt)时,你会遇到这种情况(我将在教程的最后提供一个关于写入外部文件的完整示例,现在只关注print命令)。假设你想向ms文件写入以下代码:

print ("mergemaxfile @\""?+ @"D:\temp\test.max" +?"\"")
the result would be:
"mergemaxfile @"D:\temp\test.max ""

这是无用的,你不能执行这一行,因为它是一个字符串

我们要这行,但不要引号“”。

或者在另一种情况下,您希望将对象数据(如名称、位置和旋转)导出到txt文件:

objName = $.name as string
objPos = $.pos as string
objRot = $.rotation as string
print ("name:" + objName + " pos:" + objPos + " rot:" + objRot )
Result:
"name:Point01 pos:[5,5,5] rot:(quat 0 0 0 1)"

再次引用。

那么如何摆脱它们呢。这很简单,只需使用“格式”命令即可。我们可以将它与一个简单的字符串一起使用:

format?"How are you today?\n I'm fine, thanx\n"
Result:
How are you today?
?I'm fine, thanx

与打印命令的结果相同,但没有引号。

如果我们想打印像$.pos这样的值,或者让它有点复杂,并引入字符串和值的混合,那么我们必须使用一种叫做字符串格式参数的东西。不要被这个名称吓倒,它是我们要打印的值之前的一个小字符串,可以使Format命令正常工作。

检查以下内容:

format?"%"?( $.pos)?-- Just make sure only one object selected in the scene
[10,10,0]
format?"object position= %"?( $.pos)
object position=[10,10,0]
format?"name:% pos:% rot:%"?$.name $.pos $.rotation
name:Box001 pos:[10,10,0] rot:(quat 0 0 0 1)

简单地说,它打印第一个块(字符串),同时用下一个块中的变量或值替换每个%符号。它这样做的顺序是,第一个%将被$.name(在第三个代码中)取代,如图所示:

如果您希望每个结果都在一条单独的线上,那么在每个类似的后面使用:

format?"name:%\n pos:%\n rot:%\n "?$.name $.pos $.rotation
Result:
name:Box001
?pos:[10,10 ,0]
?rot:(quat 0 0 0 1)

还有一件事,假设您希望结果带有引号“”,让我们在上面的例子中将其添加到对象的名称中。我们可以通过在名称前后添加“”来实现这一点,因为名称由%表示,所以它将是“%”:

format?"name:\"%\"\n pos:%\n rot:%\n "?$.name $.pos $.rotation
Result:
name:"Box001"
?pos:[10,10 ,0]
?rot:(quat 0 0 0 1)

最后,让我们使用maxscript创建一个ms文件,并使用Print和Format在其中写入,看看区别:

-- Print example first make sure the directory exist before proceeding
Printfile=@"D:\temp\Print.ms"?-- the file we are creating print.ms
Outfile =?createfile?Printfile?-- createfile command will create the file for us
print ("Box()") to:Outfile?-- write to the file using print method
close Outfile?-- you have to close it before continuing or else you won't be able to edit it later
Result:
now open the created file and you will find a string inside it:
"Box()"
-- Format example just replace print by?format "%"
Formatfile=@"D:\temp\Format.ms"?
Outfile =?createfile?Formatfile
format?"%"?("Box()") to:Outfile?
close Outfile

Result:
now open the created file and you will find a command that will create a box
Box()

to take it one step further you can test it using:
filein Formatfile?-- this will open the script and run it and you should see a box

感谢大家的耐心阅读,下期再见!

文章来源:https://blog.csdn.net/mufenglaoshi/article/details/134952384
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。