Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
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)
Esempio n. 6
0
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)
Esempio n. 7
0
    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)