1 from pyglet
.gl
import *
2 from plot_mode_base
import PlotModeBase
3 from sympy
.core
.basic
import S
4 from util
import scale_value
, scale_value_list
5 #from time import sleep
7 class PlotSurface(PlotModeBase
):
9 default_rot_preset
= 'perspective'
11 def _on_calculate_verts(self
):
12 self
.u_interval
= self
.intervals
[0]
13 self
.u_set
= list(self
.u_interval
.frange())
14 self
.v_interval
= self
.intervals
[1]
15 self
.v_set
= list(self
.v_interval
.frange())
16 self
.bounds
= [ [S
.Infinity
,-S
.Infinity
,0],[S
.Infinity
,-S
.Infinity
,0],[S
.Infinity
,-S
.Infinity
,0] ]
17 evaluate
= self
._get
_evaluator
()
19 self
._calculating
_verts
_pos
= 0.0
20 self
._calculating
_verts
_len
= float(self
.u_interval
.v_len
*self
.v_interval
.v_len
)
27 try: _e
= evaluate(u
, v
) # calculate vertex
29 if _e
is not None: # update bounding box
30 for axis
in xrange(3):
31 b
[axis
][0] = min([b
[axis
][0], _e
[axis
]])
32 b
[axis
][1] = max([b
[axis
][1], _e
[axis
]])
34 self
._calculating
_verts
_pos
+= 1.0
37 for axis
in xrange(3):
38 b
[axis
][2] = b
[axis
][1] - b
[axis
][0]
39 if b
[axis
][2] == 0.0: b
[axis
][2] = 1.0
42 self
.push_wireframe(self
.draw_verts(False, False))
43 self
.push_solid(self
.draw_verts(False, True))
45 def _on_calculate_cverts(self
):
46 if not self
.verts
or not self
.color
: return
47 def set_work_len(n
): self
._calculating
_cverts
_len
= float(n
)
48 def inc_work_pos(): self
._calculating
_cverts
_pos
+= 1.0
49 set_work_len(1); self
._calculating
_cverts
_pos
= 0
50 self
.cverts
= self
.color
.apply_to_surface(self
.verts
, self
.u_set
, self
.v_set
,
51 set_len
=set_work_len
, inc_pos
=inc_work_pos
)
52 self
.push_solid(self
.draw_verts(True, True))
54 def calculate_one_cvert(self
, u
, v
):
55 vert
= self
.verts
[u
][v
]
56 return self
.color(vert
[0], vert
[1], vert
[2],
57 self
.u_set
[u
], self
.v_set
[v
])
59 def draw_verts(self
, use_cverts
, use_solid_color
):
61 for u
in xrange( 1, len(self
.u_set
) ):
62 glBegin(GL_QUAD_STRIP
)
63 for v
in xrange( len(self
.v_set
) ):
64 pa
= self
.verts
[u
-1][v
]
66 if pa
is None or pb
is None:
68 glBegin(GL_QUAD_STRIP
)
71 ca
= self
.cverts
[u
-1][v
]
72 cb
= self
.cverts
[u
][v
]
78 if use_solid_color
: ca
= cb
= self
.default_solid_color
79 else: ca
= cb
= self
.default_wireframe_color