Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
Printrun
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
machinery
Printrun
Commits
b631c3ba
Commit
b631c3ba
authored
Jan 02, 2012
by
Václav 'Ax' Hůla
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
reformated stlview to be more pep8 conformant ('official' python formating style)
parent
9e354d85
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
420 additions
and
410 deletions
+420
-410
stlview.py
stlview.py
+420
-410
No files found.
stlview.py
View file @
b631c3ba
#!/usr/bin/python
#!/usr/bin/python
import
os
import
os
import
wx
,
math
,
stltool
import
math
import
stltool
import
wx
from
wx
import
glcanvas
from
wx
import
glcanvas
import
time
import
time
import
threading
import
threading
import
pyglet
import
pyglet
pyglet
.
options
[
'shadow_window'
]
=
False
pyglet
.
options
[
'shadow_window'
]
=
False
pyglet
.
options
[
'debug_gl'
]
=
False
pyglet
.
options
[
'debug_gl'
]
=
False
from
pyglet
import
gl
from
pyglet.gl
import
*
from
pyglet.gl
import
*
class
GLPanel
(
wx
.
Panel
):
class
GLPanel
(
wx
.
Panel
):
'''A simple class for using OpenGL with wxPython.'''
'''A simple class for using OpenGL with wxPython.'''
def
__init__
(
self
,
parent
,
id
,
pos
=
wx
.
DefaultPosition
,
def
__init__
(
self
,
parent
,
id
,
pos
=
wx
.
DefaultPosition
,
...
@@ -24,9 +25,9 @@ class GLPanel(wx.Panel):
...
@@ -24,9 +25,9 @@ class GLPanel(wx.Panel):
#init gl canvas data
#init gl canvas data
self
.
GLinitialized
=
False
self
.
GLinitialized
=
False
attribList
=
(
glcanvas
.
WX_GL_RGBA
,
# RGBA
attribList
=
(
glcanvas
.
WX_GL_RGBA
,
# RGBA
glcanvas
.
WX_GL_DOUBLEBUFFER
,
# Double Buffered
glcanvas
.
WX_GL_DOUBLEBUFFER
,
# Double Buffered
glcanvas
.
WX_GL_DEPTH_SIZE
,
24
)
# 24 bit
glcanvas
.
WX_GL_DEPTH_SIZE
,
24
)
# 24 bit
# Create the canvas
# Create the canvas
self
.
sizer
=
wx
.
BoxSizer
(
wx
.
HORIZONTAL
)
self
.
sizer
=
wx
.
BoxSizer
(
wx
.
HORIZONTAL
)
self
.
canvas
=
glcanvas
.
GLCanvas
(
self
,
attribList
=
attribList
)
self
.
canvas
=
glcanvas
.
GLCanvas
(
self
,
attribList
=
attribList
)
...
@@ -34,7 +35,7 @@ class GLPanel(wx.Panel):
...
@@ -34,7 +35,7 @@ class GLPanel(wx.Panel):
self
.
SetSizer
(
self
.
sizer
)
self
.
SetSizer
(
self
.
sizer
)
#self.sizer.Fit(self)
#self.sizer.Fit(self)
self
.
Layout
()
self
.
Layout
()
# bind events
# bind events
self
.
canvas
.
Bind
(
wx
.
EVT_ERASE_BACKGROUND
,
self
.
processEraseBackgroundEvent
)
self
.
canvas
.
Bind
(
wx
.
EVT_ERASE_BACKGROUND
,
self
.
processEraseBackgroundEvent
)
self
.
canvas
.
Bind
(
wx
.
EVT_SIZE
,
self
.
processSizeEvent
)
self
.
canvas
.
Bind
(
wx
.
EVT_SIZE
,
self
.
processSizeEvent
)
...
@@ -56,7 +57,7 @@ class GLPanel(wx.Panel):
...
@@ -56,7 +57,7 @@ class GLPanel(wx.Panel):
#==========================================================================
#==========================================================================
def
processEraseBackgroundEvent
(
self
,
event
):
def
processEraseBackgroundEvent
(
self
,
event
):
'''Process the erase background event.'''
'''Process the erase background event.'''
pass
# Do nothing, to avoid flashing on MSWin
pass
# Do nothing, to avoid flashing on MSWin
def
processSizeEvent
(
self
,
event
):
def
processSizeEvent
(
self
,
event
):
'''Process the resize event.'''
'''Process the resize event.'''
...
@@ -74,15 +75,15 @@ class GLPanel(wx.Panel):
...
@@ -74,15 +75,15 @@ class GLPanel(wx.Panel):
def
processPaintEvent
(
self
,
event
):
def
processPaintEvent
(
self
,
event
):
'''Process the drawing event.'''
'''Process the drawing event.'''
self
.
canvas
.
SetCurrent
()
self
.
canvas
.
SetCurrent
()
# This is a 'perfect' time to initialize OpenGL ... only if we need to
# This is a 'perfect' time to initialize OpenGL ... only if we need to
if
not
self
.
GLinitialized
:
if
not
self
.
GLinitialized
:
self
.
OnInitGL
()
self
.
OnInitGL
()
self
.
GLinitialized
=
True
self
.
GLinitialized
=
True
self
.
OnDraw
()
self
.
OnDraw
()
event
.
Skip
()
event
.
Skip
()
def
Destroy
(
self
):
def
Destroy
(
self
):
#clean up the pyglet OpenGL context
#clean up the pyglet OpenGL context
#self.pygletcontext.destroy()
#self.pygletcontext.destroy()
...
@@ -95,12 +96,12 @@ class GLPanel(wx.Panel):
...
@@ -95,12 +96,12 @@ class GLPanel(wx.Panel):
def
OnInitGL
(
self
):
def
OnInitGL
(
self
):
'''Initialize OpenGL for use in the window.'''
'''Initialize OpenGL for use in the window.'''
#create a pyglet context for this panel
#create a pyglet context for this panel
self
.
pmat
=
(
GLdouble
*
16
)()
self
.
pmat
=
(
GLdouble
*
16
)()
self
.
mvmat
=
(
GLdouble
*
16
)()
self
.
mvmat
=
(
GLdouble
*
16
)()
self
.
pygletcontext
=
Context
(
current_context
)
self
.
pygletcontext
=
Context
(
current_context
)
self
.
pygletcontext
.
set_current
()
self
.
pygletcontext
.
set_current
()
self
.
dist
=
1000
self
.
dist
=
1000
self
.
vpmat
=
None
self
.
vpmat
=
None
#normal gl init
#normal gl init
glClearColor
(
0
,
0
,
0
,
1
)
glClearColor
(
0
,
0
,
0
,
1
)
glColor3f
(
1
,
0
,
0
)
glColor3f
(
1
,
0
,
0
)
...
@@ -108,42 +109,40 @@ class GLPanel(wx.Panel):
...
@@ -108,42 +109,40 @@ class GLPanel(wx.Panel):
glEnable
(
GL_CULL_FACE
)
glEnable
(
GL_CULL_FACE
)
# Uncomment this line for a wireframe view
# Uncomment this line for a wireframe view
#glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
#glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
# Simple light setup. On Windows GL_LIGHT0 is enabled by default,
# Simple light setup. On Windows GL_LIGHT0 is enabled by default,
# but this is not the case on Linux or Mac, so remember to always
# but this is not the case on Linux or Mac, so remember to always
# include it.
# include it.
glEnable
(
GL_LIGHTING
)
glEnable
(
GL_LIGHTING
)
glEnable
(
GL_LIGHT0
)
glEnable
(
GL_LIGHT0
)
glEnable
(
GL_LIGHT1
)
glEnable
(
GL_LIGHT1
)
# Define a simple function to create ctypes arrays of floats:
# Define a simple function to create ctypes arrays of floats:
def
vec
(
*
args
):
def
vec
(
*
args
):
return
(
GLfloat
*
len
(
args
))(
*
args
)
return
(
GLfloat
*
len
(
args
))(
*
args
)
glLightfv
(
GL_LIGHT0
,
GL_POSITION
,
vec
(
.5
,
.5
,
1
,
0
))
glLightfv
(
GL_LIGHT0
,
GL_POSITION
,
vec
(
.5
,
.5
,
1
,
0
))
glLightfv
(
GL_LIGHT0
,
GL_SPECULAR
,
vec
(
.5
,
.5
,
1
,
1
))
glLightfv
(
GL_LIGHT0
,
GL_SPECULAR
,
vec
(
.5
,
.5
,
1
,
1
))
glLightfv
(
GL_LIGHT0
,
GL_DIFFUSE
,
vec
(
1
,
1
,
1
,
1
))
glLightfv
(
GL_LIGHT0
,
GL_DIFFUSE
,
vec
(
1
,
1
,
1
,
1
))
glLightfv
(
GL_LIGHT1
,
GL_POSITION
,
vec
(
1
,
0
,
.5
,
0
))
glLightfv
(
GL_LIGHT1
,
GL_POSITION
,
vec
(
1
,
0
,
.5
,
0
))
glLightfv
(
GL_LIGHT1
,
GL_DIFFUSE
,
vec
(
.5
,
.5
,
.5
,
1
))
glLightfv
(
GL_LIGHT1
,
GL_DIFFUSE
,
vec
(
.5
,
.5
,
.5
,
1
))
glLightfv
(
GL_LIGHT1
,
GL_SPECULAR
,
vec
(
1
,
1
,
1
,
1
))
glLightfv
(
GL_LIGHT1
,
GL_SPECULAR
,
vec
(
1
,
1
,
1
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.5
,
0
,
0.3
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.5
,
0
,
0.3
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_SPECULAR
,
vec
(
1
,
1
,
1
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_SPECULAR
,
vec
(
1
,
1
,
1
,
1
))
glMaterialf
(
GL_FRONT_AND_BACK
,
GL_SHININESS
,
50
)
glMaterialf
(
GL_FRONT_AND_BACK
,
GL_SHININESS
,
50
)
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_EMISSION
,
vec
(
0
,
0.1
,
0
,
0.9
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_EMISSION
,
vec
(
0
,
0.1
,
0
,
0.9
))
#create objects to draw
#create objects to draw
#self.create_objects()
#self.create_objects()
def
OnReshape
(
self
,
width
,
height
):
def
OnReshape
(
self
,
width
,
height
):
'''Reshape the OpenGL viewport based on the dimensions of the window.'''
'''Reshape the OpenGL viewport based on the dimensions of the window.'''
if
not
self
.
GLinitialized
:
if
not
self
.
GLinitialized
:
self
.
OnInitGL
()
self
.
OnInitGL
()
self
.
GLinitialized
=
True
self
.
GLinitialized
=
True
self
.
pmat
=
(
GLdouble
*
16
)()
self
.
pmat
=
(
GLdouble
*
16
)()
self
.
mvmat
=
(
GLdouble
*
16
)()
self
.
mvmat
=
(
GLdouble
*
16
)()
glViewport
(
0
,
0
,
width
,
height
)
glViewport
(
0
,
0
,
width
,
height
)
glMatrixMode
(
GL_PROJECTION
)
glMatrixMode
(
GL_PROJECTION
)
glLoadIdentity
()
glLoadIdentity
()
...
@@ -151,43 +150,43 @@ class GLPanel(wx.Panel):
...
@@ -151,43 +150,43 @@ class GLPanel(wx.Panel):
glMatrixMode
(
GL_MODELVIEW
)
glMatrixMode
(
GL_MODELVIEW
)
glLoadIdentity
()
glLoadIdentity
()
#pyglet stuff
#pyglet stuff
self
.
vpmat
=
(
GLint
*
4
)(
0
,
0
,
*
list
(
self
.
GetClientSize
()))
self
.
vpmat
=
(
GLint
*
4
)(
0
,
0
,
*
list
(
self
.
GetClientSize
()))
glGetDoublev
(
GL_PROJECTION_MATRIX
,
self
.
pmat
)
glGetDoublev
(
GL_PROJECTION_MATRIX
,
self
.
pmat
)
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
#glMatrixMode(GL_PROJECTION)
#glMatrixMode(GL_PROJECTION)
# Wrap text to the width of the window
# Wrap text to the width of the window
if
self
.
GLinitialized
:
if
self
.
GLinitialized
:
self
.
pygletcontext
.
set_current
()
self
.
pygletcontext
.
set_current
()
self
.
update_object_resize
()
self
.
update_object_resize
()
def
OnDraw
(
self
,
*
args
,
**
kwargs
):
def
OnDraw
(
self
,
*
args
,
**
kwargs
):
"""Draw the window."""
"""Draw the window."""
#clear the context
#clear the context
self
.
canvas
.
SetCurrent
()
self
.
canvas
.
SetCurrent
()
self
.
pygletcontext
.
set_current
()
self
.
pygletcontext
.
set_current
()
glClear
(
GL_COLOR_BUFFER_BIT
|
GL_DEPTH_BUFFER_BIT
)
glClear
(
GL_COLOR_BUFFER_BIT
|
GL_DEPTH_BUFFER_BIT
)
#draw objects
#draw objects
self
.
draw_objects
()
self
.
draw_objects
()
#update screen
#update screen
self
.
SwapBuffers
()
self
.
SwapBuffers
()
#==========================================================================
#==========================================================================
# To be implemented by a sub class
# To be implemented by a sub class
#==========================================================================
#==========================================================================
def
create_objects
(
self
):
def
create_objects
(
self
):
'''create opengl objects when opengl is initialized'''
'''create opengl objects when opengl is initialized'''
pass
pass
def
update_object_resize
(
self
):
def
update_object_resize
(
self
):
'''called when the window recieves only if opengl is initialized'''
'''called when the window recieves only if opengl is initialized'''
pass
pass
def
draw_objects
(
self
):
def
draw_objects
(
self
):
'''called in the middle of ondraw after the buffer has been cleared'''
'''called in the middle of ondraw after the buffer has been cleared'''
pass
pass
class
stlview
(
object
):
class
stlview
(
object
):
def
__init__
(
self
,
facets
,
batch
):
def
__init__
(
self
,
facets
,
batch
):
# Create the vertex and normal arrays.
# Create the vertex and normal arrays.
...
@@ -200,234 +199,249 @@ class stlview(object):
...
@@ -200,234 +199,249 @@ class stlview(object):
normals
.
extend
(
i
[
0
])
normals
.
extend
(
i
[
0
])
# Create a list of triangle indices.
# Create a list of triangle indices.
indices
=
range
(
3
*
len
(
facets
))
#
[[3*i,3*i+1,3*i+2] for i in xrange(len(facets))]
indices
=
range
(
3
*
len
(
facets
))
#
[[3*i,3*i+1,3*i+2] for i in xrange(len(facets))]
#print indices[:10]
#print indices[:10]
self
.
vertex_list
=
batch
.
add_indexed
(
len
(
vertices
)
//
3
,
self
.
vertex_list
=
batch
.
add_indexed
(
len
(
vertices
)
//
3
,
GL_TRIANGLES
,
GL_TRIANGLES
,
None
,
#
group,
None
,
#
group,
indices
,
indices
,
(
'v3f/static'
,
vertices
),
(
'v3f/static'
,
vertices
),
(
'n3f/static'
,
normals
))
(
'n3f/static'
,
normals
))
def
delete
(
self
):
def
delete
(
self
):
self
.
vertex_list
.
delete
()
self
.
vertex_list
.
delete
()
def
vdiff
(
v
,
o
):
return
[
x
[
0
]
-
x
[
1
]
for
x
in
zip
(
v
,
o
)]
def
vdiff
(
v
,
o
):
return
[
x
[
0
]
-
x
[
1
]
for
x
in
zip
(
v
,
o
)]
class
gcview
(
object
):
class
gcview
(
object
):
def
__init__
(
self
,
lines
,
batch
,
w
=
0.5
,
h
=
0.5
):
def
__init__
(
self
,
lines
,
batch
,
w
=
0.5
,
h
=
0.5
):
# Create the vertex and normal arrays.
# Create the vertex and normal arrays.
vertices
=
[]
vertices
=
[]
normals
=
[]
normals
=
[]
self
.
prev
=
[
0.001
,
0.001
,
0.001
,
0.001
]
self
.
prev
=
[
0.001
,
0.001
,
0.001
,
0.001
]
self
.
fline
=
1
self
.
fline
=
1
self
.
vlists
=
[]
self
.
vlists
=
[]
self
.
layers
=
{}
self
.
layers
=
{}
t0
=
time
.
time
()
t0
=
time
.
time
()
lines
=
[
self
.
transform
(
i
)
for
i
in
lines
]
lines
=
[
self
.
transform
(
i
)
for
i
in
lines
]
lines
=
[
i
for
i
in
lines
if
i
is
not
None
]
lines
=
[
i
for
i
in
lines
if
i
is
not
None
]
print
"transformed lines in
%
fs"
%
(
time
.
time
()
-
t0
)
print
"transformed lines in
%
fs"
%
(
time
.
time
()
-
t0
)
t0
=
time
.
time
()
t0
=
time
.
time
()
layertemp
=
{}
layertemp
=
{}
lasth
=
None
lasth
=
None
counter
=
0
counter
=
0
if
len
(
lines
)
==
0
:
if
len
(
lines
)
==
0
:
return
return
for
i
in
lines
:
for
i
in
lines
:
counter
+=
1
counter
+=
1
if
i
[
0
][
2
]
not
in
layertemp
:
if
i
[
0
][
2
]
not
in
layertemp
:
layertemp
[
i
[
0
][
2
]]
=
[[],
[]]
layertemp
[
i
[
0
][
2
]]
=
[[],
[]]
if
lasth
is
not
None
:
if
lasth
is
not
None
:
self
.
layers
[
lasth
]
=
pyglet
.
graphics
.
Batch
()
self
.
layers
[
lasth
]
=
pyglet
.
graphics
.
Batch
()
lt
=
layertemp
[
lasth
][
0
]
lt
=
layertemp
[
lasth
][
0
]
indices
=
range
(
len
(
layertemp
[
lasth
][
0
])
//
3
)
#
[[3*i,3*i+1,3*i+2] for i in xrange(len(facets))]
indices
=
range
(
len
(
layertemp
[
lasth
][
0
])
//
3
)
#
[[3*i,3*i+1,3*i+2] for i in xrange(len(facets))]
self
.
vlists
.
append
(
self
.
layers
[
lasth
]
.
add_indexed
(
len
(
layertemp
[
lasth
][
0
])
//
3
,
self
.
vlists
.
append
(
self
.
layers
[
lasth
]
.
add_indexed
(
len
(
layertemp
[
lasth
][
0
])
//
3
,
GL_TRIANGLES
,
GL_TRIANGLES
,
None
,
#
group,
None
,
#
group,
indices
,
indices
,
(
'v3f/static'
,
layertemp
[
lasth
][
0
]),
(
'v3f/static'
,
layertemp
[
lasth
][
0
]),
(
'n3f/static'
,
layertemp
[
lasth
][
1
])))
(
'n3f/static'
,
layertemp
[
lasth
][
1
])))
lasth
=
i
[
0
][
2
]
lasth
=
i
[
0
][
2
]
spoints
,
epoints
,
S
,
E
=
self
.
genline
(
i
,
h
,
w
)
spoints
,
epoints
,
S
,
E
=
self
.
genline
(
i
,
h
,
w
)
verticestoadd
=
[[
spoints
[(
j
+
1
)
%
8
],
epoints
[(
j
)
%
8
],
spoints
[
j
],
epoints
[
j
],
spoints
[(
j
+
1
)
%
8
],
epoints
[(
j
+
1
)
%
8
]]
for
j
in
xrange
(
8
)]
verticestoadd
=
[[
normalstoadd
=
[
map
(
vdiff
,
v
,[
S
,
E
,
S
,
E
,
S
,
E
])
for
v
in
verticestoadd
]
spoints
[(
j
+
1
)
%
8
],
v1
=
[]
epoints
[(
j
)
%
8
],
map
(
v1
.
extend
,
verticestoadd
)
spoints
[
j
],
v2
=
[]
epoints
[
j
],
map
(
v2
.
extend
,
v1
)
spoints
[(
j
+
1
)
%
8
],
n1
=
[]
epoints
[(
j
+
1
)
%
8
]
map
(
n1
.
extend
,
normalstoadd
)
]
for
j
in
xrange
(
8
)]
n2
=
[]
normalstoadd
=
[
map
(
vdiff
,
v
,
[
S
,
E
,
S
,
E
,
S
,
E
])
for
v
in
verticestoadd
]
map
(
n2
.
extend
,
n1
)
v1
=
[]
map
(
v1
.
extend
,
verticestoadd
)
layertemp
[
i
[
0
][
2
]][
0
]
+=
v2
v2
=
[]
vertices
+=
v2
map
(
v2
.
extend
,
v1
)
layertemp
[
i
[
0
][
2
]][
1
]
+=
n2
n1
=
[]
normals
+=
n2
map
(
n1
.
extend
,
normalstoadd
)
print
"appended lines in
%
fs"
%
(
time
.
time
()
-
t0
)
n2
=
[]
t0
=
time
.
time
()
map
(
n2
.
extend
,
n1
)
layertemp
[
i
[
0
][
2
]][
0
]
+=
v2
vertices
+=
v2
layertemp
[
i
[
0
][
2
]][
1
]
+=
n2
normals
+=
n2
print
"appended lines in
%
fs"
%
(
time
.
time
()
-
t0
)
t0
=
time
.
time
()
# Create a list of triangle indices.
# Create a list of triangle indices.
indices
=
range
(
3
*
16
*
len
(
lines
))
#
[[3*i,3*i+1,3*i+2] for i in xrange(len(facets))]
indices
=
range
(
3
*
16
*
len
(
lines
))
#
[[3*i,3*i+1,3*i+2] for i in xrange(len(facets))]
self
.
vlists
.
append
(
batch
.
add_indexed
(
len
(
vertices
)
//
3
,
self
.
vlists
.
append
(
batch
.
add_indexed
(
len
(
vertices
)
//
3
,
GL_TRIANGLES
,
GL_TRIANGLES
,
None
,
#
group,
None
,
#
group,
indices
,
indices
,
(
'v3f/static'
,
vertices
),
(
'v3f/static'
,
vertices
),
(
'n3f/static'
,
normals
)))
(
'n3f/static'
,
normals
)))
if
lasth
is
not
None
:
if
lasth
is
not
None
:
self
.
layers
[
lasth
]
=
pyglet
.
graphics
.
Batch
()
self
.
layers
[
lasth
]
=
pyglet
.
graphics
.
Batch
()
indices
=
range
(
len
(
layertemp
[
lasth
][
0
]))
#
[[3*i,3*i+1,3*i+2] for i in xrange(len(facets))]
indices
=
range
(
len
(
layertemp
[
lasth
][
0
]))
#
[[3*i,3*i+1,3*i+2] for i in xrange(len(facets))]
self
.
vlists
.
append
(
self
.
layers
[
lasth
]
.
add_indexed
(
len
(
layertemp
[
lasth
][
0
])
//
3
,
self
.
vlists
.
append
(
self
.
layers
[
lasth
]
.
add_indexed
(
len
(
layertemp
[
lasth
][
0
])
//
3
,
GL_TRIANGLES
,
GL_TRIANGLES
,
None
,
#
group,
None
,
#
group,
indices
,
indices
,
(
'v3f/static'
,
layertemp
[
lasth
][
0
]),
(
'v3f/static'
,
layertemp
[
lasth
][
0
]),
(
'n3f/static'
,
layertemp
[
lasth
][
1
])))
(
'n3f/static'
,
layertemp
[
lasth
][
1
])))
def
genline
(
self
,
i
,
h
,
w
):
def
genline
(
self
,
i
,
h
,
w
):
S
=
i
[
0
][:
3
]
S
=
i
[
0
][:
3
]
E
=
i
[
1
][:
3
]
E
=
i
[
1
][:
3
]
v
=
map
(
lambda
x
,
y
:
x
-
y
,
E
,
S
)
v
=
map
(
lambda
x
,
y
:
x
-
y
,
E
,
S
)
vlen
=
math
.
sqrt
(
float
(
sum
(
map
(
lambda
a
:
a
*
a
,
v
[:
3
]))))
vlen
=
math
.
sqrt
(
float
(
sum
(
map
(
lambda
a
:
a
*
a
,
v
[:
3
]))))
if
vlen
==
0
:
if
vlen
==
0
:
vlen
=
0.01
vlen
=
0.01
sq2
=
math
.
sqrt
(
2.0
)
/
2.0
sq2
=
math
.
sqrt
(
2.0
)
/
2.0
htw
=
float
(
h
)
/
w
htw
=
float
(
h
)
/
w
d
=
w
/
2.0
d
=
w
/
2.0
if
i
[
1
][
3
]
==
i
[
0
][
3
]:
if
i
[
1
][
3
]
==
i
[
0
][
3
]:
d
=
0.05
d
=
0.05
points
=
[[
d
,
0
,
0
],
points
=
[[
d
,
0
,
0
],
[
sq2
*
d
,
sq2
*
d
,
0
],
[
sq2
*
d
,
sq2
*
d
,
0
],
[
0
,
d
,
0
],
[
0
,
d
,
0
],
[
-
sq2
*
d
,
sq2
*
d
,
0
],
[
-
sq2
*
d
,
sq2
*
d
,
0
],
[
-
d
,
0
,
0
],
[
-
d
,
0
,
0
],
[
-
sq2
*
d
,
-
sq2
*
d
,
0
],
[
-
sq2
*
d
,
-
sq2
*
d
,
0
],
[
0
,
-
d
,
0
],
[
0
,
-
d
,
0
],
[
sq2
*
d
,
-
sq2
*
d
,
0
]
[
sq2
*
d
,
-
sq2
*
d
,
0
]
]
]
axis
=
stltool
.
cross
([
0
,
0
,
1
],
v
)
axis
=
stltool
.
cross
([
0
,
0
,
1
],
v
)
alen
=
math
.
sqrt
(
float
(
sum
(
map
(
lambda
a
:
a
*
a
,
v
[:
3
]))))
alen
=
math
.
sqrt
(
float
(
sum
(
map
(
lambda
a
:
a
*
a
,
v
[:
3
]))))
if
alen
>
0
:
if
alen
>
0
:
axis
=
map
(
lambda
m
:
m
/
alen
,
axis
)
axis
=
map
(
lambda
m
:
m
/
alen
,
axis
)
angle
=
math
.
acos
(
v
[
2
]
/
vlen
)
angle
=
math
.
acos
(
v
[
2
]
/
vlen
)
def
vrot
(
v
,
axis
,
angle
):
def
vrot
(
v
,
axis
,
angle
):
kxv
=
stltool
.
cross
(
axis
,
v
)
kxv
=
stltool
.
cross
(
axis
,
v
)
kdv
=
sum
(
map
(
lambda
x
,
y
:
x
*
y
,
axis
,
v
))
kdv
=
sum
(
map
(
lambda
x
,
y
:
x
*
y
,
axis
,
v
))
return
map
(
lambda
x
,
y
,
z
:
x
*
math
.
cos
(
angle
)
+
y
*
math
.
sin
(
angle
)
+
z
*
kdv
*
(
1.0
-
math
.
cos
(
angle
)),
v
,
kxv
,
axis
)
return
map
(
lambda
x
,
y
,
z
:
x
*
math
.
cos
(
angle
)
+
y
*
math
.
sin
(
angle
)
+
z
*
kdv
*
(
1.0
-
math
.
cos
(
angle
)),
v
,
kxv
,
axis
)
points
=
map
(
lambda
x
:
vrot
(
x
,
axis
,
angle
),
points
)
points
=
map
(
lambda
x
:[
x
[
0
],
x
[
1
],
htw
*
x
[
2
]],
points
)
points
=
map
(
lambda
x
:
vrot
(
x
,
axis
,
angle
),
points
)
points
=
map
(
lambda
x
:
[
x
[
0
],
x
[
1
],
htw
*
x
[
2
]],
points
)
def
vadd
(
v
,
o
):
return
map
(
sum
,
zip
(
v
,
o
))
def
vadd
(
v
,
o
):
spoints
=
map
(
lambda
x
:
vadd
(
S
,
x
),
points
)
return
map
(
sum
,
zip
(
v
,
o
))
epoints
=
map
(
lambda
x
:
vadd
(
E
,
x
),
points
)
spoints
=
map
(
lambda
x
:
vadd
(
S
,
x
),
points
)
return
spoints
,
epoints
,
S
,
E
epoints
=
map
(
lambda
x
:
vadd
(
E
,
x
),
points
)
return
spoints
,
epoints
,
S
,
E
def
transform
(
self
,
line
):
line
=
line
.
split
(
";"
)[
0
]
def
transform
(
self
,
line
):
cur
=
self
.
prev
[:]
line
=
line
.
split
(
";"
)[
0
]
if
len
(
line
)
>
0
:
cur
=
self
.
prev
[:]
if
len
(
line
)
>
0
:
if
"G1"
in
line
or
"G0"
in
line
or
"G92"
in
line
:
if
"G1"
in
line
or
"G0"
in
line
or
"G92"
in
line
:
if
(
"X"
in
line
):
if
(
"X"
in
line
):
cur
[
0
]
=
float
(
line
.
split
(
"X"
)[
1
]
.
split
(
" "
)[
0
])
cur
[
0
]
=
float
(
line
.
split
(
"X"
)[
1
]
.
split
(
" "
)[
0
])
if
(
"Y"
in
line
):
if
(
"Y"
in
line
):
cur
[
1
]
=
float
(
line
.
split
(
"Y"
)[
1
]
.
split
(
" "
)[
0
])
cur
[
1
]
=
float
(
line
.
split
(
"Y"
)[
1
]
.
split
(
" "
)[
0
])
if
(
"Z"
in
line
):
if
(
"Z"
in
line
):
cur
[
2
]
=
float
(
line
.
split
(
"Z"
)[
1
]
.
split
(
" "
)[
0
])
cur
[
2
]
=
float
(
line
.
split
(
"Z"
)[
1
]
.
split
(
" "
)[
0
])
if
(
"E"
in
line
):
if
(
"E"
in
line
):
cur
[
3
]
=
float
(
line
.
split
(
"E"
)[
1
]
.
split
(
" "
)[
0
])
cur
[
3
]
=
float
(
line
.
split
(
"E"
)[
1
]
.
split
(
" "
)[
0
])
if
self
.
prev
==
cur
:
if
self
.
prev
==
cur
:
return
None
return
None
if
self
.
fline
or
"G92"
in
line
:
if
self
.
fline
or
"G92"
in
line
:
self
.
prev
=
cur
self
.
prev
=
cur
self
.
fline
=
0
self
.
fline
=
0
return
None
return
None
else
:
else
:
r
=
[
self
.
prev
,
cur
]
r
=
[
self
.
prev
,
cur
]
self
.
prev
=
cur
self
.
prev
=
cur
return
r
return
r
def
delete
(
self
):
def
delete
(
self
):
for
i
in
self
.
vlists
:
for
i
in
self
.
vlists
:
i
.
delete
()
i
.
delete
()
self
.
vlists
=
[]
self
.
vlists
=
[]
def
trackball
(
p1x
,
p1y
,
p2x
,
p2y
,
r
):
def
trackball
(
p1x
,
p1y
,
p2x
,
p2y
,
r
):
TRACKBALLSIZE
=
r
TRACKBALLSIZE
=
r
#float a[3]; /* Axis of rotation */
#float a[3]; /* Axis of rotation */
#float phi; /* how much to rotate about axis */
#float phi; /* how much to rotate about axis */
#float p1[3], p2[3], d[3];
#float p1[3], p2[3], d[3];
#float t;
#float t;
if
(
p1x
==
p2x
and
p1y
==
p2y
):
if
(
p1x
==
p2x
and
p1y
==
p2y
):
return
[
0.0
,
0.0
,
0.0
,
1.0
]
return
[
0.0
,
0.0
,
0.0
,
1.0
]
p1
=
[
p1x
,
p1y
,
project_to_sphere
(
TRACKBALLSIZE
,
p1x
,
p1y
)]
p2
=
[
p2x
,
p2y
,
project_to_sphere
(
TRACKBALLSIZE
,
p2x
,
p2y
)]
a
=
stltool
.
cross
(
p2
,
p1
)
p1
=
[
p1x
,
p1y
,
project_to_sphere
(
TRACKBALLSIZE
,
p1x
,
p1y
)]
d
=
map
(
lambda
x
,
y
:
x
-
y
,
p1
,
p2
)
p2
=
[
p2x
,
p2y
,
project_to_sphere
(
TRACKBALLSIZE
,
p2x
,
p2y
)]
t
=
math
.
sqrt
(
sum
(
map
(
lambda
x
:
x
*
x
,
d
)))
/
(
2.0
*
TRACKBALLSIZE
)
a
=
stltool
.
cross
(
p2
,
p1
)
d
=
map
(
lambda
x
,
y
:
x
-
y
,
p1
,
p2
)
t
=
math
.
sqrt
(
sum
(
map
(
lambda
x
:
x
*
x
,
d
)))
/
(
2.0
*
TRACKBALLSIZE
)
if
(
t
>
1.0
):
t
=
1.0
if
(
t
>
1.0
):
if
(
t
<
-
1.0
):
t
=
-
1.0
t
=
1.0
if
(
t
<
-
1.0
):
t
=
-
1.0
phi
=
2.0
*
math
.
asin
(
t
)
phi
=
2.0
*
math
.
asin
(
t
)
return
axis_to_quat
(
a
,
phi
)
return
axis_to_quat
(
a
,
phi
)
def
vec
(
*
args
):
def
vec
(
*
args
):
return
(
GLfloat
*
len
(
args
))(
*
args
)
return
(
GLfloat
*
len
(
args
))(
*
args
)
def
axis_to_quat
(
a
,
phi
):
def
axis_to_quat
(
a
,
phi
):
#print a, phi
#print a, phi
lena
=
math
.
sqrt
(
sum
(
map
(
lambda
x
:
x
*
x
,
a
)))
lena
=
math
.
sqrt
(
sum
(
map
(
lambda
x
:
x
*
x
,
a
)))
q
=
map
(
lambda
x
:
x
*
(
1
/
lena
),
a
)
q
=
map
(
lambda
x
:
x
*
(
1
/
lena
),
a
)
q
=
map
(
lambda
x
:
x
*
math
.
sin
(
phi
/
2.0
),
q
)
q
=
map
(
lambda
x
:
x
*
math
.
sin
(
phi
/
2.0
),
q
)
q
.
append
(
math
.
cos
(
phi
/
2.0
))
q
.
append
(
math
.
cos
(
phi
/
2.0
))
return
q
return
q
def
build_rotmatrix
(
q
):
def
build_rotmatrix
(
q
):
m
=
(
GLdouble
*
16
)()
m
=
(
GLdouble
*
16
)()
m
[
0
]
=
1.0
-
2.0
*
(
q
[
1
]
*
q
[
1
]
+
q
[
2
]
*
q
[
2
])
m
[
0
]
=
1.0
-
2.0
*
(
q
[
1
]
*
q
[
1
]
+
q
[
2
]
*
q
[
2
])
m
[
1
]
=
2.0
*
(
q
[
0
]
*
q
[
1
]
-
q
[
2
]
*
q
[
3
])
;
m
[
1
]
=
2.0
*
(
q
[
0
]
*
q
[
1
]
-
q
[
2
]
*
q
[
3
])
m
[
2
]
=
2.0
*
(
q
[
2
]
*
q
[
0
]
+
q
[
1
]
*
q
[
3
])
;
m
[
2
]
=
2.0
*
(
q
[
2
]
*
q
[
0
]
+
q
[
1
]
*
q
[
3
])
m
[
3
]
=
0.0
;
m
[
3
]
=
0.0
m
[
4
]
=
2.0
*
(
q
[
0
]
*
q
[
1
]
+
q
[
2
]
*
q
[
3
])
;
m
[
4
]
=
2.0
*
(
q
[
0
]
*
q
[
1
]
+
q
[
2
]
*
q
[
3
])
m
[
5
]
=
1.0
-
2.0
*
(
q
[
2
]
*
q
[
2
]
+
q
[
0
]
*
q
[
0
]);
m
[
5
]
=
1.0
-
2.0
*
(
q
[
2
]
*
q
[
2
]
+
q
[
0
]
*
q
[
0
])
m
[
6
]
=
2.0
*
(
q
[
1
]
*
q
[
2
]
-
q
[
0
]
*
q
[
3
])
;
m
[
6
]
=
2.0
*
(
q
[
1
]
*
q
[
2
]
-
q
[
0
]
*
q
[
3
])
m
[
7
]
=
0.0
;
m
[
7
]
=
0.0
m
[
8
]
=
2.0
*
(
q
[
2
]
*
q
[
0
]
-
q
[
1
]
*
q
[
3
])
;
m
[
8
]
=
2.0
*
(
q
[
2
]
*
q
[
0
]
-
q
[
1
]
*
q
[
3
])
m
[
9
]
=
2.0
*
(
q
[
1
]
*
q
[
2
]
+
q
[
0
]
*
q
[
3
])
;
m
[
9
]
=
2.0
*
(
q
[
1
]
*
q
[
2
]
+
q
[
0
]
*
q
[
3
])
m
[
10
]
=
1.0
-
2.0
*
(
q
[
1
]
*
q
[
1
]
+
q
[
0
]
*
q
[
0
])
;
m
[
10
]
=
1.0
-
2.0
*
(
q
[
1
]
*
q
[
1
]
+
q
[
0
]
*
q
[
0
])
m
[
11
]
=
0.0
;
m
[
11
]
=
0.0
m
[
12
]
=
0.0
;
m
[
12
]
=
0.0
m
[
13
]
=
0.0
;
m
[
13
]
=
0.0
m
[
14
]
=
0.0
;
m
[
14
]
=
0.0
m
[
15
]
=
1.0
;
m
[
15
]
=
1.0
return
m
return
m
def
project_to_sphere
(
r
,
x
,
y
):
def
project_to_sphere
(
r
,
x
,
y
):
d
=
math
.
sqrt
(
x
*
x
+
y
*
y
)
d
=
math
.
sqrt
(
x
*
x
+
y
*
y
)
if
(
d
<
r
*
0.70710678118654752440
):
if
(
d
<
r
*
0.70710678118654752440
):
return
math
.
sqrt
(
r
*
r
-
d
*
d
)
return
math
.
sqrt
(
r
*
r
-
d
*
d
)
else
:
else
:
t
=
r
/
1.41421356237309504880
t
=
r
/
1.41421356237309504880
return
t
*
t
/
d
return
t
*
t
/
d
def
mulquat
(
q1
,
rq
):
def
mulquat
(
q1
,
rq
):
return
[
q1
[
3
]
*
rq
[
0
]
+
q1
[
0
]
*
rq
[
3
]
+
q1
[
1
]
*
rq
[
2
]
-
q1
[
2
]
*
rq
[
1
],
return
[
q1
[
3
]
*
rq
[
0
]
+
q1
[
0
]
*
rq
[
3
]
+
q1
[
1
]
*
rq
[
2
]
-
q1
[
2
]
*
rq
[
1
],
q1
[
3
]
*
rq
[
1
]
+
q1
[
1
]
*
rq
[
3
]
+
q1
[
2
]
*
rq
[
0
]
-
q1
[
0
]
*
rq
[
2
],
q1
[
3
]
*
rq
[
1
]
+
q1
[
1
]
*
rq
[
3
]
+
q1
[
2
]
*
rq
[
0
]
-
q1
[
0
]
*
rq
[
2
],
q1
[
3
]
*
rq
[
2
]
+
q1
[
2
]
*
rq
[
3
]
+
q1
[
0
]
*
rq
[
1
]
-
q1
[
1
]
*
rq
[
0
],
q1
[
3
]
*
rq
[
2
]
+
q1
[
2
]
*
rq
[
3
]
+
q1
[
0
]
*
rq
[
1
]
-
q1
[
1
]
*
rq
[
0
],
...
@@ -435,40 +449,39 @@ def mulquat(q1,rq):
...
@@ -435,40 +449,39 @@ def mulquat(q1,rq):
class
TestGlPanel
(
GLPanel
):
class
TestGlPanel
(
GLPanel
):
def
__init__
(
self
,
parent
,
size
,
id
=
wx
.
ID_ANY
,
):
def
__init__
(
self
,
parent
,
size
,
id
=
wx
.
ID_ANY
):
super
(
TestGlPanel
,
self
)
.
__init__
(
parent
,
id
,
wx
.
DefaultPosition
,
size
,
0
)
super
(
TestGlPanel
,
self
)
.
__init__
(
parent
,
id
,
wx
.
DefaultPosition
,
size
,
0
)
self
.
batches
=
[]
self
.
batches
=
[]
self
.
rot
=
0
self
.
rot
=
0
self
.
canvas
.
Bind
(
wx
.
EVT_MOUSE_EVENTS
,
self
.
move
)
self
.
canvas
.
Bind
(
wx
.
EVT_MOUSE_EVENTS
,
self
.
move
)
self
.
canvas
.
Bind
(
wx
.
EVT_LEFT_DCLICK
,
self
.
double
)
self
.
canvas
.
Bind
(
wx
.
EVT_LEFT_DCLICK
,
self
.
double
)
self
.
initialized
=
1
self
.
initialized
=
1
self
.
canvas
.
Bind
(
wx
.
EVT_MOUSEWHEEL
,
self
.
wheel
)
self
.
canvas
.
Bind
(
wx
.
EVT_MOUSEWHEEL
,
self
.
wheel
)
self
.
parent
=
parent
self
.
parent
=
parent
self
.
initpos
=
None
self
.
initpos
=
None
self
.
dist
=
200
self
.
dist
=
200
self
.
bedsize
=
[
200
,
200
]
self
.
bedsize
=
[
200
,
200
]
self
.
transv
=
[
0
,
0
,
-
self
.
dist
]
self
.
transv
=
[
0
,
0
,
-
self
.
dist
]
self
.
basequat
=
[
0
,
0
,
0
,
1
]
self
.
basequat
=
[
0
,
0
,
0
,
1
]
wx
.
CallAfter
(
self
.
forceresize
)
wx
.
CallAfter
(
self
.
forceresize
)
self
.
mousepos
=
[
0
,
0
]
self
.
mousepos
=
[
0
,
0
]
def
double
(
self
,
event
):
def
double
(
self
,
event
):
p
=
event
.
GetPositionTuple
()
p
=
event
.
GetPositionTuple
()
sz
=
self
.
GetClientSize
()
sz
=
self
.
GetClientSize
()
v
=
map
(
lambda
m
,
w
,
b
:
b
*
m
/
w
,
p
,
sz
,
self
.
bedsize
)
v
=
map
(
lambda
m
,
w
,
b
:
b
*
m
/
w
,
p
,
sz
,
self
.
bedsize
)
v
[
1
]
=
self
.
bedsize
[
1
]
-
v
[
1
]
v
[
1
]
=
self
.
bedsize
[
1
]
-
v
[
1
]
v
+=
[
300
]
v
+=
[
300
]
print
v
print
v
self
.
add_file
(
"../prusa/metric-prusa/x-end-idler.stl"
,
v
)
self
.
add_file
(
"../prusa/metric-prusa/x-end-idler.stl"
,
v
)
def
forceresize
(
self
):
def
forceresize
(
self
):
self
.
SetClientSize
((
self
.
GetClientSize
()[
0
],
self
.
GetClientSize
()[
1
]
+
1
))
self
.
SetClientSize
((
self
.
GetClientSize
()[
0
],
self
.
GetClientSize
()[
1
]
+
1
))
self
.
SetClientSize
((
self
.
GetClientSize
()[
0
],
self
.
GetClientSize
()[
1
]
-
1
))
self
.
SetClientSize
((
self
.
GetClientSize
()[
0
],
self
.
GetClientSize
()[
1
]
-
1
))
threading
.
Thread
(
target
=
self
.
update
)
.
start
()
threading
.
Thread
(
target
=
self
.
update
)
.
start
()
self
.
initialized
=
0
self
.
initialized
=
0
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)
by an offset specified in tuple delta.
by an offset specified in tuple delta.
...
@@ -497,8 +510,8 @@ class TestGlPanel(GLPanel):
...
@@ -497,8 +510,8 @@ class TestGlPanel(GLPanel):
with shift move viewport
with shift move viewport
"""
"""
if
event
.
Dragging
()
and
event
.
LeftIsDown
():
if
event
.
Dragging
()
and
event
.
LeftIsDown
():
if
self
.
initpos
==
None
:
if
self
.
initpos
==
None
:
self
.
initpos
=
event
.
GetPositionTuple
()
self
.
initpos
=
event
.
GetPositionTuple
()
else
:
else
:
if
not
event
.
ShiftDown
():
if
not
event
.
ShiftDown
():
currentpos
=
event
.
GetPositionTuple
()
currentpos
=
event
.
GetPositionTuple
()
...
@@ -507,70 +520,69 @@ class TestGlPanel(GLPanel):
...
@@ -507,70 +520,69 @@ class TestGlPanel(GLPanel):
-
(
currentpos
[
1
]
-
self
.
initpos
[
1
])
-
(
currentpos
[
1
]
-
self
.
initpos
[
1
])
)
)
self
.
move_shape
(
delta
)
self
.
move_shape
(
delta
)
self
.
initpos
=
None
self
.
initpos
=
None
return
return
#print self.initpos
#print self.initpos
p1
=
self
.
initpos
p1
=
self
.
initpos
self
.
initpos
=
None
self
.
initpos
=
None
p2
=
event
.
GetPositionTuple
()
p2
=
event
.
GetPositionTuple
()
sz
=
self
.
GetClientSize
()
sz
=
self
.
GetClientSize
()
p1x
=
(
float
(
p1
[
0
])
-
sz
[
0
]
/
2
)
/
(
sz
[
0
]
/
2
)
p1x
=
(
float
(
p1
[
0
])
-
sz
[
0
]
/
2
)
/
(
sz
[
0
]
/
2
)
p1y
=-
(
float
(
p1
[
1
])
-
sz
[
1
]
/
2
)
/
(
sz
[
1
]
/
2
)
p1y
=
-
(
float
(
p1
[
1
])
-
sz
[
1
]
/
2
)
/
(
sz
[
1
]
/
2
)
p2x
=
(
float
(
p2
[
0
])
-
sz
[
0
]
/
2
)
/
(
sz
[
0
]
/
2
)
p2x
=
(
float
(
p2
[
0
])
-
sz
[
0
]
/
2
)
/
(
sz
[
0
]
/
2
)
p2y
=-
(
float
(
p2
[
1
])
-
sz
[
1
]
/
2
)
/
(
sz
[
1
]
/
2
)
p2y
=
-
(
float
(
p2
[
1
])
-
sz
[
1
]
/
2
)
/
(
sz
[
1
]
/
2
)
#print p1x,p1y,p2x,p2y
#print p1x,p1y,p2x,p2y
quat
=
trackball
(
p1x
,
p1y
,
p2x
,
p2y
,
-
self
.
transv
[
2
]
/
250.0
)
quat
=
trackball
(
p1x
,
p1y
,
p2x
,
p2y
,
-
self
.
transv
[
2
]
/
250.0
)
if
self
.
rot
:
if
self
.
rot
:
self
.
basequat
=
mulquat
(
self
.
basequat
,
quat
)
self
.
basequat
=
mulquat
(
self
.
basequat
,
quat
)
#else:
#else:
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
#self.basequat
=
quatx
#self.basequat
=
quatx
mat
=
build_rotmatrix
(
self
.
basequat
)
mat
=
build_rotmatrix
(
self
.
basequat
)
glLoadIdentity
()
glLoadIdentity
()
glTranslatef
(
self
.
transv
[
0
],
self
.
transv
[
1
],
0
)
glTranslatef
(
self
.
transv
[
0
],
self
.
transv
[
1
],
0
)
glTranslatef
(
0
,
0
,
self
.
transv
[
2
])
glTranslatef
(
0
,
0
,
self
.
transv
[
2
])
glMultMatrixd
(
mat
)
glMultMatrixd
(
mat
)
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
self
.
rot
=
1
self
.
rot
=
1
elif
event
.
ButtonUp
(
wx
.
MOUSE_BTN_LEFT
):
elif
event
.
ButtonUp
(
wx
.
MOUSE_BTN_LEFT
):
if
self
.
initpos
is
not
None
:
if
self
.
initpos
is
not
None
:
self
.
initpos
=
None
self
.
initpos
=
None
elif
event
.
ButtonUp
(
wx
.
MOUSE_BTN_RIGHT
):
elif
event
.
ButtonUp
(
wx
.
MOUSE_BTN_RIGHT
):
if
self
.
initpos
is
not
None
:
if
self
.
initpos
is
not
None
:
self
.
initpos
=
None
self
.
initpos
=
None
elif
event
.
Dragging
()
and
event
.
RightIsDown
()
and
event
.
ShiftDown
():
elif
event
.
Dragging
()
and
event
.
RightIsDown
()
and
event
.
ShiftDown
():
if
self
.
initpos
is
None
:
if
self
.
initpos
is
None
:
self
.
initpos
=
event
.
GetPositionTuple
()
self
.
initpos
=
event
.
GetPositionTuple
()
else
:
else
:
p1
=
self
.
initpos
p1
=
self
.
initpos
p2
=
event
.
GetPositionTuple
()
p2
=
event
.
GetPositionTuple
()
sz
=
self
.
GetClientSize
()
sz
=
self
.
GetClientSize
()
p1
=
list
(
p1
)
p1
=
list
(
p1
)
p2
=
list
(
p2
)
p2
=
list
(
p2
)
p1
[
1
]
*=
-
1
p1
[
1
]
*=
-
1
p2
[
1
]
*=
-
1
p2
[
1
]
*=
-
1
self
.
transv
=
map
(
lambda
x
,
y
,
z
,
c
:
c
-
self
.
dist
*
(
x
-
y
)
/
z
,
list
(
p1
)
+
[
0
],
list
(
p2
)
+
[
0
],
list
(
sz
)
+
[
1
],
self
.
transv
)
self
.
transv
=
map
(
lambda
x
,
y
,
z
,
c
:
c
-
self
.
dist
*
(
x
-
y
)
/
z
,
list
(
p1
)
+
[
0
],
list
(
p2
)
+
[
0
],
list
(
sz
)
+
[
1
],
self
.
transv
)
glLoadIdentity
()
glLoadIdentity
()
glTranslatef
(
self
.
transv
[
0
],
self
.
transv
[
1
],
0
)
glTranslatef
(
self
.
transv
[
0
],
self
.
transv
[
1
],
0
)
glTranslatef
(
0
,
0
,
self
.
transv
[
2
])
glTranslatef
(
0
,
0
,
self
.
transv
[
2
])
if
(
self
.
rot
):
if
(
self
.
rot
):
glMultMatrixd
(
build_rotmatrix
(
self
.
basequat
))
glMultMatrixd
(
build_rotmatrix
(
self
.
basequat
))
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
self
.
rot
=
1
self
.
rot
=
1
self
.
initpos
=
None
self
.
initpos
=
None
else
:
else
:
#mouse is moving without a button press
#mouse is moving without a button press
p
=
event
.
GetPositionTuple
()
p
=
event
.
GetPositionTuple
()
sz
=
self
.
GetClientSize
()
sz
=
self
.
GetClientSize
()
v
=
map
(
lambda
m
,
w
,
b
:
b
*
m
/
w
,
p
,
sz
,
self
.
bedsize
)
v
=
map
(
lambda
m
,
w
,
b
:
b
*
m
/
w
,
p
,
sz
,
self
.
bedsize
)
v
[
1
]
=
self
.
bedsize
[
1
]
-
v
[
1
]
v
[
1
]
=
self
.
bedsize
[
1
]
-
v
[
1
]
self
.
mousepos
=
v
self
.
mousepos
=
v
def
rotate_shape
(
self
,
angle
):
def
rotate_shape
(
self
,
angle
):
"""rotates acive shape
"""rotates acive shape
positive angle is clockwise
positive angle is clockwise
...
@@ -582,40 +594,40 @@ class TestGlPanel(GLPanel):
...
@@ -582,40 +594,40 @@ class TestGlPanel(GLPanel):
model
=
self
.
parent
.
models
[
name
]
model
=
self
.
parent
.
models
[
name
]
model
.
rot
+=
angle
model
.
rot
+=
angle
def
wheel
(
self
,
event
):
def
wheel
(
self
,
event
):
"""react to mouse wheel actions:
"""react to mouse wheel actions:
rotate object
rotate object
with shift zoom viewport
with shift zoom viewport
"""
"""
z
=
event
.
GetWheelRotation
()
z
=
event
.
GetWheelRotation
()
angle
=
10
angle
=
10
if
not
event
.
ShiftDown
():
if
not
event
.
ShiftDown
():
i
=
self
.
parent
.
l
.
GetSelection
()
i
=
self
.
parent
.
l
.
GetSelection
()
if
i
<
0
:
if
i
<
0
:
try
:
try
:
self
.
parent
.
setlayerindex
(
z
)
self
.
parent
.
setlayerindex
(
z
)
except
:
except
:
pass
pass
return
return
if
z
>
0
:
if
z
>
0
:
self
.
rotate_shape
(
angle
/
2
)
self
.
rotate_shape
(
angle
/
2
)
else
:
else
:
self
.
rotate_shape
(
-
angle
/
2
)
self
.
rotate_shape
(
-
angle
/
2
)
return
return
if
z
>
0
:
if
z
>
0
:
self
.
transv
[
2
]
+=
angle
self
.
transv
[
2
]
+=
angle
else
:
else
:
self
.
transv
[
2
]
-=
angle
self
.
transv
[
2
]
-=
angle
glLoadIdentity
()
glLoadIdentity
()
glTranslatef
(
*
self
.
transv
)
glTranslatef
(
*
self
.
transv
)
if
(
self
.
rot
):
if
(
self
.
rot
):
glMultMatrixd
(
build_rotmatrix
(
self
.
basequat
))
glMultMatrixd
(
build_rotmatrix
(
self
.
basequat
))
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
glGetDoublev
(
GL_MODELVIEW_MATRIX
,
self
.
mvmat
)
self
.
rot
=
1
self
.
rot
=
1
def
keypress
(
self
,
event
):
def
keypress
(
self
,
event
):
"""gets keypress events and moves/rotates acive shape"""
"""gets keypress events and moves/rotates acive shape"""
keycode
=
event
.
GetKeyCode
()
keycode
=
event
.
GetKeyCode
()
...
@@ -644,67 +656,65 @@ class TestGlPanel(GLPanel):
...
@@ -644,67 +656,65 @@ class TestGlPanel(GLPanel):
if
keycode
==
93
:
if
keycode
==
93
:
self
.
rotate_shape
(
angle
)
self
.
rotate_shape
(
angle
)
event
.
Skip
()
event
.
Skip
()
def
update
(
self
):
def
update
(
self
):
while
(
1
):
while
(
1
):
dt
=
0.05
dt
=
0.05
time
.
sleep
(
0.05
)
time
.
sleep
(
0.05
)
try
:
try
:
wx
.
CallAfter
(
self
.
Refresh
)
wx
.
CallAfter
(
self
.
Refresh
)
except
:
except
:
return
return
def
anim
(
self
,
obj
):
def
anim
(
self
,
obj
):
g
=
50
*
9.8
g
=
50
*
9.8
v
=
20
v
=
20
dt
=
0.05
dt
=
0.05
basepos
=
obj
.
offsets
[
2
]
basepos
=
obj
.
offsets
[
2
]
obj
.
offsets
[
2
]
+=
obj
.
animoffset
obj
.
offsets
[
2
]
+=
obj
.
animoffset
while
obj
.
offsets
[
2
]
>
-
1
:
while
obj
.
offsets
[
2
]
>
-
1
:
time
.
sleep
(
dt
)
time
.
sleep
(
dt
)
obj
.
offsets
[
2
]
-=
v
*
dt
obj
.
offsets
[
2
]
-=
v
*
dt
v
+=
g
*
dt
v
+=
g
*
dt
if
(
obj
.
offsets
[
2
]
<
0
):
if
(
obj
.
offsets
[
2
]
<
0
):
obj
.
scale
[
2
]
*=
1
-
3
*
dt
obj
.
scale
[
2
]
*=
1
-
3
*
dt
#return
#return
v
=
v
/
4
v
=
v
/
4
while
obj
.
offsets
[
2
]
<
basepos
:
while
obj
.
offsets
[
2
]
<
basepos
:
time
.
sleep
(
dt
)
time
.
sleep
(
dt
)
obj
.
offsets
[
2
]
+=
v
*
dt
obj
.
offsets
[
2
]
+=
v
*
dt
v
-=
g
*
dt
v
-=
g
*
dt
obj
.
scale
[
2
]
*=
1
+
5
*
dt
obj
.
scale
[
2
]
*=
1
+
5
*
dt
obj
.
scale
[
2
]
=
1.0
obj
.
scale
[
2
]
=
1.0
def
create_objects
(
self
):
def
create_objects
(
self
):
'''create opengl objects when opengl is initialized'''
'''create opengl objects when opengl is initialized'''
self
.
initialized
=
1
self
.
initialized
=
1
wx
.
CallAfter
(
self
.
Refresh
)
wx
.
CallAfter
(
self
.
Refresh
)
def
drawmodel
(
self
,
m
,
n
):
def
drawmodel
(
self
,
m
,
n
):
batch
=
pyglet
.
graphics
.
Batch
()
batch
=
pyglet
.
graphics
.
Batch
()
stl
=
stlview
(
m
.
facets
,
batch
=
batch
)
stl
=
stlview
(
m
.
facets
,
batch
=
batch
)
m
.
batch
=
batch
m
.
batch
=
batch
m
.
animoffset
=
300
m
.
animoffset
=
300
#print m
#print m
#threading.Thread(target
=self.anim,args=(m,
)).start()
#threading.Thread(target
= self.anim, args = (m,
)).start()
wx
.
CallAfter
(
self
.
Refresh
)
wx
.
CallAfter
(
self
.
Refresh
)
def
update_object_resize
(
self
):
def
update_object_resize
(
self
):
'''called when the window recieves only if opengl is initialized'''
'''called when the window recieves only if opengl is initialized'''
pass
pass
def
draw_objects
(
self
):
def
draw_objects
(
self
):
'''called in the middle of ondraw after the buffer has been cleared'''
'''called in the middle of ondraw after the buffer has been cleared'''
if
self
.
vpmat
is
None
:
if
self
.
vpmat
is
None
:
return
return
if
not
self
.
initialized
:
if
not
self
.
initialized
:
self
.
create_objects
()
self
.
create_objects
()
#glLoadIdentity()
#glLoadIdentity()
#print list(self.pmat)
#print list(self.pmat)
if
self
.
rot
==
1
:
if
self
.
rot
==
1
:
glLoadIdentity
()
glLoadIdentity
()
glMultMatrixd
(
self
.
mvmat
)
glMultMatrixd
(
self
.
mvmat
)
else
:
else
:
...
@@ -712,74 +722,74 @@ class TestGlPanel(GLPanel):
...
@@ -712,74 +722,74 @@ class TestGlPanel(GLPanel):
glTranslatef
(
*
self
.
transv
)
glTranslatef
(
*
self
.
transv
)
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.2
,
0.2
,
0.2
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.2
,
0.2
,
0.2
,
1
))
glBegin
(
GL_LINES
)
glBegin
(
GL_LINES
)
glNormal3f
(
0
,
0
,
1
)
glNormal3f
(
0
,
0
,
1
)
rows
=
10
rows
=
10
cols
=
10
cols
=
10
zheight
=
50
zheight
=
50
for
i
in
xrange
(
-
rows
,
rows
+
1
):
for
i
in
xrange
(
-
rows
,
rows
+
1
):
if
i
%
5
==
0
:
if
i
%
5
==
0
:
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.6
,
0.6
,
0.6
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.6
,
0.6
,
0.6
,
1
))
else
:
else
:
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.2
,
0.2
,
0.2
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.2
,
0.2
,
0.2
,
1
))
glVertex3f
(
10
*-
cols
,
10
*
i
,
0
)
glVertex3f
(
10
*
-
cols
,
10
*
i
,
0
)
glVertex3f
(
10
*
cols
,
10
*
i
,
0
)
glVertex3f
(
10
*
cols
,
10
*
i
,
0
)
for
i
in
xrange
(
-
cols
,
cols
+
1
):
for
i
in
xrange
(
-
cols
,
cols
+
1
):
if
i
%
5
==
0
:
if
i
%
5
==
0
:
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.6
,
0.6
,
0.6
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.6
,
0.6
,
0.6
,
1
))
else
:
else
:
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.2
,
0.2
,
0.2
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.2
,
0.2
,
0.2
,
1
))
glVertex3f
(
10
*
i
,
10
*-
rows
,
0
)
glVertex3f
(
10
*
i
,
10
*
-
rows
,
0
)
glVertex3f
(
10
*
i
,
10
*
rows
,
0
)
glVertex3f
(
10
*
i
,
10
*
rows
,
0
)
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.6
,
0.6
,
0.6
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.6
,
0.6
,
0.6
,
1
))
glVertex3f
(
10
*-
cols
,
10
*-
rows
,
0
)
glVertex3f
(
10
*
-
cols
,
10
*
-
rows
,
0
)
glVertex3f
(
10
*-
cols
,
10
*-
rows
,
zheight
)
glVertex3f
(
10
*
-
cols
,
10
*
-
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*
rows
,
0
)
glVertex3f
(
10
*
cols
,
10
*
rows
,
0
)
glVertex3f
(
10
*
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*-
rows
,
0
)
glVertex3f
(
10
*
cols
,
10
*
-
rows
,
0
)
glVertex3f
(
10
*
cols
,
10
*-
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*
-
rows
,
zheight
)
glVertex3f
(
10
*-
cols
,
10
*
rows
,
0
)
glVertex3f
(
10
*
-
cols
,
10
*
rows
,
0
)
glVertex3f
(
10
*-
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
-
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*-
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
-
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*-
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*
-
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*-
rows
,
zheight
)
glVertex3f
(
10
*
cols
,
10
*
-
rows
,
zheight
)
glVertex3f
(
10
*-
cols
,
10
*-
rows
,
zheight
)
glVertex3f
(
10
*
-
cols
,
10
*
-
rows
,
zheight
)
glVertex3f
(
10
*-
cols
,
10
*-
rows
,
zheight
)
glVertex3f
(
10
*
-
cols
,
10
*
-
rows
,
zheight
)
glVertex3f
(
10
*-
cols
,
10
*
rows
,
zheight
)
glVertex3f
(
10
*
-
cols
,
10
*
rows
,
zheight
)
glEnd
()
glEnd
()
glPushMatrix
()
glPushMatrix
()
glTranslatef
(
self
.
mousepos
[
0
]
-
self
.
bedsize
[
0
]
/
2
,
self
.
mousepos
[
1
]
-
self
.
bedsize
[
1
]
/
2
,
0
)
glTranslatef
(
self
.
mousepos
[
0
]
-
self
.
bedsize
[
0
]
/
2
,
self
.
mousepos
[
1
]
-
self
.
bedsize
[
1
]
/
2
,
0
)
glBegin
(
GL_TRIANGLES
)
glBegin
(
GL_TRIANGLES
)
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
1
,
0
,
0
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
1
,
0
,
0
,
1
))
glNormal3f
(
0
,
0
,
1
)
glNormal3f
(
0
,
0
,
1
)
glVertex3f
(
2
,
2
,
0
)
glVertex3f
(
2
,
2
,
0
)
glVertex3f
(
-
2
,
2
,
0
)
glVertex3f
(
-
2
,
2
,
0
)
glVertex3f
(
-
2
,
-
2
,
0
)
glVertex3f
(
-
2
,
-
2
,
0
)
glVertex3f
(
2
,
-
2
,
0
)
glVertex3f
(
2
,
-
2
,
0
)
glVertex3f
(
2
,
2
,
0
)
glVertex3f
(
2
,
2
,
0
)
glVertex3f
(
-
2
,
-
2
,
0
)
glVertex3f
(
-
2
,
-
2
,
0
)
glEnd
()
glEnd
()
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.3
,
0.7
,
0.5
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.3
,
0.7
,
0.5
,
1
))
#glTranslatef(0,
40,
0)
#glTranslatef(0,
40,
0)
glPopMatrix
()
glPopMatrix
()
glPushMatrix
()
glPushMatrix
()
glTranslatef
(
-
100
,
-
100
,
0
)
glTranslatef
(
-
100
,
-
100
,
0
)
for
i
in
self
.
parent
.
models
.
values
():
for
i
in
self
.
parent
.
models
.
values
():
glPushMatrix
()
glPushMatrix
()
glTranslatef
(
*
(
i
.
offsets
))
glTranslatef
(
*
(
i
.
offsets
))
glRotatef
(
i
.
rot
,
0.0
,
0.0
,
1.0
)
glRotatef
(
i
.
rot
,
0.0
,
0.0
,
1.0
)
glScalef
(
*
i
.
scale
)
glScalef
(
*
i
.
scale
)
try
:
try
:
if
i
.
curlayer
in
i
.
gc
.
layers
:
if
i
.
curlayer
in
i
.
gc
.
layers
:
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.13
,
0.37
,
0.25
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.13
,
0.37
,
0.25
,
1
))
[
i
.
gc
.
layers
[
j
]
.
draw
()
for
j
in
i
.
gc
.
layers
.
keys
()
if
j
<
i
.
curlayer
]
[
i
.
gc
.
layers
[
j
]
.
draw
()
for
j
in
i
.
gc
.
layers
.
keys
()
if
j
<
i
.
curlayer
]
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.5
,
0.6
,
0.9
,
1
))
glMaterialfv
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
,
vec
(
0.5
,
0.6
,
0.9
,
1
))
b
=
i
.
gc
.
layers
[
i
.
curlayer
]
b
=
i
.
gc
.
layers
[
i
.
curlayer
]
b
.
draw
()
b
.
draw
()
else
:
else
:
i
.
batch
.
draw
()
i
.
batch
.
draw
()
...
@@ -788,69 +798,69 @@ class TestGlPanel(GLPanel):
...
@@ -788,69 +798,69 @@ class TestGlPanel(GLPanel):
glPopMatrix
()
glPopMatrix
()
glPopMatrix
()
glPopMatrix
()
#print "drawn batch"
#print "drawn batch"
class
GCFrame
(
wx
.
Frame
):
class
GCFrame
(
wx
.
Frame
):
'''A simple class for using OpenGL with wxPython.'''
'''A simple class for using OpenGL with wxPython.'''
def
__init__
(
self
,
parent
,
ID
,
title
,
pos
=
wx
.
DefaultPosition
,
def
__init__
(
self
,
parent
,
ID
,
title
,
pos
=
wx
.
DefaultPosition
,
size
=
wx
.
DefaultSize
,
style
=
wx
.
DEFAULT_FRAME_STYLE
):
size
=
wx
.
DefaultSize
,
style
=
wx
.
DEFAULT_FRAME_STYLE
):
super
(
GCFrame
,
self
)
.
__init__
(
parent
,
ID
,
title
,
pos
,
(
size
[
0
]
+
150
,
size
[
1
]),
style
)
super
(
GCFrame
,
self
)
.
__init__
(
parent
,
ID
,
title
,
pos
,
(
size
[
0
]
+
150
,
size
[
1
]),
style
)
class
d
:
class
d
:
def
GetSelection
(
self
):
def
GetSelection
(
self
):
return
-
1
return
wx
.
NOT_FOUND
self
.
p
=
self
self
.
p
=
self
m
=
d
()
m
=
d
()
m
.
offsets
=
[
0
,
0
,
0
]
m
.
offsets
=
[
0
,
0
,
0
]
m
.
rot
=
0
m
.
rot
=
0
m
.
curlayer
=
0.0
m
.
curlayer
=
0.0
m
.
scale
=
[
1.
,
1.
,
1.
]
m
.
scale
=
[
1.0
,
1.0
,
1.0
]
m
.
batch
=
pyglet
.
graphics
.
Batch
()
m
.
batch
=
pyglet
.
graphics
.
Batch
()
m
.
gc
=
gcview
([],
batch
=
m
.
batch
)
m
.
gc
=
gcview
([],
batch
=
m
.
batch
)
self
.
models
=
{
""
:
m
}
self
.
models
=
{
""
:
m
}
self
.
l
=
d
()
self
.
l
=
d
()
self
.
modelindex
=
0
self
.
modelindex
=
0
self
.
GLPanel1
=
TestGlPanel
(
self
,
size
)
self
.
GLPanel1
=
TestGlPanel
(
self
,
size
)
def
addfile
(
self
,
gcode
=
[]):
def
addfile
(
self
,
gcode
=
[]):
self
.
models
[
""
]
.
gc
.
delete
()
self
.
models
[
""
]
.
gc
.
delete
()
self
.
models
[
""
]
.
gc
=
gcview
(
gcode
,
batch
=
self
.
models
[
""
]
.
batch
)
self
.
models
[
""
]
.
gc
=
gcview
(
gcode
,
batch
=
self
.
models
[
""
]
.
batch
)
def
clear
(
self
):
def
clear
(
self
):
self
.
models
[
""
]
.
gc
.
delete
()
self
.
models
[
""
]
.
gc
.
delete
()
self
.
models
[
""
]
.
gc
=
gcview
([],
batch
=
self
.
models
[
""
]
.
batch
)
self
.
models
[
""
]
.
gc
=
gcview
([],
batch
=
self
.
models
[
""
]
.
batch
)
def
Show
(
self
,
arg
=
True
):
def
Show
(
self
,
arg
=
True
):
wx
.
Frame
.
Show
(
self
,
arg
)
wx
.
Frame
.
Show
(
self
,
arg
)
self
.
SetClientSize
((
self
.
GetClientSize
()[
0
],
self
.
GetClientSize
()[
1
]
+
1
))
self
.
SetClientSize
((
self
.
GetClientSize
()[
0
],
self
.
GetClientSize
()[
1
]
+
1
))
self
.
SetClientSize
((
self
.
GetClientSize
()[
0
],
self
.
GetClientSize
()[
1
]
-
1
))
self
.
SetClientSize
((
self
.
GetClientSize
()[
0
],
self
.
GetClientSize
()[
1
]
-
1
))
self
.
Refresh
()
self
.
Refresh
()
wx
.
FutureCall
(
500
,
self
.
GLPanel1
.
forceresize
)
wx
.
FutureCall
(
500
,
self
.
GLPanel1
.
forceresize
)
#threading.Thread(target=self.update).start()
#threading.Thread(target = self.update).start()
#self.initialized=0
#self.initialized = 0
def
setlayerindex
(
self
,
z
):
m
=
self
.
models
[
""
]
def
setlayerindex
(
self
,
z
):
mlk
=
sorted
(
m
.
gc
.
layers
.
keys
())
m
=
self
.
models
[
""
]
if
z
>
0
and
self
.
modelindex
<
len
(
mlk
)
-
1
:
mlk
=
sorted
(
m
.
gc
.
layers
.
keys
())
self
.
modelindex
+=
1
if
z
>
0
and
self
.
modelindex
<
len
(
mlk
)
-
1
:
if
z
<
0
and
self
.
modelindex
>
0
:
self
.
modelindex
+=
1
self
.
modelindex
-=
1
if
z
<
0
and
self
.
modelindex
>
0
:
m
.
curlayer
=
mlk
[
self
.
modelindex
]
self
.
modelindex
-=
1
wx
.
CallAfter
(
self
.
SetTitle
,
"Gcode view, shift to move. Layer
%
d, Z =
%
f"
%
(
self
.
modelindex
,
m
.
curlayer
))
m
.
curlayer
=
mlk
[
self
.
modelindex
]
wx
.
CallAfter
(
self
.
SetTitle
,
"Gcode view, shift to move. Layer
%
d, Z=
%
f"
%
(
self
.
modelindex
,
m
.
curlayer
))
def
main
():
def
main
():
app
=
wx
.
App
(
redirect
=
False
)
app
=
wx
.
App
(
redirect
=
False
)
frame
=
GCFrame
(
None
,
wx
.
ID_ANY
,
'Gcode view, shift to move view, mousewheel to set layer'
,
size
=
(
400
,
400
))
frame
=
GCFrame
(
None
,
wx
.
ID_ANY
,
'Gcode view, shift to move view, mousewheel to set layer'
,
size
=
(
400
,
400
))
frame
.
addfile
(
list
(
open
(
"carriage dump_export.gcode"
)))
frame
.
addfile
(
list
(
open
(
"carriage dump_export.gcode"
)))
#frame = wx.Frame(None, -1, "GL Window", size=(400,400))
#frame = wx.Frame(None, -1, "GL Window", size=(400,
400))
#panel = TestGlPanel(frame)
#panel = TestGlPanel(frame)
#frame.Show(True)
#frame.Show(True)
#app.MainLoop()
#app.MainLoop()
app
.
Destroy
()
app
.
Destroy
()
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
import
cProfile
import
cProfile
print
cProfile
.
run
(
"main()"
)
print
cProfile
.
run
(
"main()"
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment