Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
for k,v in vars(self).items():
if k not in exclude:
key = k[:]
if k[0] == '_':
key = k[1:] ## get rid of underscore
newAtts[key] = v
for k, v in args.items(): ## overrides and user attrs
newAtts[k] = v
dup = type(self)(**newAtts)
return dup
def __del__(self):
super(standardAttributes, self).__del__()
class box(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(1,1,1)
args['_objName'] = "box"
super(box, self).setup(args)
class sphere(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(2,2,2)
args['_objName'] = "sphere"
super(sphere, self).setup(args)
@property
def radius(self):
return self._size.y/2
@radius.setter
def radius(self,value):
def setup(self, args):
super(standardAttributes, self).__init__()
self._constructing = True ## calls to setters are from constructor
objName = self._objName = args['_objName'] ## identifies object type
if objName[:8] == 'compound': objName = 'compound'
del args['_objName']
# default values
self._pos = vector(0,0,0)
self._axis = vector(1,0,0)
self._up = vector(0,1,0)
self._color = vector(1,1,1)
defaultSize = args['_default_size']
if defaultSize is not None: # is not points or vertex or triangle or quad
self._size = defaultSize ## because VP differs from JS
del args['_default_size']
self._texture = None
class cylinder(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(1,2,2)
args['_objName'] = "cylinder"
super(cylinder, self).setup(args)
@property
def radius(self):
return self._size.y/2
@radius.setter
def radius(self,value):
d = 2*value
self.size = vector(self._size.x,d,d) # size will call addattr
class cone(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(1,2,2)
args['_objName'] = "cone"
super(cone, self).setup(args)
@property
def radius(self):
return self._size.y/2
@radius.setter
def radius(self,value):
d = 2*value
self.size = vector(self._size.x,d,d) # size will call addattr
class pyramid(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(1,1,1)
class ellipsoid(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(1,1,1)
args['_objName'] = "ellipsoid"
super(ellipsoid, self).setup(args)
@property
def radius(self):
return self._size.y/2
@radius.setter
def radius(self,value):
d = 2*value
self.size = vector(d,d,d) # size will call addattraddattr
class ring(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(0.2,2.2,2.2)
args['_objName'] = "ring"
super(ring, self).setup(args)
@property
def thickness(self):
return self._size.x/2
@thickness.setter
def thickness(self,value):
R1 = self.radius
self._size.x = 2*value
self._size.y = self._size.z = 2*(R1+value)
if not self._constructing:
self.addattr('size')
argsToSend.append(vectorInteractions[a])
elif objName == 'points' and a == 'size': ## in this case size is a scalar
argsToSend.append(a)
else: raise AttributeError(a+' must be a vector')
del args[a]
if defaultSize is not None:
## if objName != 'points' and objName != 'label': # these objects have no size
if 'size' not in argsToSend: ## always send size because Python size differs from JS size
argsToSend.append('size')
self._trail_radius = 0.1 * self._size.y ## default depends on size
elif objName == 'points':
self._trail_radius = self._radius # points object
# override defaults for scalar attributes without side effects
attrs = standardAttributes.attrLists[objName][2]
for a in attrs:
if a in args:
argsToSend.append(a)
setattr(self, '_'+a, args[a]) ## by_pass setters
del args[a]
scalarInteractions={'red':'color', 'green':'color', 'blue':'color', 'radius':'size', 'thickness':'size',
'length':'size', 'height':'size', 'width':'size', 'v0':'v0', 'v1':'v1',
'v2':'v2', 'v3':'v3', 'text':'text'}
# override defaults for scalar attributes with side effects
attrs = standardAttributes.attrLists[objName][3]
for a in attrs:
if a in args:
setattr(self, a, args[a]) ## use setter to take care of side effects
if scalarInteractions[a] not in argsToSend:
return self._coils
@coils.setter
def coils(self,value):
self._coils =value
if not self._constructing:
self.addattr('coils')
@property
def radius(self):
return self._size.y/2
@radius.setter
def radius(self,value):
d = 2*value
self.size = vector(self._size.x,d,d) # size will call addattr if appropriate
class compound(standardAttributes):
compound_idx = 0 # same numbering scheme as in GlowScript
def __init__(self, objList, **args):
self._obj_idxs = None
idxlist = []
ineligible = [label, curve, helix, points] ## type objects
cloning = None
if '_cloneid' in args:
cloning = args['_cloneid']
else:
cvs = objList[0].canvas
for obj in objList:
if obj.canvas is not cvs:
raise AttributeError('all objects used in compound must belong to the same canvas')
if type(obj) in ineligible:
raise TypeError('A ' + obj._objName + ' object cannot be used in a compound')
@headwidth.setter
def headwidth(self,value):
self._headwidth =value
if not self._constructing:
self.addattr('headwidth')
@property
def headlength(self):
return self._headlength
@headlength.setter
def headlength(self,value):
self._headlength =value
if not self._constructing:
self.addattr('headlength')
class attach_arrow(standardAttributes):
def __init__(self, obj, attr, **args):
args['_default_size'] = None
self._obj = obj.idx
args['_obj'] = self._obj
self._realattr = attr # could be for example "velocity"
self._attr = 'up' # pretend that the atribute is "up"
args['_attr'] = self._attr
args['_objName'] = "attach_arrow"
self._last_val = None
self._scale = 1
self._shaftwidth = 0
super(attach_arrow, self).setup(args)
baseObj.attach_arrows.append(self)
@property
def scale(self):
class cone(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(1,2,2)
args['_objName'] = "cone"
super(cone, self).setup(args)
@property
def radius(self):
return self._size.y/2
@radius.setter
def radius(self,value):
d = 2*value
self.size = vector(self._size.x,d,d) # size will call addattr
class pyramid(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(1,1,1)
args['_objName'] = "pyramid"
super(pyramid, self).setup(args)
class ellipsoid(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(1,1,1)
args['_objName'] = "ellipsoid"
super(ellipsoid, self).setup(args)
@property
def radius(self):
return self._size.y/2
@radius.setter
def radius(self,value):
def coils(self,value):
self._coils =value
if not self._constructing:
self.addattr('coils')
@property
def radius(self):
return self._size.y/2
@radius.setter
def radius(self,value):
d = 2*value
self.size = vector(self._size.x,d,d) # size will call addattr if appropriate
compound_idx = 0 # same numbering scheme as in GlowScript
class compound(standardAttributes):
def __init__(self, objList, **args):
global compound_idx
args['_default_size'] = vector(1,1,1)
self._obj_idxs = None
idxlist = []
ineligible = [label, curve, helix, points] ## type objects
cvs = objList[0].canvas
for obj in objList:
if obj.canvas is not cvs:
raise AttributeError('all objects used in compound must belong to the same canvas')
if type(obj) in ineligible:
raise TypeError('A ' + obj._objName + ' object cannot be used in a compound')
idxlist.append(obj.idx)
args['obj_idxs'] = idxlist
compound_idx += 1
@property
def bottom(self):
return self._bottom
@bottom.setter
def bottom(self, value):
raise AttributeError('bottom cannot be changed after creating a slider')
@property
def align(self):
return self._align
@align.setter
def align(self, value):
raise AttributeError('align cannot be changed after creating a slider')
class extrusion(standardAttributes):
def __init__(self, **args):
args['_default_size'] = vector(1,1,1) # to keep standardAttributes happy
args['_objName'] = "extrusion"
savesize = None
if 'size' in args:
savesize = args['size']
del args['size']
self._shape = [ ]
pozz = args['path']
npozz = []
for pp in pozz:
npozz.append(pp.value) ## convert vectors to lists
args['path'] = npozz[:]
self._show_start_face = True
self._show_end_face = True
if 'color' in args: