@@ -585,6 +585,7 @@ def setup(self, args):
585585 del args ['_objName' ]
586586
587587 # default values
588+ self ._sizing = True # axis/size connection is the default; False for sphere, ring, text, compound
588589 self ._pos = vector (0 ,0 ,0 )
589590 self ._axis = vector (1 ,0 ,0 )
590591 self ._up = vector (0 ,1 ,0 )
@@ -761,32 +762,52 @@ def up(self,value):
761762 def axis (self ):
762763 return self ._axis
763764 @axis .setter
764- def axis (self ,value ):
765- self ._save_oldaxis = adjust_up (self ._axis , value , self ._up , self ._save_oldaxis ) # this sets self._axis and self._up
765+ def axis (self ,value ): # sphere or ring or text or compound have no axis/size link
766+ currentaxis = self ._axis
767+ self ._axis = value
768+ if value .mag2 == 0 :
769+ if self ._save_oldaxis is None : self ._save_oldaxis = currentaxis
770+ else :
771+ if self ._save_oldaxis is not None :
772+ self ._save_oldaxis = adjust_up (self ._axis , value , self ._up , self ._save_oldaxis ) # this sets self._axis and self._up
766773 if not self ._constructing :
767774 self .addattr ('axis' )
768- self ._size ._x = value .mag # changing axis length changes size.x
775+ if self ._sizing :
776+ self ._size ._x = value .mag # changing axis length changes size.x
769777
770778 @property
771779 def size (self ):
772780 return self ._size
773781 @size .setter
774- def size (self ,value ):
775- self ._size .value = value
782+ def size (self ,value ): # sphere or ring or text or compound have no axis/size link
783+ currentaxis = self ._axis
784+ self ._size = value
785+ if value .x == 0 :
786+ if self ._save_oldaxis is not None :
787+ currentaxis = self ._save_oldaxis
788+ self ._save_oldaxis = None
789+ else :
790+ currentaxis = vector (1 ,0 ,0 )
776791 if not self ._constructing :
777792 self .addattr ('size' )
778- a = self ._axis .norm () * value .x
779- if mag (self ._axis ) == 0 :
780- a = vector (value .x ,0 ,0 )
781- self ._axis .value = a # changing size changes length of axis
793+ if self ._sizing :
794+ self ._axis = currentaxis .norm ()* value .x
782795
783796 @property
784797 def length (self ):
785798 return self ._size .x
786799 @length .setter
787800 def length (self ,value ):
788- self ._axis = self ._axis .norm () * value
789- self ._size ._x = value
801+ if value == 0 :
802+ if self ._save_oldaxis is None : self ._save_oldaxis = vector (self ._axis .x , self ._axis .y , self ._axis .z )
803+ self ._axis = vector (0 ,0 ,0 )
804+ self ._size ._x = 0
805+ else :
806+ if self ._save_oldaxis is not None :
807+ self ._axis = self ._save_oldaxis
808+ self ._save_oldaxis = None
809+ if self ._size ._x == 0 : self .axis = vector (value , 0 , 0 )
810+ else : self .axis = value * self ._axis .norm () # this will set length
790811 if not self ._constructing :
791812 self .addattr ('axis' )
792813 self .addattr ('size' )
@@ -1122,6 +1143,7 @@ def __init__(self, **args):
11221143 args ['_default_size' ] = vector (2 ,2 ,2 )
11231144 args ['_objName' ] = "sphere"
11241145 super (sphere , self ).setup (args )
1146+ self ._sizing = False # no axis/size connection
11251147
11261148 @property
11271149 def radius (self ):
@@ -1212,6 +1234,7 @@ def __init__(self, **args):
12121234 args ['_default_size' ] = vector (0.2 ,2.2 ,2.2 )
12131235 args ['_objName' ] = "ring"
12141236 super (ring , self ).setup (args )
1237+ self ._sizing = False # no axis/size connection
12151238
12161239 @property
12171240 def thickness (self ):
@@ -1467,6 +1490,7 @@ def __init__(self, objList, **args):
14671490 self .compound_idx += 1
14681491 args ['_objName' ] = 'compound' + str (self .compound_idx )
14691492 super (compound , self ).setup (args )
1493+ self ._sizing = False # no axis/size connection
14701494
14711495 for obj in objList :
14721496 # GlowScript will make the objects invisible, so need not set obj.visible
@@ -3859,6 +3883,7 @@ def end_face_color(self,value):
38593883class text (standardAttributes ):
38603884
38613885 def __init__ (self , ** args ):
3886+ self ._sizing = False # no axis/size connection
38623887 args ['_default_size' ] = vector (1 ,1 ,1 ) # to keep standardAttributes happy
38633888 args ['_objName' ] = "text"
38643889 self ._height = 1 ## not derived from size
@@ -3913,10 +3938,10 @@ def axis(self):
39133938 return self ._axis
39143939 @axis .setter
39153940 def axis (self ,value ): # changing axis does not affect size
3916- oldaxis = vector (self .axis )
3941+ old = vector (self .axis )
39173942 u = self .up
39183943 self ._axis .value = value
3919- self ._save_oldaxis = adjust_up (norm (oldaxis ), self ._axis , self ._up , self ._save_oldaxis )
3944+ self ._save_oldaxis = adjust_up (norm (old ), self ._axis , self ._up , self ._save_oldaxis )
39203945 self .addattr ('axis' )
39213946 self .addattr ('up' )
39223947
0 commit comments