本文对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
感谢大家的耐心阅读,下期再见!