So I found a way to do what I wanted:
I simply saved a scene containing everything I wanted as a Maya ASCII file, then opened it, then removed all the useless MEL commands and translated the remaining in python.
In the end I just recreate all the nodes, set their attributes and connect them to each other
This is what I got:
def initOcean(pSizeSea, pNbSubDiv, pWaveHeight, pWindSpeed, pWindDir, pWindFetchDist, pResX, pResZ):
cmds.requires( "Boss", "1.0", nodeType= ["BossBlender", "BossSpectralWave"] ) #MEL command. Useless ?
cmds.createNode( 'transform', n='pPlane1') # "n=" useless ?
cmds.setAttr('pPlane1.v', False)
cmds.createNode('mesh', n='pPlaneShape1', p='pPlane1')
cmds.setAttr( "pPlaneShape1.v", k=False)
cmds.setAttr( "pPlaneShape1.vir", True)
cmds.setAttr( "pPlaneShape1.vif", True)
cmds.setAttr( "pPlaneShape1.uvst[0].uvsn", "map1", type="string")
cmds.setAttr( "pPlaneShape1.cuvs", "map1", type="string")
cmds.setAttr( "pPlaneShape1.dcc", "Ambient+Diffuse", type="string")
cmds.setAttr( "pPlaneShape1.covm[0]", 0, 1, 1)
cmds.setAttr( "pPlaneShape1.cdvm[0]", 0, 1, 1)
cmds.createNode('transform', n="BossOutput")
bossNode = cmds.createNode('mesh', n="BossOutputShape", p="BossOutput")
cmds.setAttr("BossOutputShape.v", k=False)
cmds.setAttr("BossOutputShape.vir", True )
cmds.setAttr("BossOutputShape.vif", True)
cmds.setAttr("BossOutputShape.uvst[0].uvsn", "map1", type="string")
cmds.setAttr("BossOutputShape.cuvs", "map1", type="string")
cmds.setAttr("BossOutputShape.dcc", "Ambient+Diffuse", type="string")
cmds.setAttr("BossOutputShape.covm[0]", 0, 1, 1)
cmds.setAttr("BossOutputShape.cdvm[0]", 0, 1, 1)
cmds.createNode('polyPlane', n="polyPlane1")
cmds.setAttr("polyPlane1.w", pSizeSea)
cmds.setAttr("polyPlane1.h", pSizeSea)
cmds.setAttr("polyPlane1.sw", pNbSubDiv)
cmds.setAttr("polyPlane1.sh", pNbSubDiv)
cmds.setAttr("polyPlane1.cuv", 2)
#It is possible to add more wave layers
BossSpectralWave = cmds.createNode('BossSpectralWave', n="BossSpectralWave" )
cmds.setAttr(BossSpectralWave + ".startFrame", 1 )
cmds.setAttr(BossSpectralWave + ".waveHeight", pWaveHeight )
cmds.setAttr(BossSpectralWave + ".windSpeed", pWindSpeed )
cmds.setAttr(BossSpectralWave + ".windDirection", pWindDir )
cmds.setAttr(BossSpectralWave + ".windFetch", pWindFetchDist )
cmds.setAttr(BossSpectralWave + ".resolutionX", pResX )
cmds.setAttr(BossSpectralWave + ".resolutionZ", pResZ )
cmds.setAttr(BossSpectralWave + ".patchSizeX", pSizeSea ) #We put patch size = SizeSea to avoid useless computing
cmds.setAttr(BossSpectralWave + ".patchSizeZ", pSizeSea )
#cmds.setAttr("BossSpectralWave1.freqSpectra", 6)
#cmds.setAttr("BossSpectralWave1.dirSpectra", 2)
cmds.createNode('BossBlender', n="BossBlender1")
cmds.select(":initialShadingGroup", ne=True)
cmds.setAttr(":initialShadingGroup.dsm", s=2 )
cmds.setAttr(":initialShadingGroup.ro", True)
# Connecting attributes
cmds.connectAttr("polyPlane1.out", "pPlaneShape1.i")
cmds.connectAttr("BossBlender1.outMesh", "BossOutputShape.i")
cmds.connectAttr("pPlaneShape1.pm", BossSpectralWave + ".parentMatrix")
cmds.connectAttr("pPlaneShape1.bb", BossSpectralWave + ".boundingBox")
cmds.connectAttr(":time1.o", BossSpectralWave + ".time")
cmds.connectAttr("pPlaneShape1.w", "BossBlender1.inMesh")
cmds.connectAttr(":time1.o", "BossBlender1.time")
cmds.connectAttr(BossSpectralWave + ".blender", "BossBlender1.solvers", na=True)
cmds.connectAttr(BossSpectralWave + ".outWave", "BossBlender1.inwave", na=True)
cmds.connectAttr("pPlaneShape1.iog", ":initialShadingGroup.dsm", na=True)
cmds.connectAttr("BossOutputShape.iog", ":initialShadingGroup.dsm", na=True)
return(bossNode)
There was a function that did all this in the maya/bifrost files but it was too much trouble to make it work.