Skip to content

Commit 163e223

Browse files
author
RichardFrangenberg
committed
Fusion fix, scenefile drop fix, startup from standalone fix - v1.3.0.78
1 parent c3c3e9d commit 163e223

File tree

10 files changed

+136
-55
lines changed

10 files changed

+136
-55
lines changed

Prism/Plugins/Apps/Fusion/Integration/3 Project Browser.py

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,19 @@
3838
if not prismRoot:
3939
prismRoot = PRISMROOT
4040

41+
sys.path.append(os.path.join(prismRoot, "Scripts"))
42+
43+
if sys.version[0] == "2":
44+
sys.path.append(os.path.join(prismRoot, "PythonLibs", "Python27"))
45+
sys.path.append(os.path.join(prismRoot, "PythonLibs", "Python27", "PySide"))
46+
else:
47+
sys.path.append(os.path.join(prismRoot, "PythonLibs", "Python37"))
48+
sys.path.append(os.path.join(prismRoot, "PythonLibs", "Python37", "PySide"))
49+
4150
# Fix for imageio to work
4251
sys.path.insert(0, os.path.join(prismRoot, "PythonLibs/CrossPlatform"))
4352
import imageio # nopep8
4453

45-
sys.path.append(os.path.join(prismRoot, "Scripts"))
46-
sys.path.append(os.path.join(prismRoot, "PythonLibs", "Python27", "PySide"))
47-
sys.path.append(os.path.join(prismRoot, "PythonLibs", "Python37", "PySide"))
48-
4954
try:
5055
from PySide2.QtCore import *
5156
from PySide2.QtGui import *
@@ -65,16 +70,16 @@
6570

6671
doOpen = True
6772
try:
68-
if scriptlib is True and pcore.getConfig("fusion", "openprism") is False:
69-
doOpen = False
73+
if scriptlib is True and pcore.getConfig("fusion", "openprism") is False:
74+
doOpen = False
7075
except:
71-
pass
76+
pass
7277

7378
if doOpen:
74-
curPrj = pcore.getConfig("globals", "current project")
75-
if curPrj is not None and curPrj != "":
76-
pcore.changeProject(curPrj, openUi="projectBrowser")
77-
else:
78-
pcore.projects.setProject(openUi="projectBrowser")
79+
curPrj = pcore.getConfig("globals", "current project")
80+
if curPrj is not None and curPrj != "":
81+
pcore.changeProject(curPrj, openUi="projectBrowser")
82+
else:
83+
pcore.projects.setProject(openUi="projectBrowser")
7984

80-
qapp.exec_()
85+
qapp.exec_()

Prism/Plugins/Apps/Houdini/Scripts/Prism_Houdini_Functions.py

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,16 @@ def __init__(self, core, plugin):
8181
".otlnc",
8282
".otllc",
8383
]
84+
self.whiteListedExternalFiles = [
85+
{
86+
"nodeType": "topnet",
87+
"parmName": "taskgraphfile",
88+
},
89+
]
8490
self.ropLocation = "/out"
8591
self.filecache = Prism_Houdini_Node_Filecache.Prism_Houdini_Filecache(self.plugin)
8692
self.importFile = Prism_Houdini_Node_ImportFile.Prism_Houdini_ImportFile(self.plugin)
93+
self.nodeTypeAPIs = [self.filecache, self.importFile]
8794
self.callbacks = []
8895
self.registerCallbacks()
8996

@@ -812,7 +819,8 @@ def setNodeParm(self, node, parm, val=None, clear=False, severity="warning"):
812819

813820
if val is not None:
814821
node.parm(parm).set(val)
815-
except:
822+
except Exception as e:
823+
logger.debug(str(e))
816824
if not node.parm(parm):
817825
msg = "parm doesn't exist: \"%s\" on node \"%s\"" % (parm, node.path())
818826
if severity == "warning":
@@ -1106,12 +1114,16 @@ def sm_getExternalFiles(self, origin):
11061114
]:
11071115
continue
11081116

