Merge pull request #146 from AxTheB/export

Reformat for pep8 conformance
master
kliment 2012-01-08 15:30:47 -08:00
commit 03b42581b0
2 changed files with 648 additions and 637 deletions

417
plater.py
View File

@ -1,68 +1,72 @@
#!/usr/bin/env python #!/usr/bin/env python
import wx,time,random,threading,os,math import wx
import stltool import time
import random
import threading
import os
import math
import sys import sys
import stltool
glview=False glview = False
if "-nogl" not in sys.argv: if "-nogl" not in sys.argv:
try: try:
import stlview import stlview
glview=True glview = True
except: except:
pass pass
def evalme(s): def evalme(s):
return eval(s[s.find("(")+1:s.find(")")]) return eval(s[s.find("(") + 1:s.find(")")])
class stlwrap: class stlwrap:
def __init__(self,obj,name=None): def __init__(self, obj, name=None):
self.obj=obj self.obj = obj
self.name=name self.name = name
if name is None: if name is None:
self.name=obj.name self.name = obj.name
def __repr__(self): def __repr__(self):
return self.name return self.name
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.SetBackgroundColour((0,0,0)) #self.SetBackgroundColour((0, 0, 0))
#wx.FutureCall(200,self.paint) #wx.FutureCall(200, self.paint)
self.i=0 self.i = 0
self.parent=parent self.parent = parent
self.previ=0 self.previ = 0
self.Bind(wx.EVT_MOUSEWHEEL,self.rot) self.Bind(wx.EVT_MOUSEWHEEL, self.rot)
self.Bind(wx.EVT_MOUSE_EVENTS,self.move) self.Bind(wx.EVT_MOUSE_EVENTS, self.move)
self.Bind(wx.EVT_PAINT,self.repaint) self.Bind(wx.EVT_PAINT, self.repaint)
self.Bind(wx.EVT_KEY_DOWN, self.keypress) self.Bind(wx.EVT_KEY_DOWN, self.keypress)
#self.s=stltool.stl("sphere.stl").scale([2,1,1]) #self.s = stltool.stl("sphere.stl").scale([2, 1, 1])
self.triggered=0 self.triggered = 0
self.initpos=None self.initpos = None
self.prevsel=-1 self.prevsel = -1
def drawmodel(self,m,scale): def drawmodel(self, m, scale):
m.bitmap=wx.EmptyBitmap(800,800,32) m.bitmap = wx.EmptyBitmap(800, 800, 32)
dc=wx.MemoryDC() dc = wx.MemoryDC()
dc.SelectObject(m.bitmap) dc.SelectObject(m.bitmap)
dc.SetBackground(wx.Brush((0,0,0,0))) dc.SetBackground(wx.Brush((0, 0, 0, 0)))
dc.SetBrush(wx.Brush((0,0,0,255))) dc.SetBrush(wx.Brush((0, 0, 0, 255)))
#dc.DrawRectangle(-1,-1,10000,10000) #dc.DrawRectangle(-1, -1, 10000, 10000)
dc.SetBrush(wx.Brush(wx.Colour(128,255,128))) dc.SetBrush(wx.Brush(wx.Colour(128, 255, 128)))
dc.SetPen(wx.Pen(wx.Colour(128,128,128))) dc.SetPen(wx.Pen(wx.Colour(128, 128, 128)))
#m.offsets=[10,10,0] #m.offsets = [10, 10, 0]
#print m.offsets,m.dims #print m.offsets, m.dims
for i in m.facets:#random.sample(m.facets,min(100000,len(m.facets))): for i in m.facets: # random.sample(m.facets, min(100000, len(m.facets))):
dc.DrawPolygon([wx.Point(400+scale*p[0],(400-scale*p[1])) for p in i[1]]) dc.DrawPolygon([wx.Point(400 + scale * p[0], (400 - scale * p[1])) for p in i[1]])
#if(time.time()-t)>5: #if(time.time()-t)>5:
# break # break
dc.SelectObject(wx.NullBitmap) dc.SelectObject(wx.NullBitmap)
m.bitmap.SetMask(wx.Mask(m.bitmap,wx.Colour(0,0,0,255))) m.bitmap.SetMask(wx.Mask(m.bitmap, wx.Colour(0, 0, 0, 255)))
def move_shape(self, delta): def move_shape(self, delta):
"""moves shape (selected in l, which is list ListBox of shapes) """moves shape (selected in l, which is list ListBox of shapes)
@ -146,110 +150,111 @@ class showstl(wx.Window):
event.Skip() event.Skip()
def rotateafter(self): def rotateafter(self):
if(self.i!=self.previ): if(self.i != self.previ):
i=self.parent.l.GetSelection() i = self.parent.l.GetSelection()
if i != wx.NOT_FOUND: if i != wx.NOT_FOUND:
#o=self.models[self.l.GetItemText(i)].offsets #o = self.models[self.l.GetItemText(i)].offsets
self.parent.models[self.parent.l.GetString(i)].rot-=5*(self.i-self.previ) self.parent.models[self.parent.l.GetString(i)].rot -= 5 * (self.i - self.previ)
#self.models[self.l.GetItemText(i)].offsets=o #self.models[self.l.GetItemText(i)].offsets = o
self.previ=self.i self.previ = self.i
self.Refresh() self.Refresh()
def cr(self): def cr(self):
time.sleep(0.01) time.sleep(0.01)
wx.CallAfter(self.rotateafter) wx.CallAfter(self.rotateafter)
self.triggered=0 self.triggered = 0
def rot(self, event): def rot(self, event):
z=event.GetWheelRotation() z = event.GetWheelRotation()
s=self.parent.l.GetSelection() s = self.parent.l.GetSelection()
if self.prevsel!=s: if self.prevsel != s:
self.i=0 self.i = 0
self.prevsel=s self.prevsel = s
if z < 0: if z < 0:
self.rotate_shape(-1) self.rotate_shape(-1)
else: else:
self.rotate_shape(1) self.rotate_shape(1)
def repaint(self,event): def repaint(self, event):
dc=wx.PaintDC(self) dc = wx.PaintDC(self)
self.paint(dc=dc) self.paint(dc=dc)
def paint(self,coord1="x",coord2="y",dc=None): def paint(self, coord1="x", coord2="y", dc=None):
coords={"x":0,"y":1,"z":2} coords = {"x": 0, "y": 1, "z": 2}
if dc is None: if dc is None:
dc=wx.ClientDC(self) dc = wx.ClientDC(self)
offset=[0,0] offset = [0, 0]
scale=2 scale = 2
dc.SetPen(wx.Pen(wx.Colour(100,100,100))) dc.SetPen(wx.Pen(wx.Colour(100, 100, 100)))
for i in xrange(20): for i in xrange(20):
dc.DrawLine(0,i*scale*10,400,i*scale*10) dc.DrawLine(0, i * scale * 10, 400, i * scale * 10)
dc.DrawLine(i*scale*10,0,i*scale*10,400) dc.DrawLine(i * scale * 10, 0, i * scale * 10, 400)
dc.SetPen(wx.Pen(wx.Colour(0,0,0))) dc.SetPen(wx.Pen(wx.Colour(0, 0, 0)))
for i in xrange(4): for i in xrange(4):
dc.DrawLine(0,i*scale*50,400,i*scale*50) dc.DrawLine(0, i * scale * 50, 400, i * scale * 50)
dc.DrawLine(i*scale*50,0,i*scale*50,400) dc.DrawLine(i * scale * 50, 0, i * scale * 50, 400)
dc.SetBrush(wx.Brush(wx.Colour(128,255,128))) dc.SetBrush(wx.Brush(wx.Colour(128, 255, 128)))
dc.SetPen(wx.Pen(wx.Colour(128,128,128))) dc.SetPen(wx.Pen(wx.Colour(128, 128, 128)))
t=time.time() t = time.time()
dcs=wx.MemoryDC() dcs = wx.MemoryDC()
for m in self.parent.models.values(): for m in self.parent.models.values():
b=m.bitmap b = m.bitmap
#print b #print b
im=b.ConvertToImage() im = b.ConvertToImage()
#print im #print im
imgc = wx.Point( im.GetWidth()/2,im.GetHeight()/2 ) imgc = wx.Point(im.GetWidth() / 2, im.GetHeight() / 2)
#print math.radians(5*(self.i-self.previ)) #print math.radians(5*(self.i-self.previ))
im= im.Rotate( math.radians(m.rot), imgc, 0) im = im.Rotate(math.radians(m.rot), imgc, 0)
bm=wx.BitmapFromImage(im) bm = wx.BitmapFromImage(im)
dcs.SelectObject(bm) dcs.SelectObject(bm)
bsz=bm.GetSize() bsz = bm.GetSize()
dc.Blit(scale*m.offsets[0]-bsz[0]/2,400-(scale*m.offsets[1]+bsz[1]/2),bsz[0],bsz[1],dcs,0,0,useMask=1) dc.Blit(scale * m.offsets[0] - bsz[0] / 2, 400 - (scale * m.offsets[1] + bsz[1] / 2), bsz[0], bsz[1], dcs, 0, 0, useMask=1)
#for i in m.facets:#random.sample(m.facets,min(100000,len(m.facets))): #for i in m.facets:#random.sample(m.facets, min(100000, len(m.facets))):
# dc.DrawPolygon([wx.Point(offset[0]+scale*m.offsets[0]+scale*p[0],400-(offset[1]+scale*m.offsets[1]+scale*p[1])) for p in i[1]]) # dc.DrawPolygon([wx.Point(offset[0]+scale*m.offsets[0]+scale*p[0], 400-(offset[1]+scale*m.offsets[1]+scale*p[1])) for p in i[1]])
#if(time.time()-t)>5: #if(time.time()-t)>5:
# break # break
del dc del dc
#print time.time()-t #print time.time()-t
#s.export() #s.export()
class stlwin(wx.Frame): class stlwin(wx.Frame):
def __init__(self,size=(800,580),callback=None,parent=None): def __init__(self, size=(800, 580), callback=None, parent=None):
wx.Frame.__init__(self,parent,title="Plate building tool",size=size) wx.Frame.__init__(self, parent, title="Plate building tool", size=size)
self.SetIcon(wx.Icon("plater.ico",wx.BITMAP_TYPE_ICO)) self.SetIcon(wx.Icon("plater.ico", wx.BITMAP_TYPE_ICO))
self.mainsizer = wx.BoxSizer(wx.HORIZONTAL) self.mainsizer = wx.BoxSizer(wx.HORIZONTAL)
self.panel=wx.Panel(self,-1,size=(150,600),pos=(0,0)) self.panel = wx.Panel(self, -1, size=(150, 600), pos=(0, 0))
self.panel.SetBackgroundColour((10,10,10)) self.panel.SetBackgroundColour((10, 10, 10))
self.l=wx.ListBox(self.panel,size=(300,180),pos=(0,30)) self.l = wx.ListBox(self.panel, size=(300, 180), pos=(0, 30))
self.cl=wx.Button(self.panel,label="Clear",pos=(0,205)) self.cl = wx.Button(self.panel, label="Clear", pos=(0, 205))
self.lb=wx.Button(self.panel,label="Load",pos=(0,0)) self.lb = wx.Button(self.panel, label="Load", pos=(0, 0))
if(callback is None): if(callback is None):
self.eb=wx.Button(self.panel,label="Export",pos=(100,0)) self.eb = wx.Button(self.panel, label="Export", pos=(100, 0))
self.eb.Bind(wx.EVT_BUTTON,self.export) self.eb.Bind(wx.EVT_BUTTON, self.export)
else: else:
self.eb=wx.Button(self.panel,label="Done",pos=(100,0)) self.eb = wx.Button(self.panel, label="Done", pos=(100, 0))
self.eb.Bind(wx.EVT_BUTTON,lambda e:self.done(e,callback)) self.eb.Bind(wx.EVT_BUTTON, lambda e: self.done(e, callback))
self.eb=wx.Button(self.panel,label="Cancel",pos=(200,0)) self.eb = wx.Button(self.panel, label="Cancel", pos=(200, 0))
self.eb.Bind(wx.EVT_BUTTON,lambda e:self.Destroy()) self.eb.Bind(wx.EVT_BUTTON, lambda e: self.Destroy())
self.sb=wx.Button(self.panel,label="Snap to Z=0",pos=(00,255)) self.sb = wx.Button(self.panel, label="Snap to Z = 0", pos=(00, 255))
self.cb=wx.Button(self.panel,label="Put at 100,100",pos=(0,280)) self.cb = wx.Button(self.panel, label="Put at 100, 100", pos=(0, 280))
self.db=wx.Button(self.panel,label="Delete",pos=(0,305)) self.db = wx.Button(self.panel, label="Delete", pos=(0, 305))
self.ab=wx.Button(self.panel,label="Auto",pos=(0,330)) self.ab = wx.Button(self.panel, label="Auto", pos=(0, 330))
self.cl.Bind(wx.EVT_BUTTON,self.clear) self.cl.Bind(wx.EVT_BUTTON, self.clear)
self.lb.Bind(wx.EVT_BUTTON,self.right) self.lb.Bind(wx.EVT_BUTTON, self.right)
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)
self.db.Bind(wx.EVT_BUTTON,self.delete) self.db.Bind(wx.EVT_BUTTON, self.delete)
self.ab.Bind(wx.EVT_BUTTON,self.autoplate) self.ab.Bind(wx.EVT_BUTTON, self.autoplate)
self.basedir="." self.basedir = "."
self.models={} self.models = {}
self.SetBackgroundColour((10,10,10)) self.SetBackgroundColour((10, 10, 10))
self.mainsizer.Add(self.panel) self.mainsizer.Add(self.panel)
#self.mainsizer.AddSpacer(10) #self.mainsizer.AddSpacer(10)
if glview: if glview:
self.s=stlview.TestGlPanel(self,(580,580)) self.s = stlview.TestGlPanel(self, (580, 580))
else: else:
self.s=showstl(self,(580,580),(0,0)) self.s = showstl(self, (580, 580), (0, 0))
self.mainsizer.Add(self.s, 1, wx.EXPAND) self.mainsizer.Add(self.s, 1, wx.EXPAND)
self.SetSizer(self.mainsizer) self.SetSizer(self.mainsizer)
#self.mainsizer.Fit(self) #self.mainsizer.Fit(self)
@ -257,22 +262,22 @@ class stlwin(wx.Frame):
#self.SetClientSize(size) #self.SetClientSize(size)
def autoplate(self,event): def autoplate(self, event):
print "Autoplating" print "Autoplating"
separation = 2 separation = 2
bedsize = [200,200,100] bedsize = [200, 200, 100]
cursor = [0,0,0] cursor = [0, 0, 0]
newrow = 0 newrow = 0
max = [0,0] max = [0, 0]
for i in self.models: for i in self.models:
self.models[i].offsets[2]=-1.0*self.models[i].dims[4] self.models[i].offsets[2] = -1.0 * self.models[i].dims[4]
x = abs(self.models[i].dims[0] - self.models[i].dims[1]) x = abs(self.models[i].dims[0] - self.models[i].dims[1])
y = abs(self.models[i].dims[2] - self.models[i].dims[3]) y = abs(self.models[i].dims[2] - self.models[i].dims[3])
centre = [x/2, y/2] centre = [x / 2, y / 2]
centreoffset = [self.models[i].dims[0] + centre[0], self.models[i].dims[2] + centre[1]] centreoffset = [self.models[i].dims[0] + centre[0], self.models[i].dims[2] + centre[1]]
if (cursor[0]+x+separation) >= bedsize[0]: if (cursor[0] + x + separation) >= bedsize[0]:
cursor[0] = 0 cursor[0] = 0
cursor[1] += newrow+separation cursor[1] += newrow + separation
newrow = 0 newrow = 0
if (newrow == 0) or (newrow < y): if (newrow == 0) or (newrow < y):
newrow = y newrow = y
@ -280,103 +285,100 @@ class stlwin(wx.Frame):
# Good job, it confused the hell out of me. # Good job, it confused the hell out of me.
self.models[i].offsets[0] = cursor[0] + centre[0] - centreoffset[0] self.models[i].offsets[0] = cursor[0] + centre[0] - centreoffset[0]
self.models[i].offsets[1] = cursor[1] + centre[1] - centreoffset[1] self.models[i].offsets[1] = cursor[1] + centre[1] - centreoffset[1]
if (max[0] == 0) or (max[0] < (cursor[0]+x)): if (max[0] == 0) or (max[0] < (cursor[0] + x)):
max[0] = cursor[0]+x max[0] = cursor[0] + x
if (max[1] == 0) or (max[1] < (cursor[1]+x)): if (max[1] == 0) or (max[1] < (cursor[1] + x)):
max[1] = cursor[1]+x max[1] = cursor[1] + x
cursor[0] += x+separation cursor[0] += x + separation
if (cursor[1]+y) >= bedsize[1]: if (cursor[1] + y) >= bedsize[1]:
print "Bed full, sorry sir :(" print "Bed full, sorry sir :("
self.Refresh() self.Refresh()
return return
centreoffset = [(bedsize[0]-max[0])/2,(bedsize[1]-max[1])/2] centreoffset = [(bedsize[0] - max[0]) / 2, (bedsize[1] - max[1]) / 2]
for i in self.models: for i in self.models:
self.models[i].offsets[0] += centreoffset[0] self.models[i].offsets[0] += centreoffset[0]
self.models[i].offsets[1] += centreoffset[1] self.models[i].offsets[1] += centreoffset[1]
self.Refresh() self.Refresh()
def clear(self, event):
def clear(self,event):
result = wx.MessageBox('Are you sure you want to clear the grid? All unsaved changes will be lost.', 'Clear the grid?', result = wx.MessageBox('Are you sure you want to clear the grid? All unsaved changes will be lost.', 'Clear the grid?',
wx.YES_NO | wx.ICON_QUESTION) wx.YES_NO | wx.ICON_QUESTION)
if (result == 2): if (result == 2):
self.models={} self.models = {}
self.l.Clear() self.l.Clear()
self.Refresh() self.Refresh()
def center(self,event): def center(self, event):
i=self.l.GetSelection() i = self.l.GetSelection()
if i != -1: if i != -1:
m=self.models[self.l.GetString(i)] m = self.models[self.l.GetString(i)]
m.offsets=[100,100,m.offsets[2]] m.offsets = [100, 100, m.offsets[2]]
self.Refresh() self.Refresh()
def snap(self,event): def snap(self, event):
i=self.l.GetSelection() i = self.l.GetSelection()
if i != -1: if i != -1:
m=self.models[self.l.GetString(i)] m = self.models[self.l.GetString(i)]
m.offsets[2]=-1.0*min(m.facetsminz)[0] m.offsets[2] = -1.0 * min(m.facetsminz)[0]
#print m.offsets[2] #print m.offsets[2]
self.Refresh() self.Refresh()
def delete(self,event): def delete(self, event):
i=self.l.GetSelection() i = self.l.GetSelection()
if i != -1: if i != -1:
del self.models[self.l.GetString(i)] del self.models[self.l.GetString(i)]
self.l.Delete(i) self.l.Delete(i)
self.l.Select(self.l.GetCount()-1) self.l.Select(self.l.GetCount() - 1)
self.Refresh() self.Refresh()
def done(self,event,cb): def done(self, event, cb):
import os,time
try: try:
os.mkdir("tempstl") os.mkdir("tempstl")
except: except:
pass pass
name="tempstl/"+str(int(time.time())%10000)+".stl" name = "tempstl/" + str(int(time.time()) % 10000) + ".stl"
self.writefiles(name) self.writefiles(name)
if cb is not None: if cb is not None:
cb(name) cb(name)
self.Destroy() self.Destroy()
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("STL files (;*.stl;)")
if(dlg.ShowModal() == wx.ID_OK): if(dlg.ShowModal() == wx.ID_OK):
name=dlg.GetPath() name = dlg.GetPath()
self.writefiles(name) self.writefiles(name)
def writefiles(self,name): def writefiles(self, name):
sf=open(name.replace(".","_")+".scad","w") sf = open(name.replace(".", "_") + ".scad", "w")
facets=[] facets = []
for i in self.models.values(): for i in self.models.values():
r=i.rot r = i.rot
o=i.offsets o = i.offsets
sf.write('translate([%s,%s,%s]) rotate([0,0,%s]) import_stl("%s");\n'%(str(o[0]),str(o[1]),str(o[2]),r,os.path.split(i.filename)[1])) sf.write('translate([%s, %s, %s]) rotate([0, 0, %s]) import_stl("%s");\n' % (str(o[0]), str(o[1]), str(o[2]), r, os.path.split(i.filename)[1]))
if r != 0: if r != 0:
i=i.rotate([0,0,r]) i = i.rotate([0, 0, r])
if o != [0,0,0]: if o != [0, 0, 0]:
i=i.translate([o[0],o[1],o[2]]) i = i.translate([o[0], o[1], o[2]])
facets+=i.facets facets += i.facets
sf.close() sf.close()
stltool.emitstl(name,facets,"plater_export") stltool.emitstl(name, facets, "plater_export")
print "wrote ",name print "wrote ", name
def right(self,event): def right(self, event):
dlg=wx.FileDialog(self,"Pick file to load",self.basedir,style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST) dlg = wx.FileDialog(self, "Pick file to load", self.basedir, style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
dlg.SetWildcard("STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scad") dlg.SetWildcard("STL files (;*.stl;)|*.stl|OpenSCAD files (;*.scad;)|*.scad")
if(dlg.ShowModal() == wx.ID_OK): if(dlg.ShowModal() == wx.ID_OK):
name=dlg.GetPath() name = dlg.GetPath()
if (name.lower().endswith(".stl")): if (name.lower().endswith(".stl")):
self.load_stl(event,name) self.load_stl(event, name)
elif (name.lower().endswith(".scad")): elif (name.lower().endswith(".scad")):
self.load_scad(event,name) self.load_scad(event, name)
def load_scad(self,event,name): def load_scad(self, event, name):
lf=open(name) lf = open(name)
s=[i.replace("\n","").replace("\r","").replace(";","") for i in lf if "stl" in i] s = [i.replace("\n", "").replace("\r", "").replace(";", "") for i in lf if "stl" in i]
lf.close() lf.close()
for i in s: for i in s:
@ -391,70 +393,70 @@ class stlwin(wx.Frame):
if 'import' in part: if 'import' in part:
stl_file = evalme(part) stl_file = evalme(part)
newname=os.path.split(stl_file.lower())[1] newname = os.path.split(stl_file.lower())[1]
c=1 c = 1
while newname in self.models: while newname in self.models:
newname=os.path.split(stl_file.lower())[1] newname = os.path.split(stl_file.lower())[1]
newname=newname+"(%d)"%c newname = newname + "(%d)" % c
c+=1 c += 1
stl_path = os.path.join(os.path.split(name)[0:len(os.path.split(stl_file))-1]) stl_path = os.path.join(os.path.split(name)[0:len(os.path.split(stl_file)) - 1])
stl_full_path = os.path.join(stl_path[0],str(stl_file)) stl_full_path = os.path.join(stl_path[0], str(stl_file))
self.load_stl_into_model(stl_full_path,stl_file,translate_list,rotate_list[2]) self.load_stl_into_model(stl_full_path, stl_file, translate_list, rotate_list[2])
def load_stl(self,event,name): def load_stl(self, event, name):
if not(os.path.exists(name)): if not(os.path.exists(name)):
return return
path = os.path.split(name)[0] path = os.path.split(name)[0]
self.basedir=path self.basedir = path
t=time.time() t = time.time()
#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_into_model(name,name) self.load_stl_into_model(name, name)
self.Refresh() self.Refresh()
#print time.time()-t #print time.time()-t
def load_stl_into_model(self,path,name,offset=[0,0,0],rotation=0,scale=[1.0,1.0,1.0]): def load_stl_into_model(self, path, name, offset=[0, 0, 0], rotation=0, scale=[1.0, 1.0, 1.0]):
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(path) self.models[newname] = stltool.stl(path)
self.models[newname].offsets=offset self.models[newname].offsets = offset
self.models[newname].rot=rotation self.models[newname].rot = rotation
self.models[newname].scale=scale self.models[newname].scale = scale
self.models[newname].filename=name self.models[newname].filename = name
minx,miny,minz,maxx,maxy,maxz=(10000,10000,10000,0,0,0) minx, miny, minz, maxx, maxy, maxz = (10000, 10000, 10000, 0, 0, 0)
for i in self.models[newname].facets: for i in self.models[newname].facets:
for j in i[1]: for j in i[1]:
if j[0]<minx: if j[0] < minx:
minx=j[0] minx = j[0]
if j[1]<miny: if j[1] < miny:
miny=j[1] miny = j[1]
if j[2]<minz: if j[2] < minz:
minz=j[2] minz = j[2]
if j[0]>maxx: if j[0] > maxx:
maxx=j[0] maxx = j[0]
if j[1]>maxy: if j[1] > maxy:
maxy=j[1] maxy = j[1]
if j[2]>maxz: if j[2] > maxz:
maxz=j[2] maxz = j[2]
self.models[newname].dims=[minx,maxx,miny,maxy,minz,maxz] self.models[newname].dims = [minx, maxx, miny, maxy, minz, maxz]
#if minx<0: #if minx < 0:
# self.models[newname].offsets[0]=-minx # self.models[newname].offsets[0] = -minx
#if miny<0: #if miny < 0:
# self.models[newname].offsets[1]=-miny # self.models[newname].offsets[1] = -miny
self.s.drawmodel(self.models[newname],2) self.s.drawmodel(self.models[newname], 2)
#print time.time()-t #print time.time() - t
self.l.Append(newname) self.l.Append(newname)
i=self.l.GetSelection() i = self.l.GetSelection()
if i==wx.NOT_FOUND: if i == wx.NOT_FOUND:
self.l.Select(0) self.l.Select(0)
self.l.Select(self.l.GetCount()-1) self.l.Select(self.l.GetCount() - 1)
if __name__ == '__main__': if __name__ == '__main__':
@ -462,4 +464,3 @@ if __name__ == '__main__':
main = stlwin() main = stlwin()
main.Show() main.Show()
app.MainLoop() app.MainLoop()

File diff suppressed because it is too large Load Diff