Commit a3c03d49 authored by Steven Devijver's avatar Steven Devijver

Added loading of OpenSCAD files feature + corrected file wildcard when exporting

parent 262b000f
...@@ -2,6 +2,12 @@ ...@@ -2,6 +2,12 @@
import wx,time,random,threading,os,math import wx,time,random,threading,os,math
import stltool import stltool
def translate(l): return l
def rotate(l): return l
def import_stl(s): return s
class stlwrap: class stlwrap:
def __init__(self,obj,name=None): def __init__(self,obj,name=None):
self.obj=obj self.obj=obj
...@@ -16,12 +22,14 @@ class stlwrap: ...@@ -16,12 +22,14 @@ class stlwrap:
class showstl(wx.Window): class showstl(wx.Window):
def __init__(self,parent,size,pos): def __init__(self,parent,size,pos):
wx.Window.__init__(self,parent,size=size,pos=pos) wx.Window.__init__(self,parent,size=size,pos=pos)
self.l=wx.ListBox(self,size=(300,130),pos=(0,size[1]-130)) self.l=wx.ListBox(self,size=(300,155),pos=(0,size[1]-155))
self.lb=wx.Button(self,label="Load",pos=(300,size[1]-155))
self.eb=wx.Button(self,label="Export",pos=(300,size[1]-130)) self.eb=wx.Button(self,label="Export",pos=(300,size[1]-130))
self.sb=wx.Button(self,label="Snap to Z=0",pos=(300,size[1]-105)) self.sb=wx.Button(self,label="Snap to Z=0",pos=(300,size[1]-105))
self.cb=wx.Button(self,label="Put at 100,100",pos=(300,size[1]-80)) self.cb=wx.Button(self,label="Put at 100,100",pos=(300,size[1]-80))
self.db=wx.Button(self,label="Delete",pos=(300,size[1]-55)) self.db=wx.Button(self,label="Delete",pos=(300,size[1]-55))
self.ab=wx.Button(self,label="Auto",pos=(300,size[1]-30)) self.ab=wx.Button(self,label="Auto",pos=(300,size[1]-30))
self.lb.Bind(wx.EVT_BUTTON,self.load)
self.eb.Bind(wx.EVT_BUTTON,self.export) self.eb.Bind(wx.EVT_BUTTON,self.export)
self.sb.Bind(wx.EVT_BUTTON,self.snap) self.sb.Bind(wx.EVT_BUTTON,self.snap)
self.cb.Bind(wx.EVT_BUTTON,self.center) self.cb.Bind(wx.EVT_BUTTON,self.center)
...@@ -64,9 +72,40 @@ class showstl(wx.Window): ...@@ -64,9 +72,40 @@ class showstl(wx.Window):
self.l.Select(self.l.GetCount()-1) self.l.Select(self.l.GetCount()-1)
self.Refresh() self.Refresh()
def load(self,event):
dlg=wx.FileDialog(self,"Pick file to load",self.basedir,style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST)
dlg.SetWildcard("OpenSCAD files (;*.scad;)")
if(dlg.ShowModal() == wx.ID_OK):
name=dlg.GetPath()
print("Path: %s" % (name))
lf=open(name)
s=[i.replace("\n","").replace("\r","").replace(";","") for i in lf]
lf.close()
for i in s:
parts = i.split()
translate_list = eval(parts[0])
rotate_list = eval(parts[1])
stl_file = eval(parts[2])
print("translate([%s,%s,%s]) rotate([%s,%s,%s]) import_slt('%s');" % (translate_list[0], translate_list[1], translate_list[2], rotate_list[0], rotate_list[1], rotate_list[2], stl_file))
newname=os.path.split(stl_file.lower())[1]
c=1
while newname in self.models:
newname=os.path.split(stl_file.lower())[1]
newname=newname+"(%d)"%c
c+=1
stl_path = os.path.join(os.path.split(name)[0:len(os.path.split(stl_file))-1])
print("STL file: %s" % (stl_file))
print("STL path: %s" % (stl_path))
stl_full_path = os.path.join(stl_path[0],str(stl_file))
print("STL full path: %s" % (stl_full_path))
self.load_stl(stl_full_path,stl_file)
def export(self,event): def export(self,event):
dlg=wx.FileDialog(self,"Pick file to save to",self.basedir,style=wx.FD_SAVE) dlg=wx.FileDialog(self,"Pick file to save to",self.basedir,style=wx.FD_SAVE)
dlg.SetWildcard("STL files (;*.stl;)") dlg.SetWildcard("OpenSCAD files (;*.scad;)")
if(dlg.ShowModal() == wx.ID_OK): if(dlg.ShowModal() == wx.ID_OK):
name=dlg.GetPath() name=dlg.GetPath()
sf=open(name.replace(".","_")+".scad","w") sf=open(name.replace(".","_")+".scad","w")
...@@ -137,13 +176,18 @@ class showstl(wx.Window): ...@@ -137,13 +176,18 @@ class showstl(wx.Window):
#print name #print name
if name.lower().endswith(".stl"): if name.lower().endswith(".stl"):
#Filter out the path, just show the STL filename. #Filter out the path, just show the STL filename.
self.load_stl(name,name)
self.Refresh()
#print time.time()-t
def load_stl(self,path,name):
newname=os.path.split(name.lower())[1] newname=os.path.split(name.lower())[1]
c=1 c=1
while newname in self.models: while newname in self.models:
newname=os.path.split(name.lower())[1] newname=os.path.split(name.lower())[1]
newname=newname+"(%d)"%c newname=newname+"(%d)"%c
c+=1 c+=1
self.models[newname]=stltool.stl(name) self.models[newname]=stltool.stl(path)
self.models[newname].offsets=[0,0,0] self.models[newname].offsets=[0,0,0]
self.models[newname].rot=0 self.models[newname].rot=0
self.models[newname].filename=name self.models[newname].filename=name
...@@ -193,8 +237,7 @@ class showstl(wx.Window): ...@@ -193,8 +237,7 @@ class showstl(wx.Window):
self.l.Select(0) self.l.Select(0)
self.l.Select(self.l.GetCount()-1) self.l.Select(self.l.GetCount()-1)
self.Refresh()
#print time.time()-t
def move(self,event): def move(self,event):
if event.ButtonUp(wx.MOUSE_BTN_LEFT): if event.ButtonUp(wx.MOUSE_BTN_LEFT):
...@@ -297,11 +340,11 @@ class showstl(wx.Window): ...@@ -297,11 +340,11 @@ class showstl(wx.Window):
#s.export() #s.export()
class stlwin(wx.Frame): class stlwin(wx.Frame):
def __init__(self,size=(400,530)): def __init__(self,size=(400,555)):
wx.Frame.__init__(self,None,title="Right-click to add a file",size=size) wx.Frame.__init__(self,None,title="Right-click to add a file",size=size)
self.SetIcon(wx.Icon("plater.ico",wx.BITMAP_TYPE_ICO)) self.SetIcon(wx.Icon("plater.ico",wx.BITMAP_TYPE_ICO))
self.SetClientSize(size) self.SetClientSize(size)
self.s=showstl(self,(400,530),(0,0)) self.s=showstl(self,(400,555),(0,0))
if __name__ == '__main__': if __name__ == '__main__':
app = wx.App(False) app = wx.App(False)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment