Web: misc fixes to sketchfab exporter

This commit is contained in:
Yorik van Havre
2017-03-13 19:37:17 -03:00
parent f109859e17
commit b3a440ca62
2 changed files with 38 additions and 10 deletions

View File

@@ -165,7 +165,7 @@
</item>
<item>
<property name="text">
<string>IV (buggy)</string>
<string>IV</string>
</property>
</item>
</widget>

View File

@@ -26,7 +26,7 @@ __title__ = "Sketchfab uploader"
__author__ = "Yorik van Havre"
__url__ = "http://www.freecadweb.org"
import FreeCAD, FreeCADGui, WebGui, os, zipfile, requests, tempfile, json, time
import FreeCAD, FreeCADGui, WebGui, os, zipfile, requests, tempfile, json, time, re
from PySide import QtCore, QtGui
# \cond
@@ -123,9 +123,22 @@ class SketchfabTaskPanel:
import Part
Part.export(objects,filename+".iges")
return self.packFiles(filename,[filename+".iges"])
elif filetype == 5: # STL
elif filetype == 5: # IV
import FreeCADGui
FreeCADGui.export(objects,filename+".iv")
# removing FreeCAD-specific nodes
f = open(filename+".iv","rb")
s = f.read()
f.close()
s = s.replace("SoBrepEdgeSet","SoIndexedLineSet")
s = s.replace("SoBrepFaceSet","SoIndexedFaceSet")
s = s.replace("\n","--endl--")
s = re.sub("highlightIndex .*?\]"," ",s)
s = re.sub("partIndex .*?\]"," ",s)
s = s.replace("--endl--","\n")
f = open(filename+".iv","wb")
f.write(s)
f.close()
return self.packFiles(filename,[filename+".iv"])
def packFiles(self,filename,fileslist):
@@ -159,11 +172,21 @@ class SketchfabTaskPanel:
if not pack:
QtGui.QMessageBox.critical(None,translate("Web","File packing error"),translate("Unable to save and zip a file for upload"))
return
if os.path.getsize(pack[0]) >= 52428800:
b = QtGui.QMessageBox()
b.setText(translate("Web","Big upload"))
b.setInformativeText(translate("Web","The file to be uploaded is %s, which is above the maximum 50Mb allowed by free Sketchfab accounts. Pro accounts allow for up to 200Mb. Continue?") % pack[1])
b.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)
b.setDefaultButton(QtGui.QMessageBox.Cancel)
ret = b.exec_()
if ret != QtGui.QMessageBox.Ok:
return
data = {
"name": self.form.Text_Name.text(),
"description": self.form.Text_Description.text(),
"tags": ["freecad"]+[t.strip() for t in self.form.Text_Tags.text().split(",")],
"private": self.form.Check_Private.isChecked(),
"source":"freecad",
}
files = {
"modelFile": open(pack[0], 'rb')
@@ -172,24 +195,26 @@ class SketchfabTaskPanel:
# for now this is a fake progress bar, it won't move, just to show the user that the upload is in progress
self.form.ProgressBar.setFormat(translate("Web","Uploading")+" "+pack[1]+"...")
self.form.ProgressBar.show()
QtGui.qApp.processEvents()
try:
r = requests.post(SKETCHFAB_UPLOAD_URL, **self.get_request_payload(self.form.Text_Token.text(), data, files=files))
except requests.exceptions.RequestException as e:
QtGui.QMessageBox.critical(None,translate("Web","Upload error"),translate("Upload failed:")+" "+str(e))
QtGui.QMessageBox.critical(None,translate("Web","Upload error"),translate("Web","Upload failed:")+" "+str(e))
self.form.ProgressBar.hide()
self.form.Button_Upload.show()
return
if r.status_code != requests.codes.created:
QtGui.QMessageBox.critical(None,translate("Web","Upload error"),translate("Upload failed:")+" "+r.json())
QtGui.QMessageBox.critical(None,translate("Web","Upload error"),translate("Web","Upload failed:")+" "+str(r.json()))
self.form.ProgressBar.hide()
self.form.Button_Upload.show()
return
self.url = r.headers['Location']
if self.form.Combo_Filetype.currentIndex() in [0,1]: # OBJ format, sketchfab expects inverted Y/Z axes
if self.form.Combo_Filetype.currentIndex() in [0,1,5]: # OBJ format, sketchfab expects inverted Y/Z axes
self.form.ProgressBar.setFormat(translate("Web","Awaiting confirmation..."))
self.form.ProgressBar.setValue(75)
if self.poll(self.url):
self.form.ProgressBar.setFormat(translate("Web","Fixing model..."))
QtGui.qApp.processEvents()
self.patch(self.url)
else:
QtGui.QMessageBox.warning(None,translate("Web","Patch error"),translate("Web","Patching failed. The model was successfully uploaded, but might still require manual adjustments:"))
@@ -208,13 +233,17 @@ class SketchfabTaskPanel:
try:
r = requests.get(url, **self.get_request_payload(self.form.Text_Token.text()))
except requests.exceptions.RequestException as e:
print ('Sketchfab: Polling failed with error {}'.format(e))
print ('Sketchfab: Polling failed with error: ',str(e))
errors += 1
retry += 1
continue
result = r.json()
if "error" in result:
e = result["error"]
else:
e = result
if r.status_code != requests.codes.ok:
print ('Sketchfab: Polling failed with error: {}'.format(result['error']))
print ('Sketchfab: Polling failed with error: ',str(e))
errors += 1
retry += 1
continue
@@ -228,7 +257,7 @@ class SketchfabTaskPanel:
time.sleep(retry_timeout)
continue
elif processing_status == 'FAILED':
print ('Sketchfab: Polling failed: {}'.format(result['error']))
print ('Sketchfab: Polling failed: ',str(e))
return False
elif processing_status == 'SUCCEEDED':
return True
@@ -257,7 +286,6 @@ class SketchfabTaskPanel:
url = self.url.replace("api","www")
url = url.replace("/v3","")
QtGui.QDesktopServices.openUrl(url)