@@ -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