263 |
""") |
""") |
264 |
selectPaperQuad = GLRen.createPaperQuad(selectPaper, -1,-1,1,1, 1) |
selectPaperQuad = GLRen.createPaperQuad(selectPaper, -1,-1,1,1, 1) |
265 |
|
|
266 |
|
class Mode: |
267 |
|
def __init__(self, **args): |
268 |
|
self.__dict__ = args |
269 |
|
|
270 |
class XuPDFScene_PDFContext: |
class XuPDFScene_PDFContext: |
271 |
def __init__(self): |
def __init__(self): |
272 |
self.mag = [(screensize[1]*1.6,screensize[1]/10), |
self.modes = [ |
273 |
(screensize[1],screensize[1])] |
Mode( |
274 |
|
mag=(screensize[1]*1.6,screensize[1]/10), |
275 |
|
context=1, |
276 |
|
movefocus=0, |
277 |
|
eye = 0.2, |
278 |
|
), |
279 |
|
Mode( |
280 |
|
mag=(screensize[1],screensize[1]), # full-screen |
281 |
|
context=0, |
282 |
|
movefocus=1, |
283 |
|
eye = 0.2, |
284 |
|
), |
285 |
|
Mode( |
286 |
|
mag=(screensize[1]*2,screensize[1]/2), # full-screen |
287 |
|
context=0, |
288 |
|
movefocus=1, |
289 |
|
eye = 0.2, |
290 |
|
), |
291 |
|
] |
292 |
|
|
293 |
self.ctrx = screensize[0]/2 |
self.ctrx = screensize[0]/2 |
294 |
self.ctry = screensize[1]/2 |
self.ctry = screensize[1]/2 |
295 |
self.rad = screensize[1]/2 |
self.rad = screensize[1]/2 |
296 |
self.nadir = NadirAngler(self.ctrx, screensize[1]*2) |
self.nadir = NadirAngler(self.ctrx, screensize[1]*2) |
|
self.showcontext = 1 |
|
297 |
self.clip = 0 |
self.clip = 0 |
298 |
self.selectCS = None |
self.selectCS = None |
299 |
self.currentvs = None |
self.currentvs = None |
300 |
def key(self, key): |
def key(self, key): |
301 |
global currentScene |
global currentScene |
|
if key == 'z': |
|
|
currentScene = XuPDFScene_PDFZoom() |
|
|
self.currentvs = None |
|
302 |
if key == 'm': |
if key == 'm': |
303 |
rotatelist(self.mag) |
rotatelist(self.modes) |
|
self.currentvs = None |
|
304 |
if key == 'c': |
if key == 'c': |
305 |
self.clip = not self.clip |
self.clip = not self.clip |
|
self.currentvs = None |
|
|
if key == 's': |
|
|
self.showcontext = not self.showcontext |
|
|
self.currentvs = None |
|
306 |
def mouse(self, ev): |
def mouse(self, ev): |
307 |
global globalx, globaly |
global globalx, globaly |
308 |
if ev.getID() == ev.MOUSE_CLICKED: |
if ev.getID() == ev.MOUSE_CLICKED: |
323 |
else: |
else: |
324 |
print "Didn't hit anything" |
print "Didn't hit anything" |
325 |
checkGlobalCoords() |
checkGlobalCoords() |
|
self.currentvs = None |
|
326 |
print "Mouse ",globalx, globaly |
print "Mouse ",globalx, globaly |
327 |
AbstractUpdateManager.chg() |
AbstractUpdateManager.chg() |
328 |
elif ev.getID() == ev.MOUSE_PRESSED: |
elif ev.getID() == ev.MOUSE_PRESSED: |
351 |
ctr[0], ctr[1], s[0], 0, 0, s[1]) |
ctr[0], ctr[1], s[0], 0, 0, s[1]) |
352 |
# print "paint: ",ctr, s |
# print "paint: ",ctr, s |
353 |
AbstractUpdateManager.chg() |
AbstractUpdateManager.chg() |
354 |
|
replaceNewScene(self.currentvs) |
355 |
|
|
356 |
|
|
357 |
else: |
else: |
358 |
print "Unused mouse: ",ev |
print "Unused mouse: ",ev |
359 |
def scene(self, vs): |
def scene(self, vs): |
|
if self.currentvs: |
|
|
AbstractUpdateManager.setNoAnimation() |
|
|
return self.currentvs |
|
360 |
bg(vs) |
bg(vs) |
361 |
bf = effects.NadirCircleFloater_NoAnchor(vs, (self.ctrx, self.ctry), self.rad, |
bf = effects.NadirCircleFloater_NoAnchor(vs, (self.ctrx, self.ctry), self.rad, |
362 |
self.nadir, 1) |
self.nadir, 1) |
366 |
|
|
367 |
cs1 = bf.addCentralBuoy(globalcursor.getId()) |
cs1 = bf.addCentralBuoy(globalcursor.getId()) |
368 |
|
|
369 |
eye = 0.2 |
|
370 |
cs1_zoom= vs.coords.distort(cs1, 0, 0, eye, eye, *(self.mag[0])) |
if self.modes[0].movefocus: |
371 |
|
focusy_at = globaly * screensize[1] |
372 |
|
else: |
373 |
|
focusy_at = self.ctry |
374 |
|
|
375 |
|
# The buoy cs is centered |
376 |
|
focusy_at -= self.ctry |
377 |
|
|
378 |
|
eye = self.modes[0].eye |
379 |
|
cs1_zoom= vs.coords.distort(cs1, 0, focusy_at, |
380 |
|
eye, eye, *(self.modes[0].mag)) |
381 |
vs.matcher.add(cs1_zoom, globalcursor.getId()+"__bulg") |
vs.matcher.add(cs1_zoom, globalcursor.getId()+"__bulg") |
382 |
|
|
383 |
cs1_trans = vs.coords.translateXY(cs1_zoom, -globalx, -globaly) |
cs1_trans = vs.coords.translateXY(cs1_zoom, |
384 |
|
-globalx, -globaly + focusy_at) |
385 |
vs.matcher.add(cs1_trans, globalcursor.getId()+"__trans") |
vs.matcher.add(cs1_trans, globalcursor.getId()+"__trans") |
386 |
|
|
387 |
if self.clip: |
if self.clip: |
388 |
clip = (-0.2+globalx, -0.2+globaly, 0.2+globalx, 0.2+globaly) |
clip = (-0.2+globalx, -0.2+globaly, 0.2+globalx, 0.2+globaly) |
389 |
self.cliprect = cliprect |
self.cliprect = clip |
390 |
else: |
else: |
391 |
w = globalview.papersize[0] |
w = globalview.papersize[0] |
392 |
extrax = 0.1 |
extrax = 0.1 |
399 |
|
|
400 |
self.buoys = [] |
self.buoys = [] |
401 |
|
|
402 |
if self.showcontext: |
if self.modes[0].context: |
403 |
for forwlink in globalforw: |
for forwlink in globalforw: |
404 |
b = XuPDFBuoy(1, (getattr(forwlink, "from"), forwlink.to)) |
b = XuPDFBuoy(1, (getattr(forwlink, "from"), forwlink.to)) |
405 |
b.add(vs, 0, 0, 1, bfforw, maincs = cs1_trans) |
b.add(vs, 0, 0, 1, bfforw, maincs = cs1_trans) |
412 |
self.selectCS = None |
self.selectCS = None |
413 |
self.papercs = cs1_trans |
self.papercs = cs1_trans |
414 |
|
|
|
class XuPDFScene_PDFZoom: |
|
|
def __init__(self): |
|
|
self.mag = [(screensize[1],screensize[1]),(screensize[1]*1.6,screensize[1]/3)] |
|
|
self.clip = 0 |
|
|
def key(self, key): |
|
|
print "Key: ",key |
|
|
global currentScene |
|
|
if key == 'z': |
|
|
currentScene = XuPDFScene_PDFContext() |
|
|
if key == 'm': |
|
|
rotatelist(self.mag) |
|
|
if key == 'c': |
|
|
self.clip = not self.clip |
|
|
def mouse(self, ev): |
|
|
global globalx, globaly |
|
|
if ev.getID() == ev.MOUSE_CLICKED: |
|
|
# scale = 1.0 / screensize[1] |
|
|
# globalx += (ev.getX() - screensize[0]/2) * scale |
|
|
# self.y -= ev.getY() - screensize[1]/2 |
|
|
# globaly = ev.getY() * scale |
|
|
|
|
|
# Try a real inverse transform |
|
|
point = array([ev.getX(), ev.getY(), 0], 'f') |
|
|
src = zeros(len(point), 'f') |
|
|
self.currentvs.coords.inverseTransformPoints3( |
|
|
self.papercs, point, src) |
|
|
|
|
|
globalx = src[0] |
|
|
globaly = src[1] |
|
|
print "Mouse ret",point, src |
|
|
checkGlobalCoords() |
|
|
print "Mouse ",globalx, globaly |
|
|
AbstractUpdateManager.chg() |
|
|
def scene(self, vs): |
|
|
bg(vs) |
|
|
bf = effects.NadirCircleFloater_NoAnchor(vs, |
|
|
screenctr, 100, None, 1) |
|
|
cs1 = bf.addCentralBuoy(globalcursor.getId()) |
|
|
# cs1_zoom = vs.coords.affineCoordsys(cs1, 0, 0, 0, |
|
|
# 100, 0, 0, 100) |
|
|
eye = 0.2 |
|
|
yat = (globaly-0.5) * screensize[1] |
|
|
cs1_zoom= vs.coords.distort(cs1, 0, yat, eye, eye, |
|
|
*(self.mag[0])) |
|
|
vs.matcher.add(cs1_zoom, globalcursor.getId()+"__bulg") |
|
|
cs1_trans = vs.coords.translateXY(cs1_zoom, -globalx, -globaly + yat) |
|
|
vs.matcher.add(cs1_trans, globalcursor.getId()+"__trans") |
|
|
|
|
|
if self.clip: |
|
|
clip = (-0.2+globalx, -0.2+globaly, 0.2+globalx, 0.2+globaly) |
|
|
else: |
|
|
w = globalview.papersize[0] |
|
|
extrax = 1 |
|
|
extray = 0.3 |
|
|
clip = (0-extrax, -extray, w+extrax, 1+extray) |
|
|
|
|
|
globalview.placepapers(vs, cs1_trans, cliprect = clip, |
|
|
showTessel = globalshowtessel, |
|
|
fancy = globalusefancypaper) |
|
|
self.currentvs = vs |
|
|
self.papercs = cs1_trans |
|
|
|
|
|
|
|
415 |
currentScene = XuPDFScene_PDFContext() |
currentScene = XuPDFScene_PDFContext() |
416 |
moveToCell(cells[1]) |
moveToCell(cells[1]) |
417 |
|
|