def __call__(self): if self.name not in cmd.get_names('objects'): import threading threading.Thread(None, cmd.delete, args=(self.cb_name,)).start() return v = cmd.get_view() if v == self.prev_v: return self.prev_v = v t = v[12:15] if self.corner: vp = cmd.get_viewport() R_mc = [v[0:3], v[3:6], v[6:9]] off_c = [0.15 * v[11] * vp[0] / vp[1], 0.15 * v[11], 0.0] if self.corner in [2,3]: off_c[0] *= -1 if self.corner in [3,4]: off_c[1] *= -1 off_m = cpv.transform(R_mc, off_c) t = cpv.add(t, off_m) z = -v[11] / 30.0 m = [z, 0, 0, t[0] / z, 0, z, 0, t[1] / z, 0, 0, z, t[2] / z, 0, 0, 0, 1] cmd.set_object_ttt(self.name, m, homogenous=1)
def __call__(self): if self.name not in cmd.get_names('objects'): import threading threading.Thread(None, cmd.delete, args=(self.cb_name,)).start() return v = cmd.get_view() if v == self.prev_v: return self.prev_v = v t = v[12:15] if self.corner: vp = cmd.get_viewport() R_mc = [v[0:3], v[3:6], v[6:9]] off_c = [0.15 * v[11] * vp[0] / vp[1], 0.15 * v[11], 0.0] if self.corner in [2,3]: off_c[0] *= -1 if self.corner in [3,4]: off_c[1] *= -1 off_m = cpv.transform(R_mc, off_c) t = cpv.add(t, off_m) z = -v[11] / 30.0 m = [z, 0, 0, 0, 0, z, 0, 0, 0, 0, z, 0, t[0] / z, t[1] / z, t[2] / z, 1] cmd.set_object_ttt(self.name, m)
def test_set_object_ttt(self): M = [1.0, 0.0, 0.0, 0.0, 0.0, 0.0,-1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0] cmd.pseudoatom('m1') cmd.set_object_ttt('m1', M) self.assertArrayEqual(M, cmd.get_object_matrix('m1'), 1e-4)
def test_set_object_ttt(self): M = [ 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] cmd.pseudoatom('m1') cmd.set_object_ttt('m1', M) self.assertArrayEqual(M, cmd.get_object_matrix('m1'), 1e-4)
def matrix_to_ttt(names, reverse=0, state=-1, quiet=1): ''' DESCRIPTION Objects can have state matrices and view (frames) matrices. This function takes the total matrix and stores it either as view matrix or as state matrix (reverse=1). For movie frames, movie_auto_store must be set. ''' from . import querying reverse, state, quiet = int(reverse), int(state), int(quiet) ostate = state for object in cmd.get_object_list('(' + names + ')'): if ostate < 1: state = querying.get_object_state(object) matrix = cmd.get_object_matrix(object, state) cmd.matrix_reset(object) if reverse: cmd.reset(object) cmd.transform_object(object, matrix, homogenous=1) else: cmd.set_object_ttt(object, matrix)
def matrix_to_ttt(names, reverse=0, state=-1, quiet=1): ''' DESCRIPTION Objects can have state matrices and view (frames) matrices. This function takes the total matrix and stores it either as view matrix or as state matrix (reverse=1). For movie frames, movie_auto_store must be set. ''' from . import querying reverse, state, quiet = int(reverse), int(state), int(quiet) ostate = state for object in cmd.get_object_list('(' + names + ')'): if ostate < 1: state = querying.get_object_state(object) matrix = cmd.get_object_matrix(object, state) for i in range(cmd.count_states(object)): cmd.matrix_reset(object, i + 1) if reverse: cmd.reset(object) cmd.transform_object(object, matrix, homogenous=1) else: cmd.set_object_ttt(object, matrix)
def testGetModel(self): ''' Test coordinates and "reference" coordinates with various transformations. ''' # create two-state object # displace state 1, will do tests on state 2 cmd.fragment('ala', 'm1') cmd.create('m1', 'm1', 1, 2) cmd.translate([1, 2, 3], 'm1', 1) # prepare state 2 title = 'Alanin' cmd.set_title('m1', 2, title) cmd.reference(state=2) # with original coordinates m = cmd.get_model(state=2) a = m.atom[0] # title self.assertEqual(title, m.molecule.title) # bonds (covering count, indices and order) self.assertEqual( set(tuple(sorted(b.index)) + (b.order, ) for b in m.bond), set([(0, 1, 1), (0, 5, 1), (1, 2, 1), (1, 4, 1), (1, 6, 1), (2, 3, 2), (4, 7, 1), (4, 8, 1), (4, 9, 1)])) # expect equal coord and ref_coord coord = [-0.67689997, -1.23029995, -0.49050000] self.assertArrayEqual(a.ref_coord, coord, delta=1e-4) self.assertArrayEqual(a.coord, coord, delta=1e-4) # modify ttt cmd.set_object_ttt('m1', [ 0, 1, 0, 0, -1, 0, 0, 5, 0, 0, 1, 0, 0, 3, 0, 1, ]) # no state! API flaw, TTT object are not per state m = cmd.get_model('m1', state=2) a = m.atom[0] # ttt should affect both equally coord = [1.769700050354004, 5.6768999099731445, -0.49050000309944153] self.assertArrayEqual(a.ref_coord, coord, delta=1e-4) self.assertArrayEqual(a.coord, coord, delta=1e-4) # modify coords cmd.translate([10, 0, 0], state=2) m = cmd.get_model('m1', state=2) a = m.atom[0] # no effect of ref_coord ref = coord coord = [11.769700050354004, 5.6768999099731445, -0.49050000309944153] self.assertArrayEqual(a.ref_coord, ref, delta=1e-4) self.assertArrayEqual(a.coord, coord, delta=1e-4) # modify coords by alignment cmd.fragment('ala', 'm2') cmd.rotate('x', 90, 'm2') cmd.align('m1', 'm2', mobile_state=2) m = cmd.get_model('m1', state=2) a = m.atom[0] # no effect of ref_coord coord = [3.490499973297119, 5.6768999099731445, -1.230299949645996] self.assertArrayEqual(a.ref_coord, ref, delta=1e-4) self.assertArrayEqual(a.coord, coord, delta=1e-4)