Изменить размер куба с помощью MatrixTransform в vispy - PullRequest
0 голосов
/ 10 июля 2020
import numpy as np
from vispy import app, scene
from vispy.visuals import transforms

canvas = scene.SceneCanvas(keys='interactive', show=True)
vb = canvas.central_widget.add_view()
vb.camera = 'turntable'
vb.camera.rect = (-10, -10, 20, 20)

box = scene.visuals.Box(width=1, height=2, depth=3, color=(0, 0, 1, 0.3),
                        edge_color='green')
vb.add(box)

# Define a scale and translate transformation :
box.transform = transforms.STTransform(translate=(0., 0., 0.),
                                       scale=(1., 1., 1.))


@canvas.events.key_press.connect
def on_key_press(ev):
    tr = np.array(box.transform.translate)
    sc = np.array(box.transform.scale)
    if ev.text in '+':
        tr[0] += .1
    elif ev.text == '-':
        tr[0] -= .1
    elif ev.text == '(':
        sc[0] += .1
    elif ev.text == ')':
        sc[0] -= .1
    box.transform.translate = tr
    box.transform.scale = sc
    print('Translate (x, y, z): ', list(tr),
          '\nScale (x, y, z): ', list(sc), '\n')

if __name__ == '__main__':
    import sys
    if sys.flags.interactive != 1:
        app.run()

В приведенном выше коде, если я добавляю MatrixTransform и вращаю куб, а затем применяю масштабирование, куб становится ромбом

Я бы хотел повернуть куб на холсте и масштабируйте его только в направлении X, без влияния на другие размеры

...