728x90
반응형
SMALL
Mouse and Keyboard Events
VPython은 마우스 및 키보드 입력을 받을 수 있다.
event는 사용자가 마우스나 키보드를 사용하여 수행할 수 있는 작업이다.
<event>는 하나의 event일 수도 있고 공백으로 구분된 event 리스트일 수도 있다.
사용자 event를 listen하는 방법에는 두 가지가 있다.
ev = scene.waitfor (‘ ‘)
이 method는 event를 한 번만 기다린다.
box()
ev = scene.waitfor(‘click’)
print(ev.event, ev.pos)
event를 두 번 이상 listen하려면 잠시 (while True:) loop를 사용한다.
box()
while True:
ev = scene.waitfor('keydown')
print(ev.key, ev.which) # name and numeric code of key
print(keysdown()) # list of all pressed keys
scene.bind (‘ ‘, function) (recommended)
이 method는 장면 (canvas)을 callback 함수에 bind하고 event에서 함수를 실행한다. 함수는 ev를 입력으로 받아들여야 한다.
box()
def callback(ev):
print(ev.event) # name of event
# call function on any one of these events
scene.bind('mouseup mousedown',callback)
Picking an Object
obj = scene.mess.pick은 마우스가 가리키는 객체를 가져온다. Obj=개체가 선택되지 않은 경우 없음.
b = box()
def callback(ev):
obj = scene.mouse.pick # pick the object
if obj != None: # check obj is not None
obj.pos = scene.mouse.pos # set obj to mouse position
scene.bind('click',callback) # call function on any one of these events
Changing Colors Example
s = sphere(color=color.cyan)
def change():
if s.color.equals(color.cyan):
s.color = color.red
else:
s.color = color.cyan
scene.bind('click', change)
Create Sphere on Click Example
scene.range = 3
box()
def createSphere(ev):
loc = ev.pos
sphere(pos=loc, radius=0.2, color=color.cyan)
scene.bind('click', createSphere)
Create and Drag Sphere Example
scene.range = 3
box()
drag = False
s = None # declare s to be used below
def down():
global drag, s
s = sphere(pos=scene.mouse.pos,
color=color.red,
size=0.2*vec(1,1,1))
drag = True
def move():
global drag, s
if drag: # mouse button is down
s.pos = scene.mouse.pos
def up():
global drag, s
s.color = color.cyan
drag = False
scene.bind("mousedown", down)
scene.bind("mousemove", move)
scene.bind("mouseup", up)
Typing Text into Label Example
prose = label() # initially blank text
def keyInput(evt):
s = evt.key
if len(s) == 1: # includes enter ('\n')
prose.text += s # append new character
elif s == 'delete' and len(prose.text) > 0:
prose.text = prose.text[:-1] # erase letter
scene.bind('keydown', keyInput)
Moving Sphere Using Arrow Keys
scene.range = 20
ball = sphere(color=color.cyan)
v = vec(0,0,0)
dv = 0.2
dt = 0.01
while True:
rate(30)
k = keysdown() # a list of keys that are down
if 'left' in k: v.x -= dv
if 'right' in k: v.x += dv
if 'down' in k: v.y -= dv
if 'up' in k: v.y += dv
ball.pos += v*dt
728x90
반응형
LIST
'Python Library > VPython' 카테고리의 다른 글
[VPython] Miscellaneous (2) (0) | 2022.01.18 |
---|---|
[VPython] Miscellaneous (1) (0) | 2022.01.18 |
[VPython] Math Functions (0) | 2022.01.18 |
[VPython] Animations (0) | 2022.01.18 |
[VPython] Graphs (2) (0) | 2022.01.17 |