def transformation_matrix(self,cmd): ''' transformation_matrix ''' from PyRatBox import PyRatBox from PyRatClone import PyRatClone try: matrix = self.matrix except: matrix = np.matrix(np.eye(3)) try: offset = self.offset except: offset = np.zeros(3) try: try: this = cmd.split[1:] except: this = cmd[1:] clone = PyRatClone(np.ones(3),np.ones(3)) for i,n in enumerate(this): noGood = False if n == 'scale': scale = float(this[i+1]) matrix2,offset2 = self.load_scaling_matrix4(scale) elif n == 'transformation_matrix': matrix2,offset2 = np.matrix(np.array(this[i+1:i+1+9])\ .reshape((3,3)).astype(float)) elif n == 'scale_differential': fix_point = np.array(this[i+1:i+1+3]).astype(float) matrix2,offset2 = self.load_differential_scaling_matrix4(fix_point) elif n == 'translate': offset3 = np.array(this[i+1:i+1+3]).astype(float) matrix2,offset2 = self.load_translation_matrix4(offset3) elif n == 'rotate_about_x_axis': rot = float(this[i+1]) matrix2,offset2 = self.load_x_axis_rotation_matrix4(rot) elif n == 'rotate_about_y_axis': rot = float(this[i+1]) matrix2,offset2 = self.load_y_axis_rotation_matrix4(rot) elif n == 'rotate_about_z_axis': rot = float(this[i+1]) matrix2,offset2 = self.load_z_axis_rotation_matrix4(rot) elif n == 'rotate_about_arbitrary_axis': axis = np.array(this[i+1:i+1+3]).astype(float) rot = float(this[i+3]) fix_point = np.array(this[i+4:i+4+3]).astype(float) matrix2,offset2 = self.rotate_about_arbitrary_axis(axis,rot,fix_point) elif n == 'scale_fix_point': scale = float(this[i+1]) fix_point = np.array(this[i+2:i+2+3]).astype(float) matrix2,offset2 = self.load_scaling_fix_point_matrix4(scale,fix_point) elif n == 'scale_differential_fix_point': scale = np.array(this[i+1:i+1+3]).astype(float) fix_point = np.array(this[i+3:i+3+3]).astype(float) matrix2,offset2 = self.load_differential_scaling_fix_point_matrix4(\ scale,fix_point) elif n == 'rotate_about_x_axis_fix_point': rot = float(this[i+1]) fix_point = np.array(this[i+2:i+2+3]).astype(float) matrix2,offset2 = self.load_x_axis_rotation_fix_point_matrix4(\ theta,fix_point) elif n == 'rotate_about_y_axis_fix_point': rot = float(this[i+1]) fix_point = np.array(this[i+2:i+2+3]).astype(float) matrix2,offset2 = self.load_y_axis_rotation_fix_point_matrix4(\ theta,fix_point) elif n == 'rotate_about_z_axis_fix_point': rot = float(this[i+1]) fix_point = np.array(this[i+2:i+2+3]).astype(float) matrix2,offset2 = self.load_z_axis_rotation_fix_point_matrix4(\ theta,fix_point) else: noGood = True if not noGood: clone.matrix = matrix2*matrix clone.matrixI = clone.matrix.I if (matrix != np.matrix(np.eye(3))).all(): clone.matrix = matrix if np.abs(offset).sum() > 0: clone.offset = offset clone.contents = [] self.top.contents.append(clone) self.verbose == 2 and sys.stderr.write('<M>') except: self.error('could not interpret clone line %d of %s: %s'%\ (self.lineNumber,self.filename,' '.join(cmd)))
def transformation_matrix(self, cmd): ''' transformation_matrix ''' from PyRatBox import PyRatBox from PyRatClone import PyRatClone try: matrix = self.matrix except: matrix = np.matrix(np.eye(3)) try: offset = self.offset except: offset = np.zeros(3) try: try: this = cmd.split[1:] except: this = cmd[1:] clone = PyRatClone(np.ones(3), np.ones(3)) for i, n in enumerate(this): noGood = False if n == 'scale': scale = float(this[i + 1]) matrix2, offset2 = self.load_scaling_matrix4(scale) elif n == 'transformation_matrix': matrix2,offset2 = np.matrix(np.array(this[i+1:i+1+9])\ .reshape((3,3)).astype(float)) elif n == 'scale_differential': fix_point = np.array(this[i + 1:i + 1 + 3]).astype(float) matrix2, offset2 = self.load_differential_scaling_matrix4( fix_point) elif n == 'translate': offset3 = np.array(this[i + 1:i + 1 + 3]).astype(float) matrix2, offset2 = self.load_translation_matrix4(offset3) elif n == 'rotate_about_x_axis': rot = float(this[i + 1]) matrix2, offset2 = self.load_x_axis_rotation_matrix4(rot) elif n == 'rotate_about_y_axis': rot = float(this[i + 1]) matrix2, offset2 = self.load_y_axis_rotation_matrix4(rot) elif n == 'rotate_about_z_axis': rot = float(this[i + 1]) matrix2, offset2 = self.load_z_axis_rotation_matrix4(rot) elif n == 'rotate_about_arbitrary_axis': axis = np.array(this[i + 1:i + 1 + 3]).astype(float) rot = float(this[i + 3]) fix_point = np.array(this[i + 4:i + 4 + 3]).astype(float) matrix2, offset2 = self.rotate_about_arbitrary_axis( axis, rot, fix_point) elif n == 'scale_fix_point': scale = float(this[i + 1]) fix_point = np.array(this[i + 2:i + 2 + 3]).astype(float) matrix2, offset2 = self.load_scaling_fix_point_matrix4( scale, fix_point) elif n == 'scale_differential_fix_point': scale = np.array(this[i + 1:i + 1 + 3]).astype(float) fix_point = np.array(this[i + 3:i + 3 + 3]).astype(float) matrix2,offset2 = self.load_differential_scaling_fix_point_matrix4(\ scale,fix_point) elif n == 'rotate_about_x_axis_fix_point': rot = float(this[i + 1]) fix_point = np.array(this[i + 2:i + 2 + 3]).astype(float) matrix2,offset2 = self.load_x_axis_rotation_fix_point_matrix4(\ theta,fix_point) elif n == 'rotate_about_y_axis_fix_point': rot = float(this[i + 1]) fix_point = np.array(this[i + 2:i + 2 + 3]).astype(float) matrix2,offset2 = self.load_y_axis_rotation_fix_point_matrix4(\ theta,fix_point) elif n == 'rotate_about_z_axis_fix_point': rot = float(this[i + 1]) fix_point = np.array(this[i + 2:i + 2 + 3]).astype(float) matrix2,offset2 = self.load_z_axis_rotation_fix_point_matrix4(\ theta,fix_point) else: noGood = True if not noGood: clone.matrix = matrix2 * matrix clone.matrixI = clone.matrix.I if (matrix != np.matrix(np.eye(3))).all(): clone.matrix = matrix if np.abs(offset).sum() > 0: clone.offset = offset clone.contents = [] self.top.contents.append(clone) self.verbose == 2 and sys.stderr.write('<M>') except: self.error('could not interpret clone line %d of %s: %s'%\ (self.lineNumber,self.filename,' '.join(cmd)))
def clone(self,cmd): ''' clone clone dx dy dz [Rz] name ''' from PyRatBox import PyRatBox from PyRatClone import PyRatClone try: try: this = cmd.split[1:] except: this = cmd[1:] # look up groups try: offset = np.array(this[:3]).astype(float) this = cmd[4:] except: offset = np.zeros(3) thisGroup = None thisGroupName = None matrix = np.matrix(np.eye(3)) done = np.zeros_like(np.array(this)).astype(bool) for i in xrange(len(this)): if not done[i]: if this[i] == 'Rx': theta = float(this[i+1])*np.pi/180. done[i:i+2] = True if theta != 0: c = np.cos(theta) s = np.sin(theta) m = np.eye(3) m[1,1] = m[2,2] = c m[2,1] = s m[1,2] = -s matrix = matrix * np.matrix(m) elif this[i] == 'Ry': theta = float(this[i+1])*np.pi/180. done[i:i+2] = True if theta != 0: c = np.cos(theta) s = np.sin(theta) m = np.eye(3) m[2,2] = m[0,0] = c m[0,2] = s m[2,0] = -s matrix = matrix * np.matrix(m) elif this[i] == 'Rz': theta = float(this[i+1])*np.pi/180. done[i:i+2] = True if theta != 0: c = np.cos(theta) s = np.sin(theta) m = np.eye(3) m[0,0] = m[1,1] = c m[0,1] = -s m[1,0] = s matrix = matrix * np.matrix(m) elif this[i] == 'Transform': # arbitrary 3 x 3 rotation m = \ np.matrix(np.array(this[i+1:i+9+1]).astype(float).reshape((3,3))) done[i+1:i+9+1] = True matrix = matrix * np.matrix(m) else: # maybe its a grp name possible = ' '.join(this[i:]) try: thisGroup = self.group[possible] thisGroupName = possible done[:] = True except: # maybe its a z rotation try: theta = float(this[i])*np.pi/180. done[i] = True if theta != 0: c = np.cos(theta) s = np.sin(theta) m = np.eye(3) m[0,0] = m[1,1] = c m[0,1] = -s m[1,0] = s matrix = matrix * np.matrix(m) except: pass # NB dummy extent at this point clone = PyRatClone(np.zeros(3),None) clone.empty = False clone.invisible = True if (matrix != np.matrix(np.eye(3))).any(): clone.matrix = matrix clone.thisGroup = thisGroup clone.thisGroupName = thisGroupName if np.abs(offset).sum() > 0: clone.offset = offset clone.contents = [clone.thisGroup] self.top.contents.append(clone) self.verbose == 2 and sys.stderr.write('<Clone %s>'%thisGroupName) except: self.error('could not interpret clone line %d of %s: %s'%\ (self.lineNumber,self.filename,' '.join(cmd)))
def clone(self, cmd): ''' clone clone dx dy dz [Rz] name ''' from PyRatBox import PyRatBox from PyRatClone import PyRatClone try: try: this = cmd.split[1:] except: this = cmd[1:] # look up groups try: offset = np.array(this[:3]).astype(float) this = cmd[4:] except: offset = np.zeros(3) thisGroup = None thisGroupName = None matrix = np.matrix(np.eye(3)) done = np.zeros_like(np.array(this)).astype(bool) for i in xrange(len(this)): if not done[i]: if this[i] == 'Rx': theta = float(this[i + 1]) * np.pi / 180. done[i:i + 2] = True if theta != 0: c = np.cos(theta) s = np.sin(theta) m = np.eye(3) m[1, 1] = m[2, 2] = c m[2, 1] = s m[1, 2] = -s matrix = matrix * np.matrix(m) elif this[i] == 'Ry': theta = float(this[i + 1]) * np.pi / 180. done[i:i + 2] = True if theta != 0: c = np.cos(theta) s = np.sin(theta) m = np.eye(3) m[2, 2] = m[0, 0] = c m[0, 2] = s m[2, 0] = -s matrix = matrix * np.matrix(m) elif this[i] == 'Rz': theta = float(this[i + 1]) * np.pi / 180. done[i:i + 2] = True if theta != 0: c = np.cos(theta) s = np.sin(theta) m = np.eye(3) m[0, 0] = m[1, 1] = c m[0, 1] = -s m[1, 0] = s matrix = matrix * np.matrix(m) elif this[i] == 'Transform': # arbitrary 3 x 3 rotation m = \ np.matrix(np.array(this[i+1:i+9+1]).astype(float).reshape((3,3))) done[i + 1:i + 9 + 1] = True matrix = matrix * np.matrix(m) else: # maybe its a grp name possible = ' '.join(this[i:]) try: thisGroup = self.group[possible] thisGroupName = possible done[:] = True except: # maybe its a z rotation try: theta = float(this[i]) * np.pi / 180. done[i] = True if theta != 0: c = np.cos(theta) s = np.sin(theta) m = np.eye(3) m[0, 0] = m[1, 1] = c m[0, 1] = -s m[1, 0] = s matrix = matrix * np.matrix(m) except: pass # NB dummy extent at this point clone = PyRatClone(np.zeros(3), None) clone.empty = False clone.invisible = True if (matrix != np.matrix(np.eye(3))).any(): clone.matrix = matrix clone.thisGroup = thisGroup clone.thisGroupName = thisGroupName if np.abs(offset).sum() > 0: clone.offset = offset clone.contents = [clone.thisGroup] self.top.contents.append(clone) self.verbose == 2 and sys.stderr.write( '<Clone %s>' % thisGroupName) except: self.error('could not interpret clone line %d of %s: %s'%\ (self.lineNumber,self.filename,' '.join(cmd)))