[Closed] Exporting objects position to text file
Hello.
I’ve been trying to write a simple script that will print (to a text file or at least listener) positions (world coordinates) of selected object. So far i have not succeded (not even close). Can anybody help with that or at least point in a right direction.
Thanks in advance for help
Best Regards
Andrew Skibinski
Try this:
—–code—–
outputFile = createFile “output.txt”
for obj in $ do
(
print obj.pos to:outputFile
)
close outputFile
—–/code—–
[left]God the code tag sucks. I can’t figure out how to make text a consistent size (see, look doesn’t my edit look nice?)…anyway that will create “output.txt” in your max root. If you wanted to, for example, format it like:[/left]
[left]objectName,objectPosition[/left]
[left]you would modify the loop content like this: [/left]
[left]print (obj.name + “,” + obj.pos) to:outputFile[/left]
Thanks for the code, I just knew it must be really simple
I came up with something like this:
——CODE——
outputFile = createFile “c:\output.txt”
for obj in $ do
(
posx = (obj.pos.x as string)
posy = (obj.pos.y as string)
posz = (obj.pos.z as string)
string = obj.name + ” : X:” + posx + ” Y:” + posy + ” Z:” + posz
print string to:outputFile
)
close outputFile
——CODE——
It makes the whole file more clear and readable (also makes it easier to copy&paste position values).
However it adds ” at the beggining and at the end of the each line, like this:
“SmallGun_Base_7 : X:78.6413 Y:-450.398 Z:-113.457”
“SmallGun_Muzzle_7 : X:78.6413 Y:-450.398 Z:-113.457”
Is it possible to get rid of those ” ” ?
ok figured out you should be using “format” instead of just “print” like:
for obj in $ do
(
format “% : X:% Y:% Z:%
” obj.name obj.pos.x obj.pos.y obj.pos.z to:outputFile
)
the “%” formats the arguments following the input string. each consecutive use of “%” uses each consecutive argument respectively, and the “
” is an escape character that acts like a carriage return…oh god i just used the term carriage return (from the days of typewriters)…it’s a new line fyi
Hi,
It occured to me that maybe you should be making a CSV file, so maybe later you could write a file to import these values back into Max.
obj=selection as array
for o in obj do format "
%,%,%,%" o.name o.pos.x o.pos.y o.pos.z to:outputfile
Also, notice how I careate an array with the current selection. It’s bad practice to use $ inside a script since it may change during script operation.
Look at www.scriptspot.com for import / export scripts, I’m sure thing kind of thing has been done before.
J.
Here’s a basic one.
Export:
rollout ExportKeys "Export Keyframes"
(
Button SetOutFile "Set output Filename" align:#right width:150
Button ExportAnim "Export Animation" align:#right width:150
on setoutfile pressed do
(
Global OutFile = getSaveFileName caption:"Choose the output filename" filename:"h:\\Databases\\"
SetOutFile.text = OutFile
)
Fn WriteAnimData Keyarray destfile =
(
for k = 1 to Keyarray.count do
(
Format "%," Keyarray[k].time to:DestFile
Format "%," Keyarray[k].value to:DestFile
Format "%," Keyarray[k].intangenttype to:DestFile
Format "%," Keyarray[k].intangent to:DestFile
Format "%," Keyarray[k].outTangentType to:DestFile
Format "%," Keyarray[k].outTangent to:DestFile
Format "%," Keyarray[k].inTangentLength to:DestFile
Format "%," Keyarray[k].outTangentLength to:DestFile
)
)
on ExportAnim pressed do
(
MyOutFile = OutFile
AnimFile = CreateFile MyOutFile
MyObjects = Selection as array
format "%
" MyObjects.count to:AnimFile
for i = 1 to myObjects.count do
(
XposKeys = MyObjects[i].position.x_position.controller.keys
YPosKeys = MyObjects[i].position.y_position.controller.keys
ZPosKeys = MyObjects[i].position.Z_position.controller.keys
XrotKeys = MyObjects[i].rotation.x_rotation.controller.keys
YrotKeys = MyObjects[i].rotation.y_rotation.controller.keys
ZrotKeys = MyObjects[i].rotation.z_rotation.controller.keys
-- Object Name
format "%
" MyObjects[i].name to:AnimFile
-- Key Counts
format "%
" XposKeys.count to:AnimFile
format "%
" YposKeys.count to:AnimFile
format "%
" ZposKeys.count to:AnimFile
format "%
" XrotKeys.count to:AnimFile
format "%
" YrotKeys.count to:AnimFile
format "%
" ZrotKeys.count to:AnimFile
-- Output keys
WriteAnimData XposKeys AnimFile
WriteAnimData YposKeys AnimFile
WriteAnimData ZposKeys AnimFile
WriteAnimData XrotKeys AnimFile
WriteAnimData YrotKeys AnimFile
WriteAnimData ZrotKeys AnimFile
Format "
" "" to:AnimFile
)
Close AnimFile
)
)
CreateDialog ExportKeys width:250
And the corrosponding import:
Rollout ImportExportKeys "Import / Export Keyframes"
(
Group "Import Animation"
(
Button importAnim "Import Animation" align:#right width:150
)
Group "Export Animation"
(
Button SetOutFile "Set output Filename" align:#right width:150
Button ExportAnim "Export Animation" align:#right width:150
)
Fn ReadAnimData TargetKeys KeyCount sourcefile =
(
for k = 1 to KeyCount do
(
TempKeyTime = readValue sourcefile
addNewKey TargetKeys TempKeyTime
TempKeyValue = readValue sourcefile
TargetKeys[k].value = TempKeyValue
TempInType = readValue sourcefile
TargetKeys[k].intangenttype = TempInType
TempIn = readValue sourcefile
TargetKeys[k].intangent = TempIn
TempOutType = readValue sourcefile
TargetKeys[k].Outtangenttype = TempoutType
TempOut = readValue sourcefile
TargetKeys[k].Outtangent = Tempout
TempInLength = readValue sourcefile
TargetKeys[k].inTangentLength = TempInLength
TempOutLength = readValue sourcefile
TargetKeys[k].OutTangentLength = TempOutLength
)
)
Fn WriteAnimData Keyarray destfile =
(
for k = 1 to Keyarray.count do
(
Format "%," Keyarray[k].time to:DestFile
Format "%," Keyarray[k].value to:DestFile
Format "%," Keyarray[k].intangenttype to:DestFile
Format "%," Keyarray[k].intangent to:DestFile
Format "%," Keyarray[k].outTangentType to:DestFile
Format "%," Keyarray[k].outTangent to:DestFile
Format "%," Keyarray[k].inTangentLength to:DestFile
Format "%," Keyarray[k].outTangentLength to:DestFile
)
)
on importanim pressed do
(
Global MyInFile = getOpenFileName caption:"Choose an animation file:" filename:"H://Databases//"
MyFile = OpenFile MyInFile
ObjCount = readline MyFile as integer
For i = 1 to objcount do
(
SourceObj = readline MyFile as string
TargetObj = execute ("$" + SourceObj)
TargetXCont = TargetObj.position.x_position.controller.keys
TargetYCont = TargetObj.position.y_position.controller.keys
TargetZCont = TargetObj.position.z_position.controller.keys
TargetXRotCont = TargetObj.rotation.x_rotation.controller.keys
TargetyRotCont = TargetObj.rotation.y_rotation.controller.keys
TargetzRotCont = TargetObj.rotation.z_rotation.controller.keys
XKeyCount = readline MyFile as integer
YKeyCount = readline MyFile as integer
ZKeyCount = readline MyFile as integer
XRotKeyCount = readline MyFile as integer
YRotKeyCount = readline MyFile as integer
ZRotKeyCount = readline MyFile as integer
ReadAnimData TargetXCont XKeyCount MyFile
ReadAnimData TargetYCont YKeyCount MyFile
ReadAnimData TargetZCont ZKeyCount MyFile
ReadAnimData TargetXRotCont XRotKeyCount MyFile
ReadAnimData TargetYRotCont YRotKeyCount MyFile
ReadAnimData TargetZRotCont ZRotKeyCount MyFile
)
)
on setoutfile pressed do
(
Global OutFile = getSaveFileName caption:"Choose the output filename" filename:"h:\\Databases\\"
SetOutFile.text = OutFile
)
on ExportAnim pressed do
(
MyOutFile = OutFile
AnimFile = CreateFile MyOutFile
MyObjects = Selection as array
format "%
" MyObjects.count to:AnimFile
for i = 1 to myObjects.count do
(
XposKeys = MyObjects[i].position.x_position.controller.keys
YPosKeys = MyObjects[i].position.y_position.controller.keys
ZPosKeys = MyObjects[i].position.Z_position.controller.keys
XrotKeys = MyObjects[i].rotation.x_rotation.controller.keys
YrotKeys = MyObjects[i].rotation.y_rotation.controller.keys
ZrotKeys = MyObjects[i].rotation.z_rotation.controller.keys
-- Object Name
format "%
" MyObjects[i].name to:AnimFile
-- Key Counts
format "%
" XposKeys.count to:AnimFile
format "%
" YposKeys.count to:AnimFile
format "%
" ZposKeys.count to:AnimFile
format "%
" XrotKeys.count to:AnimFile
format "%
" YrotKeys.count to:AnimFile
format "%
" ZrotKeys.count to:AnimFile
-- Output keys
WriteAnimData XposKeys AnimFile
WriteAnimData YposKeys AnimFile
WriteAnimData ZposKeys AnimFile
WriteAnimData XrotKeys AnimFile
WriteAnimData YrotKeys AnimFile
WriteAnimData ZrotKeys AnimFile
Format "
" "" to:AnimFile
)
Close AnimFile
)
)
CreateDialog ImportExportKeys Width:250
It’s only working on simple things right now – no list controllers etc but it might be of help.