Skip to content

Commit d2df338

Browse files
authored
Merge pull request #12 from mwcraig/scene-fix
Several fixes to scene and remove print from debugging
2 parents a480610 + feb0a6f commit d2df338

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

vpython/vpython.py

100644100755
Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2719,7 +2719,7 @@ def canvas(self, value):
27192719
@property
27202720
def pos(self):
27212721
c = self._canvas
2722-
return c.center-(norm(c.forward)*(c.range / tan(c.fov/2)))
2722+
return c.center-(norm(c.axis)*(c.range / tan(c.fov/2)))
27232723
@pos.setter
27242724
def pos(self, value):
27252725
c = self._canvas
@@ -2728,12 +2728,12 @@ def pos(self, value):
27282728
@property
27292729
def axis(self):
27302730
c = self._canvas
2731-
return norm(c.forward)*( c.range / tan(c.fov/2) )
2731+
return norm(c._axis)*( c.range / tan(c.fov/2) )
27322732
@axis.setter
27332733
def axis(self, value):
27342734
c = self._canvas
2735-
c.center = self.pos+value # use current self.pos before it is changed by change in c.forward
2736-
c.forward = norm(value)
2735+
c.center = self.pos+value # use current self.pos before it is changed by change in c.axis
2736+
c.axis = norm(value)
27372737
c.range = mag(value)*tan(c.fov/2)
27382738

27392739
@property
@@ -2744,14 +2744,17 @@ def up(self, value):
27442744
self._canvas.up = value
27452745

27462746
def rotate(self, angle=0, axis=None, origin=None):
2747+
if angle == 0: return
27472748
c = self._canvas
27482749
if axis is None: axis = c.up
2749-
newaxis = self.axis.rotate(angle=angle, axis=axis)
2750-
newpos = self.pos
2751-
if origin is not None:
2752-
newpos = origin + (self.pos-origin).rotate(angle=angle, axis=axis)
2753-
c.center = newpos + newaxis
2754-
c.forward = norm(newaxis)
2750+
if origin is not None and origin != self.pos:
2751+
origin = self.pos + (self.pos-origin).rotate(angle=angle, axis=axis)
2752+
else:
2753+
origin = self.pos
2754+
if c._axis.diff_angle(axis) > 1e-6:
2755+
c.axis = c._axis.rotate(angle=angle, axis=axis)
2756+
c.up = c._up.rotate(angle=angle, axis=axis)
2757+
c.center = origin + self.axis
27552758

27562759
class meta_canvas(object):
27572760
@property
@@ -2794,7 +2797,8 @@ def __init__(self, **args):
27942797

27952798
# The following determine the view:
27962799
self._range = 1 # user can alter with zoom
2797-
self._forward = vector(0,0,-1) # user can alter with spin
2800+
self._axis = vector(0,0,-1) # user can alter with spin
2801+
self._forward = vector(0,0,-1) # self.axis is primal internally; self._forward is now a synonym
27982802
self._up = vector(0,1,0) # user with touch screen can rotate around z
27992803
self._autoscale = True # set False if user zooms
28002804
self._center = vector(0,0,0) # cannot be altered by user
@@ -2997,11 +3001,20 @@ def center(self,value):
29973001
raise TypeError('center must be a vector')
29983002

29993003
@property
3000-
def forward(self):
3001-
return self._forward
3004+
def axis(self):
3005+
return self._axis
3006+
@axis.setter
3007+
def axis(self,value):
3008+
self._axis = self._set_forward = vector(value)
3009+
if not self._constructing:
3010+
self.appendcmd({"forward":value.value})
3011+
3012+
@property
3013+
def forward(self): # scene.forward is an external synonym for scene.axis
3014+
return self._axis
30023015
@forward.setter
30033016
def forward(self,value):
3004-
self._forward = self._set_forward = vector(value)
3017+
self._axis = self._set_forward = vector(value)
30053018
if not self._constructing:
30063019
self.appendcmd({"forward":value.value})
30073020

@@ -3121,7 +3134,6 @@ def handle_event(self, evt): ## events and scene info updates
31213134
self.mouse.setpick( evt )
31223135
self._waitfor = True # what pick is looking for
31233136
elif ev == '_compound': # compound, text, extrusion
3124-
print('compound event return')
31253137
obj = self._compound
31263138
p = evt['pos']
31273139
if obj._objName == 'text':

0 commit comments

Comments
 (0)