Создание классов Python и добавление файла osgb
Я пытаюсь создать класс в Python для планеты. Просто хочу прикрепить osgb
файл в этот класс.
В настоящее время я добавляю свои модели в программу, как это...
import viz
import vizact
import vizmat
import vizcam
import Planet
viz.setMultiSample(10)
viz.fov(80)
viz.go()
viz.collision(viz.ON)
viz.phys.enable()
#mercury
mercury = viz.addChild('planets/mercury.osgb')
mercury.setPosition([20,0,10])
mercury.setAxisAngle([1,0,0,90])
#venus
venus = viz.addChild('planets/venus.osgb')
venus.setPosition([20,0,20])
venus.setAxisAngle([1,0,0,90])
#earth
earth = viz.addChild('planets/earth.osgb')
earth.setPosition([20,0,30])
earth.setAxisAngle([1,0,0,90])
#mars
mars = viz.addChild('planets/mars.osgb')
mars.setPosition([20,0,40])
mars.setAxisAngle([1,0,0,90])
#jupiter
jupiter = viz.addChild('planets/jupiter.osgb')
jupiter.setPosition([20,0,50])
jupiter.setAxisAngle([1,0,0,90])
#saturn
saturn = viz.addChild('planets/saturn.osgb')
saturn.setPosition([100,0,60])
saturn.setAxisAngle([1,0,0,0])
#uranus
uranus = viz.addChild('planets/uranus.osgb')
uranus.setPosition([-50,0,70])
uranus.setAxisAngle([0,1,0,90])
#neptune
neptune = viz.addChild('planets/neptune.osgb')
neptune.setPosition([20,0,80])
neptune.setAxisAngle([1,0,0,90])
#pluto
pluto = viz.addChild('planets/pluto.osgb')
pluto.setPosition([20,0,90])
pluto.setAxisAngle([1,0,0,90])
BirdEyeWindow = viz.addWindow()
BirdEyeWindow.fov(60)
BirdEyeWindow.visible(0,viz.SCREEN)
BirdEyeView = viz.addView()
BirdEyeWindow.setView(BirdEyeView)
BirdEyeView.setPosition([0,250,0])
BirdEyeView.setEuler([0,90,0])
MOVE_SPEED = 50;
TURN_SPEED = 60;
viz.mouse(viz.OFF)
view = viz.MainView;
#Keyboard interaction to move the view point around
def updateCam():
if viz.key.isDown(viz.KEY_UP):
view.move([0,0,MOVE_SPEED*viz.elapsed()],viz.BODY_ORI)
elif viz.key.isDown(viz.KEY_DOWN):
view.move([0,0,-MOVE_SPEED*viz.elapsed()],viz.BODY_ORI)
elif viz.key.isDown(viz.KEY_RIGHT):
view.setEuler([TURN_SPEED*viz.elapsed(),0,0],viz.BODY_ORI,viz.REL_PARENT)
elif viz.key.isDown(viz.KEY_LEFT):
view.setEuler([-TURN_SPEED*viz.elapsed(),0,0],viz.BODY_ORI,viz.REL_PARENT)
vizact.ontimer(0,updateCam)
#selecting Details of planets
#Called when user clicks on an object
def pickEarth():
print 'Mouse Clicked'
object = viz.pick() #detects object mouse is currently over
if object.valid():
print 'Clicked on a planet'
print object
vizact.onmousedown(viz.MOUSEBUTTON_LEFT, pickEarth)
Однако я бы предпочел иметь класс под названием планета, и каждый класс был бы связан с osgb
модель.
Я посмотрел в Интернете и не могу найти какие-либо ресурсы о том, как это сделать. Я был бы признателен за любую помощь в том, как я мог бы изменить этот код выше, чтобы он использовал различные экземпляры объекта Planet.
1 ответ
Я не уверен, что это то, что вы хотите, но вы могли бы сделать следующее:
class MyPlanet:
def __init__(self, osgb_path):
self.viz_ref = viz.addChild(osgb_path)
self.osgb = osgb_path
def setPosition(self, coordinates):
self.viz_ref.setPosition(coordinates)
def setAxisAngle(self, coordinates):
self.viz_ref.setAxisAngle(coordinates)
mercury = MyPlanet('planets/mercury.osgb')
mercury.setPosition([20, 0, 10])
mercury.setAxisAngle([1, 0, 0, 90])
Это просто обертка вокруг чего угодно viz.addChild(...)
возвращается, так что я не вижу смысла иметь это.