@@ -2719,7 +2719,7 @@ def canvas(self, value):
2719
2719
@property
2720
2720
def pos (self ):
2721
2721
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 )))
2723
2723
@pos .setter
2724
2724
def pos (self , value ):
2725
2725
c = self ._canvas
@@ -2728,12 +2728,12 @@ def pos(self, value):
2728
2728
@property
2729
2729
def axis (self ):
2730
2730
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 ) )
2732
2732
@axis .setter
2733
2733
def axis (self , value ):
2734
2734
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 )
2737
2737
c .range = mag (value )* tan (c .fov / 2 )
2738
2738
2739
2739
@property
@@ -2744,14 +2744,17 @@ def up(self, value):
2744
2744
self ._canvas .up = value
2745
2745
2746
2746
def rotate (self , angle = 0 , axis = None , origin = None ):
2747
+ if angle == 0 : return
2747
2748
c = self ._canvas
2748
2749
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
2755
2758
2756
2759
class meta_canvas (object ):
2757
2760
@property
@@ -2794,7 +2797,8 @@ def __init__(self, **args):
2794
2797
2795
2798
# The following determine the view:
2796
2799
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
2798
2802
self ._up = vector (0 ,1 ,0 ) # user with touch screen can rotate around z
2799
2803
self ._autoscale = True # set False if user zooms
2800
2804
self ._center = vector (0 ,0 ,0 ) # cannot be altered by user
@@ -2997,11 +3001,20 @@ def center(self,value):
2997
3001
raise TypeError ('center must be a vector' )
2998
3002
2999
3003
@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
3002
3015
@forward .setter
3003
3016
def forward (self ,value ):
3004
- self ._forward = self ._set_forward = vector (value )
3017
+ self ._axis = self ._set_forward = vector (value )
3005
3018
if not self ._constructing :
3006
3019
self .appendcmd ({"forward" :value .value })
3007
3020
@@ -3121,7 +3134,6 @@ def handle_event(self, evt): ## events and scene info updates
3121
3134
self .mouse .setpick ( evt )
3122
3135
self ._waitfor = True # what pick is looking for
3123
3136
elif ev == '_compound' : # compound, text, extrusion
3124
- print ('compound event return' )
3125
3137
obj = self ._compound
3126
3138
p = evt ['pos' ]
3127
3139
if obj ._objName == 'text' :
0 commit comments