1109-
if (
1110-
x[0] is not None
1111-
and x[0].name() in ["taskgraphfile"]
1112-
and x[0].node().type().name()
1113-
in ["topnet"]
1114-
):
1117+
doContinue = False
1118+
for whiteListed in self.whiteListedExternalFiles:
1119+
if (
1120+
x[0] and x[0].name() == whiteListed["parmName"]
1121+
and x[0].node().type().name() == whiteListed["nodeType"]
1122+
):
1123+
doContinue = True
1124+
break
1125+
1126+
if doContinue:
11151127
continue
11161128

11171129
if (
@@ -1553,10 +1565,10 @@ def onNodeDeleted(self, kwargs):
15531565
return
15541566

15551567
state = self.getStateFromNode(kwargs)
1556-
if kwargs["node"].type().name().startswith(self.importFile.getTypeName()):
1557-
parent = self.importFile.getParentFolder(create=False, node=kwargs["node"])
1558-
elif kwargs["node"].type().name().startswith(self.filecache.getTypeName()):
1559-
parent = self.filecache.getParentFolder(create=False)
1568+
parent = None
1569+
for api in self.nodeTypeAPIs:
1570+
if kwargs["node"].type().name().startswith(api.getTypeName()):
1571+
parent = api.getParentFolder(create=False, node=kwargs["node"])
15601572

15611573
sm = self.core.getStateManager()
15621574
sm.deleteState(state, silent=True)
@@ -1572,16 +1584,14 @@ def onNodeDeleted(self, kwargs):
15721584
def createStateForNode(self, kwargs):
15731585
sm = self.core.getStateManager()
15741586

1575-
if kwargs["node"].type().name().startswith(self.importFile.getTypeName()):
1576-
parent = self.importFile.getParentFolder(node=kwargs["node"])
1577-
if parent:
1578-
parentExpanded = parent.isExpanded()
1579-
state = sm.createState("ImportFile", node=kwargs["node"], setActive=True, openProductsBrowser=False, parent=parent)
1580-
elif kwargs["node"].type().name().startswith(self.filecache.getTypeName()):
1581-
parent = self.filecache.getParentFolder()
1582-
if parent:
1583-
parentExpanded = parent.isExpanded()
1584-
state = sm.createState("Export", node=kwargs["node"], setActive=True, parent=parent)
1587+
for api in self.nodeTypeAPIs:
1588+
if kwargs["node"].type().name().startswith(api.getTypeName()):
1589+
parent = api.getParentFolder(create=False, node=kwargs["node"])
1590+
if parent:
1591+
parentExpanded = parent.isExpanded()
1592+
1593+
openBrowser = False if api.listType == "Import" else None
1594+
state = sm.createState(api.stateType, node=kwargs["node"], setActive=True, openProductsBrowser=openBrowser, parent=parent)
15851595

15861596
if parent:
15871597
parent.setExpanded(parentExpanded)

Prism/Plugins/Apps/Houdini/Scripts/Prism_Houdini_Node_Filecache.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ def __init__(self, plugin):
5555
self.initState = None
5656
self.executeBackground = False
5757
self.nodeExecuted = False
58+
self.stateType = "Export"
59+
self.listType = "Export"
5860

5961
@err_catcher(name=__name__)
6062
def getTypeName(self):
@@ -305,7 +307,7 @@ def updateLatestVersion(self, node):
305307
node.parm("readVersion").set(latestVersion)
306308

307309
@err_catcher(name=__name__)
308-
def getParentFolder(self, create=True):
310+
def getParentFolder(self, create=True, node=None):
309311
sm = self.core.getStateManager()
310312
for state in sm.states:
311313
if state.ui.listType != "Export" or state.ui.className != "Folder":

Prism/Plugins/Apps/Houdini/Scripts/Prism_Houdini_Node_ImportFile.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ class Prism_Houdini_ImportFile(object):
5353
def __init__(self, plugin):
5454
self.plugin = plugin
5555
self.core = self.plugin.core
56+
self.stateType = "ImportFile"
57+
self.listType = "Import"
5658

5759
@err_catcher(name=__name__)
5860
def getTypeName(self):

Prism/Plugins/Apps/Houdini/Scripts/StateManagerNodes/hou_ImageRender.py

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,7 @@ def setup(
176176
fileName = self.core.getCurrentFileName()
177177
fnameData = self.core.getScenefileData(fileName)
178178
if fnameData.get("category"):
179-
self.l_taskName.setText(fnameData.get("category"))
180-
self.b_changeTask.setStyleSheet("")
179+
self.setTaskname(fnameData.get("category"))
181180

182181
self.updateUi()
183182

@@ -204,9 +203,7 @@ def loadData(self, data):
204203
if "statename" in data:
205204
self.e_name.setText(data["statename"])
206205
if "taskname" in data:
207-
self.l_taskName.setText(data["taskname"])
208-
if data["taskname"] != "":
209-
self.b_changeTask.setStyleSheet("")
206+
self.setTaskname(data["taskname"])
210207
if "renderpresetoverride" in data:
211208
res = eval(data["renderpresetoverride"])
212209
self.chb_renderPreset.setChecked(res)
@@ -579,13 +576,57 @@ def changeTask(self):
579576
result = self.nameWin.exec_()
580577

581578
if result == 1:
582-
self.l_taskName.setText(self.nameWin.e_item.text())
579+
self.setTaskname(self.nameWin.e_item.text())
583580
self.nameChanged(self.e_name.text())
584581

585582
self.b_changeTask.setStyleSheet("")
586583

587584
self.stateManager.saveStatesToScene()
588585

586+
@err_catcher(name=__name__)
587+
def setTaskname(self, taskname):
588+
self.l_taskName.setText(taskname)
589+
self.nameChanged(self.e_name.text())
590+
if taskname:
591+
self.b_changeTask.setStyleSheet("")
592+
else:
593+
self.b_changeTask.setStyleSheet(
594+
"QPushButton { background-color: rgb(150,0,0); border: none;}"
595+
)
596+
self.stateManager.saveStatesToScene()
597+
598+
@err_catcher(name=__name__)
599+
def getTaskname(self):
600+
taskName = self.l_taskName.text()
601+
return taskName
602+
603+
@err_catcher(name=__name__)
604+
def getRangeType(self):
605+
return self.cb_rangeType.currentText()
606+
607+
@err_catcher(name=__name__)
608+
def setRangeType(self, rangeType):
609+
idx = self.cb_rangeType.findText(rangeType)
610+
if idx != -1:
611+
self.cb_rangeType.setCurrentIndex(idx)
612+
self.updateRange()
613+
return True
614+
615+
return False
616+
617+
@err_catcher(name=__name__)
618+
def getLocation(self):
619+
return self.cb_outPath.currentText()
620+
621+
@err_catcher(name=__name__)
622+
def setLocation(self, location):
623+
idx = self.cb_outPath.findText(location)
624+
if idx != -1:
625+
self.cb_outPath.setCurrentIndex(idx)
626+
return True
627+
628+
return False
629+
589630
@err_catcher(name=__name__)
590631
def presetOverrideChanged(self, checked):
591632
self.cb_renderPreset.setEnabled(checked)
@@ -642,7 +683,6 @@ def setCamResolution(self):
642683
self.core.popup(msg, title=title)
643684
return
644685

645-
646686
self.sp_resWidth.setValue(self.curCam.parm("resx").eval())
647687
self.sp_resHeight.setValue(self.curCam.parm("resy").eval())
648688

@@ -1183,16 +1223,22 @@ def executeState(self, parent, useVersion="next"):
11831223

11841224
try:
11851225
for frameChunk in frameChunks:
1186-
if not self.core.appPlugin.setNodeParm(self.node, "f1", clear=True):
1187-
return [self.state.text(0) + ": error - Publish canceled"]
1188-
if not self.core.appPlugin.setNodeParm(self.node, "f2", clear=True):
1189-
return [self.state.text(0) + ": error - Publish canceled"]
1226+
isStart = self.node.parm("f1").eval() == frameChunk[0]
1227+
isEnd = self.node.parm("f2").eval() == frameChunk[1]
11901228

1191-
if not self.core.appPlugin.setNodeParm(self.node, "f1", val=frameChunk[0]):
1192-
return [self.state.text(0) + ": error - Publish canceled"]
1229+
if not isStart:
1230+
if not self.core.appPlugin.setNodeParm(self.node, "f1", clear=True):
1231+
return [self.state.text(0) + ": error - Publish canceled"]
11931232

1194-
if not self.core.appPlugin.setNodeParm(self.node, "f2", val=frameChunk[1]):
1195-
return [self.state.text(0) + ": error - Publish canceled"]
1233+
if not self.core.appPlugin.setNodeParm(self.node, "f1", val=frameChunk[0]):
1234+
return [self.state.text(0) + ": error - Publish canceled"]
1235+
1236+
if not isEnd:
1237+
if not self.core.appPlugin.setNodeParm(self.node, "f2", clear=True):
1238+
return [self.state.text(0) + ": error - Publish canceled"]
1239+
1240+
if not self.core.appPlugin.setNodeParm(self.node, "f2", val=frameChunk[1]):
1241+
return [self.state.text(0) + ": error - Publish canceled"]
11961242

11971243
result = self.curRenderer.executeRender(self)
11981244
if not result:

Prism/Scripts/PrismCore.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ def __init__(self, app="Standalone", prismArgs=[]):
183183

184184
try:
185185
# set some general variables
186-
self.version = "v1.3.0.77"
186+
self.version = "v1.3.0.78"
187187
self.requiredLibraries = "v1.3.0.0"
188188
self.core = self
189189

Prism/Scripts/PrismUtils/Decorators.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,16 @@ def func_wrapper(*args, **kwargs):
5858
except Exception as e:
5959
exc_type, exc_obj, exc_tb = sys.exc_info()
6060

61+
if hasattr(args[0], "core"):
62+
core = args[0].core
63+
else:
64+
core = None
65+
logger.warning("class has no core")
66+
6167
versionStr = ""
62-
versionStr += "\nCore: %s" % args[0].core.version
63-
if getattr(args[0].core, "appPlugin", None):
68+
if core:
69+
versionStr += "\nCore: %s" % core.version
70+
if core and getattr(args[0].core, "appPlugin", None):
6471
versionStr += "\nApp plugin: %s %s" % (args[0].core.appPlugin.pluginName, args[0].core.appPlugin.version)
6572
if plugin:
6673
versionStr += "\nPlugin: %s %s" % (args[0].plugin.pluginName, args[0].plugin.version)
@@ -73,6 +80,9 @@ def func_wrapper(*args, **kwargs):
7380
traceback.format_exc(),
7481
)
7582

83+
if not core:
84+
raise Exception(erStr)
85+
7686
ltime = getattr(args[0].core, "lastErrorTime", 0)
7787
if (time.time() - ltime) > 1:
7888
isGuiThread = QApplication.instance().thread() == QThread.currentThread()

Prism/Scripts/PrismUtils/PathManager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ def getFrameFromFilename(self, filename):
634634

635635
@err_catcher(name=__name__)
636636
def getLocationFromPath(self, path):
637-
if path.startswith(self.core.projectPath):
637+
if path.startswith(getattr(self.core, "projectPath", "")):
638638
return "global"
639639
elif self.core.useLocalFiles and path.startswith(self.core.localProjectPath):
640640
return "local"

Prism/Scripts/ProjectScripts/ProjectBrowser.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4811,7 +4811,8 @@ def ingestScenefiles(self, entityType, files):
48114811
for file in files:
48124812
kwargs["extension"] = os.path.splitext(file)[1]
48134813
targetPath = self.core.paths.generateScenePath(**kwargs)
4814-
targetPath = self.core.convertPath(targetPath, target="local")
4814+
if self.core.useLocalFiles:
4815+
targetPath = self.core.convertPath(targetPath, target="local")
48154816

48164817
if not os.path.exists(os.path.dirname(targetPath)):
48174818
try:

changelog.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
v1.3.0.78:
2+
- fixed an error dropping files in the scenefiles list in the Project Browser in some cases
3+
- fixed an error when opening Blender scenes from the standalone Project Browser
4+
- fixed an error that the Project Browser in Fusion didn't open in some cases
5+
16
v1.3.0.77:
27
- updated Fusion integration including location option on WritePrism node and option to "Solo" a write node (Thanks to EmberLightVFX)
38
- fixed a bug that the local project path dialog could open in some cases when Prism was executed in commandline mode (like on Deadline)

0 commit comments

Comments
 (0)