1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import math
24
26 ''' slum datatype to hold color data.
27 The "internal" variable is a list that defines all the possible keys for this datatype. For color,
28 they are [r,g,b], but they can be overriden by derivated classes, like vector, which defines it as
29 x,y,z.
30 This datatype is defined to simplify a shader implementation, specially when defining slum
31 shader parameters.'''
32
33 internal = ['r','g','b']
35 self.checkValue(data)
36 for each in self.internal:
37 self.__dict__[each] = data
38 nargs = len(args)
39 if nargs:
40 if nargs==len(self.internal)-1:
41 internalIndex=1
42 for each in args:
43 self.checkValue(each)
44 self.__dict__[self.internal[internalIndex]] = each
45 internalIndex += 1
46 else:
47 raise Exception('dataype requires 1 or %d parameters in initialization. Received only %d parameters.' % (len(self.internal),nargs+1))
49 if key>len(self.internal) or key<0:
50 raise Exception('dataype values can only have 3 elements. Element %d not valid' % key )
52 if type(value) not in [int,long,float]:
53 raise Exception('dataype "%s" not supported' % type(value))
62 data = []
63 for each in self.internal:
64 data.append("%s" % str(self.__dict__[each]))
65 return '%s(%s)' % (self.__class__.__name__,','.join(data))
71 d=[]
72 if x.__class__ in [color, vector, point, normal]:
73 count = 0
74 for each in self.internal:
75 d.append( self.__dict__[each] + x.__dict__[x.internal[count]] )
76 count += 1
77 else:
78 for each in self.internal:
79 d.append( self.__dict__[each] + x )
80 return self.__class__( d[0], d[1], d[2] )
81
83 d=[]
84 if x.__class__ in [color, vector, point, normal]:
85 count = 0
86 for each in self.internal:
87 d.append( self.__dict__[each] * x.__dict__[x.internal[count]] )
88 count += 1
89 else:
90 for each in self.internal:
91 d.append( self.__dict__[each] * x )
92 return self.__class__( d[0], d[1], d[2] )
93
95 d=[]
96 if x.__class__ in [color, vector, point, normal]:
97 count = 0
98 for each in self.internal:
99 d.append( self.__dict__[each] / x.__dict__[x.internal[count]] )
100 count += 1
101 else:
102 for each in self.internal:
103 d.append( self.__dict__[each] / x )
104 return self.__class__( d[0], d[1], d[2] )
105
108
110 d = []
111 for each in self.internal:
112 d.append( -self.__dict__[each] )
113 return self.__class__( d[0], d[1], d[2] )
114
115
117 '''
118 slum datatype to hold vector data.
119 its derivated from color, overriding the internal to x,y,z.
120 also, theres 2 added method to manipulate vectors: lenght and normalize
121 '''
122 internal = ['x','y','z']
124 return math.sqrt(
125 (self.__dict__[self.internal[0]] * self.__dict__[self.internal[0]]) +
126 (self.__dict__[self.internal[1]] * self.__dict__[self.internal[1]]) +
127 (self.__dict__[self.internal[2]] * self.__dict__[self.internal[2]])
128 )
136
138 '''
139 slum datatype to hold normal data.
140 its exactly like vector. Its defined just as a placeholder for people used to rsl. (like me :D)
141 '''
142 pass
143
145 '''
146 slum datatype to hold point data.
147 its exactly like vector. Its defined just as a placeholder for people used to rsl. (like me :D)
148 '''
149 pass
150
151
154 if min.__class__ != vector or max.__class__ != vector:
155 raise Exception("min/max not a vector datatype.")
156 self.min = min
157 self.max = max
159 return self.max - self.min
161 return self.min + ( self.size() ) * 0.5
162