Skip to content

Commit

Permalink
Web: misc fixes to sketchfab exporter
Browse files Browse the repository at this point in the history
  • Loading branch information
yorikvanhavre committed Mar 13, 2017
1 parent bf3b6d4 commit b615009
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/Mod/Web/Gui/Resources/ui/TaskDlgSketchfab.ui
Expand Up @@ -165,7 +165,7 @@
</item>
<item>
<property name="text">
<string>IV (buggy)</string>
<string>IV</string>
</property>
</item>
</widget>
Expand Down
46 changes: 37 additions & 9 deletions src/Mod/Web/Webscripts/Sketchfab.py
Expand Up @@ -26,7 +26,7 @@
__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
Expand Down Expand Up @@ -123,9 +123,22 @@ def saveFile(self):
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):
Expand Down Expand Up @@ -159,11 +172,21 @@ def upload(self):
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')
Expand All @@ -172,24 +195,26 @@ def upload(self):
# 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:"))
Expand All @@ -208,13 +233,17 @@ def poll(self,url):
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
Expand All @@ -228,7 +257,7 @@ def poll(self,url):
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
Expand Down Expand Up @@ -257,7 +286,6 @@ def viewModel(self):
url = self.url.replace("api","www")
url = url.replace("/v3","")
QtGui.QDesktopServices.openUrl(url)




Expand Down

0 comments on commit b615009

Please sign in to comment.