Skip to content

Commit db62f2b

Browse files
authored
Merge pull request #2674 from alicevision/dev/mayaExport
Add maya scene export
2 parents 4b1226e + f9af052 commit db62f2b

File tree

1 file changed

+60
-6
lines changed

1 file changed

+60
-6
lines changed

meshroom/nodes/aliceVision/ExportMaya.py

Lines changed: 60 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ class ExportMaya(desc.Node):
3636
description="Undistorted images template.",
3737
value="",
3838
),
39+
desc.BoolParam(
40+
name="generateMaya",
41+
label="generate Maya scene",
42+
description="Do we generate the scene or only export a mel script.",
43+
value=True,
44+
),
3945
desc.ChoiceParam(
4046
name="verboseLevel",
4147
label="Verbose Level",
@@ -47,17 +53,26 @@ class ExportMaya(desc.Node):
4753

4854
outputs = [
4955
desc.File(
50-
name="output",
56+
name="meloutput",
5157
label="Mel script",
5258
description="Generated mel script",
5359
value=desc.Node.internalFolder + "import.mel",
5460
),
61+
desc.File(
62+
name="mayaoutput",
63+
label="Maya scene",
64+
description="Generated Maya scene",
65+
value=desc.Node.internalFolder + "scene.mb",
66+
enabled=lambda node: node.generateMaya.value,
67+
),
5568
]
5669

5770
def processChunk(self, chunk):
5871

5972
import pyalicevision
6073
import pathlib
74+
import inspect
75+
import subprocess
6176

6277
chunk.logManager.start(chunk.node.verboseLevel.value)
6378

@@ -120,6 +135,16 @@ def processChunk(self, chunk):
120135

121136

122137
#Generate the script itself
138+
mayaFileName = chunk.node.mayaoutput.value
139+
header = f'''
140+
file -f -new;
141+
'''
142+
143+
footer = f'''
144+
file -rename "{mayaFileName}";
145+
file -type "mayaBinary";
146+
file -save;
147+
'''
123148

124149
alembic = chunk.node.alembic.value
125150
abcString = f'AbcImport -mode open -fitTimeRange "{alembic}";'
@@ -160,10 +185,39 @@ def processChunk(self, chunk):
160185
setAttr "imagePlaneShape1.sizeY" $scaledvaperture;
161186
'''
162187

163-
with open(chunk.node.output.value, "w") as f:
164-
f.write(abcString + '\n')
165-
f.write(objString + '\n')
166-
f.write(camString + '\n')
167-
f.write(advCamString + '\n')
188+
with open(chunk.node.meloutput.value, "w") as f:
189+
if chunk.node.generateMaya.value:
190+
f.write(inspect.cleandoc(header) + '\n')
191+
f.write(inspect.cleandoc(abcString) + '\n')
192+
f.write(inspect.cleandoc(objString) + '\n')
193+
f.write(inspect.cleandoc(camString) + '\n')
194+
f.write(inspect.cleandoc(advCamString) + '\n')
195+
if chunk.node.generateMaya.value:
196+
f.write(inspect.cleandoc(footer) + '\n')
197+
198+
chunk.logger.info("Mel Script generated")
199+
200+
#Export to maya
201+
if chunk.node.generateMaya.value:
202+
try:
203+
melPath = chunk.node.meloutput.value
204+
cmd = f'maya_batch -batch -script "{melPath}"'
205+
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
206+
stdout, stderr = p.communicate()
207+
208+
if len(stdout) > 0:
209+
chunk.logger.info(stdout.decode())
210+
211+
rc = p.returncode
212+
if rc != 0:
213+
chunk.logger.error(stderr.decode())
214+
raise Exception(rc)
215+
216+
except Exception as e:
217+
chunk.logger.error('Failed to run maya batch : "{}".'.format(str(e)))
218+
raise RuntimeError()
219+
220+
chunk.logger.info("Maya Scene generated")
221+
168222

169223
chunk.logManager.end()

0 commit comments

Comments
 (0)