You can subscribe to this list here.
2007 |
Jan
|
Feb
(3) |
Mar
|
Apr
|
May
|
Jun
(64) |
Jul
(77) |
Aug
(21) |
Sep
(15) |
Oct
(3) |
Nov
(4) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(1) |
Feb
|
Mar
(12) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
(3) |
Dec
|
From: <ror...@us...> - 2007-09-20 17:59:04
|
Revision: 183 http://roreditor.svn.sourceforge.net/roreditor/?rev=183&view=rev Author: rorthomas Date: 2007-09-20 10:59:02 -0700 (Thu, 20 Sep 2007) Log Message: ----------- * buggfixed some things, including the ror directory selection and windows Modified Paths: -------------- trunk/lib_common/ror/rorcommon.py trunk/lib_common/ror/starter.py trunk/lib_common/wxogre/OgreManager.py Modified: trunk/lib_common/ror/rorcommon.py =================================================================== --- trunk/lib_common/ror/rorcommon.py 2007-09-20 08:48:08 UTC (rev 182) +++ trunk/lib_common/ror/rorcommon.py 2007-09-20 17:59:02 UTC (rev 183) @@ -1,6 +1,7 @@ import sys, os, os.path import wx from random import Random +from logger import log def ShowOnAbout(event = None): rev = "" @@ -47,15 +48,24 @@ return rnd_id +def getPlatform(): + if sys.platform in ['linux', 'linux2']: + return 'linux' + elif sys.platform in ['win32']: + return 'windows' + return 'unkown' -def checkRoRDirectory(): +def checkRoRDirectory(fpath=None): rorexecutable = '' - if sys.platform in ['linux', 'linux2']: + if getPlatform() == 'linux': rorexecutable = "RoR.bin" - elif sys.platform in ['win32']: + elif getPlatform() == 'windows': rorexecutable = "RoR.exe" - import settingsManager - path = settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - return os.path.isfile(os.path.join(path, rorexecutable)) + if fpath is None: + import settingsManager + fpath = settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + fpath = os.path.join(fpath, rorexecutable) + #log().info(fpath) + return os.path.isfile(fpath) Modified: trunk/lib_common/ror/starter.py =================================================================== --- trunk/lib_common/ror/starter.py 2007-09-20 08:48:08 UTC (rev 182) +++ trunk/lib_common/ror/starter.py 2007-09-20 17:59:02 UTC (rev 183) @@ -213,15 +213,8 @@ log().exception(str(e)) def checkRoRDir(self, fn): - # withoutspaces = (fn.find(" ") == -1) - # if not withoutspaces: - # dlg = wx.MessageDialog(self, "Your RoR installation directory contains spaces. Rename/move it to a directory with no spaces.\nFor example c:\\ror", "Error", wx.OK | wx.ICON_INFORMATION) - # dlg.ShowModal() - # dlg.Destroy() - # return False - - #this function is already cross platform - if not checkRoRDirectory(): + # what a damn bug by myself :-\ + if not checkRoRDirectory(fn): dlg = wx.MessageDialog(self, "RoR binary executable not found in the selected directory!\nPlease select a new directory!", "Error", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() Modified: trunk/lib_common/wxogre/OgreManager.py =================================================================== --- trunk/lib_common/wxogre/OgreManager.py 2007-09-20 08:48:08 UTC (rev 182) +++ trunk/lib_common/wxogre/OgreManager.py 2007-09-20 17:59:02 UTC (rev 183) @@ -92,12 +92,14 @@ def createRenderWindow(self, wxOgrewin, name, width, height, fullscreen, handle): renderParameters = ogre.NameValuePairList() - renderParameters['externalWindowHandle'] = str(handle) #TODO: For some reason passing renderParameters causes the renderer not to start, passing Null is a work around # use len to make the names unique! - renderWindow = self.ogreRoot.createRenderWindow(name + str(len(self.renderWindows)), width, height, fullscreen, None) - #renderWindow = self.ogreRoot.createRenderWindow(name + str(len(self.renderWindows)), width, height, fullscreen, renderParameters) + if getPlatform() == 'windows': + renderParameters['externalWindowHandle'] = str(handle) + elif getPlatform() == 'linux': + renderParameters['externalWindowHandle'] = 0 + renderWindow = self.ogreRoot.createRenderWindow(name + str(len(self.renderWindows)), width, height, fullscreen, renderParameters) #renderWindow.active = True self.renderWindows[wxOgrewin] = renderWindow return renderWindow This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-09-20 08:48:20
|
Revision: 182 http://roreditor.svn.sourceforge.net/roreditor/?rev=182&view=rev Author: rorthomas Date: 2007-09-20 01:48:08 -0700 (Thu, 20 Sep 2007) Log Message: ----------- * fixed some cross platform TODOs * PLEASE USE TABS instead of spaces! Modified Paths: -------------- trunk/lib_common/ror/starter.py trunk/lib_common/roreditor/RoRObjectPreviewOgreWindow.py trunk/lib_common/roreditor/RoROdefEditorOgreWindow.py trunk/lib_common/roreditor/RoRTerrainOgreWindow.py trunk/lib_common/roreditor/RoRTruckOgreWindow.py trunk/lib_common/roreditor/RoRTruckUVOgreWindow.py Modified: trunk/lib_common/ror/starter.py =================================================================== --- trunk/lib_common/ror/starter.py 2007-09-20 08:15:43 UTC (rev 181) +++ trunk/lib_common/ror/starter.py 2007-09-20 08:48:08 UTC (rev 182) @@ -220,9 +220,9 @@ # dlg.Destroy() # return False - #TODO check for actual binary name since RoR.exe is windows only + #this function is already cross platform if not checkRoRDirectory(): - dlg = wx.MessageDialog(self, "RoR.exe not found in the selected directory!\nPlease select a new directory!", "Error", wx.OK | wx.ICON_INFORMATION) + dlg = wx.MessageDialog(self, "RoR binary executable not found in the selected directory!\nPlease select a new directory!", "Error", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() self.rordir = "" Modified: trunk/lib_common/roreditor/RoRObjectPreviewOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRObjectPreviewOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) +++ trunk/lib_common/roreditor/RoRObjectPreviewOgreWindow.py 2007-09-20 08:48:08 UTC (rev 182) @@ -1,6 +1,6 @@ #Thomas Fischer 31/05/2007, th...@th... import wx, math -import ogre.renderer.OGRE as ogre +import ogre.renderer.OGRE as ogre from wxogre.OgreManager import * from wxogre.wxOgreWindow import * from ror.SimpleTruckRepresentation import * @@ -9,271 +9,272 @@ class TreeDropTarget(wx.PyDropTarget): - def __init__(self, window): - wx.PyDropTarget.__init__(self) - self.do = wx.FileDataObject() - self.SetDataObject(self.do) + def __init__(self, window): + wx.PyDropTarget.__init__(self) + self.do = wx.FileDataObject() + self.SetDataObject(self.do) - def OnEnter(self, x, y, d): - print "OnEnter: %d, %d, %d\n" % (x, y, d) - return wx.DragCopy + def OnEnter(self, x, y, d): + print "OnEnter: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy - def OnDragOver(self, x, y, d): - print "OnDragOver: %d, %d, %d\n" % (x, y, d) - return wx.DragCopy + def OnDragOver(self, x, y, d): + print "OnDragOver: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy - def OnLeave(self): - print "OnLeave\n" + def OnLeave(self): + print "OnLeave\n" - def OnDrop(self, x, y): - print "OnDrop: %d %d\n" % (x, y) - return True + def OnDrop(self, x, y): + print "OnDrop: %d %d\n" % (x, y) + return True - def OnData(self, x, y, d): - print "OnData: %d, %d, %d\n" % (x, y, d) - self.GetData() - print "%s\n" % self.do.GetFilenames() - return d - -class ObjectPreviewOgreWindow(wxOgreWindow): - def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", **kwargs): - self.rordir = rordir - self.parent = parent - self.objnode = None - self.objentity = None - self.camalpha = 0 - self.radius = 40 - self.dragging = False - self.mode = None - self.logovisible = True - wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) - droptarget = TreeDropTarget(self) - self.SetDropTarget(droptarget) - + def OnData(self, x, y, d): + print "OnData: %d, %d, %d\n" % (x, y, d) + self.GetData() + print "%s\n" % self.do.GetFilenames() + return d - def SceneInitialisation(self): - #TODO This section is not platform independent, needs to be fixed. - addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] - # only init things in the main window, not in shared ones! - # setup resources - for r in addresources: - ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) +class ObjectPreviewOgreWindow(wxOgreWindow): + def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", **kwargs): + self.rordir = rordir + self.parent = parent + self.objnode = None + self.objentity = None + self.camalpha = 0 + self.radius = 40 + self.dragging = False + self.mode = None + self.logovisible = True + wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) + droptarget = TreeDropTarget(self) + self.SetDropTarget(droptarget) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() - self.createSceneManager() - def createSceneManager(self, type="object"): - #get the scenemanager - self.mode = type - uuid = randomID() - if type == "object": - self.sceneManager = getOgreManager().createSceneManager(ogre.ST_GENERIC) - elif type == "terrain": - self.sceneManager = getOgreManager().createSceneManager(ogre.ST_EXTERIOR_CLOSE) + def SceneInitialisation(self): + addresources = [os.path.join(self.rordir,'data', 'terrains'), + os.path.join(self.rordir,'data', 'trucks'), + os.path.join(self.rordir,'data', 'objects')] + # only init things in the main window, not in shared ones! + # setup resources + for r in addresources: + ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) - # create a camera - self.camera = self.sceneManager.createCamera(str(randomID())+'Camera') - self.camera.lookAt(ogre.Vector3(0, 0, 0)) - self.camera.setPosition(ogre.Vector3(0, 0, 100)) - self.camera.nearClipDistance = 1 - self.camera.setAutoAspectRatio(True) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() + self.createSceneManager() - # create the Viewport" - self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) - self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) + def createSceneManager(self, type="object"): + #get the scenemanager + self.mode = type + uuid = randomID() + if type == "object": + self.sceneManager = getOgreManager().createSceneManager(ogre.ST_GENERIC) + elif type == "terrain": + self.sceneManager = getOgreManager().createSceneManager(ogre.ST_EXTERIOR_CLOSE) - # bind mouse and keyboard - self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) - - #create objects - self.populateScene() - - def loadFile(self, filename): - self.filename = filename - filenameonly, extension = os.path.splitext(filename) - uuid = randomID() - - #hide logo - self.logovisible = False - - if extension.lower() in [".truck", ".load"]: - self.mode="object" - self.free() - self.createSceneManager() - uuid = randomID() - self.objnode, self.objentity, manualobject = createTruckMesh(self.sceneManager, filename, uuid) - #print "aaa", self.objnode.getPosition() - elif extension.lower() in [".odef"]: - self.mode="object" - self.free() - self.createSceneManager() - self.loadodef(filename, uuid) - elif extension.lower() in [".terrn"]: - self.mode="terrain" - self.free() - self.createSceneManager("terrain") - terrain = RoRTerrain(filename) - cfgfile = os.path.join(os.path.dirname(filename), terrain.TerrainConfig) - self.objnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"objnode") - self.objnode.setPosition(1500, 0, 1500) - self.sceneManager.setWorldGeometry(cfgfile) - - def loadodef(self, filename, uuid): - try: - meshname, sx, sy, sz, ismovable, boxes = loadOdef(filename) - except Exception, err: - log().error("error while processing odef file %s" % filename) - log().error(str(err)) - return - # create mesh - print meshname, sx, sy, sz - self.objnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"objnode") - self.objentity = self.sceneManager.createEntity(uuid+'objentity', meshname) - self.objnode.attachObject(self.objentity) - self.objnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - #self.objnode.setPosition(0,0,0) - if not sx is None: - self.objnode.setScale(sx, sy, sz) + # create a camera + self.camera = self.sceneManager.createCamera(str(randomID())+'Camera') + self.camera.lookAt(ogre.Vector3(0, 0, 0)) + self.camera.setPosition(ogre.Vector3(0, 0, 100)) + self.camera.nearClipDistance = 1 + self.camera.setAutoAspectRatio(True) - - def free(self): - try: - self.sceneManager.destroyAllManualObjects() - except Exception, e: - log().exception(str(e)) - - try: - self.logotextnode.detachAllObjects() - self.logowheelnode.detachAllObjects() - self.sceneManager.destroySceneNode(self.logotextnode.getName()) - self.sceneManager.destroySceneNode(self.logowheelnode.getName()) - self.sceneManager.destroyEntity(self.logotextentity) - self.sceneManager.destroyEntity(self.logowheelentity) - except Exception, e: - log().exception(str(e)) - try: - #BUG: next line fails and goes to except - self.objnode.detachAllObjects() - self.sceneManager.destroySceneNode(self.objnode.getName()) - except Exception, e: - log().exception(str(e)) + # create the Viewport" + self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) + self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) - #try: - #BUG Entering this function alone seams to kill the application. - #self.sceneManager.destroyEntity(self.objentity) - #except Exception, e: - #log().exception(str(e)) - - self.renderWindow.removeAllViewports() - getOgreManager().destroySceneManager(self.sceneManager) - - def populateScene(self): - self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) - self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); - self.sceneManager.setSkyDome(True, 'mysimple/terraineditor/previewwindowsky', 4.0, 8.0) + # bind mouse and keyboard + self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) - #self.MainLight = self.sceneManager.createLight('MainLight') - #self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) + #create objects + self.populateScene() - # add some fog - self.sceneManager.setFog(ogre.FOG_EXP, ogre.ColourValue.White, 0.00002) + def loadFile(self, filename): + self.filename = filename + filenameonly, extension = os.path.splitext(filename) + uuid = randomID() - # create a floor Mesh - plane = ogre.Plane() - plane.normal = ogre.Vector3(0, 1, 0) - plane.d = 200 - uuid = str(randomID()) - ogre.MeshManager.getSingleton().createPlane(uuid + 'FloorPlane', "General", plane, 200000.0, 200000.0, - 20, 20, True, 1, 50.0, 50.0,ogre.Vector3(0, 0, 1), - ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, - ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, - True, True) + #hide logo + self.logovisible = False - # create floor entity - entity = self.sceneManager.createEntity(uuid+'floor', uuid + 'FloorPlane') - entity.setMaterialName('mysimple/terraineditor/previewwindowfloor') - self.sceneManager.getRootSceneNode().createChildSceneNode().attachObject(entity) - - if self.logovisible: - uuid = str(randomID()) - self.logowheelnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"logonode") - self.logowheelentity = self.sceneManager.createEntity(uuid+'logoentity', "logowheel.mesh") - self.logowheelentity.setMaterialName('mysimple/terrainselect') - self.logowheelnode.attachObject(self.logowheelentity) - self.logowheelnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - self.logowheelnode.setScale(0.025, 0.025, 0.025) + if extension.lower() in [".truck", ".load"]: + self.mode="object" + self.free() + self.createSceneManager() + uuid = randomID() + self.objnode, self.objentity, manualobject = createTruckMesh(self.sceneManager, filename, uuid) + #print "aaa", self.objnode.getPosition() + elif extension.lower() in [".odef"]: + self.mode="object" + self.free() + self.createSceneManager() + self.loadodef(filename, uuid) + elif extension.lower() in [".terrn"]: + self.mode="terrain" + self.free() + self.createSceneManager("terrain") + terrain = RoRTerrain(filename) + cfgfile = os.path.join(os.path.dirname(filename), terrain.TerrainConfig) + self.objnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"objnode") + self.objnode.setPosition(1500, 0, 1500) + self.sceneManager.setWorldGeometry(cfgfile) - uuid = str(randomID()) - self.logotextnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"logonode") - self.logotextentity = self.sceneManager.createEntity(uuid+'logoentity', "logotext.mesh") - self.logotextentity.setMaterialName('mysimple/transblue') - self.logotextnode.attachObject(self.logotextentity) - self.logotextnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - self.logotextnode.setScale(0.025, 0.025, 0.025) - - else: - pass - #self.logotextnode.setVisible(False) - #self.logowheelnode.setVisible(False) + def loadodef(self, filename, uuid): + try: + meshname, sx, sy, sz, ismovable, boxes = loadOdef(filename) + except Exception, err: + log().error("error while processing odef file %s" % filename) + log().error(str(err)) + return + # create mesh + print meshname, sx, sy, sz + self.objnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"objnode") + self.objentity = self.sceneManager.createEntity(uuid+'objentity', meshname) + self.objnode.attachObject(self.objentity) + self.objnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + #self.objnode.setPosition(0,0,0) + if not sx is None: + self.objnode.setScale(sx, sy, sz) - def updateCamera(self): - if not self.mode is None: - if self.logovisible: - self.radius = 100 - pos = self.logotextnode.getPosition() - lookheight = ogre.Vector3(0,0,0) - self.logowheelnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(1),relativeTo=ogre.Node.TransformSpace.TS_LOCAL) - else: - if self.mode == "object": - self.radius = self.objentity.getBoundingRadius() * 2 - if self.objentity is None: - height = 20 - else: - height = self.objentity.getBoundingBox().getMaximum().z - rotateheight = ogre.Vector3(0, height * 0.2, 0) - pos = self.objnode.getPosition() + rotateheight + (self.objentity.getBoundingBox().getMinimum() + self.objentity.getBoundingBox().getMaximum() ) / 2 - lookheight = ogre.Vector3(0, height / 2, 0) - elif self.mode == "terrain": - self.radius = 3000 - rotateheight = ogre.Vector3(0, 1600, 0) - pos = self.objnode.getPosition() + rotateheight - lookheight = -rotateheight + def free(self): + try: + self.sceneManager.destroyAllManualObjects() + except Exception, e: + log().exception(str(e)) - dx = math.cos(self.camalpha) * self.radius - dy = math.sin(self.camalpha) * self.radius - self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) - self.camera.lookAt(pos + lookheight) - if self.dragging == False: - self.camalpha += math.pi / 720 - if self.camalpha >= 360: - self.camalpha -= 360 + try: + self.logotextnode.detachAllObjects() + self.logowheelnode.detachAllObjects() + self.sceneManager.destroySceneNode(self.logotextnode.getName()) + self.sceneManager.destroySceneNode(self.logowheelnode.getName()) + self.sceneManager.destroyEntity(self.logotextentity) + self.sceneManager.destroyEntity(self.logowheelentity) + except Exception, e: + log().exception(str(e)) + try: + #BUG: next line fails and goes to except + self.objnode.detachAllObjects() + self.sceneManager.destroySceneNode(self.objnode.getName()) + except Exception, e: + log().exception(str(e)) + #try: + #BUG Entering this function alone seams to kill the application. + #self.sceneManager.destroyEntity(self.objentity) + #except Exception, e: + #log().exception(str(e)) - def OnFrameStarted(self): - if self.logovisible: - self.logowheelnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(1),relativeTo=ogre.Node.TransformSpace.TS_LOCAL) - self.updateCamera() - wxOgreWindow.OnFrameStarted(self) - - def onMouseEvent(self, event): - #self.SetFocus() #Gives Keyboard focus to the window - - if event.RightDown(): #Precedes dragging - self.StartDragX, self.StartDragY = event.GetPosition() #saves position of initial click - elif event.Dragging() and event.RightIsDown(): #Dragging with RMB - x,y = event.GetPosition() - dx = self.StartDragX - x - dy = self.StartDragY - y - self.StartDragX, self.StartDragY = x, y - self.camalpha -= float(dx) * (math.pi / 720) * 2 - self.updateCamera() - self.dragging = True - else: - self.dragging = False - event.Skip() - \ No newline at end of file + self.renderWindow.removeAllViewports() + getOgreManager().destroySceneManager(self.sceneManager) + + def populateScene(self): + self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) + self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); + self.sceneManager.setSkyDome(True, 'mysimple/terraineditor/previewwindowsky', 4.0, 8.0) + + #self.MainLight = self.sceneManager.createLight('MainLight') + #self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) + + # add some fog + self.sceneManager.setFog(ogre.FOG_EXP, ogre.ColourValue.White, 0.00002) + + # create a floor Mesh + plane = ogre.Plane() + plane.normal = ogre.Vector3(0, 1, 0) + plane.d = 200 + uuid = str(randomID()) + ogre.MeshManager.getSingleton().createPlane(uuid + 'FloorPlane', "General", plane, 200000.0, 200000.0, + 20, 20, True, 1, 50.0, 50.0,ogre.Vector3(0, 0, 1), + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + True, True) + + # create floor entity + entity = self.sceneManager.createEntity(uuid+'floor', uuid + 'FloorPlane') + entity.setMaterialName('mysimple/terraineditor/previewwindowfloor') + self.sceneManager.getRootSceneNode().createChildSceneNode().attachObject(entity) + + if self.logovisible: + uuid = str(randomID()) + self.logowheelnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"logonode") + self.logowheelentity = self.sceneManager.createEntity(uuid+'logoentity', "logowheel.mesh") + self.logowheelentity.setMaterialName('mysimple/terrainselect') + self.logowheelnode.attachObject(self.logowheelentity) + self.logowheelnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + self.logowheelnode.setScale(0.025, 0.025, 0.025) + + uuid = str(randomID()) + self.logotextnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"logonode") + self.logotextentity = self.sceneManager.createEntity(uuid+'logoentity', "logotext.mesh") + self.logotextentity.setMaterialName('mysimple/transblue') + self.logotextnode.attachObject(self.logotextentity) + self.logotextnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + self.logotextnode.setScale(0.025, 0.025, 0.025) + + else: + pass + #self.logotextnode.setVisible(False) + #self.logowheelnode.setVisible(False) + + + def updateCamera(self): + if not self.mode is None: + if self.logovisible: + self.radius = 100 + pos = self.logotextnode.getPosition() + lookheight = ogre.Vector3(0,0,0) + self.logowheelnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(1),relativeTo=ogre.Node.TransformSpace.TS_LOCAL) + else: + if self.mode == "object": + self.radius = self.objentity.getBoundingRadius() * 2 + if self.objentity is None: + height = 20 + else: + height = self.objentity.getBoundingBox().getMaximum().z + rotateheight = ogre.Vector3(0, height * 0.2, 0) + pos = self.objnode.getPosition() + rotateheight + (self.objentity.getBoundingBox().getMinimum() + self.objentity.getBoundingBox().getMaximum() ) / 2 + lookheight = ogre.Vector3(0, height / 2, 0) + elif self.mode == "terrain": + self.radius = 3000 + rotateheight = ogre.Vector3(0, 1600, 0) + pos = self.objnode.getPosition() + rotateheight + lookheight = -rotateheight + + dx = math.cos(self.camalpha) * self.radius + dy = math.sin(self.camalpha) * self.radius + self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) + self.camera.lookAt(pos + lookheight) + if self.dragging == False: + self.camalpha += math.pi / 720 + if self.camalpha >= 360: + self.camalpha -= 360 + + + def OnFrameStarted(self): + if self.logovisible: + self.logowheelnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(1),relativeTo=ogre.Node.TransformSpace.TS_LOCAL) + self.updateCamera() + wxOgreWindow.OnFrameStarted(self) + + def onMouseEvent(self, event): + #self.SetFocus() #Gives Keyboard focus to the window + + if event.RightDown(): #Precedes dragging + self.StartDragX, self.StartDragY = event.GetPosition() #saves position of initial click + elif event.Dragging() and event.RightIsDown(): #Dragging with RMB + x,y = event.GetPosition() + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + self.camalpha -= float(dx) * (math.pi / 720) * 2 + self.updateCamera() + self.dragging = True + else: + self.dragging = False + event.Skip() + \ No newline at end of file Modified: trunk/lib_common/roreditor/RoROdefEditorOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoROdefEditorOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) +++ trunk/lib_common/roreditor/RoROdefEditorOgreWindow.py 2007-09-20 08:48:08 UTC (rev 182) @@ -1,6 +1,6 @@ #Thomas Fischer 31/05/2007, th...@th... import wx, math -import ogre.renderer.OGRE as ogre +import ogre.renderer.OGRE as ogre from wxogre.OgreManager import * from wxogre.wxOgreWindow import * from ror.SimpleTruckRepresentation import * @@ -9,355 +9,356 @@ class TreeDropTarget(wx.PyDropTarget): - def __init__(self, window): - wx.PyDropTarget.__init__(self) - self.do = wx.FileDataObject() - self.SetDataObject(self.do) + def __init__(self, window): + wx.PyDropTarget.__init__(self) + self.do = wx.FileDataObject() + self.SetDataObject(self.do) - def OnEnter(self, x, y, d): - print "OnEnter: %d, %d, %d\n" % (x, y, d) - return wx.DragCopy + def OnEnter(self, x, y, d): + print "OnEnter: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy - def OnDragOver(self, x, y, d): - print "OnDragOver: %d, %d, %d\n" % (x, y, d) - return wx.DragCopy + def OnDragOver(self, x, y, d): + print "OnDragOver: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy - def OnLeave(self): - print "OnLeave\n" + def OnLeave(self): + print "OnLeave\n" - def OnDrop(self, x, y): - print "OnDrop: %d %d\n" % (x, y) - return True + def OnDrop(self, x, y): + print "OnDrop: %d %d\n" % (x, y) + return True - def OnData(self, x, y, d): - print "OnData: %d, %d, %d\n" % (x, y, d) - self.GetData() - print "%s\n" % self.do.GetFilenames() - return d - + def OnData(self, x, y, d): + print "OnData: %d, %d, %d\n" % (x, y, d) + self.GetData() + print "%s\n" % self.do.GetFilenames() + return d -NEWMATNAME = "mysimple/odefeditor/objplaceholder" -class ODefEditorOgreWindow(wxOgreWindow): - def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", **kwargs): - self.rordir = rordir - self.parent = parent - self.objnode = None - self.objentity = None - self.camalpha = 0 - self.radius = 40 - self.dragging = False - self.boxes = [] - self.objmat = None - self.randcolors = [0,0.2,0.4] - wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) - droptarget = TreeDropTarget(self) - self.SetDropTarget(droptarget) - +NEWMATNAME = "mysimple/odefeditor/objplaceholder" - def SceneInitialisation(self): - #TODO This section is not platform independent, needs to be fixed. - addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] - # only init things in the main window, not in shared ones! - # setup resources - for r in addresources: - ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) +class ODefEditorOgreWindow(wxOgreWindow): + def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", **kwargs): + self.rordir = rordir + self.parent = parent + self.objnode = None + self.objentity = None + self.camalpha = 0 + self.radius = 40 + self.dragging = False + self.boxes = [] + self.objmat = None + self.randcolors = [0,0.2,0.4] + wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) + droptarget = TreeDropTarget(self) + self.SetDropTarget(droptarget) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() - #get the scenemanager - self.sceneManager = getOgreManager().createSceneManager(ogre.ST_GENERIC) + def SceneInitialisation(self): + addresources = [os.path.join(self.rordir,'data', 'terrains'), + os.path.join(self.rordir,'data', 'trucks'), + os.path.join(self.rordir,'data', 'objects')] + # only init things in the main window, not in shared ones! + # setup resources + for r in addresources: + ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) - # create a camera - self.camera = self.sceneManager.createCamera(str(randomID())+'Camera') - self.camera.lookAt(ogre.Vector3(0, 0, 0)) - self.camera.setPosition(ogre.Vector3(0, 0, 100)) - self.camera.nearClipDistance = 1 - self.camera.setAutoAspectRatio(True) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() - # create the Viewport" - self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) - self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) + #get the scenemanager + self.sceneManager = getOgreManager().createSceneManager(ogre.ST_GENERIC) - # bind mouse and keyboard - d=10.0 #displacement for key strokes - self.ControlKeyDict={wx.WXK_LEFT:ogre.Vector3(-d,0.0,0.0), - wx.WXK_RIGHT:ogre.Vector3(d,0.0,0.0), - wx.WXK_UP:ogre.Vector3(0.0,0.0,-d), - wx.WXK_DOWN:ogre.Vector3(0.0,0.0,d), - wx.WXK_PAGEUP:ogre.Vector3(0.0,d,0.0), - wx.WXK_PAGEDOWN:ogre.Vector3(0.0,-d,0.0)} - self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) - #self.Bind(wx.EVT_KEY_UP, self.onKeyUp) - self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) - #create objects - self.populateScene() - - def loadFile(self, filename): - self.filename = filename - filenameonly, extension = os.path.splitext(filename) - if extension.lower() in [".truck", ".load"]: - self.free() - uuid = randomID() - self.objnode, self.objentity, manualobject = createTruckMesh(self.sceneManager, filename, uuid) - elif extension.lower() in [".odef"]: - self.free() - uuid = randomID() - self.loadodef(filename, uuid) + # create a camera + self.camera = self.sceneManager.createCamera(str(randomID())+'Camera') + self.camera.lookAt(ogre.Vector3(0, 0, 0)) + self.camera.setPosition(ogre.Vector3(0, 0, 100)) + self.camera.nearClipDistance = 1 + self.camera.setAutoAspectRatio(True) - def loadodef(self, filename, uuid): - try: - meshname, sx, sy, sz, ismovable, boxes = loadOdef(filename) - except Exception, err: - log().error("error while processing odef file %s" % filename) - log().error(str(err)) - return - # create mesh - self.objnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"objnode") - self.objentity = self.sceneManager.createEntity(uuid+'objentity', meshname) - self.objnode.attachObject(self.objentity) - self.objnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - - try: - self.objOriginalMat = ogre.MaterialManager.getSingleton().getByName(self.objentity.getSubEntity(0).getMaterialName()) - if self.objmat is None: - self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) - self.objOriginalMat.copyDetailsTo(self.objmat) - # self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) - self.objmat.setSceneBlending(ogre.SceneBlendFactor.SBF_SOURCE_ALPHA, ogre.SceneBlendFactor.SBF_DEST_ALPHA ) - self.objentity.setMaterialName(NEWMATNAME) - self.setMainMeshTrans(60) - except: - pass - - self.objnode.setPosition(0,0,0) - if not sx is None: - self.objnode.setScale(sx, sy, sz) - for box in boxes: - - matname = "mysimple/odefeditor/transred" - if box.virtual: - matname = "mysimple/odefeditor/transgreen" - matname = self.getNewMat(matname) - box.uuid = randomID() - box.node = self.sceneManager.getRootSceneNode().createChildSceneNode(box.uuid+"boxnode") - box.entity = self.sceneManager.createEntity(box.uuid+'boxentity', "beam.mesh") - box.entity.setMaterialName(matname) - box.node.attachObject(box.entity) + # create the Viewport" + self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) + self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) - if box.rotating: - rotx = float(box.rotation[0]) - roty = float(box.rotation[1]) - rotz = float(box.rotation[2]) - box.node.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(rotz),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - box.node.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(roty),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - box.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(rotx),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + # bind mouse and keyboard + d=10.0 #displacement for key strokes + self.ControlKeyDict={wx.WXK_LEFT:ogre.Vector3(-d,0.0,0.0), + wx.WXK_RIGHT:ogre.Vector3(d,0.0,0.0), + wx.WXK_UP:ogre.Vector3(0.0,0.0,-d), + wx.WXK_DOWN:ogre.Vector3(0.0,0.0,d), + wx.WXK_PAGEUP:ogre.Vector3(0.0,d,0.0), + wx.WXK_PAGEDOWN:ogre.Vector3(0.0,-d,0.0)} + self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) + #self.Bind(wx.EVT_KEY_UP, self.onKeyUp) + self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) + #create objects + self.populateScene() - x = float(box.coords[0]) - x1 = float(box.coords[1]) - y = float(box.coords[2]) - y1 = float(box.coords[3]) - z = float(box.coords[4]) - z1 = float(box.coords[5]) - xdiff = x1-x - ydiff = y1-y - zdiff = z1-z - box.node.setPosition(x+xdiff/2, y+ydiff/2, z+zdiff/2) - box.node.setScale(xdiff, ydiff, zdiff) - self.boxes.append(box) + def loadFile(self, filename): + self.filename = filename + filenameonly, extension = os.path.splitext(filename) + if extension.lower() in [".truck", ".load"]: + self.free() + uuid = randomID() + self.objnode, self.objentity, manualobject = createTruckMesh(self.sceneManager, filename, uuid) + elif extension.lower() in [".odef"]: + self.free() + uuid = randomID() + self.loadodef(filename, uuid) - def getNewMat(self, basematname): - uuid = randomID() - matname = uuid+"mat" - basemat = ogre.MaterialManager.getSingleton().getByName(basematname) - mat = ogre.MaterialManager.getSingleton().create(matname, basemat.getGroup()) - basemat.copyDetailsTo(mat) - #mat = ogre.MaterialManager.getSingleton().getByName(matname) - for i in range(0,2): - self.randcolors[i] += 0.1 - if self.randcolors[i] >= 1: - self.randcolors[i] -= 1 - mat.setDiffuse(self.randcolors[0], self.randcolors[1], self.randcolors[2], 0.8) - mat.setSpecular(self.randcolors[0], self.randcolors[1], self.randcolors[2], 0.8) - mat.setSelfIllumination(self.randcolors[0], self.randcolors[1], self.randcolors[2]) - mat.setAmbient(self.randcolors[0], self.randcolors[1], self.randcolors[2]) - print "new material:", matname - return matname - - def setMainMeshTrans(self, alpha): - alpha = float(alpha) / float(100) - self.objmat.setDiffuse(0.5, 1, 0.5, alpha) - self.objmat.setSpecular(0.5, 1, 0.5, alpha) + def loadodef(self, filename, uuid): + try: + meshname, sx, sy, sz, ismovable, boxes = loadOdef(filename) + except Exception, err: + log().error("error while processing odef file %s" % filename) + log().error(str(err)) + return + # create mesh + self.objnode = self.sceneManager.getRootSceneNode().createChildSceneNode(uuid+"objnode") + self.objentity = self.sceneManager.createEntity(uuid+'objentity', meshname) + self.objnode.attachObject(self.objentity) + self.objnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - def setMainMeshVisible(self, visible): - self.objentity.setVisible(visible) - - def setBoxesVisibility(self, type, visible): - for box in self.boxes: - if type == "normal" and box.virtual == False: - box.entity.setVisible(visible) - elif type == "virtual" and box.virtual == True: - box.entity.setVisible(visible) - - def free(self): - for box in self.boxes: - try: - box.node.detachAllObjects() - self.sceneManager.destroySceneNode(box.node.getName()) - except: - pass - try: - self.sceneManager.destroyEntity(box.entity) - except: - pass - self.boxes = [] - - try: - self.sceneManager.destroyAllManualObjects() - except: - pass - try: - self.objnode.detachAllObjects() - self.sceneManager.destroySceneNode(self.objnode.getName()) - except: - pass - try: - self.sceneManager.destroyEntity(self.objentity) - except: - pass - - def populateScene(self): - self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) - self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); - self.sceneManager.setSkyDome(True, 'mysimple/terraineditor/previewwindowsky', 4.0, 8.0) + try: + self.objOriginalMat = ogre.MaterialManager.getSingleton().getByName(self.objentity.getSubEntity(0).getMaterialName()) + if self.objmat is None: + self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) + self.objOriginalMat.copyDetailsTo(self.objmat) + # self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) + self.objmat.setSceneBlending(ogre.SceneBlendFactor.SBF_SOURCE_ALPHA, ogre.SceneBlendFactor.SBF_DEST_ALPHA ) + self.objentity.setMaterialName(NEWMATNAME) + self.setMainMeshTrans(60) + except: + pass - #self.MainLight = self.sceneManager.createLight('MainLight') - #self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) + self.objnode.setPosition(0,0,0) + if not sx is None: + self.objnode.setScale(sx, sy, sz) + for box in boxes: - # add some fog - self.sceneManager.setFog(ogre.FOG_EXP, ogre.ColourValue.White, 0.0002) + matname = "mysimple/odefeditor/transred" + if box.virtual: + matname = "mysimple/odefeditor/transgreen" + matname = self.getNewMat(matname) + box.uuid = randomID() + box.node = self.sceneManager.getRootSceneNode().createChildSceneNode(box.uuid+"boxnode") + box.entity = self.sceneManager.createEntity(box.uuid+'boxentity', "beam.mesh") + box.entity.setMaterialName(matname) + box.node.attachObject(box.entity) - # create a floor Mesh - plane = ogre.Plane() - plane.normal = ogre.Vector3(0, 1, 0) - plane.d = 200 - uuid = str(randomID()) - ogre.MeshManager.getSingleton().createPlane(uuid + 'FloorPlane', "General", plane, 200000.0, 200000.0, - 20, 20, True, 1, 50.0, 50.0,ogre.Vector3(0, 0, 1), - ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, - ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, - True, True) + if box.rotating: + rotx = float(box.rotation[0]) + roty = float(box.rotation[1]) + rotz = float(box.rotation[2]) + box.node.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(rotz),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + box.node.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(roty),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + box.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(rotx),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - # create floor entity - entity = self.sceneManager.createEntity(uuid+'floor', uuid + 'FloorPlane') - entity.setMaterialName('mysimple/terraineditor/previewwindowfloor') - self.sceneManager.getRootSceneNode().createChildSceneNode().attachObject(entity) + x = float(box.coords[0]) + x1 = float(box.coords[1]) + y = float(box.coords[2]) + y1 = float(box.coords[3]) + z = float(box.coords[4]) + z1 = float(box.coords[5]) + xdiff = x1-x + ydiff = y1-y + zdiff = z1-z + box.node.setPosition(x+xdiff/2, y+ydiff/2, z+zdiff/2) + box.node.setScale(xdiff, ydiff, zdiff) + self.boxes.append(box) - def updateCamera(self): - return - if not self.objnode is None: - self.radius = self.objentity.getBoundingRadius() * 2 - height = self.objentity.getBoundingBox().getMaximum().z - #pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) - # always look to the center! - pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + (self.objentity.getBoundingBox().getMinimum() + self.objentity.getBoundingBox().getMaximum() ) / 2 - dx = math.cos(self.camalpha) * self.radius - dy = math.sin(self.camalpha) * self.radius - self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) - self.camera.lookAt(pos + ogre.Vector3(0, height / 2, 0)) - - # disable auto rotation - #if self.dragging == False: - # self.camalpha += math.pi / 720 - if self.camalpha >= 360: - self.camalpha -= 360 + def getNewMat(self, basematname): + uuid = randomID() + matname = uuid+"mat" + basemat = ogre.MaterialManager.getSingleton().getByName(basematname) + mat = ogre.MaterialManager.getSingleton().create(matname, basemat.getGroup()) + basemat.copyDetailsTo(mat) + #mat = ogre.MaterialManager.getSingleton().getByName(matname) + for i in range(0,2): + self.randcolors[i] += 0.1 + if self.randcolors[i] >= 1: + self.randcolors[i] -= 1 + mat.setDiffuse(self.randcolors[0], self.randcolors[1], self.randcolors[2], 0.8) + mat.setSpecular(self.randcolors[0], self.randcolors[1], self.randcolors[2], 0.8) + mat.setSelfIllumination(self.randcolors[0], self.randcolors[1], self.randcolors[2]) + mat.setAmbient(self.randcolors[0], self.randcolors[1], self.randcolors[2]) + print "new material:", matname + return matname + def setMainMeshTrans(self, alpha): + alpha = float(alpha) / float(100) + self.objmat.setDiffuse(0.5, 1, 0.5, alpha) + self.objmat.setSpecular(0.5, 1, 0.5, alpha) - def OnFrameStarted(self): - self.updateCamera() - wxOgreWindow.OnFrameStarted(self) - - def onMouseEvent(self,event): - self.SetFocus() - width, height, a, b, c = self.renderWindow.getMetrics() + def setMainMeshVisible(self, visible): + self.objentity.setVisible(visible) - if event.RightDown(): #Precedes dragging - self.StartDragX, self.StartDragY = event.GetPosition() #saves position of initial click - if event.GetWheelRotation() != 0: - zfactor = 0.001 - if event.ShiftDown(): - zfactor = 0.01 - zoom = zfactor * -event.GetWheelRotation() - self.camera.moveRelative(ogre.Vector3(0,0, zoom)) + def setBoxesVisibility(self, type, visible): + for box in self.boxes: + if type == "normal" and box.virtual == False: + box.entity.setVisible(visible) + elif type == "virtual" and box.virtual == True: + box.entity.setVisible(visible) - if event.Dragging() and event.RightIsDown() and event.ControlDown(): - x,y = event.GetPosition() - dx = self.StartDragX - x - dy = self.StartDragY - y - self.StartDragX, self.StartDragY = x, y - if event.ShiftDown(): - dx = float(dx) / 10 - dy = float(dy) / 10 - else: - dx = float(dx) / 50 - dy = float(dy) / 50 - self.camera.moveRelative(ogre.Vector3(dx,-dy,0)) - - elif event.Dragging() and event.RightIsDown(): #Dragging with RMB - x,y = event.GetPosition() - dx = self.StartDragX - x - dy = self.StartDragY - y - self.StartDragX, self.StartDragY = x, y - - self.camera.yaw(ogre.Degree(dx/3.0)) - self.camera.pitch(ogre.Degree(dy/3.0)) - if event.LeftDown(): - #self.selectnew(event) - self.StartDragLeftX, self.StartDragLeftY = event.GetPosition() #saves position of initial click - zfactor = 0.1 - if event.ShiftDown(): - zfactor = 5 - zoom = zfactor * -event.GetWheelRotation() - self.camera.moveRelative(ogre.Vector3(0,0, zoom)) - - def onKeyDown(self,event): - #print event.m_keyCode - d = 3 - if event.ShiftDown(): - d = 10 - if event.m_keyCode == 65: # A, wx.WXK_LEFT: - self.camera.moveRelative(ogre.Vector3(-d,0,0)) - elif event.m_keyCode == 68: # D, wx.WXK_RIGHT: - self.camera.moveRelative(ogre.Vector3(d,0,0)) - elif event.m_keyCode == 87: # W ,wx.WXK_UP: - self.camera.moveRelative(ogre.Vector3(0,0,-d)) - elif event.m_keyCode == 83: # S, wx.WXK_DOWN: - self.camera.moveRelative(ogre.Vector3(0,0,d)) - elif event.m_keyCode == wx.WXK_PAGEUP: - self.camera.moveRelative(ogre.Vector3(0,d,0)) - elif event.m_keyCode == wx.WXK_PAGEDOWN: - self.camera.moveRelative(ogre.Vector3(0,-d,0)) - elif event.m_keyCode == 84: # 84 = T - if self.filtering == ogre.TFO_BILINEAR: - self.filtering = ogre.TFO_TRILINEAR - self.Aniso = 1 - elif self.filtering == ogre.TFO_TRILINEAR: - self.filtering = ogre.TFO_ANISOTROPIC - self.Aniso = 8 - else: - self.filtering = ogre.TFO_BILINEAR - self.Aniso = 1 - ogre.MaterialManager.getSingleton().setDefaultTextureFiltering(self.filtering) - ogre.MaterialManager.getSingleton().setDefaultAnisotropy(self.Aniso) - elif event.m_keyCode == 82: # 82 = R - detailsLevel = [ ogre.PM_SOLID, - ogre.PM_WIREFRAME, - ogre.PM_POINTS ] - self.sceneDetailIndex = (self.sceneDetailIndex + 1) % len(detailsLevel) - self.camera.polygonMode=detailsLevel[self.sceneDetailIndex] - elif event.m_keyCode == 81: # Q, wx.WXK_LEFT: - self.enablephysics = not self.enablephysics \ No newline at end of file + def free(self): + for box in self.boxes: + try: + box.node.detachAllObjects() + self.sceneManager.destroySceneNode(box.node.getName()) + except: + pass + try: + self.sceneManager.destroyEntity(box.entity) + except: + pass + self.boxes = [] + + try: + self.sceneManager.destroyAllManualObjects() + except: + pass + try: + self.objnode.detachAllObjects() + self.sceneManager.destroySceneNode(self.objnode.getName()) + except: + pass + try: + self.sceneManager.destroyEntity(self.objentity) + except: + pass + + def populateScene(self): + self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) + self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); + self.sceneManager.setSkyDome(True, 'mysimple/terraineditor/previewwindowsky', 4.0, 8.0) + + #self.MainLight = self.sceneManager.createLight('MainLight') + #self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) + + # add some fog + self.sceneManager.setFog(ogre.FOG_EXP, ogre.ColourValue.White, 0.0002) + + # create a floor Mesh + plane = ogre.Plane() + plane.normal = ogre.Vector3(0, 1, 0) + plane.d = 200 + uuid = str(randomID()) + ogre.MeshManager.getSingleton().createPlane(uuid + 'FloorPlane', "General", plane, 200000.0, 200000.0, + 20, 20, True, 1, 50.0, 50.0,ogre.Vector3(0, 0, 1), + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + True, True) + + # create floor entity + entity = self.sceneManager.createEntity(uuid+'floor', uuid + 'FloorPlane') + entity.setMaterialName('mysimple/terraineditor/previewwindowfloor') + self.sceneManager.getRootSceneNode().createChildSceneNode().attachObject(entity) + + def updateCamera(self): + return + if not self.objnode is None: + self.radius = self.objentity.getBoundingRadius() * 2 + height = self.objentity.getBoundingBox().getMaximum().z + #pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + # always look to the center! + pos = self.objnode.getPosition() + ogre.Vector3(0, height*0.4, 0) + (self.objentity.getBoundingBox().getMinimum() + self.objentity.getBoundingBox().getMaximum() ) / 2 + dx = math.cos(self.camalpha) * self.radius + dy = math.sin(self.camalpha) * self.radius + self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) + self.camera.lookAt(pos + ogre.Vector3(0, height / 2, 0)) + + # disable auto rotation + #if self.dragging == False: + # self.camalpha += math.pi / 720 + if self.camalpha >= 360: + self.camalpha -= 360 + + + def OnFrameStarted(self): + self.updateCamera() + wxOgreWindow.OnFrameStarted(self) + + def onMouseEvent(self,event): + self.SetFocus() + width, height, a, b, c = self.renderWindow.getMetrics() + + if event.RightDown(): #Precedes dragging + self.StartDragX, self.StartDragY = event.GetPosition() #saves position of initial click + if event.GetWheelRotation() != 0: + zfactor = 0.001 + if event.ShiftDown(): + zfactor = 0.01 + zoom = zfactor * -event.GetWheelRotation() + self.camera.moveRelative(ogre.Vector3(0,0, zoom)) + + if event.Dragging() and event.RightIsDown() and event.ControlDown(): + x,y = event.GetPosition() + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + if event.ShiftDown(): + dx = float(dx) / 10 + dy = float(dy) / 10 + else: + dx = float(dx) / 50 + dy = float(dy) / 50 + self.camera.moveRelative(ogre.Vector3(dx,-dy,0)) + + elif event.Dragging() and event.RightIsDown(): #Dragging with RMB + x,y = event.GetPosition() + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + + self.camera.yaw(ogre.Degree(dx/3.0)) + self.camera.pitch(ogre.Degree(dy/3.0)) + if event.LeftDown(): + #self.selectnew(event) + self.StartDragLeftX, self.StartDragLeftY = event.GetPosition() #saves position of initial click + zfactor = 0.1 + if event.ShiftDown(): + zfactor = 5 + zoom = zfactor * -event.GetWheelRotation() + self.camera.moveRelative(ogre.Vector3(0,0, zoom)) + + def onKeyDown(self,event): + #print event.m_keyCode + d = 3 + if event.ShiftDown(): + d = 10 + if event.m_keyCode == 65: # A, wx.WXK_LEFT: + self.camera.moveRelative(ogre.Vector3(-d,0,0)) + elif event.m_keyCode == 68: # D, wx.WXK_RIGHT: + self.camera.moveRelative(ogre.Vector3(d,0,0)) + elif event.m_keyCode == 87: # W ,wx.WXK_UP: + self.camera.moveRelative(ogre.Vector3(0,0,-d)) + elif event.m_keyCode == 83: # S, wx.WXK_DOWN: + self.camera.moveRelative(ogre.Vector3(0,0,d)) + elif event.m_keyCode == wx.WXK_PAGEUP: + self.camera.moveRelative(ogre.Vector3(0,d,0)) + elif event.m_keyCode == wx.WXK_PAGEDOWN: + self.camera.moveRelative(ogre.Vector3(0,-d,0)) + elif event.m_keyCode == 84: # 84 = T + if self.filtering == ogre.TFO_BILINEAR: + self.filtering = ogre.TFO_TRILINEAR + self.Aniso = 1 + elif self.filtering == ogre.TFO_TRILINEAR: + self.filtering = ogre.TFO_ANISOTROPIC + self.Aniso = 8 + else: + self.filtering = ogre.TFO_BILINEAR + self.Aniso = 1 + ogre.MaterialManager.getSingleton().setDefaultTextureFiltering(self.filtering) + ogre.MaterialManager.getSingleton().setDefaultAnisotropy(self.Aniso) + elif event.m_keyCode == 82: # 82 = R + detailsLevel = [ ogre.PM_SOLID, + ogre.PM_WIREFRAME, + ogre.PM_POINTS ] + self.sceneDetailIndex = (self.sceneDetailIndex + 1) % len(detailsLevel) + self.camera.polygonMode=detailsLevel[self.sceneDetailIndex] + elif event.m_keyCode == 81: # Q, wx.WXK_LEFT: + self.enablephysics = not self.enablephysics \ No newline at end of file Modified: trunk/lib_common/roreditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRTerrainOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) +++ trunk/lib_common/roreditor/RoRTerrainOgreWindow.py 2007-09-20 08:48:08 UTC (rev 182) @@ -176,8 +176,9 @@ def SceneInitialisation(self): hasparent = (not self.sceneManager is None) if not hasparent: - #TODO This section is not platform independent, needs to be fixed. - addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] + addresources = [os.path.join(self.rordir,'data', 'terrains'), + os.path.join(self.rordir,'data', 'trucks'), + os.path.join(self.rordir,'data', 'objects')] # only init things in the main window, not in shared ones! # setup resources for r in addresources: Modified: trunk/lib_common/roreditor/RoRTruckOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRTruckOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) +++ trunk/lib_common/roreditor/RoRTruckOgreWindow.py 2007-09-20 08:48:08 UTC (rev 182) @@ -84,9 +84,8 @@ pass def SceneInitialisation(self): - - #TODO This section is not platform independent, needs to be fixed. - addresources = [self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] + addresources = [os.path.join(self.rordir,'data', 'trucks'), + os.path.join(self.rordir,'data', 'objects')] # only init things in the main window, not in shared ones! # setup resources for r in addresources: Modified: trunk/lib_common/roreditor/RoRTruckUVOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRTruckUVOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) +++ trunk/lib_common/roreditor/RoRTruckUVOgreWindow.py 2007-09-20 08:48:08 UTC (rev 182) @@ -1,6 +1,6 @@ #Thomas Fischer 31/05/2007, th...@th... import wx, os, os.path -import ogre.renderer.OGRE as ogre +import ogre.renderer.OGRE as ogre from ror.truckparser import * from ror.logger import log @@ -17,280 +17,279 @@ IMGSCALE = 20 class RoRTruckUVOgreWindow(wxOgreWindow): - def __init__(self, parent, ID, size = wx.Size(200,200), **kwargs): - self.parent = parent - self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") - self.sceneManager = None - self.trucktree = None - self.clearlist = {'entity':[]} - self.initScene() - wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) + def __init__(self, parent, ID, size = wx.Size(200,200), **kwargs): + self.parent = parent + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") + self.sceneManager = None + self.trucktree = None + self.clearlist = {'entity':[]} + self.initScene() + wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) - def initScene(self): - if not self.sceneManager is None: - self.sceneManager.destroyAllManualObjects() - self.EntityCount = 0 - self.bodies=[] - - # try to clear things up - try: - if self.nodes != {}: - for n in self.nodes: - n[0].detachAllObjects() - self.sceneManager.destroySceneNode(n[0].getName()) - except: - pass - try: - for e in self.clearlist['entity']: - print e - self.sceneManager.destroyEntity(e) - except: - pass - - self.nodes = {} - self.beams = {} - self.shocks = {} - self.submeshs = {} - self.selection = None - self.enablephysics = False + def initScene(self): + if not self.sceneManager is None: + self.sceneManager.destroyAllManualObjects() + self.EntityCount = 0 + self.bodies=[] - - def __del__ (self): - # delete the world when we're done. - self.sceneManager.destroyEntity('groundent') - #ogre.ResourceGroupManager.getSingleton().undeclareResource("UVGroundPlane", "General") - - del self.bodies + # try to clear things up + try: + if self.nodes != {}: + for n in self.nodes: + n[0].detachAllObjects() + self.sceneManager.destroySceneNode(n[0].getName()) + except: + pass + try: + for e in self.clearlist['entity']: + print e + self.sceneManager.destroyEntity(e) + except: + pass - - def OnFrameStarted(self): - pass - - def OnFrameEnded(self): - pass + self.nodes = {} + self.beams = {} + self.shocks = {} + self.submeshs = {} + self.selection = None + self.enablephysics = False - def SceneInitialisation(self): - - #TODO This section is not platform independent, needs to be fixed. - addresources = [self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] - # only init things in the main window, not in shared ones! - # setup resources - for r in addresources: - ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() + def __del__ (self): + # delete the world when we're done. + self.sceneManager.destroyEntity('groundent') + #ogre.ResourceGroupManager.getSingleton().undeclareResource("UVGroundPlane", "General") - #get the scenemanager - self.sceneManager = getOgreManager().createSceneManager(ogre.ST_GENERIC) + del self.bodies - # create a camera - self.camera = self.sceneManager.createCamera('Camera') - self.camera.setAutoAspectRatio(True) - self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) - self.camera.setFarClipDistance(9999) - self.camera.setNearClipDistance(30) - self.camera.setPosition(Ogre.Vector3(0,100,-0.1)) - self.camera.lookAt(Ogre.Vector3(0,0,0)) - # create the Viewport"... [truncated message content] |
From: <Ap...@us...> - 2007-09-20 08:15:44
|
Revision: 181 http://roreditor.svn.sourceforge.net/roreditor/?rev=181&view=rev Author: Aperion Date: 2007-09-20 01:15:43 -0700 (Thu, 20 Sep 2007) Log Message: ----------- Added todo notes to remove platform dependence. These are denoted in comments as #TODO Modified Paths: -------------- trunk/doc/createdoc.py trunk/lib_common/ror/starter.py trunk/lib_common/roreditor/MainFrame_Tools.py trunk/lib_common/roreditor/RoRObjectPreviewOgreWindow.py trunk/lib_common/roreditor/RoROdefEditorOgreWindow.py trunk/lib_common/roreditor/RoRTerrainOgreWindow.py trunk/lib_common/roreditor/RoRTruckOgreWindow.py trunk/lib_common/roreditor/RoRTruckUVOgreWindow.py trunk/lib_common/wxogre/OgreManager.py Property Changed: ---------------- trunk/ Property changes on: trunk ___________________________________________________________________ Name: svn:ignore + editor.ini Modified: trunk/doc/createdoc.py =================================================================== --- trunk/doc/createdoc.py 2007-09-20 06:51:33 UTC (rev 180) +++ trunk/doc/createdoc.py 2007-09-20 08:15:43 UTC (rev 181) @@ -6,7 +6,7 @@ main method """ - sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..\lib")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..","lib")) # Import Psyco if available try: Modified: trunk/lib_common/ror/starter.py =================================================================== --- trunk/lib_common/ror/starter.py 2007-09-20 06:51:33 UTC (rev 180) +++ trunk/lib_common/ror/starter.py 2007-09-20 08:15:43 UTC (rev 181) @@ -220,6 +220,7 @@ # dlg.Destroy() # return False + #TODO check for actual binary name since RoR.exe is windows only if not checkRoRDirectory(): dlg = wx.MessageDialog(self, "RoR.exe not found in the selected directory!\nPlease select a new directory!", "Error", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() Modified: trunk/lib_common/roreditor/MainFrame_Tools.py =================================================================== --- trunk/lib_common/roreditor/MainFrame_Tools.py 2007-09-20 06:51:33 UTC (rev 180) +++ trunk/lib_common/roreditor/MainFrame_Tools.py 2007-09-20 08:15:43 UTC (rev 181) @@ -23,7 +23,7 @@ vert = wx.BoxSizer(wx.VERTICAL) self.htmlctrl = wx.html.HtmlWindow(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(800, 600)) if "gtk2" in wx.PlatformInfo: - ctrl.SetStandardFonts() + self.htmlctrl.SetStandardFonts() readme = self.loadReadme() if readme is None: self.Hide() Modified: trunk/lib_common/roreditor/RoRObjectPreviewOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRObjectPreviewOgreWindow.py 2007-09-20 06:51:33 UTC (rev 180) +++ trunk/lib_common/roreditor/RoRObjectPreviewOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) @@ -52,6 +52,7 @@ def SceneInitialisation(self): + #TODO This section is not platform independent, needs to be fixed. addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] # only init things in the main window, not in shared ones! # setup resources @@ -142,8 +143,8 @@ def free(self): try: self.sceneManager.destroyAllManualObjects() - except: - pass + except Exception, e: + log().exception(str(e)) try: self.logotextnode.detachAllObjects() @@ -152,17 +153,21 @@ self.sceneManager.destroySceneNode(self.logowheelnode.getName()) self.sceneManager.destroyEntity(self.logotextentity) self.sceneManager.destroyEntity(self.logowheelentity) - except: - pass + except Exception, e: + log().exception(str(e)) try: + #BUG: next line fails and goes to except self.objnode.detachAllObjects() self.sceneManager.destroySceneNode(self.objnode.getName()) - except: - pass - try: - self.sceneManager.destroyEntity(self.objentity) - except: - pass + except Exception, e: + log().exception(str(e)) + + #try: + #BUG Entering this function alone seams to kill the application. + #self.sceneManager.destroyEntity(self.objentity) + #except Exception, e: + #log().exception(str(e)) + self.renderWindow.removeAllViewports() getOgreManager().destroySceneManager(self.sceneManager) Modified: trunk/lib_common/roreditor/RoROdefEditorOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoROdefEditorOgreWindow.py 2007-09-20 06:51:33 UTC (rev 180) +++ trunk/lib_common/roreditor/RoROdefEditorOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) @@ -56,6 +56,7 @@ def SceneInitialisation(self): + #TODO This section is not platform independent, needs to be fixed. addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] # only init things in the main window, not in shared ones! # setup resources Modified: trunk/lib_common/roreditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRTerrainOgreWindow.py 2007-09-20 06:51:33 UTC (rev 180) +++ trunk/lib_common/roreditor/RoRTerrainOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) @@ -176,6 +176,7 @@ def SceneInitialisation(self): hasparent = (not self.sceneManager is None) if not hasparent: + #TODO This section is not platform independent, needs to be fixed. addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] # only init things in the main window, not in shared ones! # setup resources Modified: trunk/lib_common/roreditor/RoRTruckOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRTruckOgreWindow.py 2007-09-20 06:51:33 UTC (rev 180) +++ trunk/lib_common/roreditor/RoRTruckOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) @@ -84,6 +84,8 @@ pass def SceneInitialisation(self): + + #TODO This section is not platform independent, needs to be fixed. addresources = [self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] # only init things in the main window, not in shared ones! # setup resources Modified: trunk/lib_common/roreditor/RoRTruckUVOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRTruckUVOgreWindow.py 2007-09-20 06:51:33 UTC (rev 180) +++ trunk/lib_common/roreditor/RoRTruckUVOgreWindow.py 2007-09-20 08:15:43 UTC (rev 181) @@ -70,6 +70,8 @@ pass def SceneInitialisation(self): + + #TODO This section is not platform independent, needs to be fixed. addresources = [self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] # only init things in the main window, not in shared ones! # setup resources Modified: trunk/lib_common/wxogre/OgreManager.py =================================================================== --- trunk/lib_common/wxogre/OgreManager.py 2007-09-20 06:51:33 UTC (rev 180) +++ trunk/lib_common/wxogre/OgreManager.py 2007-09-20 08:15:43 UTC (rev 181) @@ -93,8 +93,11 @@ def createRenderWindow(self, wxOgrewin, name, width, height, fullscreen, handle): renderParameters = ogre.NameValuePairList() renderParameters['externalWindowHandle'] = str(handle) + #TODO: For some reason passing renderParameters causes the renderer not to start, passing Null is a work around + # use len to make the names unique! - renderWindow = self.ogreRoot.createRenderWindow(name + str(len(self.renderWindows)), width, height, fullscreen, renderParameters) + renderWindow = self.ogreRoot.createRenderWindow(name + str(len(self.renderWindows)), width, height, fullscreen, None) + #renderWindow = self.ogreRoot.createRenderWindow(name + str(len(self.renderWindows)), width, height, fullscreen, renderParameters) #renderWindow.active = True self.renderWindows[wxOgrewin] = renderWindow return renderWindow This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ap...@us...> - 2007-09-20 06:51:37
|
Revision: 180 http://roreditor.svn.sourceforge.net/roreditor/?rev=180&view=rev Author: Aperion Date: 2007-09-19 23:51:33 -0700 (Wed, 19 Sep 2007) Log Message: ----------- Linux dependencies upload Added Paths: ----------- trunk/lib_linux/ogre/gui/CEGUI/ trunk/lib_linux/ogre/gui/CEGUI/__init__.py trunk/lib_linux/ogre/gui/CEGUI/_cegui_.so trunk/lib_linux/ogre/gui/QuickGUI/ trunk/lib_linux/ogre/gui/QuickGUI/__init__.py trunk/lib_linux/ogre/gui/QuickGUI/_quickgui_.so trunk/lib_linux/ogre/gui/__init__.py trunk/lib_linux/ogre/io/OIS/ trunk/lib_linux/ogre/io/OIS/__init__.py trunk/lib_linux/ogre/io/OIS/_ois_.so trunk/lib_linux/ogre/io/__init__.py trunk/lib_linux/ogre/physics/ODE/ trunk/lib_linux/ogre/physics/ODE/__init__.py trunk/lib_linux/ogre/physics/OgreNewt/ trunk/lib_linux/ogre/physics/OgreNewt/__init__.py trunk/lib_linux/ogre/physics/OgreNewt/_ogrenewt_.so trunk/lib_linux/ogre/physics/OgreOde/ trunk/lib_linux/ogre/physics/OgreOde/__init__.py trunk/lib_linux/ogre/physics/OgreOde/_ogreode_.so trunk/lib_linux/ogre/physics/Opcode/ trunk/lib_linux/ogre/physics/Opcode/__init__.py trunk/lib_linux/ogre/physics/__init__.py trunk/lib_linux/ogre/renderer/OGRE/ trunk/lib_linux/ogre/renderer/OGRE/__init__.py trunk/lib_linux/ogre/renderer/OGRE/_ogre_.so trunk/lib_linux/ogre/renderer/OGRE/_ogre_exceptions_.py trunk/lib_linux/ogre/renderer/OGRE/named_tuple.py trunk/lib_linux/ogre/renderer/OGRE/sf_OIS.py trunk/lib_linux/ogre/renderer/OGRE/sf_utils.py trunk/lib_linux/ogre/renderer/__init__.py trunk/lib_linux/ogre/sound/OgreAL/ trunk/lib_linux/ogre/sound/OgreAL/__init__.py trunk/lib_linux/ogre/sound/OgreAL/_ogreal_.so trunk/lib_linux/ogre/sound/__init__.py Added: trunk/lib_linux/ogre/gui/CEGUI/__init__.py =================================================================== --- trunk/lib_linux/ogre/gui/CEGUI/__init__.py (rev 0) +++ trunk/lib_linux/ogre/gui/CEGUI/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1,7 @@ +import sys, os + +## we need the path for additional CEGUI dll's +if sys.platform == 'win32': + os.environ['PATH'] += ';' + __path__[0] + +from _cegui_ import * \ No newline at end of file Added: trunk/lib_linux/ogre/gui/CEGUI/_cegui_.so =================================================================== (Binary files differ) Property changes on: trunk/lib_linux/ogre/gui/CEGUI/_cegui_.so ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Added: trunk/lib_linux/ogre/gui/QuickGUI/__init__.py =================================================================== --- trunk/lib_linux/ogre/gui/QuickGUI/__init__.py (rev 0) +++ trunk/lib_linux/ogre/gui/QuickGUI/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1,2 @@ +import sys, os +from _quickgui_ import * Added: trunk/lib_linux/ogre/gui/QuickGUI/_quickgui_.so =================================================================== (Binary files differ) Property changes on: trunk/lib_linux/ogre/gui/QuickGUI/_quickgui_.so ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Added: trunk/lib_linux/ogre/gui/__init__.py =================================================================== --- trunk/lib_linux/ogre/gui/__init__.py (rev 0) +++ trunk/lib_linux/ogre/gui/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +#keep me \ No newline at end of file Added: trunk/lib_linux/ogre/io/OIS/__init__.py =================================================================== --- trunk/lib_linux/ogre/io/OIS/__init__.py (rev 0) +++ trunk/lib_linux/ogre/io/OIS/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +from _ois_ import * Added: trunk/lib_linux/ogre/io/OIS/_ois_.so =================================================================== (Binary files differ) Property changes on: trunk/lib_linux/ogre/io/OIS/_ois_.so ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Added: trunk/lib_linux/ogre/io/__init__.py =================================================================== --- trunk/lib_linux/ogre/io/__init__.py (rev 0) +++ trunk/lib_linux/ogre/io/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +#keep me \ No newline at end of file Added: trunk/lib_linux/ogre/physics/ODE/__init__.py =================================================================== --- trunk/lib_linux/ogre/physics/ODE/__init__.py (rev 0) +++ trunk/lib_linux/ogre/physics/ODE/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +from _ode_ import * \ No newline at end of file Added: trunk/lib_linux/ogre/physics/OgreNewt/__init__.py =================================================================== --- trunk/lib_linux/ogre/physics/OgreNewt/__init__.py (rev 0) +++ trunk/lib_linux/ogre/physics/OgreNewt/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +from _ogrenewt_ import * \ No newline at end of file Added: trunk/lib_linux/ogre/physics/OgreNewt/_ogrenewt_.so =================================================================== (Binary files differ) Property changes on: trunk/lib_linux/ogre/physics/OgreNewt/_ogrenewt_.so ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Added: trunk/lib_linux/ogre/physics/OgreOde/__init__.py =================================================================== --- trunk/lib_linux/ogre/physics/OgreOde/__init__.py (rev 0) +++ trunk/lib_linux/ogre/physics/OgreOde/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +from _ogreode_ import * \ No newline at end of file Added: trunk/lib_linux/ogre/physics/OgreOde/_ogreode_.so =================================================================== (Binary files differ) Property changes on: trunk/lib_linux/ogre/physics/OgreOde/_ogreode_.so ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Added: trunk/lib_linux/ogre/physics/Opcode/__init__.py =================================================================== --- trunk/lib_linux/ogre/physics/Opcode/__init__.py (rev 0) +++ trunk/lib_linux/ogre/physics/Opcode/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +from _opcode_ import * \ No newline at end of file Added: trunk/lib_linux/ogre/physics/__init__.py =================================================================== --- trunk/lib_linux/ogre/physics/__init__.py (rev 0) +++ trunk/lib_linux/ogre/physics/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +#keep me \ No newline at end of file Added: trunk/lib_linux/ogre/renderer/OGRE/__init__.py =================================================================== --- trunk/lib_linux/ogre/renderer/OGRE/__init__.py (rev 0) +++ trunk/lib_linux/ogre/renderer/OGRE/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1,38 @@ +import sys, os + +# Note that we put the Python-Ogre path first to ensure we don't get strange problems with windows +# picking up the wrong dlls -- Thanks to Pelle for tracking down this issue.. +if sys.platform == 'win32': + os.environ['PATH'] = __path__[0] +';' + os.environ['PATH'] + +from _ogre_ import * +from _ogre_exceptions_ import * + + +## Note the work around to ensure the Radians and Degree types work correctly +## the problem is the constructors are overloaded in each class and passing a real to +## Radian actually causes boost to try it as a Degree first, and as Degreee has a 'Real' overload +## it create the Degree and passes it back to Radian -- +## +## and as it's a lot of work and overly confusing to fix this in generate_code.py we fix it here +## +def Radian( r=None, d=None ): + if isinstance( r, _ogre_.Degree ): + return _ogre_.Radian( r ) + elif isinstance( r, _ogre_.Radian ): + return _ogre_.Radian().assign( r ) + elif d: + return _ogre_.Radian( d=d ) + else: + return _ogre_.Radian( r=r ) + +def Degree( d=None, r=None ): + if isinstance( d, _ogre_.Radian ): + return _ogre_.Degree( d ) + elif isinstance( d, _ogre_.Degree ): + return _ogre_.Degree().assign( d ) + elif r: + return _ogre.Degree (r=r) + else: + return _ogre_.Degree( d=d ) + Added: trunk/lib_linux/ogre/renderer/OGRE/_ogre_.so =================================================================== (Binary files differ) Property changes on: trunk/lib_linux/ogre/renderer/OGRE/_ogre_.so ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Added: trunk/lib_linux/ogre/renderer/OGRE/_ogre_exceptions_.py =================================================================== --- trunk/lib_linux/ogre/renderer/OGRE/_ogre_exceptions_.py (rev 0) +++ trunk/lib_linux/ogre/renderer/OGRE/_ogre_exceptions_.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1,111 @@ +import _ogre_ + +class OgreException(Exception): + def __init__( self, app_error ): + Exception.__init__( self ) + self._pimpl = app_error + + def __str__( self ): + return self._pimpl.getFullDescription() + + def __getattribute__(self, attr): + my_pimpl = super(OgreException, self).__getattribute__("_pimpl") + try: + return getattr(my_pimpl, attr) + except AttributeError: + return super(OgreException,self).__getattribute__(attr) + +_ogre_.OgreException = OgreException +#this one for backward compatability +_ogre_.Exception = OgreException +_ogre_._Exception_.py_err_class = OgreException + +class OgreFileNotFoundException(OgreException): + def __init__( self, app_error ): + OgreException.__init__( self, app_error ) + + def __getattribute__(self, attr): + return super(OgreFileNotFoundException,self).__getattribute__(attr) + +_ogre_._FileNotFoundException_.py_err_class = OgreFileNotFoundException +_ogre_.OgreFileNotFoundException = OgreFileNotFoundException + +class OgreIOException(OgreException): + def __init__( self, app_error ): + OgreException.__init__( self, app_error ) + + def __getattribute__(self, attr): + return super(OgreIOException,self).__getattribute__(attr) + +_ogre_._IOException_.py_err_class = OgreIOException +_ogre_.OgreIOException = OgreIOException + +class OgreInvalidStateException(OgreException): + def __init__( self, app_error ): + OgreException.__init__( self, app_error ) + + def __getattribute__(self, attr): + return super(OgreInvalidStateException,self).__getattribute__(attr) + +_ogre_._InvalidStateException_.py_err_class = OgreInvalidStateException +_ogre_.OgreInvalidStateException = OgreInvalidStateException + +class OgreInvalidParametersException(OgreException): + def __init__( self, app_error ): + OgreException.__init__( self, app_error ) + + def __getattribute__(self, attr): + return super(OgreInvalidParametersException,self).__getattribute__(attr) + +_ogre_._InvalidParametersException_.py_err_class = OgreInvalidParametersException +_ogre_.OgreInvalidParametersException = OgreInvalidParametersException + +class OgreUnimplementedException(OgreException): + def __init__( self, app_error ): + OgreException.__init__( self, app_error ) + + def __getattribute__(self, attr): + return super(OgreUnimplementedException,self).__getattribute__(attr) + +_ogre_._UnimplementedException_.py_err_class = OgreUnimplementedException +_ogre_.OgreUnimplementedException = OgreUnimplementedException + +class OgreInternalErrorException(OgreException): + def __init__( self, app_error ): + OgreException.__init__( self, app_error ) + + def __getattribute__(self, attr): + return super(OgreInternalErrorException,self).__getattribute__(attr) + +_ogre_._InternalErrorException_.py_err_class = OgreInternalErrorException +_ogre_.OgreInternalErrorException = OgreInternalErrorException + +class OgreItemIdentityException(OgreException): + def __init__( self, app_error ): + OgreException.__init__( self, app_error ) + + def __getattribute__(self, attr): + return super(OgreItemIdentityException,self).__getattribute__(attr) + +_ogre_._ItemIdentityException_.py_err_class = OgreItemIdentityException +_ogre_.OgreItemIdentityException = OgreItemIdentityException + +class OgreRuntimeAssertionException(OgreException): + def __init__( self, app_error ): + OgreException.__init__( self, app_error ) + + def __getattribute__(self, attr): + return super(OgreRuntimeAssertionException,self).__getattribute__(attr) + +_ogre_._RuntimeAssertionException_.py_err_class = OgreRuntimeAssertionException +_ogre_.OgreRuntimeAssertionException = OgreRuntimeAssertionException + +class OgreRenderingAPIException(OgreException): + def __init__( self, app_error ): + OgreException.__init__( self, app_error ) + + def __getattribute__(self, attr): + return super(OgreRenderingAPIException,self).__getattribute__(attr) + +_ogre_._RenderingAPIException_.py_err_class = OgreRenderingAPIException +_ogre_.OgreRenderingAPIException = OgreRenderingAPIException \ No newline at end of file Added: trunk/lib_linux/ogre/renderer/OGRE/named_tuple.py =================================================================== --- trunk/lib_linux/ogre/renderer/OGRE/named_tuple.py (rev 0) +++ trunk/lib_linux/ogre/renderer/OGRE/named_tuple.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1,46 @@ +# This file has been generated by Py++. + +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +class named_tuple(tuple): + """Creates tuple, which allows access to stored values by name and\or by index. + + Construction example: named_tuple( ('a',0), ('b',1) ) + 'a' and 'b' are names, while 0 and 1 are values + """ + + def __new__(cls, *args): + return tuple.__new__( cls, [ val for name, val in args] ) + + def __init__(self, *args): + tuple.__init__( self ) + self.__dict__[ '__name2value' ] = dict( args ) + + def __getattr__(self, name): + try: + return self.__dict__['__name2value'][ name ] + except KeyError: + raise AttributeError( "named_tuple has no attribute '%s'" % name ) + + def __setattr__(self, name, value): + raise AttributeError( "named_tuple has no attribute '%s'" % name ) + + def __getitem__( self, key ): + #TODO: it could be nice to support slicing. So the __getitem__ in case of + #slicing will return new named_tuple. + if isinstance( key, basestring ): + return self.__dict__['__name2value'][ key ] + else: + return super( named_tuple, self ).__getitem__( key ) + +if __name__ == '__main__': + nt = named_tuple( ('a',0), ('b',1) ) + assert nt.a == 0 and nt.b == 1 + a,b = nt + assert a == 0 and b == 1 + assert nt[ "a" ] == 0 and nt[ "b" ] == 1 + + Added: trunk/lib_linux/ogre/renderer/OGRE/sf_OIS.py =================================================================== --- trunk/lib_linux/ogre/renderer/OGRE/sf_OIS.py (rev 0) +++ trunk/lib_linux/ogre/renderer/OGRE/sf_OIS.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1,447 @@ +# This code is in the Public Domain +# ----------------------------------------------------------------------------- +# This source file is part of Python-Ogre +# For the latest info, see http://python-ogre.org/ +# +# It is likely based on original code from OGRE and/or PyOgre +# For the latest info, see http://www.ogre3d.org/ +# +# You may use this sample code for anything you like, it is not covered by the +# LGPL. +# ----------------------------------------------------------------------------- +import ogre.renderer.OGRE as ogre +import ogre.io.OIS as OIS +###import OgreRefApp + +def getPluginPath(): + """Return the absolute path to a valid plugins.cfg file.""" + import sys + import os + import os.path + + paths = [os.path.join(os.getcwd(), 'plugins.cfg'), + '/etc/OGRE/plugins.cfg', + os.path.join(os.path.dirname(os.path.abspath(__file__)), + 'plugins.cfg')] + for path in paths: + if os.path.exists(path): + return path + + sys.stderr.write("\n" + "** Warning: Unable to locate a suitable plugins.cfg file.\n" + "** Warning: Please check your ogre installation and copy a\n" + "** Warning: working plugins.cfg file to the current directory.\n\n") + raise ogre.Exception(0, "can't locate the 'plugins.cfg' file", "") + +class Application(object): + "This class is the base for an Ogre application." + debugText="" + + def __init__(self): + self.frameListener = None + self.root = None + self.camera = None + self.renderWindow = None + self.sceneManager = None + self.world = None + + def __del__(self): + "Clear variables, this should not actually be needed." + del self.camera + del self.sceneManager + del self.frameListener + if self.world: + del self.world + del self.root + del self.renderWindow + + def go(self): + "Starts the rendering loop." + if not self._setUp(): + return + if self._isPsycoEnabled(): + self._activatePsyco() + self.root.startRendering() + + + def _setUp(self): + """This sets up the ogre application, and returns false if the user + hits "cancel" in the dialog box.""" + self.root = ogre.Root(getPluginPath()) + self.root.setFrameSmoothingPeriod (5.0) + + self._setUpResources() + if not self._configure(): + return False + + self._chooseSceneManager() + self._createWorld() + self._createCamera() + self._createViewports() + + ogre.TextureManager.getSingleton().setDefaultNumMipmaps (5) + + self._createResourceListener() + self._loadResources() + + self._createScene() + self._createFrameListener() + return True + + def _setUpResources(self): + """This sets up Ogre's resources, which are required to be in + resources.cfg.""" + config = ogre.ConfigFile() + config.load('resources.cfg' ) + seci = config.getSectionIterator() + while seci.hasMoreElements(): + SectionName = seci.peekNextKey() + Section = seci.getNext() + for item in Section: + ogre.ResourceGroupManager.getSingleton().\ + addResourceLocation(item.value, item.key, SectionName) + + def _createResourceListener(self): + """This method is here if you want to add a resource listener to check + the status of resources loading.""" + pass + + def _createWorld ( self ): + """ this should be overridden when supporting the OgreRefApp framework. Also note you + will have to override __createCamera""" + pass + + def _loadResources(self): + """This loads all initial resources. Redefine this if you do not want + to load all resources at startup.""" + ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() + + def _configure(self): + """This shows the config dialog and creates the renderWindow.""" + carryOn = self.root.showConfigDialog() + if carryOn: + self.renderWindow = self.root.initialise(True, "OGRE Render Window") + return carryOn + + def _chooseSceneManager(self): + """Chooses a default SceneManager.""" + #typedef uint16 SceneTypeMask; + #md=ogre.SceneManagerMetaData() + #md.sceneTypeMask=ogre.ST_GENERIC + #print dir(self.root) + self.sceneManager = self.root.createSceneManager(ogre.ST_GENERIC,"ExampleSMInstance") + + def _createCamera(self): + """Creates the camera.""" + self.camera = self.sceneManager.createCamera('PlayerCam') + self.camera.setPosition(ogre.Vector3(0, 0, 500)) + self.camera.lookAt(ogre.Vector3(0, 0, -300)) + self.camera.NearClipDistance = 5 + + def _createViewports(self): + """Creates the Viewport.""" + ## We want a single sampleframework so this work around is to support OgreRefApp Framework + ## if using the RefApp camera is based upon World etc etc + try: + self.viewport = self.renderWindow.addViewport(self.camera.getRealCamera()) + except AttributeError: + self.viewport = self.renderWindow.addViewport(self.camera) + self.viewport.BackgroundColour = ogre.ColourValue(0,0,0) + + def _createScene(self): + """Creates the scene. Override this with initial scene contents.""" + pass + + def _createFrameListener(self): + """Creates the FrameListener.""" + #,self.frameListener, self.frameListener.Mouse + self.frameListener = FrameListener(self.renderWindow, self.camera) + self.frameListener.showDebugOverlay(True) + self.root.addFrameListener(self.frameListener) + + def _isPsycoEnabled(self): + """Override this function and return True to turn on Psyco""" + return False + + def _activatePsyco(self): + """Import Psyco if available""" + try: + import psyco + psyco.full() + except ImportError: + pass + + +class FrameListener(ogre.FrameListener, ogre.WindowEventListener): + """A default frame listener, which takes care of basic mouse and keyboard + input.""" + + def __init__(self, renderWindow, camera, bufferedKeys = False, bufferedMouse = True, bufferedJoy = False): + ogre.FrameListener.__init__(self) + ogre.WindowEventListener.__init__(self) + self.camera = camera + self.renderWindow = renderWindow + self.statisticsOn = True + self.numScreenShots = 0 + self.timeUntilNextToggle = 0 + self.sceneDetailIndex = 0 + self.moveScale = 0.0 + self.rotationScale = 0.0 + self.translateVector = ogre.Vector3(0.0,0.0,0.0) + self.filtering = ogre.TFO_BILINEAR + self.showDebugOverlay(True) + self.moveSpeed = 100.0 + self.rotationSpeed = 8.0 + self.displayCameraDetails = False + self.bufferedKeys = bufferedKeys + self.bufferedMouse = bufferedMouse + self.bufferedJoy = bufferedJoy + self.MenuMode = False # lets understand a simple menu function + ## we can tell if we are using OgreRefapp based upon the camera class + + if self.camera.__class__ == ogre.Camera: + self.RefAppEnable = False + else: + self.RefAppEnable = True + self._setupInput() + + def __del__ (self ): + ogre.WindowEventUtilities.removeWindowEventListener(self.renderWindow, self) + self.windowClosed(self.renderWindow) + + def _setupInput(self): + # ignore buffered input + + windowHnd = self.renderWindow.getCustomAttributeInt("WINDOW") + self.InputManager = \ + OIS.createPythonInputSystem([("WINDOW",str(windowHnd))]) + + #pl = OIS.ParamList() + #windowHndStr = str ( windowHnd) + #pl.insert("WINDOW", windowHndStr) + #im = OIS.InputManager.createInputSystem( pl ) + + #Create all devices (We only catch joystick exceptions here, as, most people have Key/Mouse) + self.Keyboard = self.InputManager.createInputObjectKeyboard( OIS.OISKeyboard, self.bufferedKeys ) + self.Mouse = self.InputManager.createInputObjectMouse( OIS.OISMouse, self.bufferedMouse ) + try : + self.Joy = self.InputManager.createInputObjectJoyStick( OIS.OISJoyStick, bufferedJoy ) + except: + self.Joy = False + + #Set initial mouse clipping size + self.windowResized(self.renderWindow) + + self.showDebugOverlay(True) + + #Register as a Window listener + ogre.WindowEventUtilities.addWindowEventListener(self.renderWindow, self); + + def setMenuMode(self, mode): + self.MenuMode = mode + + def _UpdateSimulation( self, frameEvent ): + # create a real version of this to update the simulation + pass + + def windowResized (self, rw): + [width, height, depth, left, top] = rw.getMetrics() # Note the wrapped function as default needs unsigned int's + ms = self.Mouse.getMouseState() + ms.width = width + ms.height = height + + def windowClosed(self, rw): + #Only close for window that created OIS (mWindow) + if( rw == self.renderWindow ): + if( self.InputManager ): + self.InputManager.destroyInputObjectMouse( self.Mouse ) + self.InputManager.destroyInputObjectKeyboard( self.Keyboard ) + if self.Joy: + self.InputManager.destroyInputObjectJoyStick( self.Joy ) + OIS.InputManager.destroyInputSystem(self.InputManager) + self.InputManager=None + + def frameStarted(self, frameEvent): + if(self.renderWindow.isClosed()): + return False + + ##Need to capture/update each device - this will also trigger any listeners + self.Keyboard.capture() + self.Mouse.capture() + if( self.Joy ): + self.Joy.capture() + + ##bool buffJ = (mJoy) ? mJoy->buffered() : true; + + if self.timeUntilNextToggle >= 0: + self.timeUntilNextToggle -= frameEvent.timeSinceLastFrame + + if frameEvent.timeSinceLastFrame == 0: + self.moveScale = 1 + self.rotationScale = 0.1 + else: + self.moveScale = self.moveSpeed * frameEvent.timeSinceLastFrame + self.rotationScale = self.rotationSpeed * frameEvent.timeSinceLastFrame + + self.rotationX = ogre.Degree(0.0) + self.rotationY = ogre.Degree(0.0) + self.translateVector = ogre.Vector3(0.0, 0.0, 0.0) + if not self._processUnbufferedKeyInput(frameEvent): + return False + + if not self.MenuMode: # if we are in Menu mode we don't move the camera.. + self._processUnbufferedMouseInput(frameEvent) + self._moveCamera() + # Perform simulation step only if using OgreRefApp. For simplicity create a function that simply does + ### "OgreRefApp.World.getSingleton().simulationStep(frameEvent.timeSinceLastFrame)" + + if self.RefAppEnable: + self._UpdateSimulation( frameEvent ) + return True + + def frameEnded(self, frameEvent): + self._updateStatistics() + return True + + def showDebugOverlay(self, show): + """Turns the debug overlay (frame statistics) on or off.""" + overlay = ogre.OverlayManager.getSingleton().getByName('Core/DebugOverlay') + if overlay is None: + raise ogre.Exception(111, "Could not find overlay Core/DebugOverlay", "SampleFramework.py") + if show: + overlay.show() + else: + overlay.hide() + + def _processUnbufferedKeyInput(self, frameEvent): + if self.Keyboard.isKeyDown(OIS.KC_A): + self.translateVector.x = -self.moveScale + + if self.Keyboard.isKeyDown(OIS.KC_D): + self.translateVector.x = self.moveScale + + if self.Keyboard.isKeyDown(OIS.KC_UP) or self.Keyboard.isKeyDown(OIS.KC_W): + self.translateVector.z = -self.moveScale + + if self.Keyboard.isKeyDown(OIS.KC_DOWN) or self.Keyboard.isKeyDown(OIS.KC_S): + self.translateVector.z = self.moveScale + + if self.Keyboard.isKeyDown(OIS.KC_PGUP): + self.translateVector.y = self.moveScale + + if self.Keyboard.isKeyDown(OIS.KC_PGDOWN): + self.translateVector.y = - self.moveScale + + if self.Keyboard.isKeyDown(OIS.KC_RIGHT): + self.rotationX = - self.rotationScale + + if self.Keyboard.isKeyDown(OIS.KC_LEFT): + self.rotationX = self.rotationScale + + if self.Keyboard.isKeyDown(OIS.KC_ESCAPE) or self.Keyboard.isKeyDown(OIS.KC_Q): + return False + + if( self.Keyboard.isKeyDown(OIS.KC_F) and self.timeUntilNextToggle <= 0 ): + self.statisticsOn = not self.statisticsOn + self.showDebugOverlay(self.statisticsOn) + self.timeUntilNextToggle = 1 + + if self.Keyboard.isKeyDown(OIS.KC_T) and self.timeUntilNextToggle <= 0: + if self.filtering == ogre.TFO_BILINEAR: + self.filtering = ogre.TFO_TRILINEAR + self.Aniso = 1 + elif self.filtering == ogre.TFO_TRILINEAR: + self.filtering = ogre.TFO_ANISOTROPIC + self.Aniso = 8 + else: + self.filtering = ogre.TFO_BILINEAR + self.Aniso = 1 + + ogre.MaterialManager.getSingleton().setDefaultTextureFiltering(self.filtering) + ogre.MaterialManager.getSingleton().setDefaultAnisotropy(self.Aniso) + self.showDebugOverlay(self.statisticsOn) + self.timeUntilNextToggle = 1 + + if self.Keyboard.isKeyDown(OIS.KC_SYSRQ) and self.timeUntilNextToggle <= 0: + path = 'screenshot_%d.png' % self.numScreenShots + self.numScreenShots += 1 + self.renderWindow.writeContentsToFile(path) + Application.debugText = 'screenshot taken: ' + path + self.timeUntilNextToggle = 0.5 + + if self.Keyboard.isKeyDown(OIS.KC_R) and self.timeUntilNextToggle <= 0: + detailsLevel = [ ogre.PM_SOLID, + ogre.PM_WIREFRAME, + ogre.PM_POINTS ] + self.sceneDetailIndex = (self.sceneDetailIndex + 1) % len(detailsLevel) + self.camera.polygonMode=detailsLevel[self.sceneDetailIndex] + self.timeUntilNextToggle = 0.5 + + if self.Keyboard.isKeyDown(OIS.KC_F) and self.timeUntilNextToggle <= 0: + self.statisticsOn = not self.statisticsOn + self.showDebugOverlay(self.statisticsOn) + self.timeUntilNextToggle = 1 + + if self.Keyboard.isKeyDown(OIS.KC_P) and self.timeUntilNextToggle <= 0: + self.displayCameraDetails = not self.displayCameraDetails + if not self.displayCameraDetails: + Application.debugText = "" + + if self.displayCameraDetails: + # Print camera details + pos = self.camera.getDerivedPosition() + o = self.camera.getDerivedOrientation() + Application.debugText = "P: %.3f %.3f %.3f O: %.3f %.3f %.3f %.3f" \ + % (pos.x,pos.y,pos.z, o.w,o.x,o.y,o.z) + return True + + def _isToggleKeyDown(self, keyCode, toggleTime = 1.0): + if self.Keyboard.isKeyDown(keyCode)and self.timeUntilNextToggle <=0: + self.timeUntilNextToggle = toggleTime + return True + return False + + def _isToggleMouseDown(self, Button, toggleTime = 1.0): + ms = self.Mouse.getMouseState() + if ms.buttonDown( Button ) and self.timeUntilNextToggle <=0: + self.timeUntilNextToggle = toggleTime + return True + return False + + def _processUnbufferedMouseInput(self, frameEvent): + ms = self.Mouse.getMouseState() + if ms.buttonDown( OIS.MB_Right ): + self.translateVector.x += ms.X.rel * 0.13 + self.translateVector.y -= ms.Y.rel * 0.13 + else: + self.rotationX = ogre.Degree(- ms.X.rel * 0.13) + self.rotationY = ogre.Degree(- ms.Y.rel * 0.13) + + def _moveCamera(self): + self.camera.yaw(self.rotationX) + self.camera.pitch(self.rotationY) + try: + self.camera.translate(self.translateVector) # for using OgreRefApp + except AttributeError: + self.camera.moveRelative(self.translateVector) + + def _updateStatistics(self): + statistics = self.renderWindow + self._setGuiCaption('Core/AverageFps', 'Average FPS: %f' % statistics.getAverageFPS()) + self._setGuiCaption('Core/CurrFps', 'Current FPS: %f' % statistics.getLastFPS()) + self._setGuiCaption('Core/BestFps', + 'Best FPS: %f %d ms' % (statistics.getBestFPS(), statistics.getBestFrameTime())) + self._setGuiCaption('Core/WorstFps', + 'Worst FPS: %f %d ms' % (statistics.getWorstFPS(), statistics.getWorstFrameTime())) + self._setGuiCaption('Core/NumTris', 'Triangle Count: %d' % statistics.getTriangleCount()) + self._setGuiCaption('Core/DebugText', Application.debugText) + + def _setGuiCaption(self, elementName, text): + element = ogre.OverlayManager.getSingleton().getOverlayElement(elementName, False) + ##d=ogre.UTFString("hell0") + ##element.setCaption(d) + + #element.caption="hello" + + #element.setCaption("help") + element.setCaption(text) # ogre.UTFString(text)) Added: trunk/lib_linux/ogre/renderer/OGRE/sf_utils.py =================================================================== --- trunk/lib_linux/ogre/renderer/OGRE/sf_utils.py (rev 0) +++ trunk/lib_linux/ogre/renderer/OGRE/sf_utils.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1,21 @@ +## Common utilities for the sample framework... +## +def getPluginPath(): + """Return the absolute path to a valid plugins.cfg file.""" + import sys + import os + import os.path + + paths = [os.path.join(os.getcwd(), 'plugins.cfg'), + '/etc/OGRE/plugins.cfg', + os.path.join(os.path.dirname(os.path.abspath(__file__)), + 'plugins.cfg')] + for path in paths: + if os.path.exists(path): + return path + + sys.stderr.write("\n" + "** Warning: Unable to locate a suitable plugins.cfg file.\n" + "** Warning: Please check your ogre installation and copy a\n" + "** Warning: working plugins.cfg file to the current directory.\n\n") + raise ogre.Exception(0, "can't locate the 'plugins.cfg' file", "") Added: trunk/lib_linux/ogre/renderer/__init__.py =================================================================== --- trunk/lib_linux/ogre/renderer/__init__.py (rev 0) +++ trunk/lib_linux/ogre/renderer/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +#keep me \ No newline at end of file Added: trunk/lib_linux/ogre/sound/OgreAL/__init__.py =================================================================== --- trunk/lib_linux/ogre/sound/OgreAL/__init__.py (rev 0) +++ trunk/lib_linux/ogre/sound/OgreAL/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1,6 @@ +import sys, os + +if sys.platform == 'win32': + os.environ['PATH'] += ';' + __path__[0] + +from _ogreal_ import * \ No newline at end of file Added: trunk/lib_linux/ogre/sound/OgreAL/_ogreal_.so =================================================================== (Binary files differ) Property changes on: trunk/lib_linux/ogre/sound/OgreAL/_ogreal_.so ___________________________________________________________________ Name: svn:executable + * Name: svn:mime-type + application/octet-stream Added: trunk/lib_linux/ogre/sound/__init__.py =================================================================== --- trunk/lib_linux/ogre/sound/__init__.py (rev 0) +++ trunk/lib_linux/ogre/sound/__init__.py 2007-09-20 06:51:33 UTC (rev 180) @@ -0,0 +1 @@ +#keep me \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-09-20 06:36:12
|
Revision: 179 http://roreditor.svn.sourceforge.net/roreditor/?rev=179&view=rev Author: rorthomas Date: 2007-09-19 23:36:08 -0700 (Wed, 19 Sep 2007) Log Message: ----------- added missing startup script for linux Added Paths: ----------- trunk/rortoolkit Added: trunk/rortoolkit =================================================================== --- trunk/rortoolkit (rev 0) +++ trunk/rortoolkit 2007-09-20 06:36:08 UTC (rev 179) @@ -0,0 +1,3 @@ +#!/bin/sh +export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:./linux" +python rortoolkit.py $@ Property changes on: trunk/rortoolkit ___________________________________________________________________ Name: svn:executable + * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ap...@us...> - 2007-09-20 05:51:07
|
Revision: 178 http://roreditor.svn.sourceforge.net/roreditor/?rev=178&view=rev Author: Aperion Date: 2007-09-19 22:51:04 -0700 (Wed, 19 Sep 2007) Log Message: ----------- Fixed getRootPath() using platform dependent path references. Modified Paths: -------------- trunk/lib_common/ror/svn.py Modified: trunk/lib_common/ror/svn.py =================================================================== --- trunk/lib_common/ror/svn.py 2007-09-20 05:49:06 UTC (rev 177) +++ trunk/lib_common/ror/svn.py 2007-09-20 05:51:04 UTC (rev 178) @@ -17,7 +17,7 @@ path = os.path.dirname(os.path.abspath(__file__)) if os.path.isdir(os.path.join(path, "media")): return path - path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"..\\..")) + path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"..","..")) if os.path.isdir(os.path.join(path, "media")): return path # todo: throw exception! This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ap...@us...> - 2007-09-20 05:49:10
|
Revision: 177 http://roreditor.svn.sourceforge.net/roreditor/?rev=177&view=rev Author: Aperion Date: 2007-09-19 22:49:06 -0700 (Wed, 19 Sep 2007) Log Message: ----------- Added minor logging messages Modified Paths: -------------- trunk/lib_common/ror/settingsManager.py Modified: trunk/lib_common/ror/settingsManager.py =================================================================== --- trunk/lib_common/ror/settingsManager.py 2007-09-20 05:35:10 UTC (rev 176) +++ trunk/lib_common/ror/settingsManager.py 2007-09-20 05:49:06 UTC (rev 177) @@ -1,3 +1,5 @@ + +#TODO initialize the Settings, make sure there is a file present, if not create it. import os, os.path, sys, ConfigParser import logger @@ -28,9 +30,11 @@ logger.log().exception(str(e)) def getSetting(self, group, key): + logger.log().info("Retreiving Settings: %s - %s." %(group, key) ) try: return self.myConfig.get(group, key) except Exception, e: + logger.log().error("Missing log file: %s" %(self.configfilename)) logger.log().exception(str(e)) return "" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ap...@us...> - 2007-09-20 05:35:12
|
Revision: 176 http://roreditor.svn.sourceforge.net/roreditor/?rev=176&view=rev Author: Aperion Date: 2007-09-19 22:35:10 -0700 (Wed, 19 Sep 2007) Log Message: ----------- Initial upload of python-ogre linux dependencies. Added Paths: ----------- trunk/lib_linux/ogre/ trunk/lib_linux/ogre/__init__.py trunk/lib_linux/ogre/gui/ trunk/lib_linux/ogre/io/ trunk/lib_linux/ogre/physics/ trunk/lib_linux/ogre/renderer/ trunk/lib_linux/ogre/sound/ Added: trunk/lib_linux/ogre/__init__.py =================================================================== --- trunk/lib_linux/ogre/__init__.py (rev 0) +++ trunk/lib_linux/ogre/__init__.py 2007-09-20 05:35:10 UTC (rev 176) @@ -0,0 +1 @@ +#keep me \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Ap...@us...> - 2007-09-20 02:00:59
|
Revision: 175 http://roreditor.svn.sourceforge.net/roreditor/?rev=175&view=rev Author: Aperion Date: 2007-09-19 19:00:54 -0700 (Wed, 19 Sep 2007) Log Message: ----------- Added usefull error message for missing pysvn libraries. Modified Paths: -------------- trunk/lib_common/ror/svn.py Modified: trunk/lib_common/ror/svn.py =================================================================== --- trunk/lib_common/ror/svn.py 2007-09-09 16:40:57 UTC (rev 174) +++ trunk/lib_common/ror/svn.py 2007-09-20 02:00:54 UTC (rev 175) @@ -1,6 +1,10 @@ #Thomas Fischer 28/06/2007, th...@th... import sys, os, os.path -import pysvn +try: + import pysvn +except ImportError: + print "pysvn not installed, make sure this is installed." + print "If you are running ubuntu install the python-svn package" from ror.logger import log from ror.settingsManager import getSettingsManager This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-09-09 16:41:00
|
Revision: 174 http://roreditor.svn.sourceforge.net/roreditor/?rev=174&view=rev Author: rorthomas Date: 2007-09-09 09:40:57 -0700 (Sun, 09 Sep 2007) Log Message: ----------- * updated the mod creation tool a bit Modified Paths: -------------- trunk/lib_common/ror/modtool.py Modified: trunk/lib_common/ror/modtool.py =================================================================== --- trunk/lib_common/ror/modtool.py 2007-09-09 16:30:45 UTC (rev 173) +++ trunk/lib_common/ror/modtool.py 2007-09-09 16:40:57 UTC (rev 174) @@ -192,7 +192,11 @@ uniqueid=self.getUniqueID() log().info("### generating %d file(s):" % len(newtargets)) purefile, extension = os.path.splitext(targetfile) - packdirname = os.path.join(rorpath, "packs", uniqueid+"-"+purefile) + packsdir = os.path.join(rorpath, "packs") + if not os.path.isdir(packsdir): + os.mkdir(packsdir) + packdirname = os.path.join(packsdir, uniqueid+"-"+purefile) + os.mkdir(packdirname) for target in newtargets: target = target['filename'] @@ -204,6 +208,7 @@ log().info(dstname) shutil.copyfile(filenamefound, dstname) log().info("### pack successfully created in path: %s" % packdirname) + # FIXME: change content of the files also! This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-09-09 16:30:49
|
Revision: 173 http://roreditor.svn.sourceforge.net/roreditor/?rev=173&view=rev Author: rorthomas Date: 2007-09-09 09:30:45 -0700 (Sun, 09 Sep 2007) Log Message: ----------- * updated, added modcreator basics Modified Paths: -------------- trunk/lib_common/ror/depcheckerplugins/ror_cfg.py trunk/lib_common/ror/modtool.py trunk/tools/modtool.py Modified: trunk/lib_common/ror/depcheckerplugins/ror_cfg.py =================================================================== --- trunk/lib_common/ror/depcheckerplugins/ror_cfg.py 2007-09-09 15:49:39 UTC (rev 172) +++ trunk/lib_common/ror/depcheckerplugins/ror_cfg.py 2007-09-09 16:30:45 UTC (rev 173) @@ -27,7 +27,7 @@ # ignore standart configuration files file = os.path.basename(filename).lower() - if file in ['editor.cfg', 'resources.cfg', 'ror.cfg', 'wavefield.cfg', 'plugins.cfg', 'ogre.cfg', 'categories.cfg']: + if file in ['editor.cfg', 'resources.cfg', 'ror.cfg', 'wavefield.cfg', 'plugins.cfg', 'ogre.cfg', 'categories.cfg', 'plugins_windows.cfg', 'plugins_linux.cfg', 'plugins_windows_debug.cfg']: return {OPTIONAL:{},REQUIRES:{},PROVIDES:{}} dep = [] Modified: trunk/lib_common/ror/modtool.py =================================================================== --- trunk/lib_common/ror/modtool.py 2007-09-09 15:49:39 UTC (rev 172) +++ trunk/lib_common/ror/modtool.py 2007-09-09 16:30:45 UTC (rev 173) @@ -9,347 +9,404 @@ DOWNLOADDIR = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "downloaded")) class ModTool: - def __init__(self): - pass - - def work(self, mode, targetfile, verbose, dryrun, installtarget=None): - self.dryrun = dryrun - self.verbose = verbose - log().info("### modinstaller started with %s, %s" % (mode, targetfile)) - if mode == "install": - filename = os.path.abspath(targetfile) - self.ExtractToTemp(targetfile) - target = installtarget - log().info("### validating target ...") - import ror.depchecker - dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) - if dc.invalid: - log().error("### target invalid!") - log().info("### please use the list mode to get valid targets") - usage() - - log().info("### target valid!") - #print dc.dstree - installcounter = 0 - for file in dc.dstree: - filename = file['filename'] - filenamefound = self.searchFile(filename, TEMPDIR) - if filenamefound is None: - log().error("File %s not found in %s!" % (filename, TEMPDIR)) - sys.exit(1) - self.installfile(target, filenamefound, dryrun) - installcounter += 1 - if dryrun: - log().info("### would install %d files." % installcounter) - else: - log().info("### %d files installed, finished!" % installcounter) - self.removetemp(False) - return [target] + def __init__(self): + pass + + def work(self, mode, targetfile, verbose, dryrun, installtarget=None): + self.dryrun = dryrun + self.verbose = verbose + log().info("### modinstaller started with %s, %s" % (mode, targetfile)) + if mode == "install": + filename = os.path.abspath(targetfile) + self.ExtractToTemp(targetfile) + target = installtarget + log().info("### validating target ...") + import ror.depchecker + dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) + if dc.invalid: + log().error("### target invalid!") + log().info("### please use the list mode to get valid targets") + usage() + + log().info("### target valid!") + #print dc.dstree + installcounter = 0 + for file in dc.dstree: + filename = file['filename'] + filenamefound = self.searchFile(filename, TEMPDIR) + if filenamefound is None: + log().error("File %s not found in %s!" % (filename, TEMPDIR)) + sys.exit(1) + self.installfile(target, filenamefound, dryrun) + installcounter += 1 + if dryrun: + log().info("### would install %d files." % installcounter) + else: + log().info("### %d files installed, finished!" % installcounter) + self.removetemp(False) + return [target] - elif mode == "installall": - filename = os.path.abspath(targetfile) - self.ExtractToTemp(targetfile) - validtargets, invalidtargets = self.getTargets(verbose) - log().info("### installing %d found modifications:" % (len(validtargets))) - installcounter = 0 - for target in validtargets: - log().info("### installing modification '%s'" % target) - import ror.depchecker - dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) - if dc.dstree is None: - log().error("no dependenytree for File %s!" % (filename)) - continue - for file in dc.dstree: - filename = file['filename'] - filenamefound = self.searchFile(filename, TEMPDIR) - if filenamefound is None: - log().error("File %s not found in %s!" % (filename, TEMPDIR)) - sys.exit(1) - self.installfile(target, filenamefound, dryrun) - installcounter += 1 - if dryrun: - log().info("### would install %d files." % installcounter) - else: - log().info("### %d files installed, finished!" % installcounter) - self.removetemp(False) - return validtargets - - elif mode == "installrepo": - if targetfile.find("://") != -1: - m = re.match(r"^.*://(.*)$", targetfile) - if not m is None and len(m.groups()) > 0: - targetfile = m.groups()[0].rstrip("/") - else: - log().error("error while installing from repo: wrong URL scheme") - return False - else: - log().info("manual use, not parsing URL") - if not self.getRepoFile(targetfile): - log().error("error while installing from repo.") - return False - targetfile = os.path.join(DOWNLOADDIR, targetfile) - return ModTool().work("installall", targetfile, self.verbose, self.dryrun) - - elif mode in ["list", "listall"]: - filename = os.path.abspath(targetfile) - self.ExtractToTemp(targetfile) - validtargets, invalidtargets = self.getTargets(verbose) - if mode == "listall": - if len(invalidtargets) > 0: - log().info("broken modifications found:") - for v in invalidtargets: - log().info(" %-20s" % v) - log().info("use the --verbose flag to find the missing files!") - else: - log().info("no broken modifications found") + elif mode == "installall": + filename = os.path.abspath(targetfile) + self.ExtractToTemp(targetfile) + validtargets, invalidtargets = self.getTargets(verbose) + log().info("### installing %d found modifications:" % (len(validtargets))) + installcounter = 0 + for target in validtargets: + log().info("### installing modification '%s'" % target) + import ror.depchecker + dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) + if dc.dstree is None: + log().error("no dependenytree for File %s!" % (filename)) + continue + for file in dc.dstree: + filename = file['filename'] + filenamefound = self.searchFile(filename, TEMPDIR) + if filenamefound is None: + log().error("File %s not found in %s!" % (filename, TEMPDIR)) + sys.exit(1) + self.installfile(target, filenamefound, dryrun) + installcounter += 1 + if dryrun: + log().info("### would install %d files." % installcounter) + else: + log().info("### %d files installed, finished!" % installcounter) + self.removetemp(False) + return validtargets + + elif mode == "installrepo": + if targetfile.find("://") != -1: + m = re.match(r"^.*://(.*)$", targetfile) + if not m is None and len(m.groups()) > 0: + targetfile = m.groups()[0].rstrip("/") + else: + log().error("error while installing from repo: wrong URL scheme") + return False + else: + log().info("manual use, not parsing URL") + if not self.getRepoFile(targetfile): + log().error("error while installing from repo.") + return False + targetfile = os.path.join(DOWNLOADDIR, targetfile) + return ModTool().work("installall", targetfile, self.verbose, self.dryrun) + + elif mode == "uniqueid": + print self.getUniqueID() + + elif mode in ["list", "listall"]: + filename = os.path.abspath(targetfile) + self.ExtractToTemp(targetfile) + validtargets, invalidtargets = self.getTargets(verbose) + if mode == "listall": + if len(invalidtargets) > 0: + log().info("broken modifications found:") + for v in invalidtargets: + log().info(" %-20s" % v) + log().info("use the --verbose flag to find the missing files!") + else: + log().info("no broken modifications found") - if len(validtargets) > 0: - log().info("installable modifications found:") - for v in validtargets: - log().info(" %-20s" % v) - else: - log().info("no installable modifications found! :(") - # todo : remove workaround! - self.removetemp(False) - return validtargets + if len(validtargets) > 0: + log().info("installable modifications found:") + for v in validtargets: + log().info(" %-20s" % v) + else: + log().info("no installable modifications found! :(") + # todo : remove workaround! + self.removetemp(False) + return validtargets - elif mode in ["listinstalled"]: - targets = self.getRoRMods(verbose) - if len(targets) > 0: - log().info("### Found Mods:") - for target in targets: - log().info(" "+target) - else: - log().info("### No Mods found!") - - if mode in ["uninstall"]: - rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") - log().info("### validating target ...") - import ror.depchecker - dc = ror.depchecker.RoRDepChecker(rorpath, "dtree", targetfile, verbose) - if dc.invalid: - log().error("### target invalid! (Target not found)") - log().info("### please use the 'listinstalled' mode to get valid uninstallation targets") - return None - - log().info("### target valid!") + elif mode in ["listinstalled"]: + targets = self.getRoRMods(verbose) + if len(targets) > 0: + log().info("### Found Mods:") + for target in targets: + log().info(" "+target) + else: + log().info("### No Mods found!") + + if mode in ["uninstall"]: + rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") + log().info("### validating target ...") + import ror.depchecker + dc = ror.depchecker.RoRDepChecker(rorpath, "dtree", targetfile, verbose) + if dc.invalid: + log().error("### target invalid! (Target not found)") + log().info("### please use the 'listinstalled' mode to get valid uninstallation targets") + return None + + log().info("### target valid!") - #print dc.dstree - newtargets = [] - md5s = dc.readMD5File() - for file in dc.dstree: - filename = file['filename'] - if not filename in md5s.keys(): - newtargets.append(filename) - else: - # found in original file list, but check md5 sum first! - filenamefound = self.searchFile(filename, rorpath) - filemd5 = dc.md5Sum(filenamefound) - if filemd5.strip() != md5s[filename].strip(): - newtargets.append(filename) + #print dc.dstree + newtargets = [] + md5s = dc.readMD5File() + for file in dc.dstree: + filename = file['filename'] + if not filename in md5s.keys(): + newtargets.append(filename) + else: + # found in original file list, but check md5 sum first! + filenamefound = self.searchFile(filename, rorpath) + filemd5 = dc.md5Sum(filenamefound) + if filemd5.strip() != md5s[filename].strip(): + newtargets.append(filename) - log().info("### removed %d files from dependency tree." % (len(dc.dstree)-len(newtargets))) + log().info("### removed %d files from dependency tree." % (len(dc.dstree)-len(newtargets))) - if len(newtargets) == 0: - log().error("Cannot uninstall original Files!") - return + if len(newtargets) == 0: + log().error("Cannot uninstall original Files!") + return - #print newtargets - if dryrun: - log().info("### would uninstall %d file(s):" % len(newtargets)) - else: - log().info("### uninstalling %d file(s):" % len(newtargets)) - for target in newtargets: - filenamefound = self.searchFile(target, rorpath) - if filenamefound is None: - log().error("### File not found: %s" % target) - continue - self.unInstallfile(filenamefound, dryrun) + #print newtargets + if dryrun: + log().info("### would uninstall %d file(s):" % len(newtargets)) + else: + log().info("### uninstalling %d file(s):" % len(newtargets)) + for target in newtargets: + filenamefound = self.searchFile(target, rorpath) + if filenamefound is None: + log().error("### File not found: %s" % target) + continue + self.unInstallfile(filenamefound, dryrun) - return None - - def wgetreporthook(self, *arg): - percentdone = int(((arg[0] * arg[1]) / float(arg[2]))*100) - if percentdone % 10 == 0: - log().info("Downloading, % 4d%% done..." % percentdone) - - def wget(self, url, filename): - file, msg = urllib.urlretrieve(url, filename, self.wgetreporthook) - if os.path.isfile(file): - return True - return False - + if mode in ['createmod']: + rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") + log().info("### validating target ...") + import ror.depchecker + dc = ror.depchecker.RoRDepChecker(os.path.join(rorpath, 'data'), "dtree", targetfile, verbose) + if dc.invalid: + log().error("### target invalid! (Target not found)") + log().info("### please use the 'listinstalled' mode to get valid createmod targets") + return None + + log().info("### target valid!") - def getRepoFile(self, repofilename): - if not os.path.isdir(DOWNLOADDIR): - os.mkdir(DOWNLOADDIR) - try: - log().info("trying to download the file %s form the repository..." % repofilename) - src = REPOSITORY_URL %{"file":repofilename} - dst = os.path.join(DOWNLOADDIR, repofilename) - #print src, dst - return self.wget(src, dst) - except Exception, err: - log().error("Error while trying to donwload file from the Repository:") - log().error(str(err)) - self.removetemp(False) - return False - - def removetemp(self, reporterrors=True): - if os.path.isdir(TEMPDIR): - try: - shutil.rmtree(TEMPDIR) - #os.rmdir(TEMPDIR) - except Exception, err: - if not reporterrors: - return - log().error(str(err)) - log().error("could not remove temporary diretory: %s! please delete by hand." % TEMPDIR) - sys.exit(1) + #print dc.dstree + newtargets = dc.dstree - def ExtractToTemp(self, filename): - file, extension = os.path.splitext(filename) - self.removetemp(False) - os.mkdir(TEMPDIR) - if extension.lower() == ".rar": - import UnRAR - dst = os.path.join(TEMPDIR, os.path.basename(filename)) - shutil.copyfile(filename, dst) - os.chdir(TEMPDIR) - UnRAR.Archive(os.path.basename(filename)).extract() - - # remove .rar file instantly - os.unlink(os.path.join(TEMPDIR, os.path.basename(filename))) - - # change back to current path - os.chdir(os.path.dirname(os.path.abspath(__file__))) - return True - elif extension.lower() == ".zip": - import UnZIP - UnZIP.unzip(filename, TEMPDIR) - return True - else: - log().info("copying "+filename+" to "+os.path.join(TEMPDIR, os.path.basename(filename))) - shutil.copyfile(filename, os.path.join(TEMPDIR, os.path.basename(filename))) - return False + uniqueid='UNIQUEID' + if dryrun: + log().info("### would download a unique identification number from the repository") + log().info("### would create %d file(s)." % len(newtargets)) + else: + uniqueid=self.getUniqueID() + log().info("### generating %d file(s):" % len(newtargets)) + purefile, extension = os.path.splitext(targetfile) + packdirname = os.path.join(rorpath, "packs", uniqueid+"-"+purefile) + os.mkdir(packdirname) + for target in newtargets: + target = target['filename'] + filenamefound = self.searchFile(target, rorpath) + if filenamefound is None: + log().error("### File not found: %s" % target) + continue + dstname = os.path.join(packdirname, uniqueid+"-"+target) + log().info(dstname) + shutil.copyfile(filenamefound, dstname) + log().info("### pack successfully created in path: %s" % packdirname) + + + + return None + + def wgetreporthook(self, *arg): + percentdone = int(((arg[0] * arg[1]) / float(arg[2]))*100) + if percentdone % 10 == 0: + log().info("Downloading, % 4d%% done..." % percentdone) + + def wget(self, url, filename): + file, msg = urllib.urlretrieve(url, filename, self.wgetreporthook) + if os.path.isfile(file): + return True + return False + - def unInstallfile(self, dstfile, dryrun): - filename = os.path.basename(dstfile) - filenamesplit = filename.split(".") + def getRepoFile(self, repofilename): + if not os.path.isdir(DOWNLOADDIR): + os.mkdir(DOWNLOADDIR) + try: + log().info("trying to download the file %s form the repository..." % repofilename) + src = REPOSITORY_URL %{"file":repofilename} + dst = os.path.join(DOWNLOADDIR, repofilename) + #print src, dst + return self.wget(src, dst) + except Exception, err: + log().error("Error while trying to donwload file from the Repository:") + log().error(str(err)) + self.removetemp(False) + return False - backups = {} - for file in os.listdir(os.path.dirname(dstfile)): - #print file - tmpfilesplit = file.split(".") - if tmpfilesplit[0] == filenamesplit[0]: - if tmpfilesplit[-1] == "backup" and int(tmpfilesplit[-2]) in range(0, 99): - backups[int(tmpfilesplit[-2])] = file - if len(backups) > 0: - # sort backups to get the latest - keys = backups.keys() - keys.sort() - latestbackup = backups[keys[-1]] - latestbackup = os.path.join(os.path.dirname(dstfile), latestbackup) - log().info("Latest Backup: %s" % latestbackup) - if dryrun: - log().info("would move backup file %s to %s" % (latestbackup, dstfile)) - else: - log().info("moving backup file %s to %s" % (latestbackup, dstfile)) - shutil.move(latestbackup, dstfile) - else: - if dryrun: - log().info("would remove file %s " % (dstfile)) - else: - log().info("removing file %s " % (dstfile)) - os.unlink(dstfile) - - - - def installfile(self, maintarget, srcfile, dryrun): - file, extension = os.path.splitext(maintarget) - rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") - - if extension in ['.truck', '.load']: - path = os.path.join(rorpath, "data", "trucks") - elif extension in ['.terrn']: - path = os.path.join(rorpath, "data", "terrains") - else: - path = rorpath - - dstfile = os.path.join(path, os.path.basename(srcfile)) - - backupnumber = -1 - if os.path.isfile(dstfile): - for i in range(0, 99): - dstfile2 = dstfile + ".%02d.backup" % i - if not os.path.isfile(dstfile2): - backupnumber = i - break - log().info("file existing, adding file to the backup queue. File got backup number %d." % backupnumber) - - - if dryrun: - if backupnumber != -1: - log().info("would move original, existing file %s to %s" % (dstfile, dstfile2)) - log().info("would install %s to %s" % (os.path.basename(srcfile), path)) - else: - if backupnumber != -1: - log().info("moving original file %s to %s" % (dstfile, dstfile2)) - shutil.move(dstfile, dstfile2) - log().info("installing %s to %s" % (os.path.basename(srcfile), path)) - shutil.copyfile(srcfile, os.path.join(path, os.path.basename(srcfile))) + def getUniqueID(self): + UNIQUEIDURL = "http://repository.rigsofrods.com/uniqueid/" + try: + log().info("trying to get a unique ID from the repository ...") + f = urllib.urlopen(UNIQUEIDURL) + lines = f.readlines() + for line in lines: + if line[0:9] == "<!--ID-->": + id = line[9:].strip() + return id + except Exception, err: + log().error("Error while trying to get a unique ID") + log().error(str(err)) + self.removetemp(False) + return False + + def removetemp(self, reporterrors=True): + if os.path.isdir(TEMPDIR): + try: + shutil.rmtree(TEMPDIR) + #os.rmdir(TEMPDIR) + except Exception, err: + if not reporterrors: + return + log().error(str(err)) + log().error("could not remove temporary diretory: %s! please delete by hand." % TEMPDIR) + sys.exit(1) - def searchFile(self, filename, top): - for root, dirs, files in os.walk(top, topdown=False): - if filename in files: - return os.path.join(root, filename) - return None + def ExtractToTemp(self, filename): + file, extension = os.path.splitext(filename) + self.removetemp(False) + os.mkdir(TEMPDIR) + if extension.lower() == ".rar": + import UnRAR + dst = os.path.join(TEMPDIR, os.path.basename(filename)) + shutil.copyfile(filename, dst) + os.chdir(TEMPDIR) + UnRAR.Archive(os.path.basename(filename)).extract() + + # remove .rar file instantly + os.unlink(os.path.join(TEMPDIR, os.path.basename(filename))) + + # change back to current path + os.chdir(os.path.dirname(os.path.abspath(__file__))) + return True + elif extension.lower() == ".zip": + import UnZIP + UnZIP.unzip(filename, TEMPDIR) + return True + else: + log().info("copying "+filename+" to "+os.path.join(TEMPDIR, os.path.basename(filename))) + shutil.copyfile(filename, os.path.join(TEMPDIR, os.path.basename(filename))) + return False - def getTargets(self, verbose): - import ror.depchecker - dc = ror.depchecker.RoRDepChecker(TEMPDIR, "getfiles", "", False) - targets = [] - for file in dc.files: - filename, extension = os.path.splitext(file) - if extension.lower() in ['.truck', '.terrn', '.load']: - targets.append(os.path.basename(file)) + def unInstallfile(self, dstfile, dryrun): + filename = os.path.basename(dstfile) + filenamesplit = filename.split(".") - validtargets = [] - invalidtargets = [] - if len(targets) == 0: - log().info("### no targets found") - return validtargets, invalidtargets - - log().info("### found %d targets, checking them separatly now" % len(targets)) - for target in targets: - log().info("### checking target %s..." % target) - dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) - if dc.everythingfound: - validtargets.append(target) - else: - invalidtargets.append(target) - return validtargets, invalidtargets + backups = {} + for file in os.listdir(os.path.dirname(dstfile)): + #print file + tmpfilesplit = file.split(".") + if tmpfilesplit[0] == filenamesplit[0]: + if tmpfilesplit[-1] == "backup" and int(tmpfilesplit[-2]) in range(0, 99): + backups[int(tmpfilesplit[-2])] = file + if len(backups) > 0: + # sort backups to get the latest + keys = backups.keys() + keys.sort() + latestbackup = backups[keys[-1]] + latestbackup = os.path.join(os.path.dirname(dstfile), latestbackup) + log().info("Latest Backup: %s" % latestbackup) + if dryrun: + log().info("would move backup file %s to %s" % (latestbackup, dstfile)) + else: + log().info("moving backup file %s to %s" % (latestbackup, dstfile)) + shutil.move(latestbackup, dstfile) + else: + if dryrun: + log().info("would remove file %s " % (dstfile)) + else: + log().info("removing file %s " % (dstfile)) + os.unlink(dstfile) + + + + def installfile(self, maintarget, srcfile, dryrun): + file, extension = os.path.splitext(maintarget) + rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") + + if extension in ['.truck', '.load']: + path = os.path.join(rorpath, "data", "trucks") + elif extension in ['.terrn']: + path = os.path.join(rorpath, "data", "terrains") + else: + path = rorpath + + dstfile = os.path.join(path, os.path.basename(srcfile)) + + backupnumber = -1 + if os.path.isfile(dstfile): + for i in range(0, 99): + dstfile2 = dstfile + ".%02d.backup" % i + if not os.path.isfile(dstfile2): + backupnumber = i + break + log().info("file existing, adding file to the backup queue. File got backup number %d." % backupnumber) + + + if dryrun: + if backupnumber != -1: + log().info("would move original, existing file %s to %s" % (dstfile, dstfile2)) + log().info("would install %s to %s" % (os.path.basename(srcfile), path)) + else: + if backupnumber != -1: + log().info("moving original file %s to %s" % (dstfile, dstfile2)) + shutil.move(dstfile, dstfile2) + log().info("installing %s to %s" % (os.path.basename(srcfile), path)) + shutil.copyfile(srcfile, os.path.join(path, os.path.basename(srcfile))) - def getRoRMods(self, verbose): - import ror.depchecker - rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") - dc = ror.depchecker.RoRDepChecker(rorpath, "getfiles", "", False) - targets = [] - for file in dc.files: - filename, extension = os.path.splitext(file) - if extension.lower() in ['.truck', '.terrn', '.load']: - targets.append(file) - newtargets = [] - md5s = dc.readMD5File() - for target in targets: - if not os.path.basename(target) in md5s.keys(): - newtargets.append(os.path.basename(target)) - else: - # found in original file list, but check md5 sum first! - filemd5 = dc.md5Sum(target) - if filemd5.strip() != md5s[os.path.basename(target)].strip(): - newtargets.append(os.path.basename(target)) + def searchFile(self, filename, top): + for root, dirs, files in os.walk(top, topdown=False): + if filename in files: + return os.path.join(root, filename) + return None - return newtargets + def getTargets(self, verbose): + import ror.depchecker + dc = ror.depchecker.RoRDepChecker(TEMPDIR, "getfiles", "", False) + targets = [] + for file in dc.files: + filename, extension = os.path.splitext(file) + if extension.lower() in ['.truck', '.terrn', '.load']: + targets.append(os.path.basename(file)) - \ No newline at end of file + validtargets = [] + invalidtargets = [] + if len(targets) == 0: + log().info("### no targets found") + return validtargets, invalidtargets + + log().info("### found %d targets, checking them separatly now" % len(targets)) + for target in targets: + log().info("### checking target %s..." % target) + dc = ror.depchecker.RoRDepChecker(TEMPDIR, "dtree", target, verbose) + if dc.everythingfound: + validtargets.append(target) + else: + invalidtargets.append(target) + return validtargets, invalidtargets + + def getRoRMods(self, verbose): + import ror.depchecker + rorpath = getSettingsManager().getSetting("RigsOfRods", "BasePath") + dc = ror.depchecker.RoRDepChecker(rorpath, "getfiles", "", False) + targets = [] + for file in dc.files: + filename, extension = os.path.splitext(file) + if extension.lower() in ['.truck', '.terrn', '.load']: + targets.append(file) + newtargets = [] + md5s = dc.readMD5File() + for target in targets: + if not os.path.basename(target) in md5s.keys(): + newtargets.append(os.path.basename(target)) + else: + # found in original file list, but check md5 sum first! + filemd5 = dc.md5Sum(target) + if filemd5.strip() != md5s[os.path.basename(target)].strip(): + newtargets.append(os.path.basename(target)) + + return newtargets + + \ No newline at end of file Modified: trunk/tools/modtool.py =================================================================== --- trunk/tools/modtool.py 2007-09-09 15:49:39 UTC (rev 172) +++ trunk/tools/modtool.py 2007-09-09 16:30:45 UTC (rev 173) @@ -34,6 +34,12 @@ print "uninstall <modname> --verbose --dryrun" print " uninstalls a mod" print "" + print "uniqueid new" + print " get a new id from the repository" + print "" + print "createmod <truck filename>" + print " creates a new mod using the new ID format" + print "" print "notes: the --verbose option is optional to increase the output for debugging" print " the --dryrun option is optional and prints out what would be done" sys.exit(0) @@ -49,7 +55,7 @@ usage() mode = sys.argv[1] - if not mode in ['list', 'listall', 'install', 'installall', 'listinstalled','uninstall', 'installrepo']: + if not mode in ['list', 'listall', 'install', 'installall', 'listinstalled','uninstall', 'installrepo', 'uniqueid', 'createmod']: usage() if len(sys.argv) < 4 and mode in ['install']: usage() @@ -65,6 +71,10 @@ targetfile = sys.argv[2] elif mode == 'uninstall': targetfile = sys.argv[2] + elif mode == 'createmod': + targetfile = sys.argv[2] + elif mode == 'uniqueid': + targetfile = '' # get optional flags verbose = False This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-09-09 15:49:42
|
Revision: 172 http://roreditor.svn.sourceforge.net/roreditor/?rev=172&view=rev Author: rorthomas Date: 2007-09-09 08:49:39 -0700 (Sun, 09 Sep 2007) Log Message: ----------- * updated file-types Modified Paths: -------------- trunk/lib_common/ror/depcheckerplugins/ror_cfg.py Added Paths: ----------- trunk/lib_common/ror/depcheckerplugins/ror_airplane.py trunk/lib_common/ror/depcheckerplugins/ror_boat.py trunk/lib_common/ror/depcheckerplugins/ror_fixed.py trunk/lib_common/ror/depcheckerplugins/ror_trailer.py Added: trunk/lib_common/ror/depcheckerplugins/ror_airplane.py =================================================================== --- trunk/lib_common/ror/depcheckerplugins/ror_airplane.py (rev 0) +++ trunk/lib_common/ror/depcheckerplugins/ror_airplane.py 2007-09-09 15:49:39 UTC (rev 172) @@ -0,0 +1,5 @@ +import os, os.path +import ror_truck + +def getDependencies(filename): + return ror_truck.getDependencies(filename) Added: trunk/lib_common/ror/depcheckerplugins/ror_boat.py =================================================================== --- trunk/lib_common/ror/depcheckerplugins/ror_boat.py (rev 0) +++ trunk/lib_common/ror/depcheckerplugins/ror_boat.py 2007-09-09 15:49:39 UTC (rev 172) @@ -0,0 +1,5 @@ +import os, os.path +import ror_truck + +def getDependencies(filename): + return ror_truck.getDependencies(filename) Modified: trunk/lib_common/ror/depcheckerplugins/ror_cfg.py =================================================================== --- trunk/lib_common/ror/depcheckerplugins/ror_cfg.py 2007-09-06 11:13:22 UTC (rev 171) +++ trunk/lib_common/ror/depcheckerplugins/ror_cfg.py 2007-09-09 15:49:39 UTC (rev 172) @@ -27,7 +27,7 @@ # ignore standart configuration files file = os.path.basename(filename).lower() - if file in ['editor.cfg', 'resources.cfg', 'ror.cfg', 'wavefield.cfg', 'plugins.cfg', 'ogre.cfg']: + if file in ['editor.cfg', 'resources.cfg', 'ror.cfg', 'wavefield.cfg', 'plugins.cfg', 'ogre.cfg', 'categories.cfg']: return {OPTIONAL:{},REQUIRES:{},PROVIDES:{}} dep = [] Added: trunk/lib_common/ror/depcheckerplugins/ror_fixed.py =================================================================== --- trunk/lib_common/ror/depcheckerplugins/ror_fixed.py (rev 0) +++ trunk/lib_common/ror/depcheckerplugins/ror_fixed.py 2007-09-09 15:49:39 UTC (rev 172) @@ -0,0 +1,5 @@ +import os, os.path +import ror_truck + +def getDependencies(filename): + return ror_truck.getDependencies(filename) Added: trunk/lib_common/ror/depcheckerplugins/ror_trailer.py =================================================================== --- trunk/lib_common/ror/depcheckerplugins/ror_trailer.py (rev 0) +++ trunk/lib_common/ror/depcheckerplugins/ror_trailer.py 2007-09-09 15:49:39 UTC (rev 172) @@ -0,0 +1,5 @@ +import os, os.path +import ror_truck + +def getDependencies(filename): + return ror_truck.getDependencies(filename) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-09-06 11:13:26
|
Revision: 171 http://roreditor.svn.sourceforge.net/roreditor/?rev=171&view=rev Author: rorthomas Date: 2007-09-06 04:13:22 -0700 (Thu, 06 Sep 2007) Log Message: ----------- * new procedural roads format Modified Paths: -------------- trunk/lib_common/roreditor/RoRTerrainOgreWindow.py Modified: trunk/lib_common/roreditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRTerrainOgreWindow.py 2007-09-04 13:55:01 UTC (rev 170) +++ trunk/lib_common/roreditor/RoRTerrainOgreWindow.py 2007-09-06 11:13:22 UTC (rev 171) @@ -982,6 +982,7 @@ elif event.m_keyCode == 66: # B lines = [] factor = 1 + lines.append("begin_procedural_roads\n") for i in range(0, self.spline.getNumPoints() * factor): point = self.spline.interpolate(i/float(self.spline.getNumPoints() * factor)) nextpoint = self.spline.interpolate((i+1)/float(self.spline.getNumPoints() * factor)) @@ -989,9 +990,11 @@ rotx = rot.getPitch().valueDegrees() roty = rot.getRoll().valueDegrees() rotz = rot.getYaw().valueDegrees() - pos = point+ogre.Vector3(0,1,0) - line = "%f, %f, %f, %f, %f, %f, road\n" % (pos.x, pos.y, pos.z, rotx, roty, rotz) + pos = point + ogre.Vector3(0,1,0) + #format: position x,y,z rotation rx,ry,rz, width, border width, border height, type + line = "%f, %f, %f, %f, %f, %f, 1, 0.2, 0.2, auto\n" % (pos.x, pos.y, pos.z, rotx, roty, rotz) lines.append(line) + lines.append("end_procedural_roads\n") f = open("roads.out", 'w') f.writelines(lines) f.close() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-09-04 13:55:15
|
Revision: 170 http://roreditor.svn.sourceforge.net/roreditor/?rev=170&view=rev Author: rorthomas Date: 2007-09-04 06:55:01 -0700 (Tue, 04 Sep 2007) Log Message: ----------- * removed mappixelerror-fix Modified Paths: -------------- trunk/lib_common/ror/terrainparser.py Modified: trunk/lib_common/ror/terrainparser.py =================================================================== --- trunk/lib_common/ror/terrainparser.py 2007-09-04 11:55:33 UTC (rev 169) +++ trunk/lib_common/ror/terrainparser.py 2007-09-04 13:55:01 UTC (rev 170) @@ -4,276 +4,278 @@ from settingsManager import getSettingsManager class Object: - x = None - y = None - z = None - rotx = None - roty = None - rotz = None - name = "" - filename = "" - additionaloptions = [] - comments = [] - mayRotate = True - - error = None - - def setPosition(self, x, y, z): - self.x = x - self.y = y - self.z = z + x = None + y = None + z = None + rotx = None + roty = None + rotz = None + name = "" + filename = "" + additionaloptions = [] + comments = [] + mayRotate = True + + error = None + + def setPosition(self, x, y, z): + self.x = x + self.y = y + self.z = z - def setRotation(self, x, y, z): - self.rotx = x - self.roty = y - self.rotz = z - + def setRotation(self, x, y, z): + self.rotx = x + self.roty = y + self.rotz = z + class RoRTerrain: - filename = "" - TerrainName = "" - TerrainConfig = "" - filename = "" + filename = "" + TerrainName = "" + TerrainConfig = "" + filename = "" - trucks = [] - loads = [] - objects = [] - - UsingCaelum = False - WaterHeight = None - SkyColor = None - SkyColorLine = None - TruckStartPosition = None - CameraStartPosition = None - CharacterStartPosition = None + trucks = [] + loads = [] + objects = [] + + UsingCaelum = False + WaterHeight = None + SkyColor = None + SkyColorLine = None + TruckStartPosition = None + CameraStartPosition = None + CharacterStartPosition = None - def saveFile(self, filename, lines): - f = open(filename, 'w') - f.writelines(lines) - f.close() - - def loadFile(self,filename): - f=open(filename, 'r') - content = f.readlines() - f.close() - return content - - def __init__(self, filename): - self.filename = filename - content = self.loadFile(filename) - self.trucks = [] - self.loads = [] - self.objects = [] - log().info("processing terrain file: %s" % filename) - self.processTerrnFile(content) - self.FixTerrainConfig(os.path.join(os.path.dirname(filename), self.TerrainConfig)) - log().info("processing of terrain finished!") + def saveFile(self, filename, lines): + f = open(filename, 'w') + f.writelines(lines) + f.close() + + def loadFile(self,filename): + f=open(filename, 'r') + content = f.readlines() + f.close() + return content + + def __init__(self, filename): + self.filename = filename + content = self.loadFile(filename) + self.trucks = [] + self.loads = [] + self.objects = [] + log().info("processing terrain file: %s" % filename) + self.processTerrnFile(content) + #self.FixTerrainConfig(os.path.join(os.path.dirname(filename), self.TerrainConfig)) + log().info("processing of terrain finished!") - def FixTerrainConfig(self, filename): - content = self.loadFile(filename) - for i in range(0, len(content)): - if content[i].lower().find("maxpixelerror") >= 0: - content[i] = "MaxPixelError=0\n" - log().info("fixed terrain's MaxPixelError - error") - break - self.saveFile(filename, content) - - def processTerrnFile(self, content): - linecounter = 0 - comm = [] - for i in range(0, len(content)): - # convert tabs to spaces! - content[i] = content[i].replace("\t", " ") - - if content[i].strip() == "": - comm.append(content[i]) - continue - if content[i].strip()[0:4] == "////": - # ignore editor self made comments (usefull for those error msgs) - continue - if content[i].strip()[0:2] == "//": - comm.append(content[i]) - continue - if content[i].strip()[0:1] == ";": - # bugfix wrong characters! - comm.append(content[i].replace(";","//")) - continue - if content[i].strip().lower() == "end": - continue - - # do not count empty or comment lines! - linecounter += 1 - if linecounter == 1: - #terrain name - self.TerrainName = content[i].strip() - continue - elif linecounter == 2: - # .cfg file - self.TerrainConfig = content[i].strip() - continue - if content[i].strip()[0].lower() == "w": - self.WaterHeight = float(content[i].strip()[2:]) - continue - if content[i].strip().lower() == "caelum": - self.UsingCaelum = True - continue - if linecounter < 10 and len(content[i].split(",")) == 3: - # sky color - sc = content[i].split(",") - self.SkyColor = (float(sc[0]), float(sc[1]), float(sc[2])) - self.SkyColorLine = content[i] - continue - if linecounter < 10 and len(content[i].split(",")) == 9 or len(content[i].split(",")) == 6: - # spawning Position - sp = content[i].split(",") - self.TruckStartPosition = [float(sp[0]), float(sp[1]), float(sp[2])] + def FixTerrainConfig(self, filename): + # this is deprecated! + return + content = self.loadFile(filename) + for i in range(0, len(content)): + if content[i].lower().find("maxpixelerror") >= 0: + content[i] = "MaxPixelError=0\n" + log().info("fixed terrain's MaxPixelError - error") + break + self.saveFile(filename, content) + + def processTerrnFile(self, content): + linecounter = 0 + comm = [] + for i in range(0, len(content)): + # convert tabs to spaces! + content[i] = content[i].replace("\t", " ") + + if content[i].strip() == "": + comm.append(content[i]) + continue + if content[i].strip()[0:4] == "////": + # ignore editor self made comments (usefull for those error msgs) + continue + if content[i].strip()[0:2] == "//": + comm.append(content[i]) + continue + if content[i].strip()[0:1] == ";": + # bugfix wrong characters! + comm.append(content[i].replace(";","//")) + continue + if content[i].strip().lower() == "end": + continue + + # do not count empty or comment lines! + linecounter += 1 + if linecounter == 1: + #terrain name + self.TerrainName = content[i].strip() + continue + elif linecounter == 2: + # .cfg file + self.TerrainConfig = content[i].strip() + continue + if content[i].strip()[0].lower() == "w": + self.WaterHeight = float(content[i].strip()[2:]) + continue + if content[i].strip().lower() == "caelum": + self.UsingCaelum = True + continue + if linecounter < 10 and len(content[i].split(",")) == 3: + # sky color + sc = content[i].split(",") + self.SkyColor = (float(sc[0]), float(sc[1]), float(sc[2])) + self.SkyColorLine = content[i] + continue + if linecounter < 10 and len(content[i].split(",")) == 9 or len(content[i].split(",")) == 6: + # spawning Position + sp = content[i].split(",") + self.TruckStartPosition = [float(sp[0]), float(sp[1]), float(sp[2])] - self.CameraStartPosition = [float(sp[3]), float(sp[4]), float(sp[5])] - if len(sp) == 9: - self.CharacterStartPosition = [float(sp[6]), float(sp[7]), float(sp[8])] - continue + self.CameraStartPosition = [float(sp[3]), float(sp[4]), float(sp[5])] + if len(sp) == 9: + self.CharacterStartPosition = [float(sp[6]), float(sp[7]), float(sp[8])] + continue - arr = content[i].split(",") - try: - x = float(arr[0]) - y = float(arr[1]) - z = float(arr[2]) - rx = float(arr[3]) - ry = float(arr[4]) - rz = float(arr[5]) - objname = (arr[6]).strip().split(" ") - except: - log().error("unable to parse line: %s. ignoring it!" % content[i]) - continue - - #print objname - if objname[0][0:5].lower() == "truck" and len(objname) > 1: - truck = Object() - truck.name = "truck" - truck.filename = objname[-1].strip() - truck.comments = comm - comm = [] - truck.setPosition(x, y, z) - truck.setRotation(rx, ry, -rz) - truck.additionaloptions = objname[1:] - #truck.mayRotate=False - self.trucks.append(truck) - continue - if objname[0][0:4] == "load" and len(objname) > 1: - load = Object() - load.name = "load" - load.filename = objname[-1].strip() - load.comments = comm - comm = [] - load.setPosition(x, y, z) - load.setRotation(rx, ry, -rz) - load.additionaloptions = objname[1:] - #load.mayRotate=False - self.loads.append(load) - continue - - # now it can just be an static object - objectname = objname[0].strip() - obj = Object() - obj.name = objectname - obj.filename = objectname - obj.comments = comm - comm = [] - obj.setPosition(x, y, z) - obj.setRotation(rx, ry, rz) - obj.additionaloptions = objname[1:] - self.objects.append(obj) + arr = content[i].split(",") + try: + x = float(arr[0]) + y = float(arr[1]) + z = float(arr[2]) + rx = float(arr[3]) + ry = float(arr[4]) + rz = float(arr[5]) + objname = (arr[6]).strip().split(" ") + except: + log().error("unable to parse line: %s. ignoring it!" % content[i]) + continue + + #print objname + if objname[0][0:5].lower() == "truck" and len(objname) > 1: + truck = Object() + truck.name = "truck" + truck.filename = objname[-1].strip() + truck.comments = comm + comm = [] + truck.setPosition(x, y, z) + truck.setRotation(rx, ry, -rz) + truck.additionaloptions = objname[1:] + #truck.mayRotate=False + self.trucks.append(truck) + continue + if objname[0][0:4] == "load" and len(objname) > 1: + load = Object() + load.name = "load" + load.filename = objname[-1].strip() + load.comments = comm + comm = [] + load.setPosition(x, y, z) + load.setRotation(rx, ry, -rz) + load.additionaloptions = objname[1:] + #load.mayRotate=False + self.loads.append(load) + continue + + # now it can just be an static object + objectname = objname[0].strip() + obj = Object() + obj.name = objectname + obj.filename = objectname + obj.comments = comm + comm = [] + obj.setPosition(x, y, z) + obj.setRotation(rx, ry, rz) + obj.additionaloptions = objname[1:] + self.objects.append(obj) - def getObjectLines(self, object): - lines = [] + def getObjectLines(self, object): + lines = [] - # add comments - if len(object.comments) > 0: - for comment in object.comments: - lines.append(comment) + # add comments + if len(object.comments) > 0: + for comment in object.comments: + lines.append(comment) - # construct objects name - objname = object.name - if len(object.additionaloptions) > 0: - tmp = (" " + " ".join(object.additionaloptions)).strip() - objname += " " + tmp - - # add line itself - linearray = [self.formatFloat(object.x), - self.formatFloat(object.y), - self.formatFloat(object.z), - self.formatFloat(object.rotx), - self.formatFloat(object.roty), - self.formatFloat(object.rotz), - objname] - line = ", ".join(linearray) - - if not object.error is None: - lines.append("//// the next object had errors, so the terraineditor commented it out:\n") - lines.append("//"+line.strip()+"\n") - else: - lines.append(line.strip()+"\n") - return lines - - def formatFloat(self, fl): - return "%12s" % ("%0.6f" % (float(fl))) - - - def save(self, filename = None): - if filename is None: - filename = self.filename - lines = [] - lines.append(self.TerrainName+"\n") - lines.append(self.TerrainConfig+"\n") - if not self.WaterHeight is None: - lines.append("w "+str(self.WaterHeight)+"\n") - if self.UsingCaelum: - lines.append("caelum\n") - lines.append(self.SkyColorLine.strip()+"\n") + # construct objects name + objname = object.name + if len(object.additionaloptions) > 0: + tmp = (" " + " ".join(object.additionaloptions)).strip() + objname += " " + tmp + + # add line itself + linearray = [self.formatFloat(object.x), + self.formatFloat(object.y), + self.formatFloat(object.z), + self.formatFloat(object.rotx), + self.formatFloat(object.roty), + self.formatFloat(object.rotz), + objname] + line = ", ".join(linearray) + + if not object.error is None: + lines.append("//// the next object had errors, so the terraineditor commented it out:\n") + lines.append("//"+line.strip()+"\n") + else: + lines.append(line.strip()+"\n") + return lines + + def formatFloat(self, fl): + return "%12s" % ("%0.6f" % (float(fl))) + + + def save(self, filename = None): + if filename is None: + filename = self.filename + lines = [] + lines.append(self.TerrainName+"\n") + lines.append(self.TerrainConfig+"\n") + if not self.WaterHeight is None: + lines.append("w "+str(self.WaterHeight)+"\n") + if self.UsingCaelum: + lines.append("caelum\n") + lines.append(self.SkyColorLine.strip()+"\n") - ar = [] - try: - ar.append(str(self.TruckStartPosition[0])) - ar.append(str(self.TruckStartPosition[1])) - ar.append(str(self.TruckStartPosition[2])) - except Exception, err: - log().error(str(err)) - try: - ar.append(str(self.CameraStartPosition[0])) - ar.append(str(self.CameraStartPosition[1])) - ar.append(str(self.CameraStartPosition[2])) - except Exception, err: - log().error(str(err)) - if not self.CharacterStartPosition is None: - try: - ar.append(str(self.CharacterStartPosition[0])) - ar.append(str(self.CharacterStartPosition[1])) - ar.append(str(self.CharacterStartPosition[2])) - except Exception, err: - log().error(str(err)) - startline = ", ".join(ar)+"\n" - lines.append(startline) + ar = [] + try: + ar.append(str(self.TruckStartPosition[0])) + ar.append(str(self.TruckStartPosition[1])) + ar.append(str(self.TruckStartPosition[2])) + except Exception, err: + log().error(str(err)) + try: + ar.append(str(self.CameraStartPosition[0])) + ar.append(str(self.CameraStartPosition[1])) + ar.append(str(self.CameraStartPosition[2])) + except Exception, err: + log().error(str(err)) + if not self.CharacterStartPosition is None: + try: + ar.append(str(self.CharacterStartPosition[0])) + ar.append(str(self.CharacterStartPosition[1])) + ar.append(str(self.CharacterStartPosition[2])) + except Exception, err: + log().error(str(err)) + startline = ", ".join(ar)+"\n" + lines.append(startline) - - #save trucks - for truck in self.trucks: - trucklines = self.getObjectLines(truck) - for l in trucklines: - lines.append(l) - # save loads - for load in self.loads: - loadlines = self.getObjectLines(load) - for l in loadlines: - lines.append(l) - - # save objects - for object in self.objects: - objectlines = self.getObjectLines(object) - for l in objectlines: - lines.append(l) + + #save trucks + for truck in self.trucks: + trucklines = self.getObjectLines(truck) + for l in trucklines: + lines.append(l) + # save loads + for load in self.loads: + loadlines = self.getObjectLines(load) + for l in loadlines: + lines.append(l) + + # save objects + for object in self.objects: + objectlines = self.getObjectLines(object) + for l in objectlines: + lines.append(l) - lines.append("end\n") - self.saveFile(filename, lines) - return True + lines.append("end\n") + self.saveFile(filename, lines) + return True - \ No newline at end of file + \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-09-04 11:55:36
|
Revision: 169 http://roreditor.svn.sourceforge.net/roreditor/?rev=169&view=rev Author: rorthomas Date: 2007-09-04 04:55:33 -0700 (Tue, 04 Sep 2007) Log Message: ----------- * added basic stub functions to be able to lay roads with the new format. simply click some path together on the terrain and then press b to get it saved to the file "roads.out" copy paste that content then into your .terrn file Modified Paths: -------------- trunk/lib_common/roreditor/RoRTerrainOgreWindow.py Modified: trunk/lib_common/roreditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRTerrainOgreWindow.py 2007-08-25 09:22:40 UTC (rev 168) +++ trunk/lib_common/roreditor/RoRTerrainOgreWindow.py 2007-09-04 11:55:33 UTC (rev 169) @@ -16,933 +16,1042 @@ # this class holds all the needed 3d data and also the underlying object data class Entry: - uuid = None - node = None - entity = None - data = None - manual = None - + uuid = None + node = None + entity = None + data = None + manual = None + class HistoryEntry: - uuid = None - Position = None - Rotation = None + uuid = None + Position = None + Rotation = None class MyDropTarget(wx.PyDropTarget): - def __init__(self, window): - wx.PyDropTarget.__init__(self) - self.do = wx.FileDataObject() - self.SetDataObject(self.do) + def __init__(self, window): + wx.PyDropTarget.__init__(self) + self.do = wx.FileDataObject() + self.SetDataObject(self.do) - def OnEnter(self, x, y, d): - print "OnEnter: %d, %d, %d\n" % (x, y, d) - return wx.DragCopy + def OnEnter(self, x, y, d): + print "OnEnter: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy - def OnDragOver(self, x, y, d): - print "OnDragOver: %d, %d, %d\n" % (x, y, d) - return wx.DragCopy + def OnDragOver(self, x, y, d): + print "OnDragOver: %d, %d, %d\n" % (x, y, d) + return wx.DragCopy - def OnLeave(self): - print "OnLeave\n" + def OnLeave(self): + print "OnLeave\n" - def OnDrop(self, x, y): - print "OnDrop: %d %d\n" % (x, y) - return True + def OnDrop(self, x, y): + print "OnDrop: %d %d\n" % (x, y) + return True - def OnData(self, x, y, d): - print "OnData: %d, %d, %d\n" % (x, y, d) - self.GetData() - print "%s\n" % self.do.GetFilenames() - return d - + def OnData(self, x, y, d): + print "OnData: %d, %d, %d\n" % (x, y, d) + self.GetData() + print "%s\n" % self.do.GetFilenames() + return d + class RoRTerrainOgreWindow(wxOgreWindow): - terrain = None - - commandhistory = [] - historypointer = 0 - - selectedEntry = None - selectedCoords = None - - currentStatusMsg = "" - - cameralandcollisionenabled = True - - entries = {} + terrain = None + + commandhistory = [] + historypointer = 0 + + selectedEntry = None + selectedCoords = None + + currentStatusMsg = "" + + cameralandcollisionenabled = True + + entries = {} - # movement related - keyPress = ogre.Vector3(0,0,0) - moveVector = ogre.Vector3(0,0,0) - virtualMoveNode = None - - # selection related - selectionMaterial = None - selectionMaterialAnimState = 0 + # movement related + keyPress = ogre.Vector3(0,0,0) + moveVector = ogre.Vector3(0,0,0) + virtualMoveNode = None + + # selection related + selectionMaterial = None + selectionMaterialAnimState = 0 - SelectedArrow = None - StartDragLeftX = (0,0) - StartDragLeftY = (0,0) - TranslationRotationMode = False - TranslateNode = None - RotateNode = None - stickCurrentObjectToGround = False - - - - def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", maininstance=None, **kwargs): - self.rordir = rordir - self.maininstance = maininstance - if not maininstance is None: - self.sceneManager = maininstance.sceneManager - self.parent = parent - self.size = size - self.kwargs = kwargs - self.ID = ID - wxOgreWindow.__init__(self, self.parent, self.ID, size = self.size, **self.kwargs) - myDrop = MyDropTarget(self) - self.SetDropTarget(myDrop) + SelectedArrow = None + StartDragLeftX = (0,0) + StartDragLeftY = (0,0) + TranslationRotationMode = False + TranslateNode = None + RotateNode = None + stickCurrentObjectToGround = False + + + + def __init__(self, parent, ID, size = wx.Size(200,200), rordir = "", maininstance=None, **kwargs): + self.rordir = rordir + self.maininstance = maininstance + if not maininstance is None: + self.sceneManager = maininstance.sceneManager + self.parent = parent + self.size = size + self.kwargs = kwargs + self.ID = ID + wxOgreWindow.__init__(self, self.parent, self.ID, size = self.size, **self.kwargs) + myDrop = MyDropTarget(self) + self.SetDropTarget(myDrop) - def CameraLandCollision(self, value): - self.cameralandcollisionenabled = value - - def animateSelection(self): - if not self.selectionMaterial is None: - self.selectionMaterialAnimState += 0.01 - if self.selectionMaterialAnimState >= 0.2: - self.selectionMaterialAnimState = - 0.2 - val = 0.8 + abs(self.selectionMaterialAnimState) - #print val - self.selectionMaterial.setDiffuse(1, 0.3, 0, val) - self.selectionMaterial.setSpecular(1, 0.3, 0, val) + def CameraLandCollision(self, value): + self.cameralandcollisionenabled = value + + def animateSelection(self): + if not self.selectionMaterial is None: + self.selectionMaterialAnimState += 0.01 + if self.selectionMaterialAnimState >= 0.2: + self.selectionMaterialAnimState = - 0.2 + val = 0.8 + abs(self.selectionMaterialAnimState) + #print val + self.selectionMaterial.setDiffuse(1, 0.3, 0, val) + self.selectionMaterial.setSpecular(1, 0.3, 0, val) - def OnFrameStarted(self): - if self.cameralandcollisionenabled: - self.cameraLandCollision() - self.animateSelection() - if not self.TranslateNode is None: - if self.selectedEntry: - if not self.selectedEntry.data.mayRotate and self.TranslationRotationMode: - self.TranslationRotationMode = False + def OnFrameStarted(self): + if self.cameralandcollisionenabled: + self.cameraLandCollision() + self.animateSelection() + if not self.TranslateNode is None: + if self.selectedEntry: + if not self.selectedEntry.data.mayRotate and self.TranslationRotationMode: + self.TranslationRotationMode = False - if self.TranslationRotationMode: - # rotation mode - self.TranslateNode.setScale(0,0,0) - self.RotateNode.setScale(self.arrowScale,self.arrowScale,self.arrowScale) - else: - # translation mode - self.TranslateNode.setScale(self.arrowScale,self.arrowScale,self.arrowScale) - self.RotateNode.setScale(0,0,0) - else: - self.TranslateNode.setScale(0,0,0) - self.RotateNode.setScale(0,0,0) - if not self.selectedCoords is None: - self.TerrainSelectNode.setScale(0.2,0.2,0.2) - else: - self.TerrainSelectNode.setScale(0,0,0) - - - #move cam a bit - if not self.moveVector is None: - """ DEBUG STATEMENTS - pos = self.moveVector - kp = self.keyPress - print "MV: %.3f %.3f %.3f\tKP: %.3f %.3f %.3f" % (pos.x,pos.y,pos.z,kp.x,kp.y,kp.z) - """ - self.moveVector += self.keyPress - self.camera.moveRelative(self.moveVector) - self.moveVector *= SLOW_DOWN_FACTOR # each iteration slow the movement down by some fator - if self.moveVector < self.moveVector.normalize()*LOW_SPEED_THRESHOLD: - self.moveVector *= 0 + if self.TranslationRotationMode: + # rotation mode + self.TranslateNode.setScale(0,0,0) + self.RotateNode.setScale(self.arrowScale,self.arrowScale,self.arrowScale) + else: + # translation mode + self.TranslateNode.setScale(self.arrowScale,self.arrowScale,self.arrowScale) + self.RotateNode.setScale(0,0,0) + else: + self.TranslateNode.setScale(0,0,0) + self.RotateNode.setScale(0,0,0) + if not self.selectedCoords is None: + self.TerrainSelectNode.setScale(0.2,0.2,0.2) + else: + self.TerrainSelectNode.setScale(0,0,0) + + + #move cam a bit + if not self.moveVector is None: + """ DEBUG STATEMENTS + pos = self.moveVector + kp = self.keyPress + print "MV: %.3f %.3f %.3f\tKP: %.3f %.3f %.3f" % (pos.x,pos.y,pos.z,kp.x,kp.y,kp.z) + """ + self.moveVector += self.keyPress + self.camera.moveRelative(self.moveVector) + self.moveVector *= SLOW_DOWN_FACTOR # each iteration slow the movement down by some fator + if self.moveVector < self.moveVector.normalize()*LOW_SPEED_THRESHOLD: + self.moveVector *= 0 - def OnFrameEnded(self): - pass - - - def cameraLandCollision(self): - try: - camPos = self.camera.getPosition() - cameraRay = ogre.Ray(ogre.Vector3(camPos.x, 5000, camPos.z), ogre.Vector3.NEGATIVE_UNIT_Y) - self.terrainRaySceneQuery.setRay(cameraRay) - #Perform the scene query - result = self.terrainRaySceneQuery.execute() - if len(result) > 0 and not result[0] is None and not result[0].worldFragment is None: - terrainHeight = result[0].worldFragment.singleIntersection.y - if ((terrainHeight + 1) > camPos.y): - self.camera.setPosition(camPos.x, terrainHeight + 1, camPos.z) - except: - pass + def OnFrameEnded(self): + pass + + + def cameraLandCollision(self): + try: + camPos = self.camera.getPosition() + cameraRay = ogre.Ray(ogre.Vector3(camPos.x, 5000, camPos.z), ogre.Vector3.NEGATIVE_UNIT_Y) + self.terrainRaySceneQuery.setRay(cameraRay) + #Perform the scene query + result = self.terrainRaySceneQuery.execute() + if len(result) > 0 and not result[0] is None and not result[0].worldFragment is None: + terrainHeight = result[0].worldFragment.singleIntersection.y + if ((terrainHeight + 1) > camPos.y): + self.camera.setPosition(camPos.x, terrainHeight + 1, camPos.z) + except: + pass - - def SceneInitialisation(self): - hasparent = (not self.sceneManager is None) - if not hasparent: - addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] - # only init things in the main window, not in shared ones! - # setup resources - for r in addresources: - ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) + + def SceneInitialisation(self): + hasparent = (not self.sceneManager is None) + if not hasparent: + addresources = [self.rordir+"\\data\\terrains",self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] + # only init things in the main window, not in shared ones! + # setup resources + for r in addresources: + ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() - #get the scenemanager - self.sceneManager = getOgreManager().createSceneManager(ogre.ST_EXTERIOR_CLOSE) - else: - self.terrain = self.maininstance.terrain - # create a camera - cameraUUID = randomID() - self.camera = self.sceneManager.createCamera(str(cameraUUID)+"camera") - self.camera.lookAt(ogre.Vector3(0, 0, 0)) - self.camera.setPosition(ogre.Vector3(0, 0, 100)) - - # dont set this too low, or you will get z-fights!! - self.camera.nearClipDistance = 2 - self.camera.setAutoAspectRatio(True) + #get the scenemanager + self.sceneManager = getOgreManager().createSceneManager(ogre.ST_EXTERIOR_CLOSE) + else: + self.terrain = self.maininstance.terrain + # create a camera + cameraUUID = randomID() + self.camera = self.sceneManager.createCamera(str(cameraUUID)+"camera") + self.camera.lookAt(ogre.Vector3(0, 0, 0)) + self.camera.setPosition(ogre.Vector3(0, 0, 100)) + + # dont set this too low, or you will get z-fights!! + self.camera.nearClipDistance = 2 + self.camera.setAutoAspectRatio(True) - # create the Viewport" - self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) - self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) + # create the Viewport" + self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) + self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) - #set some default values - self.sceneDetailIndex = 0 - self.filtering = ogre.TFO_BILINEAR + #set some default values + self.sceneDetailIndex = 0 + self.filtering = ogre.TFO_BILINEAR - # bind mouse and keyboard - self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) - self.Bind(wx.EVT_KEY_UP, self.onKeyUp) - self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) + # bind mouse and keyboard + self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) + self.Bind(wx.EVT_KEY_UP, self.onKeyUp) + self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) - self.virtualMoveNode = self.sceneManager.getRootSceneNode().createChildSceneNode() - - # this is for debugging of the grid system: - #self.virtualMoveNode.attachObject(self.sceneManager.createEntity("afsdfsdfsfsdfsdfasdf", "arrow.mesh") ) + + self.spline = ogre.SimpleSpline() + # some spline material + mat = ogre.MaterialManager.getSingleton().create("matline","debugger") + mat.setReceiveShadows(False) + mat.getTechnique(0).setLightingEnabled(True) + mat.getTechnique(0).getPass(0).setDiffuse(0,1,1,0) + mat.getTechnique(0).getPass(0).setAmbient(0,1,1) + mat.getTechnique(0).getPass(0).setSelfIllumination(0,1,1) - #create objects - self.populateScene() - + mat = ogre.MaterialManager.getSingleton().create("matline_ideal","debugger") + mat.setReceiveShadows(False) + mat.getTechnique(0).setLightingEnabled(True) + mat.getTechnique(0).getPass(0).setDiffuse(0,1,0,0) + mat.getTechnique(0).getPass(0).setAmbient(0,1,0) + mat.getTechnique(0).getPass(0).setSelfIllumination(0,1,0) - def updateWaterPlane(self): - self.waternode.setPosition(1500, self.terrain.WaterHeight + 200, 1500) - - def createWaterPlane(self): - if self.terrain.WaterHeight is None: - return - plane = ogre.Plane() - plane.normal = ogre.Vector3(0, 1, 0) - plane.d = 200 - # see http://www.ogre3d.org/docs/api/html/classOgre_1_1MeshManager.html#Ogre_1_1MeshManagera5 - waterid = str(randomID()) - mesh = ogre.MeshManager.getSingleton().createPlane(waterid+'WaterPlane', "General", plane, 3000, 3000, - 20, 20, True, 1, 200.0, 200.0, ogre.Vector3(0, 0, 1), - ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, - ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, - True, True) - self.waterentity = self.sceneManager.createEntity(waterid+"entity", waterid+'WaterPlane') - self.waterentity.setMaterialName('mysimple/water') - - self.waternode = self.sceneManager.getRootSceneNode().createChildSceneNode() - self.waternode.attachObject(self.waterentity) - self.updateWaterPlane() - + mat = ogre.MaterialManager.getSingleton().create("matline_real","debugger") + mat.setReceiveShadows(False) + mat.getTechnique(0).setLightingEnabled(True) + mat.getTechnique(0).getPass(0).setDiffuse(1,0,0,0) + mat.getTechnique(0).getPass(0).setAmbient(1,0,0) + mat.getTechnique(0).getPass(0).setSelfIllumination(1,0,0) - def getSelectionPositionRotation(self): - if not self.selectedEntry is None: - return self.getPositionRotation(self.selectedEntry.node) - - def getPositionRotation(self, obj): - scale = obj.getScale() - obj.setScale(1, 1, 1) - obj.rotate(ogre.Vector3.UNIT_X, ogre.Degree(90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - pos = obj.getPosition() - rot = obj.getOrientation() - rot.normalise() - obj.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - obj.setScale(scale) + # init lines + self.line = [] + self.linenode = [] + for i in range(0, 10): + self.line.append(self.sceneManager.createManualObject("lineobj"+str(i))) + self.line[i].setCastShadows(False) + self.line[i].setDynamic(True) + self.linenode.append(self.sceneManager.getRootSceneNode().createChildSceneNode()) + self.linenode[i].attachObject(self.line[i]) + + self.virtualMoveNode = self.sceneManager.getRootSceneNode().createChildSceneNode() + + # this is for debugging of the grid system: + #self.virtualMoveNode.attachObject(self.sceneManager.createEntity("afsdfsdfsfsdfsdfasdf", "arrow.mesh") ) - rotx = ogre.Radian(rot.getPitch(False)).valueDegrees() - roty = ogre.Radian(rot.getRoll(False)).valueDegrees() - rotz = -ogre.Radian(rot.getYaw(False)).valueDegrees() - return pos.x, pos.y, pos.z, rotx, roty, rotz - - def reattachArrows(self, entity): - self.TranslateNode.setPosition(entity.getParentNode().getPosition()) - #self.TranslateNode.setOrientation(entity.getParentNode().getOrientation()) - - self.RotateNode.setOrientation(entity.getParentNode().getOrientation()) - self.RotateNode.setPosition(entity.getParentNode().getPosition()) - - self.virtualMoveNode.setOrientation(entity.getParentNode().getOrientation()) - self.virtualMoveNode.setPosition(entity.getParentNode().getPosition()) - - def createArrows(self): - if not self.TranslateNode is None: - return - #translation nodes - n = self.sceneManager.getRootSceneNode().createChildSceneNode("movearrowsnode") - nx = n.createChildSceneNode("movearrowsnodeX") - ex = self.sceneManager.createEntity("movearrowsX", "arrow.mesh") - ex.setMaterialName("mysimple/transred") - nx.attachObject(ex) + #create objects + self.populateScene() + - ny = n.createChildSceneNode("movearrowsnodeY") - ey = self.sceneManager.createEntity("movearrowsY", "arrow.mesh") - ey.setMaterialName("mysimple/transgreen") - ny.attachObject(ey) - ny.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + def updateWaterPlane(self): + self.waternode.setPosition(1500, self.terrain.WaterHeight + 200, 1500) + + def createWaterPlane(self): + if self.terrain.WaterHeight is None: + return + plane = ogre.Plane() + plane.normal = ogre.Vector3(0, 1, 0) + plane.d = 200 + # see http://www.ogre3d.org/docs/api/html/classOgre_1_1MeshManager.html#Ogre_1_1MeshManagera5 + waterid = str(randomID()) + mesh = ogre.MeshManager.getSingleton().createPlane(waterid+'WaterPlane', "General", plane, 3000, 3000, + 20, 20, True, 1, 200.0, 200.0, ogre.Vector3(0, 0, 1), + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + True, True) + self.waterentity = self.sceneManager.createEntity(waterid+"entity", waterid+'WaterPlane') + self.waterentity.setMaterialName('mysimple/water') + + self.waternode = self.sceneManager.getRootSceneNode().createChildSceneNode() + self.waternode.attachObject(self.waterentity) + self.updateWaterPlane() + - nz = n.createChildSceneNode("movearrowsnodeZ") - ez = self.sceneManager.createEntity("movearrowsZ", "arrow.mesh") - ez.setMaterialName("mysimple/transblue") - nz.attachObject(ez) - nz.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + def getSelectionPositionRotation(self): + if not self.selectedEntry is None: + return self.getPositionRotation(self.selectedEntry.node) + + def getPositionRotation(self, obj): + scale = obj.getScale() + obj.setScale(1, 1, 1) + obj.rotate(ogre.Vector3.UNIT_X, ogre.Degree(90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + pos = obj.getPosition() + rot = obj.getOrientation() + rot.normalise() + obj.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + obj.setScale(scale) - #rotation nodes - nr = self.sceneManager.getRootSceneNode().createChildSceneNode("rotatearrowsnode") - nrx = nr.createChildSceneNode("rotatearrowsnodeX") - erx = self.sceneManager.createEntity("rotatearrowsX", "roundarrow.mesh") - erx.setMaterialName("mysimple/transblue") - nrx.rotate(ogre.Vector3.UNIT_X, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - nrx.attachObject(erx) - nrx.setInheritOrientation(True) + rotx = ogre.Radian(rot.getPitch(False)).valueDegrees() + roty = ogre.Radian(rot.getRoll(False)).valueDegrees() + rotz = -ogre.Radian(rot.getYaw(False)).valueDegrees() + return pos.x, pos.y, pos.z, rotx, roty, rotz + + def reattachArrows(self, entity): + self.TranslateNode.setPosition(entity.getParentNode().getPosition()) + #self.TranslateNode.setOrientation(entity.getParentNode().getOrientation()) + + self.RotateNode.setOrientation(entity.getParentNode().getOrientation()) + self.RotateNode.setPosition(entity.getParentNode().getPosition()) + + self.virtualMoveNode.setOrientation(entity.getParentNode().getOrientation()) + self.virtualMoveNode.setPosition(entity.getParentNode().getPosition()) + + def createArrows(self): + if not self.TranslateNode is None: + return + #translation nodes + n = self.sceneManager.getRootSceneNode().createChildSceneNode("movearrowsnode") + nx = n.createChildSceneNode("movearrowsnodeX") + ex = self.sceneManager.createEntity("movearrowsX", "arrow.mesh") + ex.setMaterialName("mysimple/transred") + nx.attachObject(ex) - nry = nr.createChildSceneNode("rotatearrowsnodeY") - ery = self.sceneManager.createEntity("rotatearrowsY", "roundarrow.mesh") - nry.rotate(ogre.Vector3.UNIT_X, ogre.Degree(180).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - nry.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - ery.setMaterialName("mysimple/transred") - nry.setInheritOrientation(True) - nry.attachObject(ery) + ny = n.createChildSceneNode("movearrowsnodeY") + ey = self.sceneManager.createEntity("movearrowsY", "arrow.mesh") + ey.setMaterialName("mysimple/transgreen") + ny.attachObject(ey) + ny.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - nrz = nr.createChildSceneNode("rotatearrowsnodeZ") - erz = self.sceneManager.createEntity("rotatearrowsZ", "roundarrow.mesh") - erz.setMaterialName("mysimple/transgreen") - nrz.setInheritOrientation(True) - nrz.attachObject(erz) - - # terrain selection node - nt = self.sceneManager.getRootSceneNode().createChildSceneNode("terrainselectnode") - et = self.sceneManager.createEntity("circlepointer", "cylinder.mesh") - et.setMaterialName("mysimple/terrainselect") - nt.rotate(ogre.Vector3.UNIT_X, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - nt.attachObject(et) - nt.setScale(5,5,5) - - self.TerrainSelectNode = nt - self.TranslateNode = n - self.RotateNode = nr - n.setPosition(0,0,0) - nr.setPosition(0,0,0) + nz = n.createChildSceneNode("movearrowsnodeZ") + ez = self.sceneManager.createEntity("movearrowsZ", "arrow.mesh") + ez.setMaterialName("mysimple/transblue") + nz.attachObject(ez) + nz.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - def deselectSelection(self): - if self.selectedEntry: - #self.selectedEntry.entity.getSubEntity(0).setMaterialName(self.oldmaterial) - self.selectedEntry.entity.setMaterialName(self.oldmaterial) - self.selectedEntry.entity.getParentSceneNode().showBoundingBox(False) - - - def changeSelection(self, newnode): - self.deselectSelection() - key = newnode.getName()[:-len("entity")] - self.selectedEntry = self.entries[key] - - self.oldmaterial = self.selectedEntry.entity.getSubEntity(0).getMaterialName() - - - newmatname = "mysimple/selectedobject" - selectedmat = ogre.MaterialManager.getSingleton().getByName(newmatname) - mat = ogre.MaterialManager.getSingleton().getByName(self.selectedEntry.entity.getSubEntity(0).getMaterialName()) - if not mat is None: - mat.copyDetailsTo(selectedmat) - newmat = ogre.MaterialManager.getSingleton().getByName(newmatname) - newmat.setSceneBlending(ogre.SceneBlendFactor.SBF_SOURCE_ALPHA, ogre.SceneBlendFactor.SBF_DEST_ALPHA ) - newmat.setSelfIllumination(1, 0.3, 0) - newmat.setDiffuse(1, 0.3, 0, 0.9) - newmat.setAmbient(1, 0.3, 0) - newmat.setSpecular(1, 0.3, 0, 0.9) - self.selectionMaterial = newmat - #self.selectedEntry.entity.getSubEntity(0).setMaterialName(snewmatname) - self.selectedEntry.entity.setMaterialName(newmatname) - self.selectedEntry.entity.getParentSceneNode().showBoundingBox(True) - self.reattachArrows(self.selectedEntry.entity) - self.arrowScale = self.selectedEntry.entity.getBoundingRadius() / 100 + #rotation nodes + nr = self.sceneManager.getRootSceneNode().createChildSceneNode("rotatearrowsnode") + nrx = nr.createChildSceneNode("rotatearrowsnodeX") + erx = self.sceneManager.createEntity("rotatearrowsX", "roundarrow.mesh") + erx.setMaterialName("mysimple/transblue") + nrx.rotate(ogre.Vector3.UNIT_X, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + nrx.attachObject(erx) + nrx.setInheritOrientation(True) - def free(self): - #self.sceneManager.clearScene() - self.sceneManager.destroyAllManualObjects() - - # try to clear things up - #try: - for key in self.entries.keys(): - entry = self.entries[key] - if not entry.node is None: - try: - entry.node.detachAllObjects() - self.sceneManager.destroySceneNode(entry.node.getName()) - except: - pass - if not entry.entity is None: - try: - self.sceneManager.destroyEntity(entry.entity) - except: - pass - if not entry.data is None: - del entry.data - del self.entries[key] - - - try: - self.waternode.detachAllObjects() - self.sceneManager.destroySceneNode(self.waternode) - self.sceneManager.destroyEntity(self.waterentity) - except: - pass - - self.terrain = None - self.entries = {} - #except: - # pass - - def updateDataStructures(self): - for uuid in self.entries.keys(): - entry = self.entries[uuid] - x, y, z, rotx, roty, rotz = self.getPositionRotation(entry.node) - if entry.data.name.lower() in ['truck', 'load']: - rotx -= 90 - entry.data.setPosition(x, y, z) - entry.data.setRotation(rotx, roty, rotz) - - def SaveTerrain(self, fn = None): - self.updateDataStructures() - if not self.terrain is None: - res = self.terrain.save(fn) - self.currentStatusMsg = "Terrain saved!" - return res + nry = nr.createChildSceneNode("rotatearrowsnodeY") + ery = self.sceneManager.createEntity("rotatearrowsY", "roundarrow.mesh") + nry.rotate(ogre.Vector3.UNIT_X, ogre.Degree(180).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + nry.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + ery.setMaterialName("mysimple/transred") + nry.setInheritOrientation(True) + nry.attachObject(ery) - - def LoadTerrain(self, filename): - if not self.terrain is None: - self.free() - #print filename - self.terrain = RoRTerrain(filename) - #print len(self.terrain.objects) + nrz = nr.createChildSceneNode("rotatearrowsnodeZ") + erz = self.sceneManager.createEntity("rotatearrowsZ", "roundarrow.mesh") + erz.setMaterialName("mysimple/transgreen") + nrz.setInheritOrientation(True) + nrz.attachObject(erz) + + # terrain selection node + nt = self.sceneManager.getRootSceneNode().createChildSceneNode("terrainselectnode") + et = self.sceneManager.createEntity("circlepointer", "cylinder.mesh") + et.setMaterialName("mysimple/terrainselect") + nt.rotate(ogre.Vector3.UNIT_X, ogre.Degree(90).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + nt.attachObject(et) + nt.setScale(5,5,5) + + self.TerrainSelectNode = nt + self.TranslateNode = n + self.RotateNode = nr + n.setPosition(0,0,0) + nr.setPosition(0,0,0) - cfgfile = os.path.join(os.path.dirname(filename), self.terrain.TerrainConfig) - self.sceneManager.setWorldGeometry(cfgfile) + def deselectSelection(self): + if self.selectedEntry: + #self.selectedEntry.entity.getSubEntity(0).setMaterialName(self.oldmaterial) + self.selectedEntry.entity.setMaterialName(self.oldmaterial) + self.selectedEntry.entity.getParentSceneNode().showBoundingBox(False) + + + def changeSelection(self, newnode): + self.deselectSelection() + key = newnode.getName()[:-len("entity")] + self.selectedEntry = self.entries[key] + + self.oldmaterial = self.selectedEntry.entity.getSubEntity(0).getMaterialName() + + + newmatname = "mysimple/selectedobject" + selectedmat = ogre.MaterialManager.getSingleton().getByName(newmatname) + mat = ogre.MaterialManager.getSingleton().getByName(self.selectedEntry.entity.getSubEntity(0).getMaterialName()) + if not mat is None: + mat.copyDetailsTo(selectedmat) + newmat = ogre.MaterialManager.getSingleton().getByName(newmatname) + newmat.setSceneBlending(ogre.SceneBlendFactor.SBF_SOURCE_ALPHA, ogre.SceneBlendFactor.SBF_DEST_ALPHA ) + newmat.setSelfIllumination(1, 0.3, 0) + newmat.setDiffuse(1, 0.3, 0, 0.9) + newmat.setAmbient(1, 0.3, 0) + newmat.setSpecular(1, 0.3, 0, 0.9) + self.selectionMaterial = newmat + #self.selectedEntry.entity.getSubEntity(0).setMaterialName(snewmatname) + self.selectedEntry.entity.setMaterialName(newmatname) + self.selectedEntry.entity.getParentSceneNode().showBoundingBox(True) + self.reattachArrows(self.selectedEntry.entity) + self.arrowScale = self.selectedEntry.entity.getBoundingRadius() / 100 - self.createWaterPlane() - self.createArrows() - try: - if not self.terrain.CharacterStartPosition is None: - self.camera.setPosition(self.terrain.CharacterStartPosition) - else: - self.camera.setPosition(self.terrain.CameraStartPosition) - except Exception, err: - log().error("Error while setting initial camera:") - log().error(str(err)) - - for truck in self.terrain.trucks: - try: - self.addTruckToTerrain(data=truck) - except Exception, err: - log().error("Error while adding a truck to the terrain:") - log().error(str(err)) + def free(self): + #self.sceneManager.clearScene() + self.sceneManager.destroyAllManualObjects() + + # try to clear things up + #try: + for key in self.entries.keys(): + entry = self.entries[key] + if not entry.node is None: + try: + entry.node.detachAllObjects() + self.sceneManager.destroySceneNode(entry.node.getName()) + except: + pass + if not entry.entity is None: + try: + self.sceneManager.destroyEntity(entry.entity) + except: + pass + if not entry.data is None: + del entry.data + del self.entries[key] + + + try: + self.waternode.detachAllObjects() + self.sceneManager.destroySceneNode(self.waternode) + self.sceneManager.destroyEntity(self.waterentity) + except: + pass + + self.terrain = None + self.entries = {} + #except: + # pass + + def updateDataStructures(self): + for uuid in self.entries.keys(): + entry = self.entries[uuid] + x, y, z, rotx, roty, rotz = self.getPositionRotation(entry.node) + if entry.data.name.lower() in ['truck', 'load']: + rotx -= 90 + entry.data.setPosition(x, y, z) + entry.data.setRotation(rotx, roty, rotz) + + def SaveTerrain(self, fn = None): + self.updateDataStructures() + if not self.terrain is None: + res = self.terrain.save(fn) + self.currentStatusMsg = "Terrain saved!" + return res - for load in self.terrain.loads: - try: - self.addTruckToTerrain(data=load) - except Exception, err: - log().error("Error while adding a load to the terrain:") - log().error(str(err)) + + def LoadTerrain(self, filename): + if not self.terrain is None: + self.free() + #print filename + self.terrain = RoRTerrain(filename) + #print len(self.terrain.objects) - for object in self.terrain.objects: - try: - self.addObjectToTerrain(data=object) - except Exception, err: - log().error("Error while adding an object to the terrain:") - log().error(str(err)) + cfgfile = os.path.join(os.path.dirname(filename), self.terrain.TerrainConfig) + self.sceneManager.setWorldGeometry(cfgfile) - self.currentStatusMsg = "Terrain loaded" - - def addObjectToTerrain(self, data=None, odefFilename=None, coords=None): - if coords is None: - coords = self.selectedCoords - if coords is None and data is None: - return False + self.createWaterPlane() + self.createArrows() + try: + if not self.terrain.CharacterStartPosition is None: + self.camera.setPosition(self.terrain.CharacterStartPosition) + else: + self.camera.setPosition(self.terrain.CameraStartPosition) + except Exception, err: + log().error("Error while setting initial camera:") + log().error(str(err)) + + for truck in self.terrain.trucks: + try: + self.addTruckToTerrain(data=truck) + except Exception, err: + log().error("Error while adding a truck to the terrain:") + log().error(str(err)) - uuid = randomID() + for load in self.terrain.loads: + try: + self.addTruckToTerrain(data=load) + except Exception, err: + log().error("Error while adding a load to the terrain:") + log().error(str(err)) - if data is None: - data = Object() - data.name = os.path.basename(odefFilename).split(".")[0] - data.filename = os.path.basename(odefFilename).split(".")[0] - data.comments = ['// added by terrain editor\n'] - data.setPosition(coords.x, coords.y, coords.z) - data.setRotation(0, 0, 0) - data.additionaloptions =[] - self.terrain.objects.append(data) - else: - odefFilename = data.filename + for object in self.terrain.objects: + try: + self.addObjectToTerrain(data=object) + except Exception, err: + log().error("Error while adding an object to the terrain:") + log().error(str(err)) - if os.path.basename(odefFilename) == odefFilename: - if odefFilename[-5:] != ".odef": - odefFilename += ".odef" - odefFilename = self.rordir + "\\data\\objects\\"+odefFilename - - meshname = None - try: - meshname, sx, sy, sz, ismovable, boxes = loadOdef(odefFilename) - except Exception, err: - data.error=True - log().error("error while processing odef file %s" % odefFilename) - log().error(str(err)) - return - - entry = Entry() - entry.uuid = uuid - entry.node = self.sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") - entry.entity = self.sceneManager.createEntity(str(uuid)+"entity", meshname) - entry.data = data - - entry.node.attachObject(entry.entity) - entry.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - entry.node.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(data.rotz).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - entry.node.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(data.roty).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - entry.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(data.rotx).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - entry.node.setPosition(data.x, data.y, data.z) - if not sx is None: - entry.node.setScale(sx, sy, sz) - - self.entries[uuid] = entry - return True + self.currentStatusMsg = "Terrain loaded" + + def addObjectToTerrain(self, data=None, odefFilename=None, coords=None): + if coords is None: + coords = self.selectedCoords + if coords is None and data is None: + return False - def addTruckToTerrain(self, data=None, truckFilename=None, coords=None): - if coords is None: - coords = self.selectedCoords - if coords is None and data is None: - return False + uuid = randomID() - uuid = randomID() + if data is None: + data = Object() + data.name = os.path.basename(odefFilename).split(".")[0] + data.filename = os.path.basename(odefFilename).split(".")[0] + data.comments = ['// added by terrain editor\n'] + data.setPosition(coords.x, coords.y, coords.z) + data.setRotation(0, 0, 0) + data.additionaloptions =[] + self.terrain.objects.append(data) + else: + odefFilename = data.filename - if data is None: - data = Object() - data.name = truckFilename.split(".")[-1] # truck or load - data.filename = os.path.basename(truckFilename) - data.comments = ['// added by terrain editor\n'] - data.setPosition(coords.x, coords.y, coords.z) - data.setRotation(0, 0, 0) - data.additionaloptions =[data.filename] - if truckFilename.split(".")[-1].lower() == "truck": - self.terrain.trucks.append(data) - elif truckFilename.split(".")[-1].lower() == "load": - self.terrain.loads.append(data) - else: - truckFilename = data.filename + if os.path.basename(odefFilename) == odefFilename: + if odefFilename[-5:] != ".odef": + odefFilename += ".odef" + odefFilename = self.rordir + "\\data\\objects\\"+odefFilename + + meshname = None + try: + meshname, sx, sy, sz, ismovable, boxes = loadOdef(odefFilename) + except Exception, err: + data.error=True + log().error("error while processing odef file %s" % odefFilename) + log().error(str(err)) + return + + entry = Entry() + entry.uuid = uuid + entry.node = self.sceneManager.getRootSceneNode().createChildSceneNode(str(uuid)+"node") + entry.entity = self.sceneManager.createEntity(str(uuid)+"entity", meshname) + entry.data = data + + entry.node.attachObject(entry.entity) + entry.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + entry.node.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(data.rotz).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + entry.node.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(data.roty).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + entry.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(data.rotx).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + entry.node.setPosition(data.x, data.y, data.z) + if not sx is None: + entry.node.setScale(sx, sy, sz) + + self.entries[uuid] = entry + return True - if os.path.basename(truckFilename) == truckFilename: - truckFilename = self.rordir + "\\data\\trucks\\"+truckFilename - - entry = Entry() - entry.uuid = uuid - entry.node, entry.entity, entry.manualobject = createTruckMesh(self.sceneManager, truckFilename, uuid) - entry.data = data - - entry.node.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(data.rotz).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - entry.node.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(data.roty).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - entry.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(data.rotx).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - entry.node.setPosition(data.x, data.y, data.z) - self.entries[uuid] = entry - return True + def addTruckToTerrain(self, data=None, truckFilename=None, coords=None): + if coords is None: + coords = self.selectedCoords + if coords is None and data is None: + return False + uuid = randomID() + if data is None: + data = Object() + data.name = truckFilename.split(".")[-1] # truck or load + data.filename = os.path.basename(truckFilename) + data.comments = ['// added by terrain editor\n'] + data.setPosition(coords.x, coords.y, coords.z) + data.setRotation(0, 0, 0) + data.additionaloptions =[data.filename] + if truckFilename.split(".")[-1].lower() == "truck": + self.terrain.trucks.append(data) + elif truckFilename.split(".")[-1].lower() == "load": + self.terrain.loads.append(data) + else: + truckFilename = data.filename - def getPointedPosition(self, event): - x, y = event.GetPosition() - width, height, a, b, c = self.renderWindow.getMetrics() - mouseRay = self.camera.getCameraToViewportRay((x / float(width)), (y / float(height))); - myRaySceneQuery = self.sceneManager.createRayQuery(ogre.Ray()); - myRaySceneQuery.setRay(mouseRay) - result = myRaySceneQuery.execute() - if len(result) > 0 and not result[0] is None and not result[0].worldFragment is None: - return result[0].worldFragment.singleIntersection - return None - + if os.path.basename(truckFilename) == truckFilename: + truckFilename = self.rordir + "\\data\\trucks\\"+truckFilename + + entry = Entry() + entry.uuid = uuid + entry.node, entry.entity, entry.manualobject = createTruckMesh(self.sceneManager, truckFilename, uuid) + entry.data = data + + entry.node.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(data.rotz).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + entry.node.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(data.roty).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + entry.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(data.rotx).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) + entry.node.setPosition(data.x, data.y, data.z) + self.entries[uuid] = entry + return True - def populateScene(self): - self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) - fadeColour = (0.8, 0.8, 0.8) - self.sceneManager.setFog(ogre.FOG_LINEAR, fadeColour, 0.001, 5000.0, 10000.0) - self.renderWindow.getViewport(0).BackgroundColour = fadeColour - #l = self.sceneManager.createLight(str(randomID())+"MainLight") - #l.setPosition(20,80,50) + def getPointedPosition(self, event): + x, y = event.GetPosition() + width, height, a, b, c = self.renderWindow.getMetrics() + mouseRay = self.camera.getCameraToViewportRay((x / float(width)), (y / float(height))); + myRaySceneQuery = self.sceneManager.createRayQuery(ogre.Ray()); + myRaySceneQuery.setRay(mouseRay) + result = myRaySceneQuery.execute() + if len(result) > 0 and not result[0] is None and not result[0].worldFragment is None: + return result[0].worldFragment.singleIntersection + return None + - #create ray template - self.selectionRaySceneQuery = self.sceneManager.createRayQuery(ogre.Ray()); - self.terrainRaySceneQuery = self.sceneManager.createRayQuery(ogre.Ray()); - - # setup the sky plane - plane = ogre.Plane() - plane.d = 5000 - plane.normal = -ogre.Vector3.UNIT_Y + def populateScene(self): + self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) - def toggleTranslationRotationMode(self): - self.TranslationRotationMode = not self.TranslationRotationMode + fadeColour = (0.8, 0.8, 0.8) + self.sceneManager.setFog(ogre.FOG_LINEAR, fadeColour, 0.001, 5000.0, 10000.0) + self.renderWindow.getViewport(0).BackgroundColour = fadeColour + + #l = self.sceneManager.createLight(str(randomID())+"MainLight") + #l.setPosition(20,80,50) + + #create ray template + self.selectionRaySceneQuery = self.sceneManager.createRayQuery(ogre.Ray()); + self.terrainRaySceneQuery = self.sceneManager.createRayQuery(ogre.Ray()); + + # setup the sky plane + plane = ogre.Plane() + plane.d = 5000 + plane.normal = -ogre.Vector3.UNIT_Y + + def toggleTranslationRotationMode(self): + self.TranslationRotationMode = not self.TranslationRotationMode - def StickVectorToGround(self, nPos): - nRay = ogre.Ray(ogre.Vector3(nPos.x, 5000, nPos.z), ogre.Vector3.NEGATIVE_UNIT_Y) - self.terrainRaySceneQuery.setRay(nRay) - #Perform the scene query - result = self.terrainRaySceneQuery.execute() - if len(result) > 0 and not result[0] is None and not result[0].worldFragment is None: - terrainHeight = result[0].worldFragment.singleIntersection.y - return ogre.Vector3(nPos.x, terrainHeight, nPos.z) - return nPos + def StickVectorToGround(self, nPos): + nRay = ogre.Ray(ogre.Vector3(nPos.x, 5000, nPos.z), ogre.Vector3.NEGATIVE_UNIT_Y) + self.terrainRaySceneQuery.setRay(nRay) + #Perform the scene query + result = self.terrainRaySceneQuery.execute() + if len(result) > 0 and not result[0] is None and not result[0].worldFragment is None: + terrainHeight = result[0].worldFragment.singleIntersection.y + return ogre.Vector3(nPos.x, terrainHeight, nPos.z) + return nPos - def ObjectResetRotation(self): - if self.selectedEntry: - self.selectedEntry.node.resetOrientation() - self.selectedEntry.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - self.RotateNode.resetOrientation() - self.RotateNode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - - def selectarrow(self, arrow): - if self.SelectedArrow.getSubEntity(0).getMaterialName()[-3:] != "sel": - self.SelectedArrow.setMaterialName(self.SelectedArrow.getSubEntity(0).getMaterialName()+"sel") - - def deselectarrow(self, arrow): - if self.SelectedArrow.getSubEntity(0).getMaterialName()[-3:] == "sel": - self.SelectedArrow.setMaterialName(self.SelectedArrow.getSubEntity(0).getMaterialName()[:-3]) - - def selectTerrain(self, event): - self.deselectSelection() - self.selectedEntry = None - self.selectedCoords = self.getPointedPosition(event) - self.selectedCoords += ogre.Vector3(0,1,0) - self.TerrainSelectNode.setPosition(self.selectedCoords) - - def selectnew(self, event): - x, y = event.GetPosition() - width, height, a, b, c = self.renderWindow.getMetrics() - mouseRay = self.camera.getCameraToViewportRay((x / float(width)), (y / float(height))); - self.selectionRaySceneQuery.setRay(mouseRay) - self.selectionRaySceneQuery.setSortByDistance(True) - result = self.selectionRaySceneQuery.execute() + def ObjectResetRotation(self): + if self.selectedEntry: + self.selectedEntry.node.resetOrientation() + self.selectedEntry.node.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + self.RotateNode.resetOrientation() + self.RotateNode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) + + def selectarrow(self, arrow): + if self.SelectedArrow.getSubEntity(0).getMaterialName()[-3:] != "sel": + self.SelectedArrow.setMaterialName(self.SelectedArrow.getSubEntity(0).getMaterialName()+"sel") + + def deselectarrow(self, arrow): + if self.SelectedArrow.getSubEntity(0).getMaterialName()[-3:] == "sel": + self.SelectedArrow.setMaterialName(self.SelectedArrow.getSubEntity(0).getMaterialName()[:-3]) + + def selectTerrain(self, event): + self.deselectSelection() + self.selectedEntry = None + self.selectedCoords = self.getPointedPosition(event) + self.selectedCoords += ogre.Vector3(0,1,0) + self.TerrainSelectNode.setPosition(self.selectedCoords) + + def selectnew(self, event): + x, y = event.GetPosition() + width, height, a, b, c = self.renderWindow.getMetrics() + mouseRay = self.camera.getCameraToViewportRay((x / float(width)), (y / float(height))); + self.selectionRaySceneQuery.setRay(mouseRay) + self.selectionRaySceneQuery.setSortByDistance(True) + result = self.selectionRaySceneQuery.execute() - #ensure that arrows are selected first, always! - for r in result: - if not r is None and not r.movable is None and r.movable.getMovableType() == "Entity": - if r.movable.getName() in ['movearrowsY', 'movearrowsX', 'movearrowsZ', 'rotatearrowsX', 'rotatearrowsY' ,'rotatearrowsZ']: - if not self.SelectedArrow is None: - self.deselectarrow(self.SelectedArrow) - self.SelectedArrow = r.movable - self.selectarrow(self.SelectedArrow) - return - selectedSomething = False - ignorearray = [] - ignorearray.append("circlepointer") - if not self.terrain.WaterHeight is None: - ignorearray.append(self.waterentity.getName()) - for r in result: - if not r is None and not r.movable is None and r.movable.getMovableType() == "Entity": - if r.movable.getName() in ignorearray: - # you cannot select these objects - continue - if not self.selectedEntry is None and self.selectedEntry.entity.getName() == r.movable.getName(): - continue - #print r.movable.getMovableType(), r.movable.getName() - if not self.SelectedArrow is None: - self.deselectarrow(self.SelectedArrow) - self.SelectedArrow = None - self.selectedCoords = None - selectedSomething = True - self.changeSelection(r.movable) - break - if not selectedSomething: - #print "no entities found, selecting ground" - self.selectTerrain(event) + #ensure that arrows are selected first, always! + for r in result: + if not r is None and not r.movable is None and r.movable.getMovableType() == "Entity": + if r.movable.getName() in ['movearrowsY', 'movearrowsX', 'movearrowsZ', 'rotatearrowsX', 'rotatearrowsY' ,'rotatearrowsZ']: + if not self.SelectedArrow is None: + self.deselectarrow(self.SelectedArrow) + self.SelectedArrow = r.movable + self.selectarrow(self.SelectedArrow) + return + selectedSomething = False + ignorearray = [] + ignorearray.append("circlepointer") + if not self.terrain.WaterHeight is None: + ignorearray.append(self.waterentity.getName()) + for r in result: + if not r is None and not r.movable is None and r.movable.getMovableType() == "Entity": + if r.movable.getName() in ignorearray: + # you cannot select these objects + continue + if not self.selectedEntry is None and self.selectedEntry.entity.getName() == r.movable.getName(): + continue + #print r.movable.getMovableType(), r.movable.getName() + if not self.SelectedArrow is None: + self.deselectarrow(self.SelectedArrow) + self.SelectedArrow = None + self.selectedCoords = None + selectedSomething = True + self.changeSelection(r.movable) + break + if not selectedSomething: + #print "no entities found, selecting ground" + self.selectTerrain(event) - def controlSelectedObject(self,action, value): - pass + def controlSelectedObject(self,action, value): + pass - def addObjectToHistory(self, entry): - if len(self.commandhistory) > 0: - if self.historypointer < len(self.commandhistory): - del self.commandhistory[self.historypointer:] + def addObjectToHistory(self, entry): + if len(self.commandhistory) > 0: + if self.historypointer < len(self.commandhistory): + del self.commandhistory[self.historypointer:] - pos = entry.node.getPosition() - rot = entry.node.getOrientation() - - if len(self.commandhistory) > 0: - # check if double - hentry = self.commandhistory[-1] - if hentry.position == pos and hentry.rotation == rot: - return - - hentry = HistoryEntry() - hentry.uuid = entry.uuid - hentry.position = pos - hentry.rotation = rot - self.commandhistory.append(hentry) - self.historypointer = len(self.commandhistory) + pos = entry.node.getPosition() + rot = entry.node.getOrientation() + + if len(self.commandhistory) > 0: + # check if double + hentry = self.commandhistory[-1] + if hentry.position == pos and hentry.rotation == rot: + return + + hentry = HistoryEntry() + hentry.uuid = entry.uuid + hentry.position = pos + hentry.rotation = rot + self.commandhistory.append(hentry) + self.historypointer = len(self.commandhistory) - def undoHistory(self): - if self.historypointer == 0: - return - self.SelectedArrow = None - - - self.historypointer -= 1 - hentry = self.commandhistory[self.historypointer] - self.entries[hentry.uuid].node.setPosition(hentry.position) - self.entries[hentry.uuid].node.setOrientation(hentry.rotation) - - # update node positions - self.TranslateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) - self.RotateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) - #self.TranslateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) - self.RotateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) - - #self.entries[obj.uuid].node.setPosition(obj.node.getPosition) - self.currentStatusMsg = "undo step %d of %d" % (self.historypointer+1, len(self.commandhistory)) - - def redoHistory(self): - if self.historypointer + 1 >= len(self.commandhistory): - return - self.SelectedArrow = None - - self.historypointer += 1 - hentry = self.commandhistory[self.historypointer] - self.entries[hentry.uuid].node.setPosition(hentry.position) - self.entries[hentry.uuid].node.setOrientation(hentry.rotation) - - # update node positions - self.TranslateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) - self.RotateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) - #self.TranslateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) - self.RotateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) - - #self.entries[obj.uuid].node.setPosition(obj.node.getPosition) - self.currentStatusMsg = "redo step %d of %d" % (self.historypointer+1, len(self.commandhistory)) - + def undoHistory(self): + if self.historypointer == 0: + return + self.SelectedArrow = None + + + self.historypointer -= 1 + hentry = self.commandhistory[self.historypointer] + self.entries[hentry.uuid].node.setPosition(hentry.position) + self.entries[hentry.uuid].node.setOrientation(hentry.rotation) + + # update node positions + self.TranslateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) + self.RotateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) + #self.TranslateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) + self.RotateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) + + #self.entries[obj.uuid].node.setPosition(obj.node.getPosition) + self.currentStatusMsg = "undo step %d of %d" % (self.historypointer+1, len(self.commandhistory)) + + def redoHistory(self): + if self.historypointer + 1 >= len(self.commandhistory): + return + self.SelectedArrow = None + + self.historypointer += 1 + hentry = self.commandhistory[self.historypointer] + self.entries[hentry.uuid].node.setPosition(hentry.position) + self.entries[hentry.uuid].node.setOrientation(hentry.rotation) + + # update node positions + self.TranslateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) + self.RotateNode.setPosition(self.entries[hentry.uuid].node.getPosition()) + #self.TranslateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) + self.RotateNode.setOrientation(self.entries[hentry.uuid].node.getOrientation()) + + #self.entries[obj.uuid].node.setPosition(obj.node.getPosition) + self.currentStatusMsg = "redo step %d of %d" % (self.historypointer+1, len(self.commandhistory)) + - def rotateSelected(self, axis, amount, steps=True): - if not self.selectedEntry: - return - - self.virtualMoveNode.rotate(axis, amount, relativeTo=ogre.Node.TransformSpace.TS_LOCAL) - newrot = self.virtualMoveNode.getOrientation() - - # todo: get this working! - if False: - print amount - stepsize = 10 - rotzz = -ogre.Radian(newrot.getYaw()).valueDegrees() - rotz = rotzz - (rotzz % stepsize) - rotyy = ogre.Radian(newrot.getRoll()).valueDegrees() - roty = rotyy - (rotyy % stepsize) - rotxx = ogre.Radian(newrot.getPitch()).valueDegrees() - rotx = rotxx - (rotxx % stepsize) - print rotx, roty, rotz, rotxx, rotyy, rotzz - self.virtualMoveNode.resetOrientation() - self.virtualMoveNode.rotate(ogre.Vector3.UNIT_Z, ogre.Degree(rotz).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - self.virtualMoveNode.rotate(ogre.Vector3.UNIT_Y, ogre.Degree(roty).valueRadians(), relativeTo=ogre.Node.TransformSpace.TS_WORLD) - self.virtual... [truncated message content] |
From: <ror...@us...> - 2007-08-26 11:07:22
|
Revision: 168 http://roreditor.svn.sourceforge.net/roreditor/?rev=168&view=rev Author: rorthomas Date: 2007-08-25 02:22:40 -0700 (Sat, 25 Aug 2007) Log Message: ----------- update Modified Paths: -------------- trunk/lib_common/roreditor/RoRTruckOgreWindow.py Added Paths: ----------- trunk/linux/ trunk/linux/Plugin_BSPSceneManager.so trunk/linux/Plugin_CgProgramManager.so trunk/linux/Plugin_OctreeSceneManager.so trunk/linux/Plugin_ParticleFX.so trunk/linux/RenderSystem_GL.so trunk/linux/bin/ trunk/linux/bin/openal-config trunk/linux/include/ trunk/linux/include/AL/ trunk/linux/include/AL/al.h trunk/linux/include/AL/alc.h trunk/linux/include/AL/alext.h trunk/linux/include/ogg/ trunk/linux/include/ogg/config_types.h trunk/linux/include/ogg/ogg.h trunk/linux/include/ogg/os_types.h trunk/linux/include/vorbis/ trunk/linux/include/vorbis/codec.h trunk/linux/include/vorbis/vorbisenc.h trunk/linux/include/vorbis/vorbisfile.h trunk/linux/libCEGUIBase.so trunk/linux/libCEGUIBase.so.1 trunk/linux/libCEGUIBase.so.1.0.0 trunk/linux/libCEGUIDevILImageCodec.so trunk/linux/libCEGUIDevILImageCodec.so.0 trunk/linux/libCEGUIDevILImageCodec.so.0.0.0 trunk/linux/libCEGUIExpatParser.so trunk/linux/libCEGUIExpatParser.so.0 trunk/linux/libCEGUIExpatParser.so.0.0.0 trunk/linux/libCEGUIFalagardWRBase.so trunk/linux/libCEGUIFalagardWRBase.so.1 trunk/linux/libCEGUIFalagardWRBase.so.1.0.0 trunk/linux/libCEGUIFreeImageImageCodec.so trunk/linux/libCEGUIFreeImageImageCodec.so.0 trunk/linux/libCEGUIFreeImageImageCodec.so.0.0.0 trunk/linux/libCEGUIOgreRenderer-1.4.2.so trunk/linux/libCEGUIOgreRenderer.so trunk/linux/libCEGUIOpenGLRenderer.so trunk/linux/libCEGUIOpenGLRenderer.so.0 trunk/linux/libCEGUIOpenGLRenderer.so.0.0.1 trunk/linux/libCEGUITGAImageCodec.so trunk/linux/libCEGUITGAImageCodec.so.0 trunk/linux/libCEGUITGAImageCodec.so.0.0.0 trunk/linux/libCEGUITinyXMLParser.so trunk/linux/libCEGUITinyXMLParser.so.0 trunk/linux/libCEGUITinyXMLParser.so.0.0.0 trunk/linux/libCg.so trunk/linux/libCgGL.so trunk/linux/libNewton.a trunk/linux/libOIS-1.0.0.so trunk/linux/libOIS.a trunk/linux/libOIS.so trunk/linux/libOgreAL.so trunk/linux/libOgreAL.so.0 trunk/linux/libOgreAL.so.0.0.0 trunk/linux/libOgreMain-1.4.2.so trunk/linux/libOgreMain.so trunk/linux/libOgreNewt.so trunk/linux/libOgreOde_Core.a trunk/linux/libOgreOde_Core.so trunk/linux/libOgreOde_Core.so.0 trunk/linux/libOgreOde_Core.so.0.0.0 trunk/linux/libOgreOde_Loader.a trunk/linux/libOgreOde_Loader.so trunk/linux/libOgreOde_Loader.so.0 trunk/linux/libOgreOde_Loader.so.0.0.0 trunk/linux/libOgreOde_Prefab.a trunk/linux/libOgreOde_Prefab.so trunk/linux/libOgreOde_Prefab.so.0 trunk/linux/libOgreOde_Prefab.so.0.0.0 trunk/linux/libalut.a trunk/linux/libalut.so trunk/linux/libalut.so.0 trunk/linux/libalut.so.0.1.0 trunk/linux/libboost_python-gcc41-1_34.a trunk/linux/libboost_python-gcc41-1_34.so trunk/linux/libboost_python-gcc41-1_34.so.1.34.0 trunk/linux/libboost_python-gcc41-d-1_34.a trunk/linux/libboost_python-gcc41-d-1_34.so trunk/linux/libboost_python-gcc41-d-1_34.so.1.34.0 trunk/linux/libboost_python-gcc41-d.a trunk/linux/libboost_python-gcc41-d.so trunk/linux/libboost_python-gcc41-mt-1_34.a trunk/linux/libboost_python-gcc41-mt-1_34.so trunk/linux/libboost_python-gcc41-mt-1_34.so.1.34.0 trunk/linux/libboost_python-gcc41-mt-d-1_34.a trunk/linux/libboost_python-gcc41-mt-d-1_34.so trunk/linux/libboost_python-gcc41-mt-d-1_34.so.1.34.0 trunk/linux/libboost_python-gcc41-mt-d.a trunk/linux/libboost_python-gcc41-mt-d.so trunk/linux/libboost_python-gcc41-mt.a trunk/linux/libboost_python-gcc41-mt.so trunk/linux/libboost_python-gcc41.a trunk/linux/libboost_python-gcc41.so trunk/linux/libfreeimage-3.9.3.so trunk/linux/libfreeimage.a trunk/linux/libfreeimage.so.3 trunk/linux/libode.a trunk/linux/libode.so trunk/linux/libogg.a trunk/linux/libogg.so trunk/linux/libogg.so.0 trunk/linux/libogg.so.0.5.3 trunk/linux/libopenal.a trunk/linux/libopenal.so trunk/linux/libopenal.so.0 trunk/linux/libopenal.so.0.0.0 trunk/linux/libvorbis.a trunk/linux/libvorbis.so trunk/linux/libvorbis.so.0 trunk/linux/libvorbis.so.0.3.1 trunk/linux/libvorbisenc.a trunk/linux/libvorbisenc.so trunk/linux/libvorbisenc.so.2 trunk/linux/libvorbisenc.so.2.0.2 trunk/linux/libvorbisfile.a trunk/linux/libvorbisfile.so trunk/linux/libvorbisfile.so.3 trunk/linux/libvorbisfile.so.3.1.1 trunk/plugins_linux.cfg trunk/plugins_windows.cfg trunk/windows/ trunk/windows/Plugin_BSPSceneManager.dll trunk/windows/Plugin_CgProgramManager.dll trunk/windows/Plugin_OctreeSceneManager.dll trunk/windows/Plugin_ParticleFX.dll trunk/windows/RenderSystem_Direct3D9.dll trunk/windows/RenderSystem_GL.dll Modified: trunk/lib_common/roreditor/RoRTruckOgreWindow.py =================================================================== --- trunk/lib_common/roreditor/RoRTruckOgreWindow.py 2007-08-21 11:38:15 UTC (rev 167) +++ trunk/lib_common/roreditor/RoRTruckOgreWindow.py 2007-08-25 09:22:40 UTC (rev 168) @@ -1,9 +1,12 @@ #Thomas Fischer 31/05/2007, th...@th... +# see revision 67 for new camera changes!! + import wx, os, os.path -import ogre.renderer.OGRE as ogre +import ogre.renderer.OGRE as ogre from ror.truckparser import * -from ror.camera import * +#from ror.camera import * + from ror.logger import log from ror.settingsManager import getSettingsManager @@ -19,802 +22,806 @@ #from random import random class RoRTruckOgreWindow(wxOgreWindow): - def __init__(self, parent, ID, size = wx.Size(200,200), **kwargs): - self.parent = parent - self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") - self.World = OgreNewt.World() - self.sceneManager = None - self.uvFrame = None - self.clearlist = {'entity':[]} - self.bodies = [] - self.initScene() - wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) + def __init__(self, parent, ID, size = wx.Size(200,200), **kwargs): + self.parent = parent + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") + self.World = OgreNewt.World() + self.sceneManager = None + self.uvFrame = None + self.clearlist = {'entity':[]} + self.bodies = [] + self.initScene() + wxOgreWindow.__init__(self, parent, ID, size = size, **kwargs) - def initScene(self, resetCam = True): - if not self.sceneManager is None: - self.sceneManager.destroyAllManualObjects() - self.EntityCount = 0 - - - # try to clear things up - try: - if self.nodes != {}: - for n in self.nodes: - n[0].detachAllObjects() - self.sceneManager.destroySceneNode(n[0].getName()) - except: - pass - try: - for e in self.clearlist['entity']: - print e - self.sceneManager.destroyEntity(e) - except: - pass - try: - self.uvFrame.Close() - except: - pass - self.nodes = {} - self.beams = {} - self.shocks = {} - self.submeshs = {} - self.selection = None - self.enablephysics = False - if resetCam: - self.modeSettings = {} - self.camMode = "3d" + def initScene(self, resetCam = True): + if not self.sceneManager is None: + self.sceneManager.destroyAllManualObjects() + self.EntityCount = 0 - - def __del__ (self): - ## delete the world when we're done. - del self.bodies - del self.World - - def OnFrameStarted(self): - if self.enablephysics: - self.World.update(TIMER) - self.updateBeams() - pass - - def OnFrameEnded(self): - pass + # try to clear things up + try: + if self.nodes != {}: + for n in self.nodes: + n[0].detachAllObjects() + self.sceneManager.destroySceneNode(n[0].getName()) + except: + pass + try: + for e in self.clearlist['entity']: + print e + self.sceneManager.destroyEntity(e) + except: + pass + try: + self.uvFrame.Close() + except: + pass + self.nodes = {} + self.beams = {} + self.shocks = {} + self.submeshs = {} + self.selection = None + self.enablephysics = False + if resetCam: + self.modeSettings = {} + self.camMode = "3d" - def SceneInitialisation(self): - addresources = [self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] - # only init things in the main window, not in shared ones! - # setup resources - for r in addresources: - ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) - ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() + def __del__ (self): + ## delete the world when we're done. + del self.bodies + del self.World - #get the scenemanager - self.sceneManager = getOgreManager().createSceneManager(ogre.ST_GENERIC) - # create a camera - self.camera = self.sceneManager.createCamera('Camera') - #self.camera.lookAt(ogre.Vector3(0, 0, 0)) - #self.camera.setPosition(ogre.Vector3(0, 0, 3)) - #self.camera.nearClipDistance = 0.1 - #self.camera.setAutoAspectRatio(False) - self.camera2 = Camera(self.sceneManager.getRootSceneNode(), self.camera) - - # create the Viewport" - self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) - self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) + def OnFrameStarted(self): + if self.enablephysics: + self.World.update(TIMER) + self.updateBeams() + pass - #set some default values - self.sceneDetailIndex = 0 - self.filtering = ogre.TFO_BILINEAR + def OnFrameEnded(self): + pass - # bind mouse and keyboard - self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) - self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) - - #create objects - self.populateScene() + def SceneInitialisation(self): + addresources = [self.rordir+"\\data\\trucks",self.rordir+"\\data\\objects"] + # only init things in the main window, not in shared ones! + # setup resources + for r in addresources: + ogre.ResourceGroupManager.getSingleton().addResourceLocation(r, "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/packs/OgreCore.zip", "Zip", "Bootstrap", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/materials", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().addResourceLocation("media/models", "FileSystem", "General", False) + ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() - def createNode(self, node): - try: - id = int(node[0]) - pos = ogre.Vector3(float(node[1]),float(node[2]),float(node[3])) - if len(node) == 5: - option = node[4] - else: - option = None + #get the scenemanager + self.sceneManager = getOgreManager().createSceneManager(ogre.ST_GENERIC) - # 0.05 - size = 0.1 - mass = 0.5 * size - - inertia = OgreNewt.CalcBoxSolid( mass, size ) - - box1node = self.sceneManager.getRootSceneNode().createChildSceneNode() - box1 = self.sceneManager.createEntity("NodeEntity"+str(self.EntityCount), "ellipsoid.mesh" ) - self.clearlist['entity'].append("NodeEntity"+str(self.EntityCount)) - self.EntityCount += 1 - box1node.attachObject( box1 ) - box1node.setScale(size) - box1.setNormaliseNormals(True) - - col = OgreNewt.Ellipsoid( self.World, size ) - bod = OgreNewt.Body(self.World, col) - self.bodies.append (bod) + # create a camera + self.camera = self.sceneManager.createCamera('Camera') + self.camera.lookAt(ogre.Vector3(0, 0, 0)) + self.camera.setPosition(ogre.Vector3(0, 0, 3)) + self.camera.nearClipDistance = 0.1 + self.camera.setAutoAspectRatio(False) - del col - - bod.attachToNode( box1node ) - bod.setMassMatrix( mass, inertia ) - bod.setStandardForceCallback() - - if option == 'l': - matname = "TruckEditor/NodeLoad" - elif option == 'f': - matname = "TruckEditor/NodeFriction" - elif option == 'x': - matname = "TruckEditor/NodeExhaust" - elif option == 'y': - matname = "TruckEditor/NodeExhaustReference" - elif option == 'c': - matname = "TruckEditor/NodeContact" - elif option == 'h': - matname = "TruckEditor/NodeHook" - else: - matname = "TruckEditor/NodeNormal" - box1.setMaterialName(matname) - box1.setCastShadows(False) - - bod.setPositionOrientation(pos, Ogre.Quaternion.IDENTITY ) - self.nodes[id] = [box1node, option, node] - return bod - except: - pass + # this is aperions new cam, but its much too buggy, so removed :(( + #self.camera2 = Camera(self.sceneManager.getRootSceneNode(), self.camera) - def showSubmeshs(self, value): - for k in self.submeshs.keys(): - submesh = self.submeshs[k] - submesh[0].setVisible(value) - - def setSubmeshMode(self, mode): - pass - - - def showExhaustRefNodes(self, value): - for k in self.nodes.keys(): - node = self.nodes[k] - if node[1] == "y": - node[0].setVisible(value) - - def showExhaustNodes(self, value): - for k in self.nodes.keys(): - node = self.nodes[k] - if node[1] == "x": - node[0].setVisible(value) - - def showHookNodes(self, value): - for k in self.nodes.keys(): - node = self.nodes[k] - if node[1] == "h": - node[0].setVisible(value) - - def showFrictionNodes(self, value): - for k in self.nodes.keys(): - node = self.nodes[k] - if node[1] == "f": - node[0].setVisible(value) - - def showContactNodes(self, value): - for k in self.nodes.keys(): - node = self.nodes[k] - if node[1] == "c": - node[0].setVisible(value) - - def showFrictionNodes(self, value): - for k in self.nodes.keys(): - node = self.nodes[k] - if node[1] == "f": - node[0].setVisible(value) - - def showLoadNodes(self, value): - for k in self.nodes.keys(): - node = self.nodes[k] - if node[1] == "l": - node[0].setVisible(value) - - def showNormalNodes(self, value): - for k in self.nodes.keys(): - node = self.nodes[k] - if node[1] == "" or node[1] == "n" or node[1] is None: - node[0].setVisible(value) - - def showNormalBeams(self, value): - for k in self.beams.keys(): - beam = self.beams[k] - if beam[3] == "" or beam[3] == "n" or beam[3] == "v" or beam[3] is None: - beam[0].setVisible(value) - - def showInvisibleBeams(self, value): - for k in self.beams.keys(): - beam = self.beams[k] - if beam[3] == "i": - beam[0].setVisible(value) - - def showRopeBeams(self, value): - for k in self.beams.keys(): - beam = self.beams[k] - if beam[3] == "r": - beam[0].setVisible(value) - - - def createBeam(self, id0, id1, id2, options): - try: - pos1 = self.nodes[id1][0].getPosition() - pos2 = self.nodes[id2][0].getPosition() + # create the Viewport" + self.viewport = self.renderWindow.addViewport(self.camera, 0, 0.0, 0.0, 1.0, 1.0) + self.viewport.backgroundColour = ogre.ColourValue(0, 0, 0) - idstr = str(id0) + str(id1) + str(id2) - line = self.sceneManager.createManualObject("manual"+idstr) - if options == "i": - mat = "TruckEditor/BeamInvisible" - elif options == "r": - mat = "TruckEditor/BeamRope" - else: - mat = "TruckEditor/BeamNormal" - line.begin(mat, ogre.RenderOperation.OT_LINE_LIST) - line.position(pos1) - line.position(pos2) - line.end() - line.setCastShadows(False) - line.setDynamic(True) - linenode = self.sceneManager.getRootSceneNode().createChildSceneNode() - linenode.attachObject(line) - self.beams[id0] = [linenode, id1, id2, options, line] - print id0 - except: - pass + #set some default values + self.sceneDetailIndex = 0 + self.filtering = ogre.TFO_BILINEAR - def updateBeams(self): - for bk in self.beams.keys(): - beam = self.beams[bk] - line = beam[4] - id1 = beam[1] - id2 = beam[2] - try: - pos1 = self.nodes[id1][0].getPosition() - pos2 = self.nodes[id2][0].getPosition() - line.beginUpdate(0) - line.position(pos1) - line.position(pos2) - line.end() - except Exception, e: - print str(e) - continue - - - def createShock(self, id0, id1, id2, options): - try: - pos1 = self.nodes[id1][0].getPosition() - pos2 = self.nodes[id2][0].getPosition() + # bind mouse and keyboard + self.Bind(wx.EVT_KEY_DOWN, self.onKeyDown) + self.Bind(wx.EVT_MOUSE_EVENTS, self.onMouseEvent) - idstr = str(id0) + str(id1) + str(id2) - line = self.sceneManager.createManualObject("manual"+idstr) - if options == "i": - mat = "TruckEditor/ShockInvisible" - else: - mat = "TruckEditor/ShockNormal" - line.begin(mat, ogre.RenderOperation.OT_LINE_LIST) - line.position(pos1) - line.position(pos2) - line.end() - line.setCastShadows(False) - linenode = self.sceneManager.getRootSceneNode().createChildSceneNode() - linenode.attachObject(line) - self.shocks[id0] = [linenode, id1, id2, options, line] - except: - pass - - def createSubMeshGroup(self, tree, smg, smgid): - #print smg - try: - # read in nodes - nodes = {} - for nodeobj in tree['nodes']: - if nodeobj.has_key('type'): - continue - node = nodeobj['data'] - nodes[int(node[0])] = ogre.Vector3(float(node[1]),float(node[2]),float(node[3])) - - # read in UVs then - uv = {} - for data in smg['texcoords']: - tex = data['data'] - uv[int(tex[0])] = [float(tex[1]), float(tex[2])] + #create objects + self.populateScene() - # and create the triangles - - #print tree['globals'][0]['data'][2] - matname = tree['globals'][0]['data'][2] - #print matname - - idstr = str(smgid) - sm = self.sceneManager.createManualObject("manualsmg"+idstr) - sm.begin(matname, ogre.RenderOperation.OT_TRIANGLE_LIST) - for data in smg['cab']: - cab = data['data'] - if len(cab) == 0: - continue - #print nodes, cab - sm.position(nodes[int(cab[0])]) - sm.textureCoord(uv[int(cab[0])][0], uv[int(cab[0])][1]) - sm.position(nodes[int(cab[1])]) - sm.textureCoord(uv[int(cab[1])][0], uv[int(cab[1])][1]) - sm.position(nodes[int(cab[2])]) - sm.textureCoord(uv[int(cab[2])][0], uv[int(cab[2])][1]) - sm.end() - sm.setCastShadows(False) - - # set culling mode for that material - mat = ogre.MaterialManager.getSingleton().getByName(matname) - if not mat is None: - mat.setCullingMode(Ogre.CullingMode.CULL_NONE) - - smnode = self.sceneManager.getRootSceneNode().createChildSceneNode() - smnode.attachObject(sm) + def createNode(self, node): + try: + id = int(node[0]) + pos = ogre.Vector3(float(node[1]),float(node[2]),float(node[3])) + if len(node) == 5: + option = node[4] + else: + option = None - self.submeshs[smgid] = [smnode, smgid, smg, sm] - except: - pass - - def makeSimpleBox( self, size, pos, orient ): - ## base mass on the size of the object. - mass = size.x * size.y * size.z * 2.5 - - ## calculate the inertia based on box formula and mass - inertia = OgreNewt.CalcBoxSolid( mass, size ) - - box1 = self.sceneManager.createEntity("Entity"+str(self.EntityCount), "cap_mid.mesh" ) - self.clearlist['entity'].append("Entity"+str(self.EntityCount)) + # 0.05 + size = 0.1 + mass = 0.5 * size - self.EntityCount += 1 - box1node = self.sceneManager.getRootSceneNode().createChildSceneNode() - box1node.attachObject( box1 ) - box1node.setScale( size ) - box1.setNormaliseNormals(True) - - col = OgreNewt.Box( self.World, size ) - bod = OgreNewt.Body( self.World, col ) - del col - - bod.attachToNode( box1node ) - bod.setMassMatrix( mass, inertia ) - bod.setStandardForceCallback() - - box1.setMaterialName( "mysimple/terrainselect" ) - box1.setCastShadows(False) - - bod.setPositionOrientation( pos, orient ) - - return bod + inertia = OgreNewt.CalcBoxSolid( mass, size ) - - def populateScene(self): - self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) + box1node = self.sceneManager.getRootSceneNode().createChildSceneNode() + box1 = self.sceneManager.createEntity("NodeEntity"+str(self.EntityCount), "ellipsoid.mesh" ) + self.clearlist['entity'].append("NodeEntity"+str(self.EntityCount)) + self.EntityCount += 1 + box1node.attachObject( box1 ) + box1node.setScale(size) + box1.setNormaliseNormals(True) - fadeColour = (0.8, 0.8, 0.8) - self.sceneManager.setFog(ogre.FOG_EXP, ogre.ColourValue.White, 0.0002) - #self.sceneManager.setFog(ogre.FOG_LINEAR, fadeColour, 0.001, 5000.0, 10000.0) - self.renderWindow.getViewport(0).BackgroundColour = fadeColour + col = OgreNewt.Ellipsoid( self.World, size ) + bod = OgreNewt.Body(self.World, col) + self.bodies.append (bod) - self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) - self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); - self.sceneManager.setSkyDome(True, 'mysimple/truckEditorSky', 4.0, 8.0) + del col - self.MainLight = self.sceneManager.createLight('MainLight') - self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) + bod.attachToNode( box1node ) + bod.setMassMatrix( mass, inertia ) + bod.setStandardForceCallback() - self.createGroundPlane() - - stat_col = OgreNewt.TreeCollisionSceneParser( self.World ) - stat_col.parseScene( self.planenode, True ) - bod = OgreNewt.Body( self.World, stat_col ) - self.bodies.append(bod) - del stat_col + if option == 'l': + matname = "TruckEditor/NodeLoad" + elif option == 'f': + matname = "TruckEditor/NodeFriction" + elif option == 'x': + matname = "TruckEditor/NodeExhaust" + elif option == 'y': + matname = "TruckEditor/NodeExhaustReference" + elif option == 'c': + matname = "TruckEditor/NodeContact" + elif option == 'h': + matname = "TruckEditor/NodeHook" + else: + matname = "TruckEditor/NodeNormal" + box1.setMaterialName(matname) + box1.setCastShadows(False) - def createTestRope(self): - ## make a simple rope. - size = Ogre.Vector3(5,0.5,0.5) - pos = Ogre.Vector3(0,20,0) - orient = Ogre.Quaternion.IDENTITY - - ## loop through, making bodies and connecting them. - parent = None - child = None - - for x in range (5): - ## make the next box. - child = self.makeSimpleBox(size, pos, orient) - self.bodies.append(child) - - ## make the joint right between the bodies... - if (parent): - joint = OgreNewt.BallAndSocket( self.World, child, parent, pos-Ogre.Vector3(size.x/2,0,0) ) - - else: - ## no parent, this is the first joint, so just pass NULL as the parent, to stick it to the "world" - joint = OgreNewt.BallAndSocket( self.World, child, None, pos-Ogre.Vector3(size.x/2,0,0) ) - - ## offset pos a little more. - pos += Ogre.Vector3(size.x,0,0) - - ## save the last body for the next loop! - parent = child - - ## NOW - we also have to kepe copies of the joints, otherwise they get deleted !!! - self.bodies.append (joint) - - def createGroundPlane(self): - plane = ogre.Plane() - plane.normal = ogre.Vector3(0, 1, 0) - plane.d = 2 - planesize = 200000 - # see http://www.ogre3d.org/docs/api/html/classOgre_1_1MeshManager.html#Ogre_1_1MeshManagera5 - mesh = ogre.MeshManager.getSingleton().createPlane('GroundPlane', "General", plane, planesize, planesize, - 20, 20, True, 1, 50.0, 50.0, ogre.Vector3(0, 0, 1), - ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, - ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, - True, True) - entity = self.sceneManager.createEntity('groundent', 'GroundPlane') - entity.setMaterialName('mysimple/truckEditorGround') - self.planenode = self.sceneManager.getRootSceneNode().createChildSceneNode() - self.planenode.attachObject(entity) - - #col = OgreNewt.TreeCollision(self.World, self.planenode, True) - groundthickness = 50 - boxsize = ogre.Vector3(planesize, groundthickness, planesize) - col = OgreNewt.Box(self.World, boxsize ) - bod = OgreNewt.Body( self.World, col ) - self.bodies.append(bod) - bod.setPositionOrientation( Ogre.Vector3(0.0, -groundthickness - plane.d, 0.0), Ogre.Quaternion.IDENTITY ) - del col - - - def LoadTruck(self, fn): - if not os.path.isfile(fn): - print "truck file not found: "+fn - return - self.filename = fn - truckname = os.path.basename(fn) - p = rorparser() - p.parse(fn) - if not 'nodes' in p.tree.keys() or not 'beams' in p.tree.keys() : - return False + bod.setPositionOrientation(pos, Ogre.Quaternion.IDENTITY ) + self.nodes[id] = [box1node, option, node] + return bod + except: + pass - self.initScene() - self.CreateTruck(p.tree) - self.createTestRope() - return p.tree + def showSubmeshs(self, value): + for k in self.submeshs.keys(): + submesh = self.submeshs[k] + submesh[0].setVisible(value) + def setSubmeshMode(self, mode): + pass - def reLoadTruck(self): - if not os.path.isfile(self.filename): - return - p = rorparser() - p.parse(self.filename) - if not 'nodes' in p.tree.keys() or not 'beams' in p.tree.keys() : - return False - self.initScene(resetCam=False) - self.CreateTruck(p.tree) - - def CreateTruck(self, tree): - try: - nodes = {} - for nodeobj in tree['nodes']: - if nodeobj.has_key('type'): - continue - node = nodeobj['data'] - nodes[int(node[0])] = ogre.Vector3(float(node[1]),float(node[2]),float(node[3])) - self.createNode(node) - + def showExhaustRefNodes(self, value): + for k in self.nodes.keys(): + node = self.nodes[k] + if node[1] == "y": + node[0].setVisible(value) - beamcounter = 0 - for beamobj in tree['beams']: - if beamobj.has_key('type'): - continue - #print beamobj - beam = beamobj['data'] - #print beam - if len(beam) == 3: - option = beam[2] - else: - option = None - #print beam - try: - self.createBeam(beamcounter, int(beam[0]),int(beam[1]), option) - beamcounter += 1 - except: - pass + def showExhaustNodes(self, value): + for k in self.nodes.keys(): + node = self.nodes[k] + if node[1] == "x": + node[0].setVisible(value) + def showHookNodes(self, value): + for k in self.nodes.keys(): + node = self.nodes[k] + if node[1] == "h": + node[0].setVisible(value) - if 'shocks' in tree.keys(): - shockcounter = 0 - for shockobj in tree['shocks']: - if shockobj.has_key('type'): - continue - shock = shockobj['data'] - if len(shock) == 8: - option = shock[7] - else: - option = None - #print beam - try: - self.createShock(shockcounter, int(shock[0]),int(shock[1]), option) - except: - pass - shockcounter += 1 - - smgcounter = 0 - for smg in tree['submeshgroups']: - print "loading submesh: ", smgcounter - self.createSubMeshGroup(tree, smg,smgcounter) - smgcounter += 1 - - from UVFrame import * - self.uvFrame = UVFrame(self, wx.ID_ANY, "") - self.uvFrame.setTree(tree) - self.uvFrame.Show() - except: - pass - - def onMouseEvent(self,event): - width, height, a, b, c = self.renderWindow.getMetrics() + def showFrictionNodes(self, value): + for k in self.nodes.keys(): + node = self.nodes[k] + if node[1] == "f": + node[0].setVisible(value) - # if event.MiddleDown(): - # self.StartDragX, self.StartDragY = event.GetPosition() + def showContactNodes(self, value): + for k in self.nodes.keys(): + node = self.nodes[k] + if node[1] == "c": + node[0].setVisible(value) - # if event.Dragging() and event.MiddleDown(): - # if not self.selection is None: - # n = self.mainWindow.mSelected.getParentNode() - # pos = n.getPosition() - # else: - # pos = Ogre.Vector3(0, 20, 0) - # self.camera.lookAt(pos) - # mx,my = event.GetPosition() - # mx = self.StartDragX - mx - # alpha = (math.pi / 720) * mx - # dx = math.cos(alpha) * self.radius - # dy = math.sin(alpha) * self.radius - # self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) + def showFrictionNodes(self, value): + for k in self.nodes.keys(): + node = self.nodes[k] + if node[1] == "f": + node[0].setVisible(value) - mode = self.camera.getProjectionType() == Ogre.ProjectionType.PT_PERSPECTIVE - if mode: - if event.RightDown(): #Precedes dragging - self.StartDragX, self.StartDragY = event.GetPosition() #saves position of initial click - if event.GetWheelRotation() != 0: - zfactor = 0.001 - if event.ShiftDown(): - zfactor = 0.01 - zoom = zfactor * -event.GetWheelRotation() - self.camera.moveRelative(ogre.Vector3(0,0, zoom)) + def showLoadNodes(self, value): + for k in self.nodes.keys(): + node = self.nodes[k] + if node[1] == "l": + node[0].setVisible(value) - if event.Dragging() and event.RightIsDown(): - x,y = event.GetPosition() - - dx = self.StartDragX - x - dy = self.StartDragY - y - self.StartDragX, self.StartDragY = x, y - if event.ShiftDown(): - dx = float(dx) / 10 - dy = float(dy) / 10 - self.camera2.move(ogre.Vector3(dx,dy,0), event.ControlDown()) - - """ - if event.Dragging() and event.RightIsDown() and event.ControlDown(): - x,y = event.GetPosition() - dx = self.StartDragX - x - dy = self.StartDragY - y - self.StartDragX, self.StartDragY = x, y - if event.ShiftDown(): - dx = float(dx) / 10 - dy = float(dy) / 10 - else: - dx = float(dx) / 50 - dy = float(dy) / 50 - self.camera.moveRelative(ogre.Vector3(dx,-dy,0)) - - elif event.Dragging() and event.RightIsDown(): #Dragging with RMB - x,y = event.GetPosition() - dx = self.StartDragX - x - dy = self.StartDragY - y - self.StartDragX, self.StartDragY = x, y - - self.camera.yaw(ogre.Degree(dx/3.0)) - self.camera.pitch(ogre.Degree(dy/3.0)) -""" - - if event.LeftDown() and event.ControlDown() and not self.mSelected is None: - pos = self.getPointedPosition(event) - if not pos is None: - self.TranslateNode.setPosition(pos) - self.RotateNode.setPosition(pos) - self.mSelected.getParentNode().setPosition(pos) - return - if event.LeftDown(): - #self.selectnew(event) - self.StartDragLeftX, self.StartDragLeftY = event.GetPosition() #saves position of initial click - zfactor = 0.1 - if event.ShiftDown(): - zfactor = 5 - zoom = zfactor * -event.GetWheelRotation() - self.camera.moveRelative(ogre.Vector3(0,0, zoom)) - else: - if event.GetWheelRotation() != 0: - zfactor = 0.001 - if event.ShiftDown(): - zfactor = 0.01 - zoom = zfactor * -event.GetWheelRotation() - if self.camera.getNearClipDistance() + zoom > 0: - self.camera.setNearClipDistance(self.camera.getNearClipDistance() + zoom) - - if event.RightDown(): - self.StartDragX, self.StartDragY = event.GetPosition() - if event.Dragging() and event.RightIsDown(): - x,y = event.GetPosition() - dx = self.StartDragX - x - dy = self.StartDragY - y - self.StartDragX, self.StartDragY = x, y - if event.ShiftDown(): - dx = float(dx) / 30 - dy = float(dy) / 30 - else: - dx = float(dx) / 60 - dy = float(dy) / 60 - self.camera.moveRelative(ogre.Vector3(dx,-dy,0)) - event.Skip() + def showNormalNodes(self, value): + for k in self.nodes.keys(): + node = self.nodes[k] + if node[1] == "" or node[1] == "n" or node[1] is None: + node[0].setVisible(value) - def changeDisplayMode(self, mode): - - if mode == self.camMode: - pass - - #save settings - self.modeSettings[self.camMode] = [self.camera.getPosition(), self.camera.getOrientation(), self.camera.getNearClipDistance()] + def showNormalBeams(self, value): + for k in self.beams.keys(): + beam = self.beams[k] + if beam[3] == "" or beam[3] == "n" or beam[3] == "v" or beam[3] is None: + beam[0].setVisible(value) - cammode = self.camera.getProjectionType() == Ogre.ProjectionType.PT_PERSPECTIVE - if mode in self.modeSettings.keys(): - # restore settings - self.camera.setPosition(self.modeSettings[mode][0]) - self.camera.setOrientation(self.modeSettings[mode][1]) - self.camera.setNearClipDistance(self.modeSettings[mode][2]) + def showInvisibleBeams(self, value): + for k in self.beams.keys(): + beam = self.beams[k] + if beam[3] == "i": + beam[0].setVisible(value) - if mode == "3d": - if not cammode: - self.camera.setProjectionType(Ogre.ProjectionType.PT_PERSPECTIVE) - if not mode in self.modeSettings.keys(): - # set default settings - self.camera.setNearClipDistance(0.1) - self.camera.setPosition(Ogre.Vector3(0,0,1)) - self.camera.lookAt(Ogre.Vector3(0,0,0)) - - elif mode == "orthleft": - if cammode: - self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) - if not mode in self.modeSettings.keys(): - self.camera.setNearClipDistance(5) - self.camera.setPosition(Ogre.Vector3(0,0,100)) - self.camera.lookAt(Ogre.Vector3(0,0,0)) - - elif mode == "orthright": - if cammode: - self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) - if not mode in self.modeSettings.keys(): - self.camera.setNearClipDistance(5) - self.camera.setPosition(Ogre.Vector3(0,0,-100)) - self.camera.lookAt(Ogre.Vector3(0,0,0)) + def showRopeBeams(self, value): + for k in self.beams.keys(): + beam = self.beams[k] + if beam[3] == "r": + beam[0].setVisible(value) - elif mode == "orthrear": - if cammode: - self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) - if not mode in self.modeSettings.keys(): - self.camera.setNearClipDistance(5) - self.camera.setPosition(Ogre.Vector3(100,0,0)) - self.camera.lookAt(Ogre.Vector3(0,0,0)) - elif mode == "orthfront": - if cammode: - self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) - if not mode in self.modeSettings.keys(): - self.camera.setNearClipDistance(5) - self.camera.setPosition(Ogre.Vector3(-100,0,0)) - self.camera.lookAt(Ogre.Vector3(0,0,0)) - - elif mode == "orthtop": - if cammode: - self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) - if not mode in self.modeSettings.keys(): - self.camera.setNearClipDistance(5) - self.camera.setPosition(Ogre.Vector3(0.1,100,0)) - self.camera.lookAt(Ogre.Vector3(0,0,0)) + def createBeam(self, id0, id1, id2, options): + try: + pos1 = self.nodes[id1][0].getPosition() + pos2 = self.nodes[id2][0].getPosition() - elif mode == "orthbottom": - if cammode: - self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) - if not mode in self.modeSettings.keys(): - self.camera.setNearClipDistance(5) - self.camera.setPosition(Ogre.Vector3(0.1,-100,0)) - self.camera.lookAt(Ogre.Vector3(0,0,0)) - - self.camMode = mode - - def onKeyDown(self,event): - #print event.m_keyCode - d = 0.05 - if event.ShiftDown(): - d = 0.5 - mode = self.camera.getProjectionType() == Ogre.ProjectionType.PT_PERSPECTIVE - if mode: - if event.m_keyCode == 65: # A, wx.WXK_LEFT: - self.camera.moveRelative(ogre.Vector3(-d,0,0)) - elif event.m_keyCode == 68: # D, wx.WXK_RIGHT: - self.camera.moveRelative(ogre.Vector3(d,0,0)) - elif event.m_keyCode == 87: # W ,wx.WXK_UP: - self.camera.moveRelative(ogre.Vector3(0,0,-d)) - elif event.m_keyCode == 83: # S, wx.WXK_DOWN: - self.camera.moveRelative(ogre.Vector3(0,0,d)) - elif event.m_keyCode == wx.WXK_PAGEUP: - self.camera.moveRelative(ogre.Vector3(0,d,0)) - elif event.m_keyCode == wx.WXK_PAGEDOWN: - self.camera.moveRelative(ogre.Vector3(0,-d,0)) - elif event.m_keyCode == 84: # 84 = T - if self.filtering == ogre.TFO_BILINEAR: - self.filtering = ogre.TFO_TRILINEAR - self.Aniso = 1 - elif self.filtering == ogre.TFO_TRILINEAR: - self.filtering = ogre.TFO_ANISOTROPIC - self.Aniso = 8 - else: - self.filtering = ogre.TFO_BILINEAR - self.Aniso = 1 - ogre.MaterialManager.getSingleton().setDefaultTextureFiltering(self.filtering) - ogre.MaterialManager.getSingleton().setDefaultAnisotropy(self.Aniso) - elif event.m_keyCode == 82: # 82 = R - detailsLevel = [ ogre.PM_SOLID, - ogre.PM_WIREFRAME, - ogre.PM_POINTS ] - self.sceneDetailIndex = (self.sceneDetailIndex + 1) % len(detailsLevel) - self.camera.polygonMode=detailsLevel[self.sceneDetailIndex] - elif event.m_keyCode == 81: # Q, wx.WXK_LEFT: - self.enablephysics = not self.enablephysics - else: - if event.m_keyCode == 65: # A, wx.WXK_LEFT: - self.camera.moveRelative(ogre.Vector3(-d,0,0)) - elif event.m_keyCode == 68: # D, wx.WXK_RIGHT: - self.camera.moveRelative(ogre.Vector3(d,0,0)) - elif event.m_keyCode == 87: # W ,wx.WXK_UP: - self.camera.moveRelative(ogre.Vector3(0,d,0)) - elif event.m_keyCode == 83: # S, wx.WXK_DOWN: - self.camera.moveRelative(ogre.Vector3(0,-d,0)) - - - - if event.m_keyCode == 340: # F1 - self.changeDisplayMode("3d") - elif event.m_keyCode == 341: # F2 - self.changeDisplayMode("orthleft") - elif event.m_keyCode == 342: # F3 - self.changeDisplayMode("orthright") - elif event.m_keyCode == 343: # F4 - self.changeDisplayMode("orthfront") - elif event.m_keyCode == 344: # F5 - self.changeDisplayMode("orthrear") - elif event.m_keyCode == 345: # F6 - self.changeDisplayMode("orthtop") - elif event.m_keyCode == 346: # F7 - self.changeDisplayMode("orthbottom") - event.Skip() \ No newline at end of file + idstr = str(id0) + str(id1) + str(id2) + line = self.sceneManager.createManualObject("manual"+idstr) + if options == "i": + mat = "TruckEditor/BeamInvisible" + elif options == "r": + mat = "TruckEditor/BeamRope" + else: + mat = "TruckEditor/BeamNormal" + line.begin(mat, ogre.RenderOperation.OT_LINE_LIST) + line.position(pos1) + line.position(pos2) + line.end() + line.setCastShadows(False) + line.setDynamic(True) + linenode = self.sceneManager.getRootSceneNode().createChildSceneNode() + linenode.attachObject(line) + self.beams[id0] = [linenode, id1, id2, options, line] + print id0 + except: + pass + + def updateBeams(self): + for bk in self.beams.keys(): + beam = self.beams[bk] + line = beam[4] + id1 = beam[1] + id2 = beam[2] + try: + pos1 = self.nodes[id1][0].getPosition() + pos2 = self.nodes[id2][0].getPosition() + line.beginUpdate(0) + line.position(pos1) + line.position(pos2) + line.end() + except Exception, e: + print str(e) + continue + + + def createShock(self, id0, id1, id2, options): + try: + pos1 = self.nodes[id1][0].getPosition() + pos2 = self.nodes[id2][0].getPosition() + + idstr = str(id0) + str(id1) + str(id2) + line = self.sceneManager.createManualObject("manual"+idstr) + if options == "i": + mat = "TruckEditor/ShockInvisible" + else: + mat = "TruckEditor/ShockNormal" + line.begin(mat, ogre.RenderOperation.OT_LINE_LIST) + line.position(pos1) + line.position(pos2) + line.end() + line.setCastShadows(False) + linenode = self.sceneManager.getRootSceneNode().createChildSceneNode() + linenode.attachObject(line) + self.shocks[id0] = [linenode, id1, id2, options, line] + except: + pass + + def createSubMeshGroup(self, tree, smg, smgid): + #print smg + try: + # read in nodes + nodes = {} + for nodeobj in tree['nodes']: + if nodeobj.has_key('type'): + continue + node = nodeobj['data'] + nodes[int(node[0])] = ogre.Vector3(float(node[1]),float(node[2]),float(node[3])) + + # read in UVs then + uv = {} + for data in smg['texcoords']: + tex = data['data'] + uv[int(tex[0])] = [float(tex[1]), float(tex[2])] + + # and create the triangles + + #print tree['globals'][0]['data'][2] + matname = tree['globals'][0]['data'][2] + #print matname + + idstr = str(smgid) + sm = self.sceneManager.createManualObject("manualsmg"+idstr) + sm.begin(matname, ogre.RenderOperation.OT_TRIANGLE_LIST) + + for data in smg['cab']: + cab = data['data'] + if len(cab) == 0: + continue + #print nodes, cab + sm.position(nodes[int(cab[0])]) + sm.textureCoord(uv[int(cab[0])][0], uv[int(cab[0])][1]) + sm.position(nodes[int(cab[1])]) + sm.textureCoord(uv[int(cab[1])][0], uv[int(cab[1])][1]) + sm.position(nodes[int(cab[2])]) + sm.textureCoord(uv[int(cab[2])][0], uv[int(cab[2])][1]) + sm.end() + sm.setCastShadows(False) + + # set culling mode for that material + mat = ogre.MaterialManager.getSingleton().getByName(matname) + if not mat is None: + mat.setCullingMode(Ogre.CullingMode.CULL_NONE) + + smnode = self.sceneManager.getRootSceneNode().createChildSceneNode() + smnode.attachObject(sm) + + self.submeshs[smgid] = [smnode, smgid, smg, sm] + except: + pass + + def makeSimpleBox( self, size, pos, orient ): + ## base mass on the size of the object. + mass = size.x * size.y * size.z * 2.5 + + ## calculate the inertia based on box formula and mass + inertia = OgreNewt.CalcBoxSolid( mass, size ) + + box1 = self.sceneManager.createEntity("Entity"+str(self.EntityCount), "cap_mid.mesh" ) + self.clearlist['entity'].append("Entity"+str(self.EntityCount)) + + self.EntityCount += 1 + box1node = self.sceneManager.getRootSceneNode().createChildSceneNode() + box1node.attachObject( box1 ) + box1node.setScale( size ) + box1.setNormaliseNormals(True) + + col = OgreNewt.Box( self.World, size ) + bod = OgreNewt.Body( self.World, col ) + del col + + bod.attachToNode( box1node ) + bod.setMassMatrix( mass, inertia ) + bod.setStandardForceCallback() + + box1.setMaterialName( "mysimple/terrainselect" ) + box1.setCastShadows(False) + + bod.setPositionOrientation( pos, orient ) + + return bod + + + def populateScene(self): + self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) + + fadeColour = (0.8, 0.8, 0.8) + self.sceneManager.setFog(ogre.FOG_EXP, ogre.ColourValue.White, 0.0002) + #self.sceneManager.setFog(ogre.FOG_LINEAR, fadeColour, 0.001, 5000.0, 10000.0) + self.renderWindow.getViewport(0).BackgroundColour = fadeColour + + self.sceneManager.AmbientLight = ogre.ColourValue(0.7, 0.7, 0.7 ) + self.sceneManager.setShadowTechnique(ogre.ShadowTechnique.SHADOWTYPE_STENCIL_ADDITIVE); + self.sceneManager.setSkyDome(True, 'mysimple/truckEditorSky', 4.0, 8.0) + + self.MainLight = self.sceneManager.createLight('MainLight') + self.MainLight.setPosition (ogre.Vector3(20, 80, 130)) + + self.createGroundPlane() + + stat_col = OgreNewt.TreeCollisionSceneParser( self.World ) + stat_col.parseScene( self.planenode, True ) + bod = OgreNewt.Body( self.World, stat_col ) + self.bodies.append(bod) + del stat_col + + def createTestRope(self): + ## make a simple rope. + size = Ogre.Vector3(5,0.5,0.5) + pos = Ogre.Vector3(0,20,0) + orient = Ogre.Quaternion.IDENTITY + + ## loop through, making bodies and connecting them. + parent = None + child = None + + for x in range (5): + ## make the next box. + child = self.makeSimpleBox(size, pos, orient) + self.bodies.append(child) + + ## make the joint right between the bodies... + if (parent): + joint = OgreNewt.BallAndSocket( self.World, child, parent, pos-Ogre.Vector3(size.x/2,0,0) ) + + else: + ## no parent, this is the first joint, so just pass NULL as the parent, to stick it to the "world" + joint = OgreNewt.BallAndSocket( self.World, child, None, pos-Ogre.Vector3(size.x/2,0,0) ) + + ## offset pos a little more. + pos += Ogre.Vector3(size.x,0,0) + + ## save the last body for the next loop! + parent = child + + ## NOW - we also have to kepe copies of the joints, otherwise they get deleted !!! + self.bodies.append (joint) + + def createGroundPlane(self): + plane = ogre.Plane() + plane.normal = ogre.Vector3(0, 1, 0) + plane.d = 2 + planesize = 200000 + # see http://www.ogre3d.org/docs/api/html/classOgre_1_1MeshManager.html#Ogre_1_1MeshManagera5 + mesh = ogre.MeshManager.getSingleton().createPlane('GroundPlane', "General", plane, planesize, planesize, + 20, 20, True, 1, 50.0, 50.0, ogre.Vector3(0, 0, 1), + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + ogre.HardwareBuffer.HBU_STATIC_WRITE_ONLY, + True, True) + entity = self.sceneManager.createEntity('groundent', 'GroundPlane') + entity.setMaterialName('mysimple/truckEditorGround') + self.planenode = self.sceneManager.getRootSceneNode().createChildSceneNode() + self.planenode.attachObject(entity) + + #col = OgreNewt.TreeCollision(self.World, self.planenode, True) + groundthickness = 50 + boxsize = ogre.Vector3(planesize, groundthickness, planesize) + col = OgreNewt.Box(self.World, boxsize ) + bod = OgreNewt.Body( self.World, col ) + self.bodies.append(bod) + bod.setPositionOrientation( Ogre.Vector3(0.0, -groundthickness - plane.d, 0.0), Ogre.Quaternion.IDENTITY ) + del col + + + def LoadTruck(self, fn): + if not os.path.isfile(fn): + print "truck file not found: "+fn + return + self.filename = fn + truckname = os.path.basename(fn) + p = rorparser() + p.parse(fn) + if not 'nodes' in p.tree.keys() or not 'beams' in p.tree.keys() : + return False + + self.initScene() + self.CreateTruck(p.tree) + self.createTestRope() + return p.tree + + + def reLoadTruck(self): + if not os.path.isfile(self.filename): + return + p = rorparser() + p.parse(self.filename) + if not 'nodes' in p.tree.keys() or not 'beams' in p.tree.keys() : + return False + + self.initScene(resetCam=False) + self.CreateTruck(p.tree) + + def CreateTruck(self, tree): + try: + nodes = {} + for nodeobj in tree['nodes']: + if nodeobj.has_key('type'): + continue + node = nodeobj['data'] + nodes[int(node[0])] = ogre.Vector3(float(node[1]),float(node[2]),float(node[3])) + self.createNode(node) + + + beamcounter = 0 + for beamobj in tree['beams']: + if beamobj.has_key('type'): + continue + #print beamobj + beam = beamobj['data'] + #print beam + if len(beam) == 3: + option = beam[2] + else: + option = None + #print beam + try: + self.createBeam(beamcounter, int(beam[0]),int(beam[1]), option) + beamcounter += 1 + except: + pass + + + if 'shocks' in tree.keys(): + shockcounter = 0 + for shockobj in tree['shocks']: + if shockobj.has_key('type'): + continue + shock = shockobj['data'] + if len(shock) == 8: + option = shock[7] + else: + option = None + #print beam + try: + self.createShock(shockcounter, int(shock[0]),int(shock[1]), option) + except: + pass + shockcounter += 1 + + smgcounter = 0 + for smg in tree['submeshgroups']: + print "loading submesh: ", smgcounter + self.createSubMeshGroup(tree, smg,smgcounter) + smgcounter += 1 + + from UVFrame import * + self.uvFrame = UVFrame(self, wx.ID_ANY, "") + self.uvFrame.setTree(tree) + self.uvFrame.Show() + except: + pass + + def onMouseEvent(self,event): + width, height, a, b, c = self.renderWindow.getMetrics() + + # if event.MiddleDown(): + # self.StartDragX, self.StartDragY = event.GetPosition() + + # if event.Dragging() and event.MiddleDown(): + # if not self.selection is None: + # n = self.mainWindow.mSelected.getParentNode() + # pos = n.getPosition() + # else: + # pos = Ogre.Vector3(0, 20, 0) + # self.camera.lookAt(pos) + # mx,my = event.GetPosition() + # mx = self.StartDragX - mx + # alpha = (math.pi / 720) * mx + # dx = math.cos(alpha) * self.radius + # dy = math.sin(alpha) * self.radius + # self.camera.setPosition(pos - ogre.Vector3(dx, -5, dy)) + + mode = self.camera.getProjectionType() == Ogre.ProjectionType.PT_PERSPECTIVE + if mode: + if event.RightDown(): #Precedes dragging + self.StartDragX, self.StartDragY = event.GetPosition() #saves position of initial click + if event.GetWheelRotation() != 0: + zfactor = 0.001 + if event.ShiftDown(): + zfactor = 0.01 + zoom = zfactor * -event.GetWheelRotation() + self.camera.moveRelative(ogre.Vector3(0,0, zoom)) + + """ + # new cam code: + if event.Dragging() and event.RightIsDown(): + x,y = event.GetPosition() + + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + if event.ShiftDown(): + dx = float(dx) / 10 + dy = float(dy) / 10 + self.camera2.move(ogre.Vector3(dx,dy,0), event.ControlDown()) + """ + + # old cam code: + if event.Dragging() and event.RightIsDown() and event.ControlDown(): + x,y = event.GetPosition() + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + if event.ShiftDown(): + dx = float(dx) / 10 + dy = float(dy) / 10 + else: + dx = float(dx) / 50 + dy = float(dy) / 50 + self.camera.moveRelative(ogre.Vector3(dx,-dy,0)) + + elif event.Dragging() and event.RightIsDown(): #Dragging with RMB + x,y = event.GetPosition() + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + + self.camera.yaw(ogre.Degree(dx/3.0)) + self.camera.pitch(ogre.Degree(dy/3.0)) + + if event.LeftDown() and event.ControlDown() and not self.mSelected is None: + pos = self.getPointedPosition(event) + if not pos is None: + self.TranslateNode.setPosition(pos) + self.RotateNode.setPosition(pos) + self.mSelected.getParentNode().setPosition(pos) + return + if event.LeftDown(): + #self.selectnew(event) + self.StartDragLeftX, self.StartDragLeftY = event.GetPosition() #saves position of initial click + zfactor = 0.1 + if event.ShiftDown(): + zfactor = 5 + zoom = zfactor * -event.GetWheelRotation() + self.camera.moveRelative(ogre.Vector3(0,0, zoom)) + else: + if event.GetWheelRotation() != 0: + zfactor = 0.001 + if event.ShiftDown(): + zfactor = 0.01 + zoom = zfactor * -event.GetWheelRotation() + if self.camera.getNearClipDistance() + zoom > 0: + self.camera.setNearClipDistance(self.camera.getNearClipDistance() + zoom) + + if event.RightDown(): + self.StartDragX, self.StartDragY = event.GetPosition() + if event.Dragging() and event.RightIsDown(): + x,y = event.GetPosition() + dx = self.StartDragX - x + dy = self.StartDragY - y + self.StartDragX, self.StartDragY = x, y + if event.ShiftDown(): + dx = float(dx) / 30 + dy = float(dy) / 30 + else: + dx = float(dx) / 60 + dy = float(dy) / 60 + self.camera.moveRelative(ogre.Vector3(dx,-dy,0)) + event.Skip() + + def changeDisplayMode(self, mode): + + if mode == self.camMode: + pass + + #save settings + self.modeSettings[self.camMode] = [self.camera.getPosition(), self.camera.getOrientation(), self.camera.getNearClipDistance()] + + cammode = self.camera.getProjectionType() == Ogre.ProjectionType.PT_PERSPECTIVE + if mode in self.modeSettings.keys(): + # restore settings + self.camera.setPosition(self.modeSettings[mode][0]) + self.camera.setOrientation(self.modeSettings[mode][1]) + self.camera.setNearClipDistance(self.modeSettings[mode][2]) + + if mode == "3d": + if not cammode: + self.camera.setProjectionType(Ogre.ProjectionType.PT_PERSPECTIVE) + if not mode in self.modeSettings.keys(): + # set default settings + self.camera.setNearClipDistance(0.1) + self.camera.setPosition(Ogre.Vector3(0,0,1)) + self.camera.lookAt(Ogre.Vector3(0,0,0)) + + elif mode == "orthleft": + if cammode: + self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) + if not mode in self.modeSettings.keys(): + self.camera.setNearClipDistance(5) + self.camera.setPosition(Ogre.Vector3(0,0,100)) + self.camera.lookAt(Ogre.Vector3(0,0,0)) + + elif mode == "orthright": + if cammode: + self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) + if not mode in self.modeSettings.keys(): + self.camera.setNearClipDistance(5) + self.camera.setPosition(Ogre.Vector3(0,0,-100)) + self.camera.lookAt(Ogre.Vector3(0,0,0)) + + elif mode == "orthrear": + if cammode: + self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) + if not mode in self.modeSettings.keys(): + self.camera.setNearClipDistance(5) + self.camera.setPosition(Ogre.Vector3(100,0,0)) + self.camera.lookAt(Ogre.Vector3(0,0,0)) + + elif mode == "orthfront": + if cammode: + self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) + if not mode in self.modeSettings.keys(): + self.camera.setNearClipDistance(5) + self.camera.setPosition(Ogre.Vector3(-100,0,0)) + self.camera.lookAt(Ogre.Vector3(0,0,0)) + + elif mode == "orthtop": + if cammode: + self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) + if not mode in self.modeSettings.keys(): + self.camera.setNearClipDistance(5) + self.camera.setPosition(Ogre.Vector3(0.1,100,0)) + self.camera.lookAt(Ogre.Vector3(0,0,0)) + + elif mode == "orthbottom": + if cammode: + self.camera.setProjectionType(Ogre.ProjectionType.PT_ORTHOGRAPHIC) + if not mode in self.modeSettings.keys(): + self.camera.setNearClipDistance(5) + self.camera.setPosition(Ogre.Vector3(0.1,-100,0)) + self.camera.lookA... [truncated message content] |
From: <ror...@us...> - 2007-08-21 11:38:18
|
Revision: 167 http://roreditor.svn.sourceforge.net/roreditor/?rev=167&view=rev Author: rorthomas Date: 2007-08-21 04:38:15 -0700 (Tue, 21 Aug 2007) Log Message: ----------- first preparations for the linux build Modified Paths: -------------- trunk/lib_common/ror/depcheckerplugins/ror_mesh.py trunk/lib_common/ror/logger.py trunk/lib_common/ror/rorcommon.py trunk/lib_common/ror/settingsManager.py trunk/lib_common/ror/starter.py trunk/lib_common/wxogre/OgreManager.py trunk/lib_common/wxogre/wxOgreWindow.py trunk/roreditors.py trunk/rortoolkit.py trunk/tools/checkmods.py trunk/tools/depchecker.py trunk/tools/modgui.py trunk/tools/modtool.py trunk/tools/update.py Added Paths: ----------- trunk/lib_common/wxogre/ Removed Paths: ------------- trunk/lib_windows/wxogre/ Modified: trunk/lib_common/ror/depcheckerplugins/ror_mesh.py =================================================================== --- trunk/lib_common/ror/depcheckerplugins/ror_mesh.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/lib_common/ror/depcheckerplugins/ror_mesh.py 2007-08-21 11:38:15 UTC (rev 167) @@ -1,108 +1,114 @@ import sys, os, os.path, re -import subprocess,os,sys,signal,pty,time,errno,thread +import subprocess,os,sys,signal,pty,time,errno,thread from deptools import * -# todo remove this hardcoded stuff here! -CONVERTERBIN = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..\\..\\..\\tools\\OgreCommandLineTools\\OgreXmlConverter.exe")) +cb = getSettingsManager().getSetting("RoRToolkit", "OgreXMLConverterExecutable") +if cb != '': + CONVERTERBIN = cb +else: + CONVERTERBIN = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", ".." "tools", "OgreCommandLineTools", "OgreXmlConverter.exe")) + + + REs = [r".*material\s?=[\"\']([a-zA-Z0-9_/\-\\]*)[\"\'].*"] def readFile(filename): - f=open(filename, 'r') - content = f.readlines() - f.close() - return content + f=open(filename, 'r') + content = f.readlines() + f.close() + return content def convertToXML(filename): - # try to convert to .msh.xml first! - cmd = CONVERTERBIN + " \"" + filename+"\"" - log().info("calling " + cmd) - - p = subprocess.Popen(cmd, shell = False, cwd = os.path.dirname(CONVERTERBIN), stderr = subprocess.PIPE, stdout = subprocess.PIPE) - smart_wait_for_subprocess(p, 10) - if not os.path.isfile(os.path.join(os.path.dirname(filename), os.path.basename(filename)+".xml")): - log().error("conversion of mesh file %s failed!" % filename) - log().info("mesh converted: " + filename) + # try to convert to .mesh.xml first! + cmd = CONVERTERBIN + " \"" + filename+"\"" + log().info("calling " + cmd) + p = subprocess.Popen(cmd, shell = False, cwd = os.path.dirname(CONVERTERBIN), stderr = subprocess.PIPE, stdout = subprocess.PIPE) + smart_wait_for_subprocess(p, 10) + if not os.path.isfile(os.path.join(os.path.dirname(filename), os.path.basename(filename)+".xml")): + log().error("conversion of mesh file %s failed!" % filename) + log().info("mesh converted: " + filename) + def smart_wait_for_subprocess(sp,timeout=30): - """ - Will wait for Process given to expire, and then kill it if - the time elapses (or never if timeout==0). - @param sp: Subprocess to watch - @param timeout: timeout length in seconds - """ - running=1 - try: - sleeps=timeout*4 - #Just wait around for termination... - - while sp.poll()==None: - #print>>efp,"WAITING:",sleeps - sleeps-=1 - time.sleep(.25) - os.kill(sp.pid,0) - if sleeps<=0 and timeout>0: - os.kill(sp.pid,signal.SIGTERM) - break - elif sleeps<=0: - break - #Did it REALLY exit? - try: - os.kill(sp.pid,0) - sleeps=20 - while sp.poll()==None: - #print>>efp,"KILLING:",sleeps - sleeps-=1 - time.sleep(.25) - - #No? KILL IT! - if sleeps<=0 and timeout>0: - #print>>efp,"KILLING2:",sleeps - os.kill(sp.pid,signal.SIGKILL) - break - elif sleeps<=0: - break - except: - running=0 - except: - #Make REALLY effing sure it exited. - os.kill(sp.pid,signal.SIGKILL) - #print>>efp,"KILLING2:",sleeps - - + """ + Will wait for Process given to expire, and then kill it if + the time elapses (or never if timeout==0). + @param sp: Subprocess to watch + @param timeout: timeout length in seconds + """ + running=1 + try: + sleeps=timeout*4 + #Just wait around for termination... + + while sp.poll()==None: + #print>>efp,"WAITING:",sleeps + sleeps-=1 + time.sleep(.25) + os.kill(sp.pid,0) + if sleeps<=0 and timeout>0: + os.kill(sp.pid,signal.SIGTERM) + break + elif sleeps<=0: + break + #Did it REALLY exit? + try: + os.kill(sp.pid,0) + sleeps=20 + while sp.poll()==None: + #print>>efp,"KILLING:",sleeps + sleeps-=1 + time.sleep(.25) + + #No? KILL IT! + if sleeps<=0 and timeout>0: + #print>>efp,"KILLING2:",sleeps + os.kill(sp.pid,signal.SIGKILL) + break + elif sleeps<=0: + break + except: + running=0 + except: + #Make REALLY effing sure it exited. + os.kill(sp.pid,signal.SIGKILL) + #print>>efp,"KILLING2:",sleeps + + def parseRE(content): - deps = [] - for line in content: - for r in REs: - m = re.match(r, line) - if not m is None and len(m.groups()) > 0: - depname = m.groups()[0] - if not depname in deps: - deps.append(depname) - return deps - - + deps = [] + for line in content: + for r in REs: + m = re.match(r, line) + if not m is None and len(m.groups()) > 0: + depname = m.groups()[0] + if not depname in deps: + deps.append(depname) + return deps + + def getDependencies(filename): - xmlfilename = os.path.join(os.path.dirname(filename), os.path.basename(filename)+".xml") - if not os.path.isfile(xmlfilename): - convertToXML(filename) - try: - content = readFile(xmlfilename) - except Exception, err: - log().error(str(err)) - return - dep = parseRE(content) - if len(dep) == 0: - log().info("no material found for file " + filename) - else: - return { - OPTIONAL:{ - }, - REQUIRES:{ - MATERIAL:dep, - }, - PROVIDES:{ - FILE:[filename], - }, - } + xmlfilename = os.path.join(os.path.dirname(filename), os.path.basename(filename)+".xml") + if not os.path.isfile(xmlfilename): + convertToXML(filename) + try: + content = readFile(xmlfilename) + except Exception, err: + log().error(str(err)) + return + dep = parseRE(content) + if len(dep) == 0: + log().info("no material found for file " + filename) + else: + return { + OPTIONAL:{ + }, + REQUIRES:{ + MATERIAL:dep, + }, + PROVIDES:{ + FILE:[filename], + }, + } Modified: trunk/lib_common/ror/logger.py =================================================================== --- trunk/lib_common/ror/logger.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/lib_common/ror/logger.py 2007-08-21 11:38:15 UTC (rev 167) @@ -9,8 +9,9 @@ if _rorlogger is None: _rorlogger = RoRLogger() return _rorlogger.getLog() - -class RoRLogger(): + + +class RoRLogger: logconfigfilename = os.path.join(os.path.dirname(os.path.abspath(__file__)), LOGCONFIGFILE) def __init__(self): Modified: trunk/lib_common/ror/rorcommon.py =================================================================== --- trunk/lib_common/ror/rorcommon.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/lib_common/ror/rorcommon.py 2007-08-21 11:38:15 UTC (rev 167) @@ -1,3 +1,4 @@ +import sys, os, os.path import wx from random import Random @@ -2,44 +3,57 @@ def ShowOnAbout(event = None): - rev = "" - try: - import ror.svn - rev = str(ror.svn.getRevision()) - except: - pass + rev = "" + try: + import ror.svn + rev = str(ror.svn.getRevision()) + except: + pass - dlg = wx.MessageDialog(None, "RoR Toolkit revision %s\nAuthors: Aperion, Thomas" % rev, - "About This", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() + dlg = wx.MessageDialog(None, "RoR Toolkit revision %s\nAuthors: Aperion, Thomas" % rev, + "About This", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() -uniqueIDs = [] +uniqueIDs = [] def randomID(num_bits=64): - global uniqueIDs - """Return a string representing a bitfield num_bits long. - Maximum artbitrarily set to 1025""" + global uniqueIDs + """Return a string representing a bitfield num_bits long. + Maximum artbitrarily set to 1025""" - if num_bits < 1: - raise RuntimeError,\ - "randomID called with negative (or zero) number of bits" - if num_bits > 1024: - raise RuntimeError,\ - "randomID called with too many bits (> 1024)" + if num_bits < 1: + raise RuntimeError,\ + "randomID called with negative (or zero) number of bits" + if num_bits > 1024: + raise RuntimeError,\ + "randomID called with too many bits (> 1024)" - # create a num_bits string from random import Random - rnd = Random() - tmp_id = 0L - for i in range(0, num_bits): - tmp_id += long(rnd.randint(0,1)) << i - #rof + # create a num_bits string from random import Random + rnd = Random() + tmp_id = 0L + for i in range(0, num_bits): + tmp_id += long(rnd.randint(0,1)) << i + #rof - # The 2: removes the '0x' and :-1 removes the L - rnd_id = hex(tmp_id)[2:-1] - - # this ensure that all ids are unique - if rnd_id in uniqueIDs: - rnd_id = randomID(num_bits) - else: - uniqueIDs.append(rnd_id) - - return rnd_id \ No newline at end of file + # The 2: removes the '0x' and :-1 removes the L + rnd_id = hex(tmp_id)[2:-1] + + # this ensure that all ids are unique + if rnd_id in uniqueIDs: + rnd_id = randomID(num_bits) + else: + uniqueIDs.append(rnd_id) + + return rnd_id + + +def checkRoRDirectory(): + rorexecutable = '' + if sys.platform in ['linux', 'linux2']: + rorexecutable = "RoR.bin" + elif sys.platform in ['win32']: + rorexecutable = "RoR.exe" + + import settingsManager + path = settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + return os.path.isfile(os.path.join(path, rorexecutable)) + Modified: trunk/lib_common/ror/settingsManager.py =================================================================== --- trunk/lib_common/ror/settingsManager.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/lib_common/ror/settingsManager.py 2007-08-21 11:38:15 UTC (rev 167) @@ -6,50 +6,50 @@ # singleton pattern _rorsettings = None def getSettingsManager(): - global _rorsettings - if _rorsettings is None: - _rorsettings = RoRSettings() - return _rorsettings + global _rorsettings + if _rorsettings is None: + _rorsettings = RoRSettings() + return _rorsettings class RoRSettings: - myConfig = None - configfilename = os.path.join(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"..\\..")),CONFIGFILE) - #configfilename = os.path.join(os.path.dirname(os.path.abspath(__file__)), CONFIGFILE) - - def __init__(self): - self.loadSettings() - - def loadSettings(self): - try: - self.myConfig = ConfigParser.ConfigParser() - self.myConfig.read(self.configfilename) - logger.log().info("Settings loaded") - except Exception, e: - logger.log().exception(str(e)) - - def getSetting(self, group, key): - try: - return self.myConfig.get(group, key) - except Exception, e: - logger.log().exception(str(e)) - return "" + myConfig = None + configfilename = os.path.join(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"..", "..")),CONFIGFILE) + #configfilename = os.path.join(os.path.dirname(os.path.abspath(__file__)), CONFIGFILE) - def saveSettings(self): - try: - fp = open(self.configfilename, 'w') - self.myConfig.write(fp) - fp.close() - logger.log().info("Settings saved") - except Exception, e: - logger.log().exception(str(e)) - - def setSetting(self, section, option, value): - try: - if not self.myConfig.has_section(section): - self.myConfig.add_section(section) - self.myConfig.set(section, option, value) - self.saveSettings() - return True - except Exception, e: - logger.log().exception(str(e)) - return False + def __init__(self): + self.loadSettings() + + def loadSettings(self): + try: + self.myConfig = ConfigParser.ConfigParser() + self.myConfig.read(self.configfilename) + logger.log().info("Settings loaded") + except Exception, e: + logger.log().exception(str(e)) + + def getSetting(self, group, key): + try: + return self.myConfig.get(group, key) + except Exception, e: + logger.log().exception(str(e)) + return "" + + def saveSettings(self): + try: + fp = open(self.configfilename, 'w') + self.myConfig.write(fp) + fp.close() + logger.log().info("Settings saved") + except Exception, e: + logger.log().exception(str(e)) + + def setSetting(self, section, option, value): + try: + if not self.myConfig.has_section(section): + self.myConfig.add_section(section) + self.myConfig.set(section, option, value) + self.saveSettings() + return True + except Exception, e: + logger.log().exception(str(e)) + return False Modified: trunk/lib_common/ror/starter.py =================================================================== --- trunk/lib_common/ror/starter.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/lib_common/ror/starter.py 2007-08-21 11:38:15 UTC (rev 167) @@ -56,12 +56,16 @@ self.btnBugReport = wx.Button(self.panel, wx.ID_ANY, "Report a Bug") self.Bind(wx.EVT_BUTTON, self.OnBugReport, self.btnBugReport) + if sys.platform != 'win32': + self.btnBugReport.Enable(False) self.btnUpdate = wx.Button(self.panel, wx.ID_ANY, "Update") self.Bind(wx.EVT_BUTTON, self.OnUpdate, self.btnUpdate) self.btnDepGraph = wx.Button(self.panel, wx.ID_ANY, "Dependency Graph") self.Bind(wx.EVT_BUTTON, self.OnDepGraph, self.btnDepGraph) + if sys.platform != 'win32': + self.btnDepGraph.Enable(False) self.btnModUninstaller = wx.Button(self.panel, wx.ID_ANY, "Mod Uninstaller") self.Bind(wx.EVT_BUTTON, self.OnModUninstaller, self.btnModUninstaller) @@ -159,8 +163,14 @@ def OnStartRoR(self, event=None): + rorexecutable = '' + if sys.platform in ['linux', 'linux2']: + rorexecutable = "RoR" + elif sys.platform in ['win32']: + rorexecutable = "RoR.exe" + try: - path = os.path.join(self.rordir, "RoR.exe") + path = os.path.join(self.rordir, rorexecutable) log().info("starting RoR: %s" % path) p = Popen(path, shell = False, cwd = self.rordir) #sts = os.waitpid(p.pid, 0) @@ -180,11 +190,11 @@ def OnBugReport(self, event=None): try: if self.checkForUpdate(): - dlg = wx.MessageDialog(self, "Update Available!\nPlease update prior submitting a BugReport!", "Info", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - self.btnBugReport.Enable(False) - return + dlg = wx.MessageDialog(self, "Update Available!\nPlease update prior submitting a BugReport!", "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + self.btnBugReport.Enable(False) + return log().info("starting bugreporter") import ror.bugreport @@ -210,8 +220,7 @@ # dlg.Destroy() # return False - exists = os.path.isfile(os.path.join(fn,"RoR.exe")) - if not exists: + if not checkRoRDirectory(): dlg = wx.MessageDialog(self, "RoR.exe not found in the selected directory!\nPlease select a new directory!", "Error", wx.OK | wx.ICON_INFORMATION) dlg.ShowModal() dlg.Destroy() Copied: trunk/lib_common/wxogre (from rev 165, trunk/lib_windows/wxogre) Modified: trunk/lib_common/wxogre/OgreManager.py =================================================================== --- trunk/lib_windows/wxogre/OgreManager.py 2007-08-21 10:52:43 UTC (rev 165) +++ trunk/lib_common/wxogre/OgreManager.py 2007-08-21 11:38:15 UTC (rev 167) @@ -26,7 +26,7 @@ return True -class OgreManager(): +class OgreManager: renderWindows = {} def restart(self): Modified: trunk/lib_common/wxogre/wxOgreWindow.py =================================================================== --- trunk/lib_windows/wxogre/wxOgreWindow.py 2007-08-21 10:52:43 UTC (rev 165) +++ trunk/lib_common/wxogre/wxOgreWindow.py 2007-08-21 11:38:15 UTC (rev 167) @@ -44,7 +44,7 @@ if not self.sceneManager is None: getOgreManager().destroySceneManager(self.sceneManager) - def _OnSize(self, event): + def _OnSize(self, event): """ Is called when the ogre Window is getting resized @param event: the sizing event Modified: trunk/roreditors.py =================================================================== --- trunk/roreditors.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/roreditors.py 2007-08-21 11:38:15 UTC (rev 167) @@ -1,3 +1,4 @@ +#!/bin/env python #Thomas Fischer 31/05/2007, th...@th... import sys, os, os.path @@ -2,25 +3,32 @@ def main(): - """ - main method - """ - - sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) - import ror.settingsManager - path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(path,"RoR.exe")): - import ror.starter - ror.starter.startApp() + """ + main method + """ + rorexecutable = '' + if sys.platform in ['linux', 'linux2']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib_linux")) + rorexecutable = "RoR.bin" + elif sys.platform in ['win32']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib_windows")) + rorexecutable = "RoR.exe" - # Import Psyco if available - try: - import psyco - psyco.full() - except ImportError: - pass + import ror.rorcommon + if not ror.rorcommon.checkRoRDirectory(): + import ror.starter + ror.starter.startApp() - import roreditor.MainFrame - roreditor.MainFrame.startApp() + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass + import roreditor.MainFrame + roreditor.MainFrame.startApp() -if __name__=="__main__": - main() \ No newline at end of file + +if __name__=="__main__": + main() \ No newline at end of file Modified: trunk/rortoolkit.py =================================================================== --- trunk/rortoolkit.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/rortoolkit.py 2007-08-21 11:38:15 UTC (rev 167) @@ -1,3 +1,4 @@ +#!/bin/env python #Thomas Fischer 31/05/2007, th...@th... import sys, os, os.path @@ -2,22 +3,26 @@ def main(): - """ - main method - """ - - sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib")) + """ + main method + """ + if sys.platform in ['linux', 'linux2']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib_linux")) + elif sys.platform in ['win32']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "lib_windows")) - # Import Psyco if available - try: - import psyco - #psyco.full() - #psyco.log() - #psyco.profile() - except ImportError: - pass + # Import Psyco if available + try: + import psyco + #psyco.full() + #psyco.log() + #psyco.profile() + except ImportError: + pass - import ror.starter - ror.starter.startApp() + import ror.starter + ror.starter.startApp() -if __name__=="__main__": - main() \ No newline at end of file +if __name__=="__main__": + main() \ No newline at end of file Modified: trunk/tools/checkmods.py =================================================================== --- trunk/tools/checkmods.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/tools/checkmods.py 2007-08-21 11:38:15 UTC (rev 167) @@ -1,45 +1,51 @@ import os.path, sys, installmod, time -sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) +if sys.platform in ['linux', 'linux2']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_linux")) +elif sys.platform in ['win32']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_windows")) + from ror.logger import log from ror.settingsManager import getSettingsManager def getFiles(top): - fl = {} - for root, dirs, files in os.walk(top): - for f in files: - fn = os.path.join(root, f) - fl[fn] = {} - for fk in fl.keys(): - log().info("%10s %s" % ("", os.path.basename(fk))) - - log().info("found %d files!" % (len(fl.keys()))) - return fl + fl = {} + for root, dirs, files in os.walk(top): + for f in files: + fn = os.path.join(root, f) + fl[fn] = {} + for fk in fl.keys(): + log().info("%10s %s" % ("", os.path.basename(fk))) + log().info("found %d files!" % (len(fl.keys()))) + return fl + def main(): - dir = sys.argv[1] - mode = sys.argv[2] - files = getFiles(dir) - valid={} - counter = 0 - countervalid = 0 - for file in files.keys(): - log().info("## %s (%d/%d)##################################" % (os.path.basename(file), counter, len(files))) - counter += 1 - mods = installmod.work(mode, file, verbose=(len(sys.argv)== 4 and sys.argv[3] == "--verbose"), dryrun=True) - if len(mods) == 0: - log().info("!!! INVALID: "+ os.path.basename(file)) - else: - log().info("VALID: "+ os.path.basename(file)) - valid[file] = mods - log().info("#######################################################################") - time.sleep(0.01) - log().info("===========================================================") - log().info("===== FINISHED found, valid mods:") - for f in valid.keys(): - log().info( f + str(valid[f])) - log().info("%d of %d files containing valid mods!" % (len(valid), len(files))) - + dir = sys.argv[1] + mode = sys.argv[2] + files = getFiles(dir) + valid={} + counter = 0 + countervalid = 0 + for file in files.keys(): + log().info("## %s (%d/%d)##################################" % (os.path.basename(file), counter, len(files))) + counter += 1 + mods = installmod.work(mode, file, verbose=(len(sys.argv)== 4 and sys.argv[3] == "--verbose"), dryrun=True) + if len(mods) == 0: + log().info("!!! INVALID: "+ os.path.basename(file)) + else: + log().info("VALID: "+ os.path.basename(file)) + valid[file] = mods + log().info("#######################################################################") + time.sleep(0.01) + log().info("===========================================================") + log().info("===== FINISHED found, valid mods:") + for f in valid.keys(): + log().info( f + str(valid[f])) + log().info("%d of %d files containing valid mods!" % (len(valid), len(files))) + if __name__=="__main__": - main() \ No newline at end of file + main() \ No newline at end of file Modified: trunk/tools/depchecker.py =================================================================== --- trunk/tools/depchecker.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/tools/depchecker.py 2007-08-21 11:38:15 UTC (rev 167) @@ -2,55 +2,59 @@ import sys, os, os.path def usage(): - print "usage: %s <path to inspect> <all or unused or missing>" % os.path.basename(sys.argv[0]) - print "for example: %s c:\\ror\\data missing" % os.path.basename(sys.argv[0]) - print " valid modes:" - print " 'all' displays all dependencies, inclusive fulfilled ones" - print " 'missing' displays only unfulfilled dependencies" - print " 'unused' displays resources that are not in use" - print " 'dtree <resourcename>' displays the dependency tree of the given resource name" - print " 'md5sum' creates the md5sums of all files" - sys.exit(0) - - + print "usage: %s <path to inspect> <all or unused or missing>" % os.path.basename(sys.argv[0]) + print "for example: %s c:\\ror\\data missing" % os.path.basename(sys.argv[0]) + print " valid modes:" + print " 'all' displays all dependencies, inclusive fulfilled ones" + print " 'missing' displays only unfulfilled dependencies" + print " 'unused' displays resources that are not in use" + print " 'dtree <resourcename>' displays the dependency tree of the given resource name" + print " 'md5sum' creates the md5sums of all files" + sys.exit(0) + + def main(): - """ - main method - """ + """ + main method + """ + if sys.platform in ['linux', 'linux2']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_linux")) + elif sys.platform in ['win32']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_windows")) - sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) - import ror.settingsManager - path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(path,"RoR.exe")): - import ror.starter - ror.starter.startApp() + import ror.rorcommon + if not ror.rorcommon.checkRoRDirectory(): + import ror.starter + ror.starter.startApp() - # Import Psyco if available - try: - import psyco - psyco.full() - except ImportError: - pass + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass - if len(sys.argv) < 3: - usage() - path = sys.argv[1] - if path.strip() == "rordir": - path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isdir(path): - print "%s is not a valid directory!" % path - usage() - if (len(sys.argv) == 3 and sys.argv[2] in ['all', 'missing', 'unused', 'record']) or (len(sys.argv) == 4 and sys.argv[2] in ['dtree']): - pass - else: - print "%s is not a valid mode, or incorrect arguments!" % sys.argv[2] - usage() - - import ror.depchecker - dependfilename = "" - if len(sys.argv) == 4 and sys.argv[2] in ['dtree'] and sys.argv[3].strip() != "": - dependfilename = sys.argv[3].strip() - ror.depchecker.RoRDepChecker(path , sys.argv[2], dependfilename) - -if __name__=="__main__": - main() \ No newline at end of file + if len(sys.argv) < 3: + usage() + path = sys.argv[1] + if path.strip() == "rordir": + path = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") + if not os.path.isdir(path): + print "%s is not a valid directory!" % path + usage() + if (len(sys.argv) == 3 and sys.argv[2] in ['all', 'missing', 'unused', 'record']) or (len(sys.argv) == 4 and sys.argv[2] in ['dtree']): + pass + else: + print "%s is not a valid mode, or incorrect arguments!" % sys.argv[2] + usage() + + import ror.depchecker + dependfilename = "" + if len(sys.argv) == 4 and sys.argv[2] in ['dtree'] and sys.argv[3].strip() != "": + dependfilename = sys.argv[3].strip() + ror.depchecker.RoRDepChecker(path , sys.argv[2], dependfilename) + +if __name__=="__main__": + main() \ No newline at end of file Modified: trunk/tools/modgui.py =================================================================== --- trunk/tools/modgui.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/tools/modgui.py 2007-08-21 11:38:15 UTC (rev 167) @@ -1,7 +1,12 @@ #Thomas Fischer 31/05/2007, th...@th... import sys, os, os.path, shutil -sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) +if sys.platform in ['linux', 'linux2']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_linux")) +elif sys.platform in ['win32']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_windows")) from ror.logger import log from ror.settingsManager import getSettingsManager @@ -9,49 +14,48 @@ import wx def main(): - log().info("modgui started") - import wx - app = wx.PySimpleApp(0) - wx.InitAllImageHandlers() #you may or may not need this - - # check for valid RoR Directory! - import ror.settingsManager - rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(rorpath,"RoR.exe")): - import ror.starter - ror.starter.startApp() - return + log().info("modgui started") + import wx + app = wx.PySimpleApp(0) + wx.InitAllImageHandlers() #you may or may not need this - if len(sys.argv) == 1: - log().error("missing arguments") - return - mode = sys.argv[1] - if mode in ["uninstall"]: - frame_1 = ror.modgui.ModGUI(None, -1, "") - app.SetTopWindow(frame_1) - frame_1.Show() - app.MainLoop() + # check for valid RoR Directory! + import ror.rorcommon + if not ror.rorcommon.checkRoRDirectory(): + import ror.starter + ror.starter.startApp() + return - elif mode in ['installrepo']: - if len(sys.argv) != 3: - return - targetfile = sys.argv[2] - import ror.modtool - result = ror.modtool.ModTool().work(mode, targetfile, False, False) - if result == False or result is None: - msg = "Installation failed! :( Please have a look at the file editorlog.log" - else: - msg = "Installation successfull! Mods installed:\n %s" % ", ".join(result) - dlg = wx.MessageDialog(None, msg, "Info", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - else: - log().error("function %s not implemented in gui version!" % mode) - return + if len(sys.argv) == 1: + log().error("missing arguments") + return + mode = sys.argv[1] + if mode in ["uninstall"]: + frame_1 = ror.modgui.ModGUI(None, -1, "") + app.SetTopWindow(frame_1) + frame_1.Show() + app.MainLoop() + elif mode in ['installrepo']: + if len(sys.argv) != 3: + return + targetfile = sys.argv[2] + import ror.modtool + result = ror.modtool.ModTool().work(mode, targetfile, False, False) + if result == False or result is None: + msg = "Installation failed! :( Please have a look at the file editorlog.log" + else: + msg = "Installation successfull! Mods installed:\n %s" % ", ".join(result) + dlg = wx.MessageDialog(None, msg, "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + else: + log().error("function %s not implemented in gui version!" % mode) + return + if __name__=="__main__": - main() + main() Modified: trunk/tools/modtool.py =================================================================== --- trunk/tools/modtool.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/tools/modtool.py 2007-08-21 11:38:15 UTC (rev 167) @@ -1,90 +1,94 @@ #Thomas Fischer 31/05/2007, th...@th... import sys, os, os.path, shutil -sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) +if sys.platform in ['linux', 'linux2']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_linux")) +elif sys.platform in ['win32']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_windows")) from ror.logger import log from ror.settingsManager import getSettingsManager def usage(): - print "usage (general): %s <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) - print "list <filename>" - print " list all found and valid modifications in filename" - print "" - print "listall <filename> --verbose" - print " list all found modifications in filename (valid and invalid)" - print "" - print "installall <filename> --verbose --dryrun" - print " install all found modifications in filename" - print "" - print "installrepo <filename> --verbose --dryrun" - print " install all found modifications in filename that is downloaded from the repository" - print "" - print "install <filename> <modification> --verbose --dryrun" - print " install a certain modifications in filename (valid and invalid)" - print "" - print "listinstalled" - print " lists all installed RoR Mods" - print "" - print "uninstall <modname> --verbose --dryrun" - print " uninstalls a mod" - print "" - print "notes: the --verbose option is optional to increase the output for debugging" - print " the --dryrun option is optional and prints out what would be done" - sys.exit(0) + print "usage (general): %s <mode> <additionaloptions> [--verbose] [--dryrun]" % (os.path.basename(sys.argv[0])) + print "list <filename>" + print " list all found and valid modifications in filename" + print "" + print "listall <filename> --verbose" + print " list all found modifications in filename (valid and invalid)" + print "" + print "installall <filename> --verbose --dryrun" + print " install all found modifications in filename" + print "" + print "installrepo <filename> --verbose --dryrun" + print " install all found modifications in filename that is downloaded from the repository" + print "" + print "install <filename> <modification> --verbose --dryrun" + print " install a certain modifications in filename (valid and invalid)" + print "" + print "listinstalled" + print " lists all installed RoR Mods" + print "" + print "uninstall <modname> --verbose --dryrun" + print " uninstalls a mod" + print "" + print "notes: the --verbose option is optional to increase the output for debugging" + print " the --dryrun option is optional and prints out what would be done" + sys.exit(0) def main(): - # check for valid RoR Directory! - import ror.settingsManager - rorpath = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") - if not os.path.isfile(os.path.join(rorpath,"RoR.exe")): - import ror.starter - ror.starter.startApp() + # check for valid RoR Directory! + import ror.rorcommon + if not ror.rorcommon.checkRoRDirectory(): + import ror.starter + ror.starter.startApp() - if len(sys.argv) < 2: - usage() + if len(sys.argv) < 2: + usage() - mode = sys.argv[1] - if not mode in ['list', 'listall', 'install', 'installall', 'listinstalled','uninstall', 'installrepo']: - usage() - if len(sys.argv) < 4 and mode in ['install']: - usage() - - if mode in ['list', 'listall', 'install', 'installall']: - targetfile = sys.argv[2] - if not os.path.isfile(targetfile): - log().error("%s is not a valid target filename!" % targetfile) - usage() - elif mode in ['listinstalled']: - targetfile = rorpath - elif mode in ['installrepo']: - targetfile = sys.argv[2] - elif mode == 'uninstall': - targetfile = sys.argv[2] - - # get optional flags - verbose = False - dryrun = False - for option in sys.argv: - if option == "--verbose": - verbose = True - if option == "--dryrun": - dryrun = True + mode = sys.argv[1] + if not mode in ['list', 'listall', 'install', 'installall', 'listinstalled','uninstall', 'installrepo']: + usage() + if len(sys.argv) < 4 and mode in ['install']: + usage() - # Import Psyco if available - try: - import psyco - psyco.full() - except ImportError: - pass - - if len(sys.argv) == 4: - installtarget = sys.argv[3] - else: - installtarget = None - import ror.modtool - result = ror.modtool.ModTool().work(mode, targetfile, verbose, dryrun, installtarget) - + if mode in ['list', 'listall', 'install', 'installall']: + targetfile = sys.argv[2] + if not os.path.isfile(targetfile): + log().error("%s is not a valid target filename!" % targetfile) + usage() + elif mode in ['listinstalled']: + targetfile = rorpath + elif mode in ['installrepo']: + targetfile = sys.argv[2] + elif mode == 'uninstall': + targetfile = sys.argv[2] + # get optional flags + verbose = False + dryrun = False + for option in sys.argv: + if option == "--verbose": + verbose = True + if option == "--dryrun": + dryrun = True + + # Import Psyco if available + try: + import psyco + psyco.full() + except ImportError: + pass + + if len(sys.argv) == 4: + installtarget = sys.argv[3] + else: + installtarget = None + import ror.modtool + result = ror.modtool.ModTool().work(mode, targetfile, verbose, dryrun, installtarget) + + if __name__=="__main__": - main() + main() Modified: trunk/tools/update.py =================================================================== --- trunk/tools/update.py 2007-08-21 10:53:21 UTC (rev 166) +++ trunk/tools/update.py 2007-08-21 11:38:15 UTC (rev 167) @@ -1,21 +1,27 @@ import sys, os, os.path def main(): - sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib")) - guiVersion = (os.path.basename(sys.executable).lower() == "pythonw.exe") - if guiVersion: - import wx - - MainApp = wx.PySimpleApp(0) - wx.InitAllImageHandlers() #you may or may not need this + if sys.platform in ['linux', 'linux2']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_linux")) + elif sys.platform in ['win32']: + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_common")) + sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "lib_windows")) - import ror.svngui - gui = ror.svngui.svnUpdate(False) - del gui - else: - #non-gui version: - import ror.svn - ror.svn.run() + guiVersion = (os.path.basename(sys.executable).lower() == "pythonw.exe") + if guiVersion: + import wx -if __name__=="__main__": - main() \ No newline at end of file + MainApp = wx.PySimpleApp(0) + wx.InitAllImageHandlers() #you may or may not need this + + import ror.svngui + gui = ror.svngui.svnUpdate(False) + del gui + else: + #non-gui version: + import ror.svn + ror.svn.run() + +if __name__=="__main__": + main() \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-21 10:53:25
|
Revision: 166 http://roreditor.svn.sourceforge.net/roreditor/?rev=166&view=rev Author: rorthomas Date: 2007-08-21 03:53:21 -0700 (Tue, 21 Aug 2007) Log Message: ----------- dir structure 2 Added Paths: ----------- trunk/lib_common/ror/ trunk/lib_common/roreditor/ Removed Paths: ------------- trunk/lib_windows/ror/ trunk/lib_windows/roreditor/ Copied: trunk/lib_common/ror (from rev 165, trunk/lib_windows/ror) Copied: trunk/lib_common/roreditor (from rev 165, trunk/lib_windows/roreditor) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-21 10:52:48
|
Revision: 165 http://roreditor.svn.sourceforge.net/roreditor/?rev=165&view=rev Author: rorthomas Date: 2007-08-21 03:52:43 -0700 (Tue, 21 Aug 2007) Log Message: ----------- new dir structure Modified Paths: -------------- trunk/lib_windows/ror/starter.py trunk/lib_windows/wxogre/OgreManager.py Added Paths: ----------- trunk/lib_common/ trunk/lib_linux/ trunk/lib_windows/ Removed Paths: ------------- trunk/lib/ Copied: trunk/lib_windows (from rev 164, trunk/lib) Modified: trunk/lib_windows/ror/starter.py =================================================================== --- trunk/lib/ror/starter.py 2007-08-19 11:16:59 UTC (rev 164) +++ trunk/lib_windows/ror/starter.py 2007-08-21 10:52:43 UTC (rev 165) @@ -19,287 +19,289 @@ class ImagePanel(wx.Panel): - """ class Panel1 creates a panel with an image on it, inherits wx.Panel """ - def __init__(self, parent, id, imageFile): - wx.Panel.__init__(self, parent, id) - try: - jpg1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap() - wx.StaticBitmap(self, wx.ID_ANY, jpg1, (0, 0), (jpg1.GetWidth(), jpg1.GetHeight())) - except IOError: - log().error("Image file %s not found" % imageFile) - raise SystemExit + """ class Panel1 creates a panel with an image on it, inherits wx.Panel """ + def __init__(self, parent, id, imageFile): + wx.Panel.__init__(self, parent, id) + try: + jpg1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap() + wx.StaticBitmap(self, wx.ID_ANY, jpg1, (0, 0), (jpg1.GetWidth(), jpg1.GetHeight())) + except IOError: + log().error("Image file %s not found" % imageFile) + raise SystemExit -class SettingsDialog(wx.Frame): - rordir = None - def __init__(self, *args, **kwds): - kwds["style"] = wx.SYSTEM_MENU | wx.CAPTION | wx.CLIP_CHILDREN | wx.CLOSE_BOX - wx.Frame.__init__(self, *args, **kwds) +class SettingsDialog(wx.Frame): + rordir = None + def __init__(self, *args, **kwds): + kwds["style"] = wx.SYSTEM_MENU | wx.CAPTION | wx.CLIP_CHILDREN | wx.CLOSE_BOX + wx.Frame.__init__(self, *args, **kwds) - self.panel = wx.Panel(self, wx.ID_ANY) - - self.image = ImagePanel(self.panel, wx.ID_ANY, SPLASHIMAGE) - - self.lblRoRDir = wx.StaticText(self.panel, wx.ID_ANY, "Please select Rigs of Rods Directory!", size = (20, 40), style = wx.ALIGN_CENTRE | wx.ST_NO_AUTORESIZE) - self.btnSelectRoRDir = wx.Button(self.panel, wx.ID_ANY, "Select RoR Directory") - self.Bind(wx.EVT_BUTTON, self.OnSelectRoRDir, self.btnSelectRoRDir) + self.panel = wx.Panel(self, wx.ID_ANY) - self.btnStartRoR = wx.Button(self.panel, wx.ID_ANY, "Start RoR") - self.Bind(wx.EVT_BUTTON, self.OnStartRoR, self.btnStartRoR) + self.image = ImagePanel(self.panel, wx.ID_ANY, SPLASHIMAGE) - self.cbbRenderEngine = wx.ComboBox(self.panel, wx.ID_ANY, RENDERSYSTEMS[0], style=wx.CB_READONLY, choices=RENDERSYSTEMS) - self.Bind(wx.EVT_COMBOBOX, self.OnSelectRenderer, self.cbbRenderEngine) - - self.btnStartTerrainEditor = wx.Button(self.panel, wx.ID_ANY, "Start Editor") - self.Bind(wx.EVT_BUTTON, self.OnTerrainEditor, self.btnStartTerrainEditor) - - self.btnBugReport = wx.Button(self.panel, wx.ID_ANY, "Report a Bug") - self.Bind(wx.EVT_BUTTON, self.OnBugReport, self.btnBugReport) + self.lblRoRDir = wx.StaticText(self.panel, wx.ID_ANY, "Please select Rigs of Rods Directory!", size = (20, 40), style = wx.ALIGN_CENTRE | wx.ST_NO_AUTORESIZE) + self.btnSelectRoRDir = wx.Button(self.panel, wx.ID_ANY, "Select RoR Directory") + self.Bind(wx.EVT_BUTTON, self.OnSelectRoRDir, self.btnSelectRoRDir) - self.btnUpdate = wx.Button(self.panel, wx.ID_ANY, "Update") - self.Bind(wx.EVT_BUTTON, self.OnUpdate, self.btnUpdate) - - self.btnDepGraph = wx.Button(self.panel, wx.ID_ANY, "Dependency Graph") - self.Bind(wx.EVT_BUTTON, self.OnDepGraph, self.btnDepGraph) + self.btnStartRoR = wx.Button(self.panel, wx.ID_ANY, "Start RoR") + self.Bind(wx.EVT_BUTTON, self.OnStartRoR, self.btnStartRoR) - self.btnModUninstaller = wx.Button(self.panel, wx.ID_ANY, "Mod Uninstaller") - self.Bind(wx.EVT_BUTTON, self.OnModUninstaller, self.btnModUninstaller) + if sys.platform == 'win32': + self.cbbRenderEngine = wx.ComboBox(self.panel, wx.ID_ANY, RENDERSYSTEMS[0], style=wx.CB_READONLY, choices=RENDERSYSTEMS) + self.Bind(wx.EVT_COMBOBOX, self.OnSelectRenderer, self.cbbRenderEngine) - self.btnRepClient = wx.Button(self.panel, wx.ID_ANY, "Repository Client") - self.Bind(wx.EVT_BUTTON, self.OnRepClient, self.btnRepClient) - - self.btnExit = wx.Button(self.panel, wx.ID_ANY, "Exit") - self.Bind(wx.EVT_BUTTON, self.OnExit, self.btnExit) - - self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") - self.checkRoRDir(self.rordir) - - #print self.rordir - self.displayRoRDir() - self.__set_properties() - self.__do_layout() - - self.renderSystem = RENDERSYSTEMS[0] + self.btnStartTerrainEditor = wx.Button(self.panel, wx.ID_ANY, "Start Editor") + self.Bind(wx.EVT_BUTTON, self.OnTerrainEditor, self.btnStartTerrainEditor) - def OnRepClient(self, event=None): - import repomanager - repomanager.main() - - def displayRoRDir(self): - if self.rordir == "": - self.btnStartRoR.Enable(False) - #self.btnStartTruckEditor.Enable(False) - self.btnStartTerrainEditor.Enable(False) - self.btnBugReport.Enable(False) - self.lblRoRDir.SetLabel("Please select Rigs of Rods Directory!") - else: - self.btnStartRoR.Enable(True) - #self.btnStartTruckEditor.Enable(True) - self.btnStartTerrainEditor.Enable(True) - self.btnBugReport.Enable(True) - self.lblRoRDir.SetLabel("Selected Rigs of Rods Directory: " + self.rordir) - - def OnSelectRenderer(self, id=None, func=None): - self.renderSystem = self.cbbRenderEngine.GetCurrentSelection() - self.updateRenderer() + self.btnBugReport = wx.Button(self.panel, wx.ID_ANY, "Report a Bug") + self.Bind(wx.EVT_BUTTON, self.OnBugReport, self.btnBugReport) - def updateRenderer(self): - filename = os.path.join(os.getcwd(), "plugins.cfg") - f=open(filename, 'r') - content = f.readlines() - f.close() - log().info("selected rendersystem: %s" % RENDERSYSTEMS[self.renderSystem]) - for i in range(0, len(content)): - if content[i].find(OPENGLLINE) >= 0: - if self.renderSystem == 0: - content[i] = OPENGLLINE+"\n" - else: - content[i] = "#"+OPENGLLINE+"\n" - elif content[i].find(DIRECTXLINE) >= 0: - if self.renderSystem == 1: - content[i] = DIRECTXLINE+"\n" - else: - content[i] = "#"+DIRECTXLINE+"\n" + self.btnUpdate = wx.Button(self.panel, wx.ID_ANY, "Update") + self.Bind(wx.EVT_BUTTON, self.OnUpdate, self.btnUpdate) - f=open(filename, 'w') - f.writelines(content) - f.close() - - def OnDepGraph(self, event=None): - import ror.depchecker - ror.depchecker.RoRDepChecker(self.rordir, "all", "") - file = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "graphs", "alldependencies.png")) - #print file - if os.path.isfile(file): - dlg = wx.MessageDialog(self, "Graph successfully created:\n"+file, "Info", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - cmd = file - p = subprocess.Popen(cmd, shell = True, stderr = subprocess.PIPE, stdout = subprocess.PIPE) - else: - dlg = wx.MessageDialog(self, "Graph creation failed :(", "Info", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - def OnModUninstaller(self, event=None): - import modgui - gui = modgui.ModGUI(None, -1, "") - gui.Show() - del gui - - def OnUpdate(self, event=None): - import svngui - gui = svngui.svnUpdate() - del gui + self.btnDepGraph = wx.Button(self.panel, wx.ID_ANY, "Dependency Graph") + self.Bind(wx.EVT_BUTTON, self.OnDepGraph, self.btnDepGraph) - def checkForUpdate(self): - import svn - return svn.checkForUpdate() - + self.btnModUninstaller = wx.Button(self.panel, wx.ID_ANY, "Mod Uninstaller") + self.Bind(wx.EVT_BUTTON, self.OnModUninstaller, self.btnModUninstaller) - def OnStartRoR(self, event=None): - try: - path = os.path.join(self.rordir, "RoR.exe") - log().info("starting RoR: %s" % path) - p = Popen(path, shell = False, cwd = self.rordir) - #sts = os.waitpid(p.pid, 0) - except Exception, e: - log().exception(str(e)) + self.btnRepClient = wx.Button(self.panel, wx.ID_ANY, "Repository Client") + self.Bind(wx.EVT_BUTTON, self.OnRepClient, self.btnRepClient) - # def OnTruckEditor(self, event=None): - # try: - # import rortruckeditor.MainFrame - # self.Close() - # log().info("starting Truckeditor") - # app = rortruckeditor.MainFrame.startApp() - # del app - # except Exception, e: - # log().exception(str(e)) - - def OnBugReport(self, event=None): - try: - if self.checkForUpdate(): - dlg = wx.MessageDialog(self, "Update Available!\nPlease update prior submitting a BugReport!", "Info", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - self.btnBugReport.Enable(False) - return - - log().info("starting bugreporter") - import ror.bugreport - ror.bugreport.showBugReportFrame() - except Exception, e: - log().exception(str(e)) + self.btnExit = wx.Button(self.panel, wx.ID_ANY, "Exit") + self.Bind(wx.EVT_BUTTON, self.OnExit, self.btnExit) - def OnTerrainEditor(self, event=None): - try: - log().info("starting Terraineditor") - self.Close() - app = roreditor.MainFrame.startApp() - del app - #self.Show() - except Exception, e: - log().exception(str(e)) + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") + self.checkRoRDir(self.rordir) - def checkRoRDir(self, fn): - # withoutspaces = (fn.find(" ") == -1) - # if not withoutspaces: - # dlg = wx.MessageDialog(self, "Your RoR installation directory contains spaces. Rename/move it to a directory with no spaces.\nFor example c:\\ror", "Error", wx.OK | wx.ICON_INFORMATION) - # dlg.ShowModal() - # dlg.Destroy() - # return False - - exists = os.path.isfile(os.path.join(fn,"RoR.exe")) - if not exists: - dlg = wx.MessageDialog(self, "RoR.exe not found in the selected directory!\nPlease select a new directory!", "Error", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - self.rordir = "" - return False - - self.rordir = fn - return True - - def OnSelectRoRDir(self, event=None): - dialog = wx.DirDialog(self, "Choose RoR Directory", "") - res = dialog.ShowModal() - if res == wx.ID_OK: - newpath = dialog.GetPath() - if not self.checkRoRDir(newpath): - return - - # no need to escape here! - #newpath = newpath.replace(" ", "\ ") - self.rordir = newpath - getSettingsManager().setSetting("RigsOfRods", "BasePath", newpath) - self.displayRoRDir() - - def OnExit(self, event=None): - self.Close() - sys.exit(0) + #print self.rordir + self.displayRoRDir() + self.__set_properties() + self.__do_layout() - def __set_properties(self): - #try: - import ror.svn - self.SetTitle("RoR Toolkit r%d" % ror.svn.getRevision()) - #except: - # self.SetTitle("RoR Toolkit") + self.renderSystem = RENDERSYSTEMS[0] - def __do_layout(self): - - sizer_panel = wx.BoxSizer(wx.VERTICAL) - sizer_panel.Add(self.image, 0, wx.EXPAND, 0) - - sizer_a = wx.BoxSizer(wx.HORIZONTAL) - sizer_a.Add(self.lblRoRDir, 1, wx.EXPAND, 0) - sizer_a.Add(self.btnSelectRoRDir, 0, wx.EXPAND, 0) - sizer_panel.Add(sizer_a, 0, wx.EXPAND, 0) - - sizer_b = wx.BoxSizer(wx.HORIZONTAL) - sizer_b.Add(self.btnStartRoR, 0, wx.EXPAND, 0) + def OnRepClient(self, event=None): + import repomanager + repomanager.main() - sizer_c = wx.BoxSizer(wx.VERTICAL) - #sizer_c.Add(self.btnStartTruckEditor, 1, wx.EXPAND, 0) - sizer_c.Add(self.btnStartTerrainEditor, 1, wx.EXPAND, 0) - sizer_b.Add(sizer_c, 1, wx.EXPAND, 0) - - sizer_b.Add(self.cbbRenderEngine, 0, wx.EXPAND, 0) - sizer_panel.Add(sizer_b, 1, wx.EXPAND, 0) + def displayRoRDir(self): + if self.rordir == "": + self.btnStartRoR.Enable(False) + #self.btnStartTruckEditor.Enable(False) + self.btnStartTerrainEditor.Enable(False) + self.btnBugReport.Enable(False) + self.lblRoRDir.SetLabel("Please select Rigs of Rods Directory!") + else: + self.btnStartRoR.Enable(True) + #self.btnStartTruckEditor.Enable(True) + self.btnStartTerrainEditor.Enable(True) + self.btnBugReport.Enable(True) + self.lblRoRDir.SetLabel("Selected Rigs of Rods Directory: " + self.rordir) - sizer_d = wx.BoxSizer(wx.HORIZONTAL) - sizer_d.Add(self.btnBugReport, 1, wx.EXPAND, 0) - sizer_d.Add(self.btnUpdate, 1, wx.EXPAND, 0) - sizer_panel.Add(sizer_d, 0, wx.EXPAND, 0) - - - sizer_e = wx.BoxSizer(wx.HORIZONTAL) - sizer_e.Add(self.btnDepGraph, 1, wx.EXPAND, 0) - sizer_e.Add(self.btnRepClient, 1, wx.EXPAND, 0) - sizer_e.Add(self.btnModUninstaller, 1, wx.EXPAND, 0) - sizer_panel.Add(sizer_e, 0, wx.EXPAND, 0) - - sizer_panel.Add(self.btnExit, 0, wx.EXPAND, 0) - self.panel.SetSizer(sizer_panel) + def OnSelectRenderer(self, id=None, func=None): + self.renderSystem = self.cbbRenderEngine.GetCurrentSelection() + self.updateRenderer() - sizer_main = wx.BoxSizer(wx.VERTICAL) - sizer_main.Add(self.panel, 0, wx.EXPAND, 0) - - self.SetAutoLayout(True) - self.SetSizer(sizer_main) - sizer_main.Fit(self) - sizer_main.SetSizeHints(self) - self.Layout() + def updateRenderer(self): + filename = os.path.join(os.getcwd(), "plugins_windows.cfg") + f=open(filename, 'r') + content = f.readlines() + f.close() + log().info("selected rendersystem: %s" % RENDERSYSTEMS[self.renderSystem]) + for i in range(0, len(content)): + if content[i].find(OPENGLLINE) >= 0: + if self.renderSystem == 0: + content[i] = OPENGLLINE+"\n" + else: + content[i] = "#"+OPENGLLINE+"\n" + elif content[i].find(DIRECTXLINE) >= 0: + if self.renderSystem == 1: + content[i] = DIRECTXLINE+"\n" + else: + content[i] = "#"+DIRECTXLINE+"\n" + f=open(filename, 'w') + f.writelines(content) + f.close() + + def OnDepGraph(self, event=None): + import ror.depchecker + ror.depchecker.RoRDepChecker(self.rordir, "all", "") + file = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "graphs", "alldependencies.png")) + #print file + if os.path.isfile(file): + dlg = wx.MessageDialog(self, "Graph successfully created:\n"+file, "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + cmd = file + p = subprocess.Popen(cmd, shell = True, stderr = subprocess.PIPE, stdout = subprocess.PIPE) + else: + dlg = wx.MessageDialog(self, "Graph creation failed :(", "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + + def OnModUninstaller(self, event=None): + import modgui + gui = modgui.ModGUI(None, -1, "") + gui.Show() + del gui + + def OnUpdate(self, event=None): + import svngui + gui = svngui.svnUpdate() + del gui + + def checkForUpdate(self): + import svn + return svn.checkForUpdate() + + + def OnStartRoR(self, event=None): + try: + path = os.path.join(self.rordir, "RoR.exe") + log().info("starting RoR: %s" % path) + p = Popen(path, shell = False, cwd = self.rordir) + #sts = os.waitpid(p.pid, 0) + except Exception, e: + log().exception(str(e)) + + # def OnTruckEditor(self, event=None): + # try: + # import rortruckeditor.MainFrame + # self.Close() + # log().info("starting Truckeditor") + # app = rortruckeditor.MainFrame.startApp() + # del app + # except Exception, e: + # log().exception(str(e)) + + def OnBugReport(self, event=None): + try: + if self.checkForUpdate(): + dlg = wx.MessageDialog(self, "Update Available!\nPlease update prior submitting a BugReport!", "Info", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + self.btnBugReport.Enable(False) + return + + log().info("starting bugreporter") + import ror.bugreport + ror.bugreport.showBugReportFrame() + except Exception, e: + log().exception(str(e)) + + def OnTerrainEditor(self, event=None): + try: + log().info("starting Terraineditor") + self.Close() + app = roreditor.MainFrame.startApp() + del app + #self.Show() + except Exception, e: + log().exception(str(e)) + + def checkRoRDir(self, fn): + # withoutspaces = (fn.find(" ") == -1) + # if not withoutspaces: + # dlg = wx.MessageDialog(self, "Your RoR installation directory contains spaces. Rename/move it to a directory with no spaces.\nFor example c:\\ror", "Error", wx.OK | wx.ICON_INFORMATION) + # dlg.ShowModal() + # dlg.Destroy() + # return False + + exists = os.path.isfile(os.path.join(fn,"RoR.exe")) + if not exists: + dlg = wx.MessageDialog(self, "RoR.exe not found in the selected directory!\nPlease select a new directory!", "Error", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + self.rordir = "" + return False + + self.rordir = fn + return True + + def OnSelectRoRDir(self, event=None): + dialog = wx.DirDialog(self, "Choose RoR Directory", "") + res = dialog.ShowModal() + if res == wx.ID_OK: + newpath = dialog.GetPath() + if not self.checkRoRDir(newpath): + return + + # no need to escape here! + #newpath = newpath.replace(" ", "\ ") + self.rordir = newpath + getSettingsManager().setSetting("RigsOfRods", "BasePath", newpath) + self.displayRoRDir() + + def OnExit(self, event=None): + self.Close() + sys.exit(0) + + def __set_properties(self): + #try: + import ror.svn + self.SetTitle("RoR Toolkit r%d" % ror.svn.getRevision()) + #except: + # self.SetTitle("RoR Toolkit") + + def __do_layout(self): + + sizer_panel = wx.BoxSizer(wx.VERTICAL) + sizer_panel.Add(self.image, 0, wx.EXPAND, 0) + + sizer_a = wx.BoxSizer(wx.HORIZONTAL) + sizer_a.Add(self.lblRoRDir, 1, wx.EXPAND, 0) + sizer_a.Add(self.btnSelectRoRDir, 0, wx.EXPAND, 0) + sizer_panel.Add(sizer_a, 0, wx.EXPAND, 0) + + sizer_b = wx.BoxSizer(wx.HORIZONTAL) + sizer_b.Add(self.btnStartRoR, 0, wx.EXPAND, 0) + + sizer_c = wx.BoxSizer(wx.VERTICAL) + #sizer_c.Add(self.btnStartTruckEditor, 1, wx.EXPAND, 0) + sizer_c.Add(self.btnStartTerrainEditor, 1, wx.EXPAND, 0) + sizer_b.Add(sizer_c, 1, wx.EXPAND, 0) + + if sys.platform == 'win32': + sizer_b.Add(self.cbbRenderEngine, 0, wx.EXPAND, 0) + sizer_panel.Add(sizer_b, 1, wx.EXPAND, 0) + + sizer_d = wx.BoxSizer(wx.HORIZONTAL) + sizer_d.Add(self.btnBugReport, 1, wx.EXPAND, 0) + sizer_d.Add(self.btnUpdate, 1, wx.EXPAND, 0) + sizer_panel.Add(sizer_d, 0, wx.EXPAND, 0) + + + sizer_e = wx.BoxSizer(wx.HORIZONTAL) + sizer_e.Add(self.btnDepGraph, 1, wx.EXPAND, 0) + sizer_e.Add(self.btnRepClient, 1, wx.EXPAND, 0) + sizer_e.Add(self.btnModUninstaller, 1, wx.EXPAND, 0) + sizer_panel.Add(sizer_e, 0, wx.EXPAND, 0) + + sizer_panel.Add(self.btnExit, 0, wx.EXPAND, 0) + self.panel.SetSizer(sizer_panel) + + sizer_main = wx.BoxSizer(wx.VERTICAL) + sizer_main.Add(self.panel, 0, wx.EXPAND, 0) + + self.SetAutoLayout(True) + self.SetSizer(sizer_main) + sizer_main.Fit(self) + sizer_main.SetSizeHints(self) + self.Layout() + def startApp(): - MainApp = wx.PySimpleApp() - wx.InitAllImageHandlers() #you may or may not need this - myFrame = SettingsDialog(None, -1, "") + MainApp = wx.PySimpleApp() + wx.InitAllImageHandlers() #you may or may not need this + myFrame = SettingsDialog(None, -1, "") - # add icon to the window - icon = wx.Icon("ror.ico",wx.BITMAP_TYPE_ICO) - myFrame.SetIcon(icon) - MainApp.SetTopWindow(myFrame) - - myFrame.Show() - - MainApp.MainLoop() + # add icon to the window + icon = wx.Icon("ror.ico",wx.BITMAP_TYPE_ICO) + myFrame.SetIcon(icon) + MainApp.SetTopWindow(myFrame) + + myFrame.Show() + + MainApp.MainLoop() Modified: trunk/lib_windows/wxogre/OgreManager.py =================================================================== --- trunk/lib/wxogre/OgreManager.py 2007-08-19 11:16:59 UTC (rev 164) +++ trunk/lib_windows/wxogre/OgreManager.py 2007-08-21 10:52:43 UTC (rev 165) @@ -1,7 +1,7 @@ #Thomas Fischer 31/05/2007, th...@th... import sys import wx -import ogre.renderer.OGRE as ogre +import ogre.renderer.OGRE as ogre from ror.logger import log from ror.ogrelogger import initOgreLogging @@ -11,116 +11,122 @@ # singleton implementation of OgreManager _ogremanager = None def getOgreManager(): - global _ogremanager - if _ogremanager is None: - _ogremanager = OgreManager() - return _ogremanager + global _ogremanager + if _ogremanager is None: + _ogremanager = OgreManager() + return _ogremanager class MyLog(ogre.LogListener): - def __init__(self): - # Creates a C++ log that will try and write to console and file - ogre.LogListener.__init__(self) - - def messageLogged(self, message, level, debug, logName): - print ">>>", message - return True - + def __init__(self): + # Creates a C++ log that will try and write to console and file + ogre.LogListener.__init__(self) + def messageLogged(self, message, level, debug, logName): + print ">>>", message + return True + + class OgreManager(): - renderWindows = {} + renderWindows = {} - def restart(self): - self.ogreRoot.shutdown() - self.init() - - def __init__(self): - self.init() - - def init(self): - #Root creation - self.ogreRoot = ogre.Root(self.getConfigPath('plugins.cfg'), self.getConfigPath('ogre.cfg'), "Ogre.log") - #logMgr = ogre.LogManager() - #currentLog = ogre.LogManager.getSingletonPtr().createLog("ogre.log" ,True, False, False) - #myLog = MyLog() - #currentLog.addListener ( myLog ) - #ogre.LogManager.getSingletonPtr().setDefaultLog(currentLog) + def restart(self): + self.ogreRoot.shutdown() + self.init() - if not self.tryDetectRenderer(): - self.ogreRoot.showConfigDialog() - self.ogreRoot.initialise(False) + def __init__(self): + self.init() - def tryDetectRenderer(self): - for rs in self.ogreRoot.getAvailableRenderers(): - try : - rs.setConfigOption("Full Screen","No") - rs.setConfigOption("Video Mode","800 x 600 @ 32-bit colour") - self.ogreRoot.setRenderSystem(rs) - log().info("successfully autodeteced renderer : %s" % rs.getName()) - return True - except: - log().info("not able to auto-detect renderer! showing ogre config dialog instead") - return False - - def getRoot(self): - return self.ogreRoot - - def getConfigPath(self, filename): - """Return the absolute path to a valid config file.""" - import sys - import os - import os.path - - paths = [os.path.join(os.getcwd(), filename), - os.path.join(os.path.dirname(os.path.abspath(__file__)), filename)] + def init(self): + #Root creation + pluginsfile = 'plugins.cfg' + if sys.platform in ['linux', 'linux2']: + pluginsfile = 'plugins_linux.cfg' + elif sys.platform in ['win32']: + pluginsfile = 'plugins_windows.cfg' + + self.ogreRoot = ogre.Root(self.getConfigPath(pluginsfile), self.getConfigPath('ogre.cfg'), "Ogre.log") + #logMgr = ogre.LogManager() + #currentLog = ogre.LogManager.getSingletonPtr().createLog("ogre.log" ,True, False, False) + #myLog = MyLog() + #currentLog.addListener ( myLog ) + #ogre.LogManager.getSingletonPtr().setDefaultLog(currentLog) - for path in paths: - if os.path.exists(path): - print path - return path + if not self.tryDetectRenderer(): + self.ogreRoot.showConfigDialog() + self.ogreRoot.initialise(False) - sys.stderr.write("\n" - "** Warning: Unable to locate a suitable " + filename + " file.\n" - "** Warning: Please check your ogre installation and copy a\n" - "** Warning: working plugins.cfg file to the current directory.\n\n") - #raise ogre.Exception(0, "can't locate the '%s' file" % filename, "") - - def createRenderWindow(self, wxOgrewin, name, width, height, fullscreen, handle): - renderParameters = ogre.NameValuePairList() - renderParameters['externalWindowHandle'] = str(handle) - # use len to make the names unique! - renderWindow = self.ogreRoot.createRenderWindow(name + str(len(self.renderWindows)), width, height, fullscreen, renderParameters) - #renderWindow.active = True - self.renderWindows[wxOgrewin] = renderWindow - return renderWindow + def tryDetectRenderer(self): + for rs in self.ogreRoot.getAvailableRenderers(): + try : + rs.setConfigOption("Full Screen","No") + rs.setConfigOption("Video Mode","800 x 600 @ 32-bit colour") + self.ogreRoot.setRenderSystem(rs) + log().info("successfully autodeteced renderer : %s" % rs.getName()) + return True + except: + log().info("not able to auto-detect renderer! showing ogre config dialog instead") + return False - def removeRenderWindow(self, wxOgrewin): - print "removing render target" - self.ogreRoot.detachRenderTarget(self.renderWindows[wxOgrewin]) - del self.renderWindows[wxOgrewin] + def getRoot(self): + return self.ogreRoot - def RenderAll(self): - for ogrewin in self.renderWindows.keys(): - try: - ogrewin.OnFrameStarted() - except: - continue - - try: - self.ogreRoot.renderOneFrame() - except ogre.OgreException, e: - print '## EXCEPTION ##' - print str(e) - pass - - for ogrewin in self.renderWindows.keys(): - try: - ogrewin.OnFrameEnded() - except: - continue - - def createSceneManager(self, type): - return self.ogreRoot.createSceneManager(type, "SceneManager" + str(randomID())) + def getConfigPath(self, filename): + """Return the absolute path to a valid config file.""" + import sys + import os + import os.path - def destroySceneManager(self, sm): - return self.ogreRoot.destroySceneManager(sm) - \ No newline at end of file + paths = [os.path.join(os.getcwd(), filename), + os.path.join(os.path.dirname(os.path.abspath(__file__)), filename)] + + for path in paths: + if os.path.exists(path): + print path + return path + + sys.stderr.write("\n" + "** Warning: Unable to locate a suitable " + filename + " file.\n" + "** Warning: Please check your ogre installation and copy a\n" + "** Warning: working plugins.cfg file to the current directory.\n\n") + #raise ogre.Exception(0, "can't locate the '%s' file" % filename, "") + + def createRenderWindow(self, wxOgrewin, name, width, height, fullscreen, handle): + renderParameters = ogre.NameValuePairList() + renderParameters['externalWindowHandle'] = str(handle) + # use len to make the names unique! + renderWindow = self.ogreRoot.createRenderWindow(name + str(len(self.renderWindows)), width, height, fullscreen, renderParameters) + #renderWindow.active = True + self.renderWindows[wxOgrewin] = renderWindow + return renderWindow + + def removeRenderWindow(self, wxOgrewin): + print "removing render target" + self.ogreRoot.detachRenderTarget(self.renderWindows[wxOgrewin]) + del self.renderWindows[wxOgrewin] + + def RenderAll(self): + for ogrewin in self.renderWindows.keys(): + try: + ogrewin.OnFrameStarted() + except: + continue + + try: + self.ogreRoot.renderOneFrame() + except ogre.OgreException, e: + print '## EXCEPTION ##' + print str(e) + pass + + for ogrewin in self.renderWindows.keys(): + try: + ogrewin.OnFrameEnded() + except: + continue + + def createSceneManager(self, type): + return self.ogreRoot.createSceneManager(type, "SceneManager" + str(randomID())) + + def destroySceneManager(self, sm): + return self.ogreRoot.destroySceneManager(sm) + \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-19 11:17:04
|
Revision: 164 http://roreditor.svn.sourceforge.net/roreditor/?rev=164&view=rev Author: rorthomas Date: 2007-08-19 04:16:59 -0700 (Sun, 19 Aug 2007) Log Message: ----------- * fixed some translation arrow bugs thx to donken! :) Modified Paths: -------------- trunk/lib/roreditor/RoRTerrainOgreWindow.py Modified: trunk/lib/roreditor/RoRTerrainOgreWindow.py =================================================================== --- trunk/lib/roreditor/RoRTerrainOgreWindow.py 2007-08-08 13:34:01 UTC (rev 163) +++ trunk/lib/roreditor/RoRTerrainOgreWindow.py 2007-08-19 11:16:59 UTC (rev 164) @@ -269,7 +269,7 @@ def reattachArrows(self, entity): self.TranslateNode.setPosition(entity.getParentNode().getPosition()) - self.TranslateNode.setOrientation(entity.getParentNode().getOrientation()) + #self.TranslateNode.setOrientation(entity.getParentNode().getOrientation()) self.RotateNode.setOrientation(entity.getParentNode().getOrientation()) self.RotateNode.setPosition(entity.getParentNode().getPosition()) @@ -810,9 +810,9 @@ if self.SelectedArrow.getName() == 'movearrowsX': self.translateSelected(ogre.Vector3(forcex, 0, 0), LockSteps) elif self.SelectedArrow.getName() == 'movearrowsY': + self.translateSelected(ogre.Vector3(0, 0, forcex), LockSteps) + elif self.SelectedArrow.getName() == 'movearrowsZ': self.translateSelected(ogre.Vector3(0, forcex, 0), LockSteps) - elif self.SelectedArrow.getName() == 'movearrowsZ': - self.translateSelected(ogre.Vector3(0, 0, forcex), LockSteps) elif self.SelectedArrow.getName() == 'rotatearrowsX': self.rotateSelected(ogre.Vector3.UNIT_Y, forceDegree, LockSteps) elif self.SelectedArrow.getName() == 'rotatearrowsY': This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-08 13:34:02
|
Revision: 163 http://roreditor.svn.sourceforge.net/roreditor/?rev=163&view=rev Author: rorthomas Date: 2007-08-08 06:34:01 -0700 (Wed, 08 Aug 2007) Log Message: ----------- * removed debug output Modified Paths: -------------- trunk/lib/ror/odefparser.py trunk/lib/ror/starter.py trunk/lib/roreditor/MainFrame.py Modified: trunk/lib/ror/odefparser.py =================================================================== --- trunk/lib/ror/odefparser.py 2007-08-08 01:37:42 UTC (rev 162) +++ trunk/lib/ror/odefparser.py 2007-08-08 13:34:01 UTC (rev 163) @@ -68,10 +68,10 @@ actualbox.eventname=line[6:] elif line == "endbox": boxes.append(actualbox) - print meshname, float(scalearr[0]), float(scalearr[1]), float(scalearr[2]), ismovable - print "boxes:" - for b in boxes: - print b + #print meshname, float(scalearr[0]), float(scalearr[1]), float(scalearr[2]), ismovable + #print "boxes:" + #for b in boxes: + # print b return meshname, float(scalearr[0]), float(scalearr[1]), float(scalearr[2]), ismovable, boxes except Exception, err: log().error(str(err)) Modified: trunk/lib/ror/starter.py =================================================================== --- trunk/lib/ror/starter.py 2007-08-08 01:37:42 UTC (rev 162) +++ trunk/lib/ror/starter.py 2007-08-08 13:34:01 UTC (rev 163) @@ -197,6 +197,7 @@ self.Close() app = roreditor.MainFrame.startApp() del app + #self.Show() except Exception, e: log().exception(str(e)) Modified: trunk/lib/roreditor/MainFrame.py =================================================================== --- trunk/lib/roreditor/MainFrame.py 2007-08-08 01:37:42 UTC (rev 162) +++ trunk/lib/roreditor/MainFrame.py 2007-08-08 13:34:01 UTC (rev 163) @@ -78,8 +78,8 @@ mb = wx.MenuBar() file_menu = wx.Menu() - file_menu.Append(ID_OpenTerrain, "Open Terrain") - #file_menu.Append(wx.ID_EXIT, "Exit") + #file_menu.Append(ID_OpenTerrain, "Open Terrain") + file_menu.Append(wx.ID_EXIT, "Exit") #view_menu = wx.Menu() #view_menu.Append(ID_CreateOgre, "Create new 3D View") @@ -448,14 +448,17 @@ self.OnExit(event) def OnExit(self, event): - all_panes = self._mgr.GetAllPanes() - for ii in xrange(len(all_panes)): - if not all_panes[ii].IsToolbar(): - all_panes[ii].Hide() - self._mgr.UnInit() - del self._mgr - self.Destroy() - self.Close() + try: + all_panes = self._mgr.GetAllPanes() + for ii in xrange(len(all_panes)): + if not all_panes[ii].IsToolbar(): + all_panes[ii].Hide() + self._mgr.UnInit() + del self._mgr + self.Destroy() + self.Close() + except: + pass def OnAbout(self, event): ShowOnAbout() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-08 01:37:44
|
Revision: 162 http://roreditor.svn.sourceforge.net/roreditor/?rev=162&view=rev Author: rorthomas Date: 2007-08-07 18:37:42 -0700 (Tue, 07 Aug 2007) Log Message: ----------- * bugfixed automatic restart after update Modified Paths: -------------- trunk/tools/updaterestart.py Modified: trunk/tools/updaterestart.py =================================================================== --- trunk/tools/updaterestart.py 2007-08-08 01:34:35 UTC (rev 161) +++ trunk/tools/updaterestart.py 2007-08-08 01:37:42 UTC (rev 162) @@ -4,8 +4,8 @@ def main(): import time time.sleep(1) - path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "rortoolkit.bat") - p = Popen(path, shell = True) + path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "rortoolkit.py") + p = Popen(path, shell = True, cwd = os.path.dirname(path)) sys.exit(0) if __name__=="__main__": This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-08 01:34:36
|
Revision: 161 http://roreditor.svn.sourceforge.net/roreditor/?rev=161&view=rev Author: rorthomas Date: 2007-08-07 18:34:35 -0700 (Tue, 07 Aug 2007) Log Message: ----------- * added some nice logo :D Modified Paths: -------------- trunk/lib/roreditor/MainFrame_Tools.py trunk/lib/roreditor/RoRObjectPreviewOgreWindow.py Added Paths: ----------- trunk/lib/roreditor/help.html trunk/media/materials/odefeditor.material trunk/media/models/logotext.mesh trunk/media/models/logowheel.mesh Removed Paths: ------------- trunk/lib/roreditor/GUIPreviewObject.py trunk/lib/roreditor/MainFrame_old.py trunk/lib/roreditor/MainFrame_org.py trunk/lib/roreditor/terrainhelp.html Deleted: trunk/lib/roreditor/GUIPreviewObject.py =================================================================== --- trunk/lib/roreditor/GUIPreviewObject.py 2007-08-08 00:11:50 UTC (rev 160) +++ trunk/lib/roreditor/GUIPreviewObject.py 2007-08-08 01:34:35 UTC (rev 161) @@ -1,70 +0,0 @@ -import sys, os, os.path - -import wx -import wx.grid -import wx.html -import wx.aui -import ror.settingsManager - -import cStringIO - -RORPATH = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") -DATADIR = os.path.join(RORPATH, "data") -TRUCKDIR = os.path.join(DATADIR, "trucks") -TERRAINDIR = os.path.join(DATADIR, "terrains") -OBJECTDIR = os.path.join(DATADIR, "objects") - -class RoRObjectTreeCtrl(wx.Panel): - def __init__(self, parent, frame): - wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, - wx.DefaultSize) - - self._frame = frame - - - vert = wx.BoxSizer(wx.VERTICAL) - - - tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER) - - root = tree.AddRoot("Objects") - items = [] - - imglist = wx.ImageList(16, 16, True, 2) - imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16))) - imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16))) - tree.AssignImageList(imglist) - - trucks = self.getInstalledTrucks() - items.append(tree.AppendItem(root, "Trucks", 0)) - for truck in trucks: - truckname, extension = os.path.splitext(truck) - tree.AppendItem(items[-1], truckname, 1) - - objects = self.getInstalledObjects() - items.append(tree.AppendItem(root, "Objects", 0)) - for object in objects: - objectname, extension = os.path.splitext(object) - tree.AppendItem(items[-1], objectname, 1) - - - tree.Expand(root) - vert.Add(tree, 1, wx.EXPAND, 5) - self.SetSizer(vert) - self.GetSizer().SetSizeHints(self) - - def getInstalledTrucks(self): - files = [] - for filename in os.listdir(TRUCKDIR): - onlyfilename, extension = os.path.splitext(filename) - if extension.lower() == ".truck": - files.append(filename) - return files - - def getInstalledObjects(self): - files = [] - for filename in os.listdir(OBJECTDIR): - onlyfilename, extension = os.path.splitext(filename) - if extension.lower() == ".odef": - files.append(filename) - return files \ No newline at end of file Modified: trunk/lib/roreditor/MainFrame_Tools.py =================================================================== --- trunk/lib/roreditor/MainFrame_Tools.py 2007-08-08 00:11:50 UTC (rev 160) +++ trunk/lib/roreditor/MainFrame_Tools.py 2007-08-08 01:34:35 UTC (rev 161) @@ -12,7 +12,7 @@ # -- wx.SizeReportCtrl -- # (a utility control that always reports it's client size) -HELPFILENAME = os.path.join(os.path.dirname(os.path.abspath(__file__)), "terrainhelp.html") +HELPFILENAME = os.path.join(os.path.dirname(os.path.abspath(__file__)), "help.html") class HelpPanel(wx.Panel): def __init__(self, parent, frame): Deleted: trunk/lib/roreditor/MainFrame_old.py =================================================================== --- trunk/lib/roreditor/MainFrame_old.py 2007-08-08 00:11:50 UTC (rev 160) +++ trunk/lib/roreditor/MainFrame_old.py 2007-08-08 01:34:35 UTC (rev 161) @@ -1,412 +0,0 @@ -#Thomas Fischer 31/05/2007, th...@th... -from wxogre.OgreManager import * -from ror.RoROgreWindow import * - -from ror.logger import log -from ror.settingsManager import getSettingsManager - -from ror.rorcommon import * -from RoRTerrainOgreWindow import * -from RoRTerrainSelectedObjectOgreWindow import * -from RoRTerrainSelectedObjectTopOgreWindow import * - -ID_ABOUT = 101 -ID_OPENFILE = 102 -ID_SAVEFILE = 103 -ID_VIEWOBJ = 104 -ID_OGRESET = 105 -ID_SHOWHELP = 106 -ID_ADDTRUCK = 107 -ID_ADDMESH = 108 -ID_CHECKUPDATE = 109 -ID_SAVEFILEAS = 110 -ID_TERRAINCOLLISION = 111 -ID_EXIT = 199 - -DATADIR = "data" -TRUCKDIR = os.path.join(DATADIR, "trucks") -TERRAINDIR = os.path.join(DATADIR, "terrains") -OBJECTDIR = os.path.join(DATADIR, "objects") - - -class MainFrame(wx.Frame): - def __init__(self, *args, **kwds): - kwds["style"] = wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLIP_CHILDREN - - wx.Frame.__init__(self, *args, **kwds) - - - #main splitter - self.splitter = wx.SplitterWindow(self, wx.ID_ANY, style=wx.SP_PERMIT_UNSPLIT|wx.SP_3DSASH) - self.splitterleft = wx.Panel(self.splitter, wx.ID_ANY) - self.splitterright = wx.Panel(self.splitter, wx.ID_ANY) - self.splitter.SetSashGravity(1) - self.splitter.SetSashPosition(100) - self.splitter.SetMinimumPaneSize(200) - - #viewsplitter - self.viewsplitter = wx.SplitterWindow(self.splitterright, wx.ID_ANY) - self.viewsplitterup = wx.Panel(self.viewsplitter, wx.ID_ANY) - self.viewsplitterdown = wx.Panel(self.viewsplitter, wx.ID_ANY) - self.splitter.SetSashGravity(0.5) - self.splitter.SetSashPosition(100) - self.splitter.SetMinimumPaneSize(200) - - self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") - - #ogre windows - self.terrainOgreWin = RoRTerrainOgreWindow(self.splitterleft, wx.ID_ANY, rordir=self.rordir) - self.sharedOgreWin = RoRTerrainSelectedObjectOgreWindow(self.viewsplitterup, wx.ID_ANY, self.terrainOgreWin) - self.sharedOgreWin2 = RoRTerrainSelectedObjectTopOgreWindow(self.viewsplitterdown, wx.ID_ANY, self.terrainOgreWin) - - #some labels - #self.helptext = wx.StaticText(self.splitterleft, wx.ID_ANY, "short help: right click = rotate; ctrl + right click, AWSD, mouse wheel = move") - #self.rotatingLabel = wx.StaticText(self.viewsplitterup, wx.ID_ANY, "rotating") - #self.topLabel = wx.StaticText(self.viewsplitterdown, wx.ID_ANY, "top") - - #Timer creation (for label updates) - self.timer = wx.Timer() - self.timer.SetOwner(self) #Sets the timer to notify self: binding the timer event is not enough - self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer) - self.timer.Start(200) - - #Timer creation (for rendering) - self.ogreTimer = wx.Timer() - self.ogreTimer.SetOwner(self) - self.Bind(wx.EVT_TIMER, self.onUpdateRender, self.ogreTimer) - self.ogreTimer.Start(25) - - #create statusbar - self.statusbar = self.CreateStatusBar(5, 0, wx.ID_ANY, "mainstatusbar") - self.statusbar.SetStatusWidths([-1, 200, 130, 250, 80]) - #self.statusbar.SetStatusText("", 1) - - #create toolbar - #self.toolbar = wx.ToolBar(self, wx.ID_ANY, style = wx.TB_HORZ_TEXT) - #self.SetToolBar(self.toolbar ) - #bitmap = wx.Bitmap("media/gui/OpenFile.gif", wx.BITMAP_TYPE_GIF) - #self.toolbar.DoAddTool(0, "Open Terrain", bitmap, bitmap, wx.ITEM_NORMAL, "Open Terrain", "Opens a new terrain for edit") - - #create general settings - #self.GeneralSettingsPanel = wx.Panel(self, wx.ID_ANY) - self.terrainName = wx.StaticText(self, wx.ID_ANY, "Terrain Name:") - self.terrainNamectrl = wx.TextCtrl(self, wx.ID_ANY) - self.Bind(wx.EVT_TEXT, self.OnChangeTerrainNameChange, self.terrainNamectrl) - - self.waterLevelText = wx.StaticText(self, wx.ID_ANY, "Water Level: 0") - self.waterlevelctrl = wx.Slider(self, wx.ID_ANY) - self.waterlevelctrl.max = 300 - self.Bind(wx.EVT_SCROLL, self.OnChangeWaterLevel, self.waterlevelctrl) - - #self.CurrEntName = wx.StaticText(self, wx.ID_ANY, "\n\n\n") - #self.PosText = wx.StaticText(self, wx.ID_ANY, "Position: x,y,z") - #self.terrPosX = wx.TextCtrl(self, wx.ID_ANY) - #self.terrPosY = wx.TextCtrl(self, wx.ID_ANY) - #self.terrPosZ = wx.TextCtrl(self, wx.ID_ANY) - #self.RotText = wx.StaticText(self, wx.ID_ANY, "Rotation: x,y,z") - #self.terrRotX = wx.TextCtrl(self, wx.ID_ANY) - #self.terrRotY = wx.TextCtrl(self, wx.ID_ANY) - #self.terrRotZ = wx.TextCtrl(self, wx.ID_ANY) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrPosX) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrPosY) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrPosZ) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrRotX) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrRotY) - #self.Bind(wx.EVT_TEXT, self.OnChangeObjPosRot, self.terrRotZ) - - self.btnResetRotation = wx.Button(self, wx.ID_ANY, "Reset Rotation") - self.Bind(wx.EVT_BUTTON, self.OnBtnResetRotation, self.btnResetRotation) - self.btnStickToGround = wx.ToggleButton(self, wx.ID_ANY, "Stick to Ground") - self.Bind(wx.EVT_TOGGLEBUTTON, self.OnBtnStickToGroundChange, self.btnStickToGround) - - - #menu creation - menuBar = wx.MenuBar() - file_menu = wx.Menu() - self.fileopenmenu = file_menu.Append(ID_OPENFILE, "&Open", "Open Terrain") - self.filesavemenu = file_menu.Append(ID_SAVEFILE, "&Save", "Save Terrain") - self.filesaveasmenu = file_menu.Append(ID_SAVEFILEAS, "&Save as", "Save Terrain as") - - self.filesavemenu.Enable(False) - self.filesaveasmenu.Enable(False) - file_menu.AppendSeparator() - file_menu.Append(ID_EXIT, "E&xit", "Terminate the program") - menuBar.Append(file_menu, "&File"); - - view_menu = wx.Menu() - self.mnuterraincollision = view_menu.AppendCheckItem(ID_TERRAINCOLLISION, "Camera collides with Terrain", "") - self.mnuterraincollision.Check(True) - view_menu.AppendSeparator() - self.viewObjectDetails = view_menu.AppendCheckItem(ID_VIEWOBJ, "&Additional Object View Window", "creates two additional views") - self.viewObjectDetails.Check(False) - view_menu.AppendSeparator() - view_menu.Append(ID_OGRESET, "&Ogre Settings", "Change Ogre Display Settings") - menuBar.Append(view_menu, "&View"); - - add_menu = wx.Menu() - add_menu.Append(ID_ADDTRUCK, "&Truck/Load", "add a Truck or a Load to the terrain") - self.Bind(wx.EVT_MENU, self.OnAddTruck, id=ID_ADDTRUCK) - add_menu.Append(ID_ADDMESH, "&Object", "add a static Object to the terrain") - self.Bind(wx.EVT_MENU, self.OnAddMesh, id=ID_ADDMESH) - menuBar.Append(add_menu, "&Add"); - - help_menu = wx.Menu() - help_menu.Append(ID_SHOWHELP, "Show &Help", "view the documentation") - help_menu.AppendSeparator() - help_menu.Append(ID_ABOUT, "&About", "More information about this program") - menuBar.Append(help_menu, "&Help"); - - #bindings - self.SetMenuBar(menuBar) - self.__set_properties() - self.__do_layout() - self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT) - self.Bind(wx.EVT_MENU, self.OnFileOpen, id=ID_OPENFILE) - self.Bind(wx.EVT_MENU, self.OnFileSave, id=ID_SAVEFILE) - self.Bind(wx.EVT_MENU, self.OnFileSaveAs, id=ID_SAVEFILEAS) - self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_ABOUT) - self.Bind(wx.EVT_MENU, self.onViewObjectDetails, id=ID_VIEWOBJ) - self.Bind(wx.EVT_MENU, self.OnChangeOgreSettings, id=ID_OGRESET) - self.Bind(wx.EVT_MENU, self.OnCameraTerrainCollision, id=ID_TERRAINCOLLISION) - - def OnAbout(self, event=None): - ShowOnAbout() - - def OnCheckUpdate(self, event=None): - pass - - def OnCameraTerrainCollision(self, event=None): - self.terrainOgreWin.CameraLandCollision(self.mnuterraincollision.IsChecked()) - - def OnHelp(self, event=None): - import HelpFrame - HelpFrame.showHelpFrame() - - def OnAddTruck(self, event=None): - default = "" - if self.rordir: - default = os.path.join(self.rordir, TRUCKDIR) - dialog = wx.FileDialog(self, "Add Truck", default, "", "Truck and Load Files (*.truck,*.load)|*.truck;*.load", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - res = dialog.ShowModal() - if res == wx.ID_OK: - if not self.terrainOgreWin.addTruckToTerrain(truckFilename=dialog.GetPath()): - dlg = wx.MessageDialog(self, "You must select a position on the ground first!", "error", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - def OnAddMesh(self, event=None): - default = "" - if self.rordir: - default = os.path.join(self.rordir, OBJECTDIR) - dialog = wx.FileDialog(self, "Add Object", default, "", "RoR Object Definitions (*.odef)|*.odef", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - res = dialog.ShowModal() - if res == wx.ID_OK: - if not self.terrainOgreWin.addObjectToTerrain(odefFilename=dialog.GetPath()): - dlg = wx.MessageDialog(self, "You must select a position on the ground first!", "error", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - - def OnBtnResetRotation(self, event=None): - self.terrainOgreWin.ObjectResetRotation() - - def OnBtnStickToGroundChange(self, event=None): - self.terrainOgreWin.stickCurrentObjectToGround = self.btnStickToGround.GetValue() - - def updateObjPosRot(self, event=None): - self.statusbar.SetStatusText(self.terrainOgreWin.currentStatusMsg, 1) - if self.terrainOgreWin.terrain is None: - return - if self.terrainOgreWin.selectedEntry is None: - self.statusbar.SetStatusText("Nothing selected", 2) - return - entry = self.terrainOgreWin.selectedEntry - #comment = self.terrainOgreWin.getCommentsForObject(n.getName()).lstrip('/') - #if comment.strip() != "": - # txt = "%s / %s" % (n.getName(), comment) - #else: - txt = "%s %s" % (entry.data.name, " ".join(entry.data.additionaloptions)) - self.statusbar.SetStatusText(txt, 2) - - posx, posy, posz, rotx, roty, rotz = self.terrainOgreWin.getSelectionPositionRotation() - txt = "%0.2f, %0.2f, %0.2f / %0.2f, %0.2f, %0.2f" % (posx, posy, posz, rotx, roty, rotz) - self.statusbar.SetStatusText(txt, 3) - - #pos = n.getPosition() - #self.terrPosX.SetValue(str(round(pos.x,2))) - #self.terrPosY.SetValue(str(round(pos.y,2))) - #self.terrPosZ.SetValue(str(round(pos.z,2))) - #rot = n.getOrientation() - #self.terrRotX.SetValue(str(round(ogre.Radian(rot.getPitch(False)+90).valueDegrees(),2))) - #self.terrRotY.SetValue(str(round(ogre.Radian(rot.getYaw(False)).valueDegrees(),2))) - #self.terrRotZ.SetValue(str(round(ogre.Radian(rot.getRoll(False)).valueDegrees(),2))) - - #def OnChangeObjPosRot(self, event=None): - # pass - - def OnChangeTerrainNameChange(self, event=None): - self.terrainOgreWin.terrain.TerrainName = self.terrainNamectrl.GetValue() - - def OnChangeWaterLevel(self, event=None): - if not self.terrainOgreWin.terrain is None: - self.terrainOgreWin.terrain.WaterHeight = self.waterlevelctrl.GetValue() - self.waterLevelText.Label = "Water Level: %0.1f" % (self.terrainOgreWin.terrain.WaterHeight) - self.terrainOgreWin.updateWaterPlane() - - def OnChangeOgreSettings(self, event): - getOgreManager().getRoot().showConfigDialog() - dlg = wx.MessageDialog(self, "You must restart the program for the settings to get active", "Ogre Settings", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - def OnFileSave(self, event): - if not self.terrainOgreWin.SaveTerrain(): - dlg = wx.MessageDialog(self, "error while saving, see console!\n","error", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - def OnFileSaveAs(self, event): - default = "" - if self.rordir: - default = os.path.join(self.rordir, TERRAINDIR) - dialog = wx.FileDialog(self, "Save Terrain as", default, "", "Terrain Files (*.terrn)|*.terrn", wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) - res = dialog.ShowModal() - if res == wx.ID_OK: - if not self.terrainOgreWin.SaveTerrain(dialog.GetPath()): - dlg = wx.MessageDialog(self, "error while saving as another file, see console!\n","error", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - - def OnFileOpen(self, event=None): - default = "" - if self.rordir: - default = os.path.join(self.rordir, TERRAINDIR) - #print default - dialog = wx.FileDialog(self, "Open Terrain", default, "", "Terrain Files (*.terrn)|*.terrn", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - res = dialog.ShowModal() - if res == wx.ID_OK: - #self.fileopenmenu.Enable(False) - self.filesavemenu.Enable(True) - self.filesaveasmenu.Enable(True) - filename = dialog.GetPath() - - self.terrainOgreWin.LoadTerrain(filename) - if not self.terrainOgreWin.terrain is None: - #update some controls if finished loading - self.waterlevelctrl.SetValue(self.terrainOgreWin.terrain.WaterHeight) - self.waterLevelText.Label = "Water Level: %0.1f" % (self.terrainOgreWin.terrain.WaterHeight) - self.terrainNamectrl.SetValue(self.terrainOgreWin.terrain.TerrainName) - - - def onViewObjectDetails(self, event=None): - # split/unsplit - if self.viewObjectDetails.IsChecked(): - self.viewObjectDetails.Check(True) - self.splitter.SetSashPosition(600, True) - self.splitter.SplitVertically(self.splitterleft, self.splitterright) - else: - self.viewObjectDetails.Check(False) - self.splitter.Unsplit() - - def onUpdateRender(self, event=None): - getOgreManager().RenderAll() - pass - - def OnTimer(self, event): - #fill labels with some information, all windows have the same FPS! - txt = "%0.2f FPS" % (self.terrainOgreWin.renderWindow.getStatistics().lastFPS) - self.statusbar.SetStatusText(txt, 4) - self.updateObjPosRot() - - def OnExit(self, event): - self.Close(True) - del self - sys.exit(0) - - def __set_properties(self): - try: - import ror.svn - self.SetTitle("RoR Terrain Editor revision %d" % ror.svn.getRevision()) - except: - self.SetTitle("RoR Terrain Editor") - - self.terrainOgreWin.SetMinSize((640,480)) - - def __do_layout(self): - sizer_main = wx.BoxSizer(wx.HORIZONTAL) - - sizer_left = wx.BoxSizer(wx.VERTICAL) - sizer_left.Add(self.terrainOgreWin, 2, wx.EXPAND, 0) - self.splitterleft.SetSizer(sizer_left) - - - #construct view boxes - sizerviewup = wx.BoxSizer(wx.VERTICAL) - #sizerviewup.Add(self.rotatingLabel, 0, wx.EXPAND, 0) - sizerviewup.Add(self.sharedOgreWin, 1, wx.EXPAND, 0) - self.viewsplitterup.SetSizer(sizerviewup) - - sizerviewdown = wx.BoxSizer(wx.VERTICAL) - #sizerviewdown.Add(self.topLabel, 0, wx.EXPAND, 0) - sizerviewdown.Add(self.sharedOgreWin2, 1, wx.EXPAND, 0) - self.viewsplitterdown.SetSizer(sizerviewdown) - self.viewsplitter.SplitHorizontally(self.viewsplitterup, self.viewsplitterdown) - - - sizer_right = wx.BoxSizer(wx.VERTICAL) - sizer_right.Add(self.viewsplitter, 1, wx.EXPAND, 0) - self.splitterright.SetSizer(sizer_right) - - - self.splitter.SplitVertically(self.splitterleft, self.splitterright) - self.splitter.Unsplit() - self.splitter.SetSashPosition(600) - - - sizer_main.Add(self.splitter, 1, wx.EXPAND, 0) - - - sizer_settings = wx.BoxSizer(wx.VERTICAL) - sizer_settings.Add(self.waterLevelText, 0, wx.EXPAND, 0) - sizer_settings.Add(self.waterlevelctrl, 0, wx.EXPAND, 0) - sizer_settings.Add(self.terrainName, 0, wx.EXPAND, 0) - sizer_settings.Add(self.terrainNamectrl, 0, wx.EXPAND, 0) - - #sizer_settings.Add(self.CurrEntName, 0, wx.EXPAND, 0) - #sizer_settings.Add(self.PosText, 0, wx.EXPAND, 0) - #sizer_terrPos = wx.BoxSizer(wx.HORIZONTAL) - #sizer_terrPos.Add(self.terrPosX, 0, wx.EXPAND, 0) - #sizer_terrPos.Add(self.terrPosY, 0, wx.EXPAND, 0) - #sizer_terrPos.Add(self.terrPosZ, 0, wx.EXPAND, 0) - #sizer_settings.Add(sizer_terrPos, 0, wx.EXPAND, 0) - - #sizer_settings.Add(self.RotText, 0, wx.EXPAND, 0) - #sizer_terrRot = wx.BoxSizer(wx.HORIZONTAL) - #sizer_terrRot.Add(self.terrRotX, 0, wx.EXPAND, 0) - #sizer_terrRot.Add(self.terrRotY, 0, wx.EXPAND, 0) - #sizer_terrRot.Add(self.terrRotZ, 0, wx.EXPAND, 0) - #sizer_settings.Add(sizer_terrRot, 0, wx.EXPAND, 0) - - sizer_settings.Add(self.btnResetRotation, 0, wx.EXPAND, 0) - sizer_settings.Add(self.btnStickToGround, 0, wx.EXPAND, 0) - - - sizer_main.Add(sizer_settings, 0, wx.EXPAND, 0) - - self.SetAutoLayout(True) - self.SetSizer(sizer_main) - sizer_main.Fit(self) - sizer_main.SetSizeHints(self) - self.Layout() - - -def startApp(): - MainApp = wx.PySimpleApp(0) - wx.InitAllImageHandlers() #you may or may not need this - myFrame = MainFrame(None, -1, "") - - MainApp.SetTopWindow(myFrame) - myFrame.Show() - - MainApp.MainLoop() \ No newline at end of file Deleted: trunk/lib/roreditor/MainFrame_org.py =================================================================== --- trunk/lib/roreditor/MainFrame_org.py 2007-08-08 00:11:50 UTC (rev 160) +++ trunk/lib/roreditor/MainFrame_org.py 2007-08-08 01:34:35 UTC (rev 161) @@ -1,1214 +0,0 @@ -import sys, os, os.path - -from wxogre.OgreManager import * -from ror.RoROgreWindow import * - -from ror.logger import log -from ror.settingsManager import getSettingsManager - -from ror.rorcommon import * -from RoRTerrainOgreWindow import * -from RoRTerrainSelectedObjectOgreWindow import * -from RoRTerrainSelectedObjectTopOgreWindow import * - -import wx -import wx.grid -import wx.html -import wx.aui - -import cStringIO - -ID_OpenTerrain = wx.NewId() - -ID_CreateOgre = wx.NewId() - - -ID_CreateTree = wx.NewId() -ID_CreateGrid = wx.NewId() -ID_CreateText = wx.NewId() -ID_CreateHTML = wx.NewId() -ID_CreateSizeReport = wx.NewId() -ID_GridContent = wx.NewId() -ID_TextContent = wx.NewId() -ID_TreeContent = wx.NewId() -ID_HTMLContent = wx.NewId() -ID_SizeReportContent = wx.NewId() -ID_CreatePerspective = wx.NewId() -ID_CopyPerspective = wx.NewId() - -ID_TransparentHint = wx.NewId() -ID_VenetianBlindsHint = wx.NewId() -ID_RectangleHint = wx.NewId() -ID_NoHint = wx.NewId() -ID_HintFade = wx.NewId() -ID_AllowFloating = wx.NewId() -ID_NoVenetianFade = wx.NewId() -ID_TransparentDrag = wx.NewId() -ID_AllowActivePane = wx.NewId() -ID_NoGradient = wx.NewId() -ID_VerticalGradient = wx.NewId() -ID_HorizontalGradient = wx.NewId() - -ID_Settings = wx.NewId() -ID_About = wx.NewId() -ID_FirstPerspective = ID_CreatePerspective+1000 - -DATADIR = "data" -TRUCKDIR = os.path.join(DATADIR, "trucks") -TERRAINDIR = os.path.join(DATADIR, "terrains") -OBJECTDIR = os.path.join(DATADIR, "objects") - -#---------------------------------------------------------------------- -def GetMondrianData(): - return \ -'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\ -\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00qID\ -ATX\x85\xed\xd6;\n\x800\x10E\xd1{\xc5\x8d\xb9r\x97\x16\x0b\xad$\x8a\x82:\x16\ -o\xda\x84pB2\x1f\x81Fa\x8c\x9c\x08\x04Z{\xcf\xa72\xbcv\xfa\xc5\x08 \x80r\x80\ -\xfc\xa2\x0e\x1c\xe4\xba\xfaX\x1d\xd0\xde]S\x07\x02\xd8>\xe1wa-`\x9fQ\xe9\ -\x86\x01\x04\x10\x00\\(Dk\x1b-\x04\xdc\x1d\x07\x14\x98;\x0bS\x7f\x7f\xf9\x13\ -\x04\x10@\xf9X\xbe\x00\xc9 \x14K\xc1<={\x00\x00\x00\x00IEND\xaeB`\x82' - - -def GetMondrianBitmap(): - return wx.BitmapFromImage(GetMondrianImage()) - - -def GetMondrianImage(): - stream = cStringIO.StringIO(GetMondrianData()) - return wx.ImageFromStream(stream) - - -def GetMondrianIcon(): - icon = wx.EmptyIcon() - icon.CopyFromBitmap(GetMondrianBitmap()) - return icon - - -class MainFrame(wx.Frame): - - def __init__(self, parent, id=-1, title="", pos=wx.DefaultPosition, - size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE | - wx.SUNKEN_BORDER | - wx.CLIP_CHILDREN): - - wx.Frame.__init__(self, parent, id, title, pos, size, style) - - # tell FrameManager to manage this frame - self._mgr = wx.aui.AuiManager() - self._mgr.SetManagedWindow(self) - - self._perspectives = [] - self.n = 0 - self.x = 0 - - self.SetIcon(GetMondrianIcon()) - - # create menu - mb = wx.MenuBar() - - file_menu = wx.Menu() - file_menu.Append(ID_OpenTerrain, "Open Terrain") - file_menu.Append(wx.ID_EXIT, "Exit") - - view_menu = wx.Menu() - view_menu.Append(ID_CreateOgre, "Create OgreWindow") - view_menu.Append(ID_CreateText, "Create Text Control") - view_menu.Append(ID_CreateHTML, "Create HTML Control") - view_menu.Append(ID_CreateTree, "Create Tree") - view_menu.Append(ID_CreateGrid, "Create Grid") - view_menu.Append(ID_CreateSizeReport, "Create Size Reporter") - view_menu.AppendSeparator() - view_menu.Append(ID_GridContent, "Use a Grid for the Content Pane") - view_menu.Append(ID_TextContent, "Use a Text Control for the Content Pane") - view_menu.Append(ID_HTMLContent, "Use an HTML Control for the Content Pane") - view_menu.Append(ID_TreeContent, "Use a Tree Control for the Content Pane") - view_menu.Append(ID_SizeReportContent, "Use a Size Reporter for the Content Pane") - - options_menu = wx.Menu() - options_menu.AppendRadioItem(ID_TransparentHint, "Transparent Hint") - options_menu.AppendRadioItem(ID_VenetianBlindsHint, "Venetian Blinds Hint") - options_menu.AppendRadioItem(ID_RectangleHint, "Rectangle Hint") - options_menu.AppendRadioItem(ID_NoHint, "No Hint") - options_menu.AppendSeparator(); - options_menu.AppendCheckItem(ID_HintFade, "Hint Fade-in") - options_menu.AppendCheckItem(ID_AllowFloating, "Allow Floating") - options_menu.AppendCheckItem(ID_NoVenetianFade, "Disable Venetian Blinds Hint Fade-in") - options_menu.AppendCheckItem(ID_TransparentDrag, "Transparent Drag") - options_menu.AppendCheckItem(ID_AllowActivePane, "Allow Active Pane") - options_menu.AppendSeparator(); - options_menu.AppendRadioItem(ID_NoGradient, "No Caption Gradient") - options_menu.AppendRadioItem(ID_VerticalGradient, "Vertical Caption Gradient") - options_menu.AppendRadioItem(ID_HorizontalGradient, "Horizontal Caption Gradient") - options_menu.AppendSeparator(); - options_menu.Append(ID_Settings, "Settings Pane") - - self._perspectives_menu = wx.Menu() - self._perspectives_menu.Append(ID_CreatePerspective, "Create Perspective") - self._perspectives_menu.Append(ID_CopyPerspective, "Copy Perspective Data To Clipboard") - self._perspectives_menu.AppendSeparator() - self._perspectives_menu.Append(ID_FirstPerspective+0, "Default Startup") - self._perspectives_menu.Append(ID_FirstPerspective+1, "All Panes") - self._perspectives_menu.Append(ID_FirstPerspective+2, "Vertical Toolbar") - - help_menu = wx.Menu() - help_menu.Append(ID_About, "About...") - - mb.Append(file_menu, "File") - mb.Append(view_menu, "View") - mb.Append(self._perspectives_menu, "Perspectives") - mb.Append(options_menu, "Options") - mb.Append(help_menu, "Help") - - self.SetMenuBar(mb) - - self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP) - self.statusbar.SetStatusWidths([-2, -3]) - self.statusbar.SetStatusText("Ready", 0) - self.statusbar.SetStatusText("Welcome To wxPython!", 1) - - # min size for the frame itself isn't completely done. - # see the end up FrameManager::Update() for the test - # code. For now, just hard code a frame minimum size - self.SetMinSize(wx.Size(400, 300)) - - # create some toolbars - tb1 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, - wx.TB_FLAT | wx.TB_NODIVIDER) - tb1.SetToolBitmapSize(wx.Size(48,48)) - tb1.AddLabelTool(101, "Test", wx.ArtProvider_GetBitmap(wx.ART_ERROR)) - tb1.AddSeparator() - tb1.AddLabelTool(102, "Test", wx.ArtProvider_GetBitmap(wx.ART_QUESTION)) - tb1.AddLabelTool(103, "Test", wx.ArtProvider_GetBitmap(wx.ART_INFORMATION)) - tb1.AddLabelTool(103, "Test", wx.ArtProvider_GetBitmap(wx.ART_WARNING)) - tb1.AddLabelTool(103, "Test", wx.ArtProvider_GetBitmap(wx.ART_MISSING_IMAGE)) - tb1.Realize() - - tb2 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, - wx.TB_FLAT | wx.TB_NODIVIDER) - tb2.SetToolBitmapSize(wx.Size(16,16)) - tb2_bmp1 = wx.ArtProvider_GetBitmap(wx.ART_QUESTION, wx.ART_OTHER, wx.Size(16, 16)) - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.AddSeparator() - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.AddSeparator() - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.AddLabelTool(101, "Test", tb2_bmp1) - tb2.Realize() - - tb3 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, - wx.TB_FLAT | wx.TB_NODIVIDER) - tb3.SetToolBitmapSize(wx.Size(16,16)) - tb3_bmp1 = wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16, 16)) - tb3.AddLabelTool(101, "Test", tb3_bmp1) - tb3.AddLabelTool(101, "Test", tb3_bmp1) - tb3.AddLabelTool(101, "Test", tb3_bmp1) - tb3.AddLabelTool(101, "Test", tb3_bmp1) - tb3.AddSeparator() - tb3.AddLabelTool(101, "Test", tb3_bmp1) - tb3.AddLabelTool(101, "Test", tb3_bmp1) - tb3.Realize() - - tb4 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT | wx.TB_NODIVIDER | wx.TB_HORZ_TEXT) - tb4.SetToolBitmapSize(wx.Size(16,16)) - tb4_bmp1 = wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16, 16)) - tb4.AddLabelTool(101, "Item 1", tb4_bmp1) - tb4.AddLabelTool(101, "Item 2", tb4_bmp1) - tb4.AddLabelTool(101, "Item 3", tb4_bmp1) - tb4.AddLabelTool(101, "Item 4", tb4_bmp1) - tb4.AddSeparator() - tb4.AddLabelTool(101, "Item 5", tb4_bmp1) - tb4.AddLabelTool(101, "Item 6", tb4_bmp1) - tb4.AddLabelTool(101, "Item 7", tb4_bmp1) - tb4.AddLabelTool(101, "Item 8", tb4_bmp1) - tb4.Realize() - - tb5 = wx.ToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, - wx.TB_FLAT | wx.TB_NODIVIDER | wx.TB_VERTICAL) - tb5.SetToolBitmapSize(wx.Size(48, 48)) - tb5.AddLabelTool(101, "Test", wx.ArtProvider_GetBitmap(wx.ART_ERROR)) - tb5.AddSeparator() - tb5.AddLabelTool(102, "Test", wx.ArtProvider_GetBitmap(wx.ART_QUESTION)) - tb5.AddLabelTool(103, "Test", wx.ArtProvider_GetBitmap(wx.ART_INFORMATION)) - tb5.AddLabelTool(103, "Test", wx.ArtProvider_GetBitmap(wx.ART_WARNING)) - tb5.AddLabelTool(103, "Test", wx.ArtProvider_GetBitmap(wx.ART_MISSING_IMAGE)) - tb5.Realize() - - # add a bunch of panes - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test1").Caption("Pane Caption").Top(). - CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test2").Caption("Client Size Reporter"). - Bottom().Position(1).CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test3").Caption("Client Size Reporter"). - Bottom().CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test4").Caption("Pane Caption"). - Left().CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test5").Caption("Pane Caption"). - Right().CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test6").Caption("Client Size Reporter"). - Right().Row(1).CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test7").Caption("Client Size Reporter"). - Left().Layer(1).CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateTreeCtrl(), wx.aui.AuiPaneInfo(). - Name("test8").Caption("Tree Pane"). - Left().Layer(1).Position(1).CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test9").Caption("Min Size 200x100"). - BestSize(wx.Size(200,100)).MinSize(wx.Size(200,100)). - Bottom().Layer(1).CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateTextCtrl(), wx.aui.AuiPaneInfo(). - Name("test10").Caption("Text Pane"). - Bottom().Layer(1).Position(1).CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Name("test11").Caption("Fixed Pane"). - Bottom().Layer(1).Position(2).Fixed().CloseButton(True).MaximizeButton(True)) - - self._mgr.AddPane(SettingsPanel(self, self), wx.aui.AuiPaneInfo(). - Name("settings").Caption("Dock Manager Settings"). - Dockable(False).Float().Hide().CloseButton(True).MaximizeButton(True)) - - # create some center panes - self._mgr.AddPane(self.CreateTreeCtrl(), wx.aui.AuiPaneInfo().Name("tree_content"). - CenterPane().Hide()) - - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo().Name("sizereport_content"). - CenterPane().Hide()) - - self._mgr.AddPane(self.CreateTextCtrl(), wx.aui.AuiPaneInfo().Name("text_content"). - CenterPane().Hide()) - - self._mgr.AddPane(self.CreateHTMLCtrl(), wx.aui.AuiPaneInfo().Name("grid_content"). - CenterPane().Hide()) - - #Timer creation (for rendering) - self.ogreTimer = wx.Timer() - self.ogreTimer.SetOwner(self) - self.Bind(wx.EVT_TIMER, self.onUpdateRender, self.ogreTimer) - self.ogreTimer.Start(25) - - self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") - self.ogrewin = RoRTerrainOgreWindow(self, wx.ID_ANY, rordir=self.rordir) - self._mgr.AddPane(self.ogrewin, wx.aui.AuiPaneInfo().Name("html_content"). - CenterPane()) - - # add the toolbars to the manager - - self._mgr.AddPane(tb1, wx.aui.AuiPaneInfo(). - Name("tb1").Caption("Big Toolbar"). - ToolbarPane().Top(). - LeftDockable(False).RightDockable(False)) - - self._mgr.AddPane(tb2, wx.aui.AuiPaneInfo(). - Name("tb2").Caption("Toolbar 2"). - ToolbarPane().Top().Row(1). - LeftDockable(False).RightDockable(False)) - - self._mgr.AddPane(tb3, wx.aui.AuiPaneInfo(). - Name("tb3").Caption("Toolbar 3"). - ToolbarPane().Top().Row(1).Position(1). - LeftDockable(False).RightDockable(False)) - - self._mgr.AddPane(tb4, wx.aui.AuiPaneInfo(). - Name("tb4").Caption("Sample Bookmark Toolbar"). - ToolbarPane().Top().Row(2). - LeftDockable(False).RightDockable(False)) - - self._mgr.AddPane(tb5, wx.aui.AuiPaneInfo(). - Name("tbvert").Caption("Sample Vertical Toolbar"). - ToolbarPane().Left().GripperTop(). - TopDockable(False).BottomDockable(False)) - - self._mgr.AddPane(wx.Button(self, -1, "Test Button"), - wx.aui.AuiPaneInfo().Name("tb5"). - ToolbarPane().Top().Row(2).Position(1). - LeftDockable(False).RightDockable(False)) - - # make some default perspectives - - self._mgr.GetPane("tbvert").Hide() - - perspective_all = self._mgr.SavePerspective() - - all_panes = self._mgr.GetAllPanes() - - for ii in xrange(len(all_panes)): - if not all_panes[ii].IsToolbar(): - all_panes[ii].Hide() - - self._mgr.GetPane("tb1").Hide() - self._mgr.GetPane("tb5").Hide() - self._mgr.GetPane("test8").Show().Left().Layer(0).Row(0).Position(0) - self._mgr.GetPane("test10").Show().Bottom().Layer(0).Row(0).Position(0) - self._mgr.GetPane("html_content").Show() - - perspective_default = self._mgr.SavePerspective() - - for ii in xrange(len(all_panes)): - if not all_panes[ii].IsToolbar(): - all_panes[ii].Hide() - - self._mgr.GetPane("tb1").Hide() - self._mgr.GetPane("tb5").Hide() - self._mgr.GetPane("tbvert").Show() - self._mgr.GetPane("grid_content").Show() - self._mgr.GetPane("test8").Show().Left().Layer(0).Row(0).Position(0) - self._mgr.GetPane("test10").Show().Bottom().Layer(0).Row(0).Position(0) - self._mgr.GetPane("html_content").Show() - - perspective_vert = self._mgr.SavePerspective() - - self._perspectives.append(perspective_default) - self._perspectives.append(perspective_all) - self._perspectives.append(perspective_vert) - - self._mgr.GetPane("tbvert").Hide() - self._mgr.GetPane("grid_content").Hide() - - # "commit" all changes made to FrameManager - self._mgr.Update() - - self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) - self.Bind(wx.EVT_SIZE, self.OnSize) - self.Bind(wx.EVT_CLOSE, self.OnClose) - - # Show How To Use The Closing Panes Event - self.Bind(wx.aui.EVT_AUI_PANE_CLOSE, self.OnPaneClose) - - - self.Bind(wx.EVT_MENU, self.OnOpenTerrain, id=ID_OpenTerrain) - - self.Bind(wx.EVT_MENU, self.OnCreateOgre, id=ID_CreateOgre) - - self.Bind(wx.EVT_MENU, self.OnCreateTree, id=ID_CreateTree) - self.Bind(wx.EVT_MENU, self.OnCreateGrid, id=ID_CreateGrid) - self.Bind(wx.EVT_MENU, self.OnCreateText, id=ID_CreateText) - self.Bind(wx.EVT_MENU, self.OnCreateHTML, id=ID_CreateHTML) - self.Bind(wx.EVT_MENU, self.OnCreateSizeReport, id=ID_CreateSizeReport) - self.Bind(wx.EVT_MENU, self.OnCreatePerspective, id=ID_CreatePerspective) - self.Bind(wx.EVT_MENU, self.OnCopyPerspective, id=ID_CopyPerspective) - - self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_AllowFloating) - self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_TransparentHint) - self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_VenetianBlindsHint) - self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_RectangleHint) - self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_NoHint) - self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_HintFade) - self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_NoVenetianFade) - self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_TransparentDrag) - self.Bind(wx.EVT_MENU, self.OnManagerFlag, id=ID_AllowActivePane) - - self.Bind(wx.EVT_MENU, self.OnGradient, id=ID_NoGradient) - self.Bind(wx.EVT_MENU, self.OnGradient, id=ID_VerticalGradient) - self.Bind(wx.EVT_MENU, self.OnGradient, id=ID_HorizontalGradient) - self.Bind(wx.EVT_MENU, self.OnSettings, id=ID_Settings) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_GridContent) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_TreeContent) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_TextContent) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_SizeReportContent) - self.Bind(wx.EVT_MENU, self.OnChangeContentPane, id=ID_HTMLContent) - self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) - self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_About) - - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_TransparentHint) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_VenetianBlindsHint) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_RectangleHint) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_NoHint) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_HintFade) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_AllowFloating) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_NoVenetianFade) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_TransparentDrag) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_AllowActivePane) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_NoGradient) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_VerticalGradient) - self.Bind(wx.EVT_UPDATE_UI, self.OnUpdateUI, id=ID_HorizontalGradient) - - - self.Bind(wx.EVT_MENU_RANGE, self.OnRestorePerspective, id=ID_FirstPerspective, - id2=ID_FirstPerspective+1000) - - def onUpdateRender(self, event=None): - getOgreManager().RenderAll() - pass - - def OnOpenTerrain(self, event=None): - default = "" - if self.rordir: - default = os.path.join(self.rordir, TERRAINDIR) - dialog = wx.FileDialog(self, "Open Terrain", default, "", "Terrain Files (*.terrn)|*.terrn", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - res = dialog.ShowModal() - if res == wx.ID_OK: - filename = dialog.GetPath() - self.ogrewin.LoadTerrain(filename) - - - def OnPaneClose(self, event): - - caption = event.GetPane().caption - - if caption in ["Tree Pane", "Dock Manager Settings", "Fixed Pane"]: - msg = "Are You Sure You Want To Close This Pane?" - dlg = wx.MessageDialog(self, msg, "AUI Question", - wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION) - - if dlg.ShowModal() in [wx.ID_NO, wx.ID_CANCEL]: - event.Veto() - dlg.Destroy() - - - def OnClose(self, event): - self._mgr.UnInit() - del self._mgr - self.Destroy() - - - def OnExit(self, event): - self.Close() - - def OnAbout(self, event): - - msg = "wx.aui Demo\n" + \ - "An advanced window management library for wxWidgets\n" + \ - "(c) Copyright 2005-2006, Kirix Corporation" - dlg = wx.MessageDialog(self, msg, "About wx.aui Demo", - wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - - def GetDockArt(self): - - return self._mgr.GetArtProvider() - - - def DoUpdate(self): - - self._mgr.Update() - - - def OnEraseBackground(self, event): - - event.Skip() - - - def OnSize(self, event): - - event.Skip() - - - def OnSettings(self, event): - - # show the settings pane, and float it - floating_pane = self._mgr.GetPane("settings").Float().Show() - - if floating_pane.floating_pos == wx.DefaultPosition: - floating_pane.FloatingPosition(self.GetStartPosition()) - - self._mgr.Update() - - - def OnGradient(self, event): - - gradient = 0 - - if event.GetId() == ID_NoGradient: - gradient = wx.aui.AUI_GRADIENT_NONE - elif event.GetId() == ID_VerticalGradient: - gradient = wx.aui.AUI_GRADIENT_VERTICAL - elif event.GetId() == ID_HorizontalGradient: - gradient = wx.aui.AUI_GRADIENT_HORIZONTAL - - self._mgr.GetArtProvider().SetMetric(wx.aui.AUI_DOCKART_GRADIENT_TYPE, gradient) - self._mgr.Update() - - - def OnManagerFlag(self, event): - - flag = 0 - eid = event.GetId() - - if eid in [ ID_TransparentHint, ID_VenetianBlindsHint, ID_RectangleHint, ID_NoHint ]: - flags = self._mgr.GetFlags() - flags &= ~wx.aui.AUI_MGR_TRANSPARENT_HINT - flags &= ~wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT - flags &= ~wx.aui.AUI_MGR_RECTANGLE_HINT - self._mgr.SetFlags(flags) - - if eid == ID_AllowFloating: - flag = wx.aui.AUI_MGR_ALLOW_FLOATING - elif eid == ID_TransparentDrag: - flag = wx.aui.AUI_MGR_TRANSPARENT_DRAG - elif eid == ID_HintFade: - flag = wx.aui.AUI_MGR_HINT_FADE - elif eid == ID_NoVenetianFade: - flag = wx.aui.AUI_MGR_NO_VENETIAN_BLINDS_FADE - elif eid == ID_AllowActivePane: - flag = wx.aui.AUI_MGR_ALLOW_ACTIVE_PANE - elif eid == ID_TransparentHint: - flag = wx.aui.AUI_MGR_TRANSPARENT_HINT - elif eid == ID_VenetianBlindsHint: - flag = wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT - elif eid == ID_RectangleHint: - flag = wx.aui.AUI_MGR_RECTANGLE_HINT - - self._mgr.SetFlags(self._mgr.GetFlags() ^ flag) - - - def OnUpdateUI(self, event): - - flags = self._mgr.GetFlags() - eid = event.GetId() - - if eid == ID_NoGradient: - event.Check(self._mgr.GetArtProvider().GetMetric(wx.aui.AUI_DOCKART_GRADIENT_TYPE) == wx.aui.AUI_GRADIENT_NONE) - - elif eid == ID_VerticalGradient: - event.Check(self._mgr.GetArtProvider().GetMetric(wx.aui.AUI_DOCKART_GRADIENT_TYPE) == wx.aui.AUI_GRADIENT_VERTICAL) - - elif eid == ID_HorizontalGradient: - event.Check(self._mgr.GetArtProvider().GetMetric(wx.aui.AUI_DOCKART_GRADIENT_TYPE) == wx.aui.AUI_GRADIENT_HORIZONTAL) - - elif eid == ID_AllowFloating: - event.Check((flags & wx.aui.AUI_MGR_ALLOW_FLOATING) != 0) - - elif eid == ID_TransparentDrag: - event.Check((flags & wx.aui.AUI_MGR_TRANSPARENT_DRAG) != 0) - - elif eid == ID_TransparentHint: - event.Check((flags & wx.aui.AUI_MGR_TRANSPARENT_HINT) != 0) - - elif eid == ID_VenetianBlindsHint: - event.Check((flags & wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT) != 0) - - elif eid == ID_RectangleHint: - event.Check((flags & wx.aui.AUI_MGR_RECTANGLE_HINT) != 0) - - elif eid == ID_NoHint: - event.Check(((wx.aui.AUI_MGR_TRANSPARENT_HINT | - wx.aui.AUI_MGR_VENETIAN_BLINDS_HINT | - wx.aui.AUI_MGR_RECTANGLE_HINT) & flags) == 0) - - elif eid == ID_HintFade: - event.Check((flags & wx.aui.AUI_MGR_HINT_FADE) != 0); - - elif eid == ID_NoVenetianFade: - event.Check((flags & wx.aui.AUI_MGR_NO_VENETIAN_BLINDS_FADE) != 0); - - - - - def OnCreatePerspective(self, event): - - dlg = wx.TextEntryDialog(self, "Enter a name for the new perspective:", "AUI Test") - - dlg.SetValue(("Perspective %d")%(len(self._perspectives)+1)) - if dlg.ShowModal() != wx.ID_OK: - return - - if len(self._perspectives) == 0: - self._perspectives_menu.AppendSeparator() - - self._perspectives_menu.Append(ID_FirstPerspective + len(self._perspectives), dlg.GetValue()) - self._perspectives.append(self._mgr.SavePerspective()) - - - def OnCopyPerspective(self, event): - - s = self._mgr.SavePerspective() - - if wx.TheClipboard.Open(): - - wx.TheClipboard.SetData(wx.TextDataObject(s)) - wx.TheClipboard.Close() - - def OnRestorePerspective(self, event): - - self._mgr.LoadPerspective(self._perspectives[event.GetId() - ID_FirstPerspective]) - - - def GetStartPosition(self): - - self.x = self.x + 20 - x = self.x - pt = self.ClientToScreen(wx.Point(0, 0)) - - return wx.Point(pt.x + x, pt.y + x) - - - def OnCreateTree(self, event): - self._mgr.AddPane(self.CreateTreeCtrl(), wx.aui.AuiPaneInfo(). - Caption("Tree Control"). - Float().FloatingPosition(self.GetStartPosition()). - FloatingSize(wx.Size(150, 300)).CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def OnCreateGrid(self, event): - self._mgr.AddPane(self.CreateGrid(), wx.aui.AuiPaneInfo(). - Caption("Grid"). - Float().FloatingPosition(self.GetStartPosition()). - FloatingSize(wx.Size(300, 200)).CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def OnCreateHTML(self, event): - self._mgr.AddPane(self.CreateHTMLCtrl(), wx.aui.AuiPaneInfo(). - Caption("HTML Content"). - Float().FloatingPosition(self.GetStartPosition()). - FloatingSize(wx.Size(300, 200)).CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def OnCreateText(self, event): - self._mgr.AddPane(self.CreateTextCtrl(), wx.aui.AuiPaneInfo(). - Caption("Text Control"). - Float().FloatingPosition(self.GetStartPosition()). - CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def OnCreateSizeReport(self, event): - self._mgr.AddPane(self.CreateSizeReportCtrl(), wx.aui.AuiPaneInfo(). - Caption("Client Size Reporter"). - Float().FloatingPosition(self.GetStartPosition()). - CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def OnChangeContentPane(self, event): - - self._mgr.GetPane("grid_content").Show(event.GetId() == ID_GridContent) - self._mgr.GetPane("text_content").Show(event.GetId() == ID_TextContent) - self._mgr.GetPane("tree_content").Show(event.GetId() == ID_TreeContent) - self._mgr.GetPane("sizereport_content").Show(event.GetId() == ID_SizeReportContent) - self._mgr.GetPane("html_content").Show(event.GetId() == ID_HTMLContent) - self._mgr.Update() - - def OnCreateOgre(self, event): - self._mgr.AddPane(self.CreateOgreCtrl(), wx.aui.AuiPaneInfo(). - Caption("Ogre Window"). - Float().FloatingPosition(self.GetStartPosition()). - CloseButton(True).MaximizeButton(True)) - self._mgr.Update() - - - def CreateOgreCtrl(self): - return RoRTerrainOgreWindow(self, wx.ID_ANY, scenemanager=self.ogrewin.sceneManager) - - def CreateTextCtrl(self): - - text = ("This is text box %d")%(self.n + 1) - - return wx.TextCtrl(self,-1, text, wx.Point(0, 0), wx.Size(150, 90), - wx.NO_BORDER | wx.TE_MULTILINE) - - - - def CreateGrid(self): - - grid = wx.grid.Grid(self, -1, wx.Point(0, 0), wx.Size(150, 250), - wx.NO_BORDER | wx.WANTS_CHARS) - - grid.CreateGrid(50, 20) - - return grid - - - def CreateTreeCtrl(self): - - tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.Size(160, 250), - wx.TR_DEFAULT_STYLE | wx.NO_BORDER) - - root = tree.AddRoot("AUI Project") - items = [] - - imglist = wx.ImageList(16, 16, True, 2) - imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16))) - imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16))) - tree.AssignImageList(imglist) - - items.append(tree.AppendItem(root, "Item 1", 0)) - items.append(tree.AppendItem(root, "Item 2", 0)) - items.append(tree.AppendItem(root, "Item 3", 0)) - items.append(tree.AppendItem(root, "Item 4", 0)) - items.append(tree.AppendItem(root, "Item 5", 0)) - - for ii in xrange(len(items)): - - id = items[ii] - tree.AppendItem(id, "Subitem 1", 1) - tree.AppendItem(id, "Subitem 2", 1) - tree.AppendItem(id, "Subitem 3", 1) - tree.AppendItem(id, "Subitem 4", 1) - tree.AppendItem(id, "Subitem 5", 1) - - tree.Expand(root) - - return tree - - - def CreateSizeReportCtrl(self, width=80, height=80): - - ctrl = SizeReportCtrl(self, -1, wx.DefaultPosition, - wx.Size(width, height), self._mgr) - return ctrl - - - def CreateHTMLCtrl(self): - ctrl = wx.html.HtmlWindow(self, -1, wx.DefaultPosition, wx.Size(400, 300)) - if "gtk2" in wx.PlatformInfo: - ctrl.SetStandardFonts() - ctrl.SetPage(self.GetIntroText()) - return ctrl - - - def GetIntroText(self): - return overview - - -# -- wx.SizeReportCtrl -- -# (a utility control that always reports it's client size) - -class SizeReportCtrl(wx.PyControl): - - def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, - size=wx.DefaultSize, mgr=None): - - wx.PyControl.__init__(self, parent, id, pos, size, wx.NO_BORDER) - - self._mgr = mgr - - self.Bind(wx.EVT_PAINT, self.OnPaint) - self.Bind(wx.EVT_SIZE, self.OnSize) - self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) - - - def OnPaint(self, event): - - dc = wx.PaintDC(self) - - size = self.GetClientSize() - s = ("Size: %d x %d")%(size.x, size.y) - - dc.SetFont(wx.NORMAL_FONT) - w, height = dc.GetTextExtent(s) - height = height + 3 - dc.SetBrush(wx.WHITE_BRUSH) - dc.SetPen(wx.WHITE_PEN) - dc.DrawRectangle(0, 0, size.x, size.y) - dc.SetPen(wx.LIGHT_GREY_PEN) - dc.DrawLine(0, 0, size.x, size.y) - dc.DrawLine(0, size.y, size.x, 0) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)) - - if self._mgr: - - pi = self._mgr.GetPane(self) - - s = ("Layer: %d")%pi.dock_layer - w, h = dc.GetTextExtent(s) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*1)) - - s = ("Dock: %d Row: %d")%(pi.dock_direction, pi.dock_row) - w, h = dc.GetTextExtent(s) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*2)) - - s = ("Position: %d")%pi.dock_pos - w, h = dc.GetTextExtent(s) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*3)) - - s = ("Proportion: %d")%pi.dock_proportion - w, h = dc.GetTextExtent(s) - dc.DrawText(s, (size.x-w)/2, ((size.y-(height*5))/2)+(height*4)) - - - def OnEraseBackground(self, event): - # intentionally empty - pass - - - def OnSize(self, event): - - self.Refresh() - event.Skip() - - -ID_PaneBorderSize = wx.ID_HIGHEST + 1 -ID_SashSize = ID_PaneBorderSize + 1 -ID_CaptionSize = ID_PaneBorderSize + 2 -ID_BackgroundColor = ID_PaneBorderSize + 3 -ID_SashColor = ID_PaneBorderSize + 4 -ID_InactiveCaptionColor = ID_PaneBorderSize + 5 -ID_InactiveCaptionGradientColor = ID_PaneBorderSize + 6 -ID_InactiveCaptionTextColor = ID_PaneBorderSize + 7 -ID_ActiveCaptionColor = ID_PaneBorderSize + 8 -ID_ActiveCaptionGradientColor = ID_PaneBorderSize + 9 -ID_ActiveCaptionTextColor = ID_PaneBorderSize + 10 -ID_BorderColor = ID_PaneBorderSize + 11 -ID_GripperColor = ID_PaneBorderSize + 12 - -class SettingsPanel(wx.Panel): - - def __init__(self, parent, frame): - - wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, - wx.DefaultSize) - - self._frame = frame - - vert = wx.BoxSizer(wx.VERTICAL) - - s1 = wx.BoxSizer(wx.HORIZONTAL) - self._border_size = wx.SpinCtrl(self, ID_PaneBorderSize, "", wx.DefaultPosition, wx.Size(50,20)) - s1.Add((1, 1), 1, wx.EXPAND) - s1.Add(wx.StaticText(self, -1, "Pane Border Size:")) - s1.Add(self._border_size) - s1.Add((1, 1), 1, wx.EXPAND) - s1.SetItemMinSize(1, (180, 20)) - #vert.Add(s1, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5) - - s2 = wx.BoxSizer(wx.HORIZONTAL) - self._sash_size = wx.SpinCtrl(self, ID_SashSize, "", wx.DefaultPosition, wx.Size(50,20)) - s2.Add((1, 1), 1, wx.EXPAND) - s2.Add(wx.StaticText(self, -1, "Sash Size:")) - s2.Add(self._sash_size) - s2.Add((1, 1), 1, wx.EXPAND) - s2.SetItemMinSize(1, (180, 20)) - #vert.Add(s2, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5) - - s3 = wx.BoxSizer(wx.HORIZONTAL) - self._caption_size = wx.SpinCtrl(self, ID_CaptionSize, "", wx.DefaultPosition, wx.Size(50,20)) - s3.Add((1, 1), 1, wx.EXPAND) - s3.Add(wx.StaticText(self, -1, "Caption Size:")) - s3.Add(self._caption_size) - s3.Add((1, 1), 1, wx.EXPAND) - s3.SetItemMinSize(1, (180, 20)) - #vert.Add(s3, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5) - - #vert.Add(1, 1, 1, wx.EXPAND) - - b = self.CreateColorBitmap(wx.BLACK) - - s4 = wx.BoxSizer(wx.HORIZONTAL) - self._background_color = wx.BitmapButton(self, ID_BackgroundColor, b, wx.DefaultPosition, wx.Size(50,25)) - s4.Add((1, 1), 1, wx.EXPAND) - s4.Add(wx.StaticText(self, -1, "Background Colo... [truncated message content] |
From: <ror...@us...> - 2007-08-08 00:11:53
|
Revision: 160 http://roreditor.svn.sourceforge.net/roreditor/?rev=160&view=rev Author: rorthomas Date: 2007-08-07 17:11:50 -0700 (Tue, 07 Aug 2007) Log Message: ----------- * fixed bug with material in object Editor Modified Paths: -------------- trunk/lib/roreditor/RoROdefEditorOgreWindow.py Modified: trunk/lib/roreditor/RoROdefEditorOgreWindow.py =================================================================== --- trunk/lib/roreditor/RoROdefEditorOgreWindow.py 2007-08-07 23:14:17 UTC (rev 159) +++ trunk/lib/roreditor/RoROdefEditorOgreWindow.py 2007-08-08 00:11:50 UTC (rev 160) @@ -121,14 +121,17 @@ self.objnode.attachObject(self.objentity) self.objnode.rotate(ogre.Vector3.UNIT_X, ogre.Degree(-90),relativeTo=ogre.Node.TransformSpace.TS_WORLD) - self.objOriginalMat = ogre.MaterialManager.getSingleton().getByName(self.objentity.getSubEntity(0).getMaterialName()) - if self.objmat is None: - self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) - self.objOriginalMat.copyDetailsTo(self.objmat) - # self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) - self.objmat.setSceneBlending(ogre.SceneBlendFactor.SBF_SOURCE_ALPHA, ogre.SceneBlendFactor.SBF_DEST_ALPHA ) - self.objentity.setMaterialName(NEWMATNAME) - self.setMainMeshTrans(60) + try: + self.objOriginalMat = ogre.MaterialManager.getSingleton().getByName(self.objentity.getSubEntity(0).getMaterialName()) + if self.objmat is None: + self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) + self.objOriginalMat.copyDetailsTo(self.objmat) + # self.objmat = ogre.MaterialManager.getSingleton().getByName(NEWMATNAME) + self.objmat.setSceneBlending(ogre.SceneBlendFactor.SBF_SOURCE_ALPHA, ogre.SceneBlendFactor.SBF_DEST_ALPHA ) + self.objentity.setMaterialName(NEWMATNAME) + self.setMainMeshTrans(60) + except: + pass self.objnode.setPosition(0,0,0) if not sx is None: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ror...@us...> - 2007-08-07 23:14:36
|
Revision: 159 http://roreditor.svn.sourceforge.net/roreditor/?rev=159&view=rev Author: rorthomas Date: 2007-08-07 16:14:17 -0700 (Tue, 07 Aug 2007) Log Message: ----------- * updated starter * merged all editors into one GUI * added nice terrain preview feature Modified Paths: -------------- trunk/lib/ror/starter.py trunk/lib/wxogre/OgreManager.py Added Paths: ----------- trunk/lib/roreditor/ trunk/lib/roreditor/GUIObjectTree.py trunk/lib/roreditor/GUIPreviewObject.py trunk/lib/roreditor/MainFrame.py trunk/lib/roreditor/MainFrame_Tools.py trunk/lib/roreditor/MainFrame_Tools_ODefEditor.py trunk/lib/roreditor/MainFrame_old.py trunk/lib/roreditor/MainFrame_org.py trunk/lib/roreditor/RoRObjectPreviewOgreWindow.py trunk/lib/roreditor/RoROdefEditorOgreWindow.py trunk/lib/roreditor/RoRTerrainOgreWindow.py trunk/lib/roreditor/RoRTerrainSelectedObjectOgreWindow.py trunk/lib/roreditor/RoRTerrainSelectedObjectTopOgreWindow.py trunk/lib/roreditor/RoRTruckOgreWindow.py trunk/lib/roreditor/RoRTruckUVOgreWindow.py trunk/lib/roreditor/__init__.py trunk/lib/roreditor/terrainhelp.html trunk/roreditors.py Removed Paths: ------------- trunk/lib/rorterraineditor/ trunk/lib/rortruckeditor/ trunk/terraineditor.py trunk/truckeditor.py Modified: trunk/lib/ror/starter.py =================================================================== --- trunk/lib/ror/starter.py 2007-08-07 15:14:01 UTC (rev 158) +++ trunk/lib/ror/starter.py 2007-08-07 23:14:17 UTC (rev 159) @@ -7,6 +7,7 @@ from ror.logger import log from ror.settingsManager import getSettingsManager +import roreditor.MainFrame import wx, os, os.path @@ -39,7 +40,7 @@ self.image = ImagePanel(self.panel, wx.ID_ANY, SPLASHIMAGE) - self.lblRoRDir = wx.StaticText(self.panel, wx.ID_ANY, "Please select Rigs of Rods Directory!", size = (20, 20), style = wx.ALIGN_CENTRE | wx.ST_NO_AUTORESIZE) + self.lblRoRDir = wx.StaticText(self.panel, wx.ID_ANY, "Please select Rigs of Rods Directory!", size = (20, 40), style = wx.ALIGN_CENTRE | wx.ST_NO_AUTORESIZE) self.btnSelectRoRDir = wx.Button(self.panel, wx.ID_ANY, "Select RoR Directory") self.Bind(wx.EVT_BUTTON, self.OnSelectRoRDir, self.btnSelectRoRDir) @@ -49,12 +50,9 @@ self.cbbRenderEngine = wx.ComboBox(self.panel, wx.ID_ANY, RENDERSYSTEMS[0], style=wx.CB_READONLY, choices=RENDERSYSTEMS) self.Bind(wx.EVT_COMBOBOX, self.OnSelectRenderer, self.cbbRenderEngine) - self.btnStartTerrainEditor = wx.Button(self.panel, wx.ID_ANY, "Start Terrain Editor") + self.btnStartTerrainEditor = wx.Button(self.panel, wx.ID_ANY, "Start Editor") self.Bind(wx.EVT_BUTTON, self.OnTerrainEditor, self.btnStartTerrainEditor) - self.btnStartTruckEditor = wx.Button(self.panel, wx.ID_ANY, "Start Truck Editor") - self.Bind(wx.EVT_BUTTON, self.OnTruckEditor, self.btnStartTruckEditor) - self.btnBugReport = wx.Button(self.panel, wx.ID_ANY, "Report a Bug") self.Bind(wx.EVT_BUTTON, self.OnBugReport, self.btnBugReport) @@ -90,13 +88,13 @@ def displayRoRDir(self): if self.rordir == "": self.btnStartRoR.Enable(False) - self.btnStartTruckEditor.Enable(False) + #self.btnStartTruckEditor.Enable(False) self.btnStartTerrainEditor.Enable(False) self.btnBugReport.Enable(False) self.lblRoRDir.SetLabel("Please select Rigs of Rods Directory!") else: self.btnStartRoR.Enable(True) - self.btnStartTruckEditor.Enable(True) + #self.btnStartTruckEditor.Enable(True) self.btnStartTerrainEditor.Enable(True) self.btnBugReport.Enable(True) self.lblRoRDir.SetLabel("Selected Rigs of Rods Directory: " + self.rordir) @@ -168,15 +166,15 @@ except Exception, e: log().exception(str(e)) - def OnTruckEditor(self, event=None): - try: - import rortruckeditor.MainFrame - self.Close() - log().info("starting Truckeditor") - app = rortruckeditor.MainFrame.startApp() - del app - except Exception, e: - log().exception(str(e)) + # def OnTruckEditor(self, event=None): + # try: + # import rortruckeditor.MainFrame + # self.Close() + # log().info("starting Truckeditor") + # app = rortruckeditor.MainFrame.startApp() + # del app + # except Exception, e: + # log().exception(str(e)) def OnBugReport(self, event=None): try: @@ -195,10 +193,9 @@ def OnTerrainEditor(self, event=None): try: - import rorterraineditor.MainFrame log().info("starting Terraineditor") self.Close() - app = rorterraineditor.MainFrame.startApp() + app = roreditor.MainFrame.startApp() del app except Exception, e: log().exception(str(e)) @@ -261,7 +258,7 @@ sizer_b.Add(self.btnStartRoR, 0, wx.EXPAND, 0) sizer_c = wx.BoxSizer(wx.VERTICAL) - sizer_c.Add(self.btnStartTruckEditor, 1, wx.EXPAND, 0) + #sizer_c.Add(self.btnStartTruckEditor, 1, wx.EXPAND, 0) sizer_c.Add(self.btnStartTerrainEditor, 1, wx.EXPAND, 0) sizer_b.Add(sizer_c, 1, wx.EXPAND, 0) Added: trunk/lib/roreditor/GUIObjectTree.py =================================================================== --- trunk/lib/roreditor/GUIObjectTree.py (rev 0) +++ trunk/lib/roreditor/GUIObjectTree.py 2007-08-07 23:14:17 UTC (rev 159) @@ -0,0 +1,190 @@ +import sys, os, os.path + +import wx +import wx.grid +import wx.html +import wx.aui +import ror.settingsManager + +import cStringIO + +RORPATH = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") +DATADIR = os.path.join(RORPATH, "data") +TRUCKDIR = os.path.join(DATADIR, "trucks") +TERRAINDIR = os.path.join(DATADIR, "terrains") +OBJECTDIR = os.path.join(DATADIR, "objects") + +class RoRObjectTreeCtrl(wx.Panel): + def __init__(self, parent, frame): + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + + self.parent = parent + self._frame = frame + + + vert = wx.BoxSizer(wx.VERTICAL) + + + tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER | wx.TR_HIDE_ROOT) + + root = tree.AddRoot("Objects") + items = [] + + imglist = wx.ImageList(16, 16, True, 2) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16))) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16))) + tree.AssignImageList(imglist) + + terrains = self.getInstalledTerrains() + items.append(tree.AppendItem(root, "Terrains", 0)) + for terrain in terrains: + terrainname, extension = os.path.splitext(os.path.basename(terrain)) + data = wx.TreeItemData() + data.SetData(terrain) + tree.AppendItem(items[-1], terrainname, 1, data=data) + + trucks = self.getInstalledTrucks() + items.append(tree.AppendItem(root, "Trucks", 0)) + for truck in trucks: + truckname, extension = os.path.splitext(os.path.basename(truck)) + data = wx.TreeItemData() + data.SetData(truck) + tree.AppendItem(items[-1], truckname, 1, data=data) + + loads = self.getInstalledLoads() + items.append(tree.AppendItem(root, "Loads", 0)) + for load in loads: + loadname, extension = os.path.splitext(os.path.basename(load)) + data = wx.TreeItemData() + data.SetData(load) + tree.AppendItem(items[-1], loadname, 1, data=data) + + objects = self.getInstalledObjects() + items.append(tree.AppendItem(root, "Objects", 0)) + for object in objects: + objectname, extension = os.path.splitext(os.path.basename(object)) + data = wx.TreeItemData() + data.SetData(object) + tree.AppendItem(items[-1], objectname, 1, data=data) + + # root is hidden, no expand! + #tree.Expand(root) + vert.Add(tree, 1, wx.EXPAND, 5) + self.SetSizer(vert) + self.GetSizer().SetSizeHints(self) + + self.tree = tree + + # this dows not work :( + #self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick, self.tree) + self.Bind(wx.EVT_TREE_SEL_CHANGED, self.onTreeSelectionChange, self.tree) + self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnRightClick, self.tree) + + #self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.BeginDrag, self.tree) + def OnLeftDClick(self, event): + #this is just a shortcut! + self.selectedfn = self.tree.GetItemData(event.GetItem()).GetData() + if self.selectedfn[-4:].lower() == "odef": + self.editOdef() + if self.selectedfn[-5:].lower() == "terrn": + self.editTerrain() + if self.selectedfn[-5:].lower() == 'truck' or self.selectedfn[-4:].lower() == 'load': + self.editTruck() + + def OnRightClick(self, event): + self.selectedfn = self.tree.GetItemData(event.GetItem()).GetData() + if self.selectedfn is None: + event.Skip() + return + + menu = wx.Menu() + + #create various menu entries + if self.selectedfn[-4:].lower() == "odef": + item_edit_odef = menu.Append(wx.ID_ANY, "Edit in ODef Editor") + self.Bind(wx.EVT_MENU, self.editOdef, item_edit_odef) + if self.selectedfn[-5:].lower() == "terrn": + item_edit_terrain = menu.Append(wx.ID_ANY, "Edit in Terrain Editor") + self.Bind(wx.EVT_MENU, self.editTerrain, item_edit_terrain) + if self.selectedfn[-5:].lower() == 'truck' or self.selectedfn[-4:].lower() == 'load': + item_edit_truck = menu.Append(wx.ID_ANY, "Edit in Truck Editor") + self.Bind(wx.EVT_MENU, self.editTruck, item_edit_truck) + menu.AppendSeparator() + item_add = menu.Append(wx.ID_ANY, "add to Terrain") + self.Bind(wx.EVT_MENU, self.addObjectToTerrain, item_add) + + self.PopupMenu(menu) + menu.Destroy() + + def editTruck(self, event=None): + if self.selectedfn is None: + return + self.parent.editTruck(self.selectedfn) + + def editOdef(self, event=None): + if self.selectedfn is None: + return + self.parent.editODefFile(self.selectedfn) + + def editTerrain(self, event=None): + if self.selectedfn is None: + return + self.parent.openTerrain(self.selectedfn) + + def addObjectToTerrain(self, event=None): + if self.selectedfn is None: + return + self.parent.addObjectToTerrain(self.selectedfn) + #def BeginDrag(self, event): + # ''' + # EVT_TREE_BEGIN_DRAG handler. + # ''' + # self.dragItem = event.GetItem() + # fn = self.tree.GetItemData(event.GetItem()).GetData() + # if fn is None: + # return + # #event.Allow() + # wx.TreeEvent.Allow(event) + + def onTreeSelectionChange(self, event=None): + fn = self.tree.GetItemData(self.tree.GetSelection()).GetData() + if fn is None: + return + self.parent.previewObject(fn) + + def getInstalledTerrains(self): + files = [] + for filename in os.listdir(TERRAINDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".terrn": + files.append(os.path.join(TERRAINDIR, filename)) + files.sort() + return files + + def getInstalledTrucks(self): + files = [] + for filename in os.listdir(TRUCKDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".truck": + files.append(os.path.join(TRUCKDIR, filename)) + files.sort() + return files + + def getInstalledLoads(self): + files = [] + for filename in os.listdir(TRUCKDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".load": + files.append(os.path.join(TRUCKDIR, filename)) + files.sort() + return files + + def getInstalledObjects(self): + files = [] + for filename in os.listdir(OBJECTDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".odef": + files.append(os.path.join(OBJECTDIR, filename)) + files.sort() + return files \ No newline at end of file Added: trunk/lib/roreditor/GUIPreviewObject.py =================================================================== --- trunk/lib/roreditor/GUIPreviewObject.py (rev 0) +++ trunk/lib/roreditor/GUIPreviewObject.py 2007-08-07 23:14:17 UTC (rev 159) @@ -0,0 +1,70 @@ +import sys, os, os.path + +import wx +import wx.grid +import wx.html +import wx.aui +import ror.settingsManager + +import cStringIO + +RORPATH = ror.settingsManager.getSettingsManager().getSetting("RigsOfRods", "BasePath") +DATADIR = os.path.join(RORPATH, "data") +TRUCKDIR = os.path.join(DATADIR, "trucks") +TERRAINDIR = os.path.join(DATADIR, "terrains") +OBJECTDIR = os.path.join(DATADIR, "objects") + +class RoRObjectTreeCtrl(wx.Panel): + def __init__(self, parent, frame): + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + + self._frame = frame + + + vert = wx.BoxSizer(wx.VERTICAL) + + + tree = wx.TreeCtrl(self, -1, wx.Point(0, 0), wx.DefaultSize, wx.NO_BORDER) + + root = tree.AddRoot("Objects") + items = [] + + imglist = wx.ImageList(16, 16, True, 2) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16,16))) + imglist.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16,16))) + tree.AssignImageList(imglist) + + trucks = self.getInstalledTrucks() + items.append(tree.AppendItem(root, "Trucks", 0)) + for truck in trucks: + truckname, extension = os.path.splitext(truck) + tree.AppendItem(items[-1], truckname, 1) + + objects = self.getInstalledObjects() + items.append(tree.AppendItem(root, "Objects", 0)) + for object in objects: + objectname, extension = os.path.splitext(object) + tree.AppendItem(items[-1], objectname, 1) + + + tree.Expand(root) + vert.Add(tree, 1, wx.EXPAND, 5) + self.SetSizer(vert) + self.GetSizer().SetSizeHints(self) + + def getInstalledTrucks(self): + files = [] + for filename in os.listdir(TRUCKDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".truck": + files.append(filename) + return files + + def getInstalledObjects(self): + files = [] + for filename in os.listdir(OBJECTDIR): + onlyfilename, extension = os.path.splitext(filename) + if extension.lower() == ".odef": + files.append(filename) + return files \ No newline at end of file Added: trunk/lib/roreditor/MainFrame.py =================================================================== --- trunk/lib/roreditor/MainFrame.py (rev 0) +++ trunk/lib/roreditor/MainFrame.py 2007-08-07 23:14:17 UTC (rev 159) @@ -0,0 +1,545 @@ +import sys, os, os.path + +from wxogre.OgreManager import * +from ror.RoROgreWindow import * + +from ror.logger import log +from ror.settingsManager import getSettingsManager + +from ror.rorcommon import * +from RoRTerrainOgreWindow import * +from RoRObjectPreviewOgreWindow import * +from RoRTerrainSelectedObjectOgreWindow import * +from RoRTerrainSelectedObjectTopOgreWindow import * +from RoROdefEditorOgreWindow import * +from RoRTruckOgreWindow import * +from RoRTruckUVOgreWindow import * + +# GUI Tools: +from GUIObjectTree import * +from MainFrame_Tools import * +from MainFrame_Tools_ODefEditor import * + +import wx +import wx.grid +import wx.html +import wx.aui + +import cStringIO + +ID_OpenTerrain = wx.NewId() +ID_SaveTerrain = wx.NewId() +ID_SaveTerrainAs = wx.NewId() +ID_AddObject = wx.NewId() +ID_DeleteSelection = wx.NewId() +ID_CopySelection = wx.NewId() +ID_PasteSelection = wx.NewId() +ID_UndoAction = wx.NewId() +ID_RedoAction = wx.NewId() +ID_FindObject = wx.NewId() +ID_Quit = wx.NewId() + +ID_ViewHelp = wx.NewId() + +ID_CreateOgre = wx.NewId() + +ID_CreatePerspective = wx.NewId() +ID_CopyPerspective = wx.NewId() + +ID_Settings = wx.NewId() +ID_About = wx.NewId() +ID_FirstPerspective = ID_CreatePerspective+1000 + +DATADIR = "data" +TRUCKDIR = os.path.join(DATADIR, "trucks") +TERRAINDIR = os.path.join(DATADIR, "terrains") +OBJECTDIR = os.path.join(DATADIR, "objects") + +class MainFrame(wx.Frame): + + def __init__(self, parent, id=-1, title="", pos=wx.DefaultPosition, + size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE | + wx.SUNKEN_BORDER | + wx.CLIP_CHILDREN): + + wx.Frame.__init__(self, parent, id, title, pos, size, style) + + # tell FrameManager to manage this frame + self._mgr = wx.aui.AuiManager() + self._mgr.SetManagedWindow(self) + + self._perspectives = [] + self.n = 0 + self.x = 0 + + self.SetIcon(wx.Icon('ror.ico',wx.BITMAP_TYPE_ICO)) + + # create menu + mb = wx.MenuBar() + + file_menu = wx.Menu() + file_menu.Append(ID_OpenTerrain, "Open Terrain") + #file_menu.Append(wx.ID_EXIT, "Exit") + + #view_menu = wx.Menu() + #view_menu.Append(ID_CreateOgre, "Create new 3D View") + + self.managerInit() + options_menu = wx.Menu() + options_menu.Append(ID_Settings, "GUI Settings Pane") + + self._perspectives_menu = wx.Menu() + self._perspectives_menu.Append(ID_CreatePerspective, "Create Perspective") + #self._perspectives_menu.Append(ID_CopyPerspective, "Copy Perspective Data To Clipboard") + self._perspectives_menu.AppendSeparator() + self._perspectives_menu.Append(ID_FirstPerspective+0, "Default Startup") + self._perspectives_menu.Append(ID_FirstPerspective+1, "Terrain") + self._perspectives_menu.Append(ID_FirstPerspective+2, "ODef Editor") + self._perspectives_menu.Append(ID_FirstPerspective+3, "Truck Editor") + + help_menu = wx.Menu() + help_menu.Append(ID_About, "About...") + help_menu.Append(ID_ViewHelp, "View Help") + + mb.Append(file_menu, "File") + #mb.Append(view_menu, "View") + mb.Append(self._perspectives_menu, "Perspectives") + mb.Append(options_menu, "Options") + mb.Append(help_menu, "Help") + + self.SetMenuBar(mb) + + self.statusbar = self.CreateStatusBar(5, 0, wx.ID_ANY, "mainstatusbar") + self.statusbar.SetStatusWidths([-1, 200, 130, 250, 80]) + + # min size for the frame itself isn't completely done. + # see the end up FrameManager::Update() for the test + # code. For now, just hard code a frame minimum size + self.SetMinSize(wx.Size(600, 400)) + try: + import ror.svn + self.SetTitle("Rigs of Rods Terrain Editor revision %d" % ror.svn.getRevision()) + except: + self.SetTitle("Rigs of Rods Terrain Editor") + + # create some toolbars + self.terraintoolbar = wx.ToolBar(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT | wx.TB_NODIVIDER) + self.terraintoolbar.SetToolBitmapSize(wx.Size(16,16)) + self.terraintoolbar.AddLabelTool(ID_OpenTerrain, "Open Terrain", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN)) + self.terraintoolbar.AddLabelTool(ID_SaveTerrain, "Save Terrain", wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE)) + self.terraintoolbar.EnableTool(ID_SaveTerrain, False) + self.terraintoolbar.AddLabelTool(ID_SaveTerrainAs, "Save Terrain as", wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE_AS)) + self.terraintoolbar.EnableTool(ID_SaveTerrainAs, False) + self.terraintoolbar.AddSeparator() + self.terraintoolbar.AddLabelTool(ID_AddObject, "Add Something", wx.ArtProvider_GetBitmap(wx.ART_NEW)) + self.terraintoolbar.EnableTool(ID_AddObject, False) + self.terraintoolbar.AddLabelTool(ID_DeleteSelection, "Delete Selection", wx.ArtProvider_GetBitmap(wx.ART_DELETE)) + self.terraintoolbar.EnableTool(ID_DeleteSelection, False) + self.terraintoolbar.AddSeparator() + self.terraintoolbar.AddLabelTool(ID_CopySelection, "Copy Selection", wx.ArtProvider_GetBitmap(wx.ART_COPY)) + self.terraintoolbar.EnableTool(ID_CopySelection, False) + self.terraintoolbar.AddLabelTool(ID_PasteSelection, "Paste Selection", wx.ArtProvider_GetBitmap(wx.ART_PASTE)) + self.terraintoolbar.EnableTool(ID_PasteSelection, False) + self.terraintoolbar.AddSeparator() + self.terraintoolbar.AddLabelTool(ID_UndoAction, "Undo last Action", wx.ArtProvider_GetBitmap(wx.ART_UNDO)) + self.terraintoolbar.EnableTool(ID_UndoAction, False) + self.terraintoolbar.AddLabelTool(ID_RedoAction, "Redo last Undo", wx.ArtProvider_GetBitmap(wx.ART_REDO)) + self.terraintoolbar.EnableTool(ID_RedoAction, False) + self.terraintoolbar.AddSeparator() + self.terraintoolbar.AddLabelTool(ID_FindObject, "Find Object", wx.ArtProvider_GetBitmap(wx.ART_FIND)) + self.terraintoolbar.EnableTool(ID_FindObject, False) + self.terraintoolbar.AddSeparator() + self.terraintoolbar.AddLabelTool(ID_Quit, "Quit", wx.ArtProvider_GetBitmap(wx.ART_QUIT)) + self.terraintoolbar.Realize() + + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") + + + # add a bunch of panes + self.objectPreviewWindow = ObjectPreviewOgreWindow(self, wx.ID_ANY, rordir=self.rordir) + + self._mgr.AddPane(self.objectPreviewWindow, wx.aui.AuiPaneInfo(). + Name("object_preview"). + Caption("Object Preview"). + CenterPane(). + MinSize(wx.Size(200,200)). + CloseButton(True). + MaximizeButton(False)) + + self._mgr.AddPane(HelpPanel(self, self), wx.aui.AuiPaneInfo(). + Name("help"). + Caption("Help"). + Dockable(False). + Float(). + Fixed(). + Hide(). + CloseButton(True). + MaximizeButton(True)) + + self._mgr.AddPane(SettingsPanel(self, self), wx.aui.AuiPaneInfo(). + Name("settings"). + Caption("Dock Manager Settings"). + Dockable(False). + Float(). + Fixed(). + Hide(). + CloseButton(True). + MaximizeButton(True)) + + self._mgr.AddPane(RoRObjectTreeCtrl(self, self), wx.aui.AuiPaneInfo(). + Name("object_tree"). + Caption("Object Tree"). + MinSize(wx.Size(200,100)). + Left(). + CloseButton(True). + MaximizeButton(True)) + + + # odef editor panels + self.oddefEditorViewSettings = OdefViewPanel(self, self) + self._mgr.AddPane(self.oddefEditorViewSettings, wx.aui.AuiPaneInfo(). + Name("odef_editor_view_settings"). + Caption("ODef Editor View Settings"). + MinSize(wx.Size(200,100)). + Left(). + CloseButton(True). + MaximizeButton(False). + Hide()) + + + # create the center pane(s) + #Timer creation (for rendering) + self.ogreTimer = wx.Timer() + self.ogreTimer.SetOwner(self) + self.Bind(wx.EVT_TIMER, self.onUpdateRender, self.ogreTimer) + self.ogreTimer.Start(25) + + # create timer for gui update + self.guitimer = wx.Timer() + self.guitimer.SetOwner(self) #Sets the timer to notify self: binding the timer event is not enough + self.Bind(wx.EVT_TIMER, self.OnGUITimer, self.guitimer) + self.guitimer.Start(200) + + # the terrain editor ogre window + self.terrainOgreWin = RoRTerrainOgreWindow(self, wx.ID_ANY, rordir=self.rordir) + self._mgr.AddPane(self.terrainOgreWin, wx.aui.AuiPaneInfo().Name("ogre_terrain_content").CenterPane().Hide()) + + # the odef editor ogre window + self.odefEditorOgreWin = ODefEditorOgreWindow(self, wx.ID_ANY, rordir=self.rordir) + self._mgr.AddPane(self.odefEditorOgreWin, wx.aui.AuiPaneInfo().Name("ogre_odef_editor_content").CenterPane().Hide()) + + # the truck editor window + self.truckEditorOgreWin = RoRTruckOgreWindow(self, wx.ID_ANY) + self._mgr.AddPane(self.truckEditorOgreWin, wx.aui.AuiPaneInfo().Name("ogre_truck_editor_content").CenterPane().Hide()) + + # the truck editor UV window + self.truckEditorUVOgreWin = RoRTruckUVOgreWindow(self, wx.ID_ANY) + self._mgr.AddPane(self.truckEditorUVOgreWin, wx.aui.AuiPaneInfo().Name("ogre_truck_editor_uv_content").Float().Hide()) + + + # add the toolbars to the manager + self._mgr.AddPane(self.terraintoolbar, wx.aui.AuiPaneInfo(). + Name("terrain_toolbar"). + Caption("General Toolbar"). + ToolbarPane().Top(). + LeftDockable(False). + RightDockable(False). + Hide() + ) + + # make some default perspectives + self._perspectives.append(self._mgr.SavePerspective()) + + # hide all first + self.terraintoolbar.Hide() + all_panes = self._mgr.GetAllPanes() + for ii in xrange(len(all_panes)): + if not all_panes[ii].IsToolbar(): + all_panes[ii].Hide() + + # terrain perspective + self._mgr.GetPane("ogre_truck_editor_uv_content").Show(False) + self._mgr.GetPane("terrain_toolbar").Show(True) + self._mgr.GetPane("ogre_truck_editor_content").Show(False) + self._mgr.GetPane("ogre_odef_editor_content").Show(False) + self._mgr.GetPane("odef_editor_view_settings").Show(False) + self._mgr.GetPane("ogre_terrain_content").Show(True) + self._mgr.GetPane("object_preview").Show(True).Left() + self._mgr.GetPane("object_tree").Show(True) + self.objectPreviewWindow + self._perspectives.append(self._mgr.SavePerspective()) + + # odef editor perspective + self._mgr.GetPane("ogre_truck_editor_uv_content").Show(False) + self._mgr.GetPane("terrain_toolbar").Show(False) + self._mgr.GetPane("ogre_truck_editor_content").Show(False) + self._mgr.GetPane("object_preview").Show(False) + self._mgr.GetPane("ogre_terrain_content").Show(False) + self._mgr.GetPane("ogre_odef_editor_content").Show(True) + self._mgr.GetPane("odef_editor_view_settings").Show(True) + self._mgr.GetPane("object_tree").Show(True) + self._perspectives.append(self._mgr.SavePerspective()) + + # truck editor perspective + self._mgr.GetPane("ogre_truck_editor_uv_content").Show(True) + self._mgr.GetPane("terrain_toolbar").Show(False) + self._mgr.GetPane("ogre_truck_editor_content").Show(True) + self._mgr.GetPane("object_preview").Show(False) + self._mgr.GetPane("ogre_terrain_content").Show(False) + self._mgr.GetPane("ogre_odef_editor_content").Show(False) + self._mgr.GetPane("odef_editor_view_settings").Show(False) + self._mgr.GetPane("object_tree").Show(False) + self._perspectives.append(self._mgr.SavePerspective()) + + # load startup perspective + self._mgr.LoadPerspective(self._perspectives[0]) + + # "commit" all changes made to FrameManager + self._mgr.Update() + + self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) + self.Bind(wx.EVT_SIZE, self.OnSize) + self.Bind(wx.EVT_CLOSE, self.OnClose) + + self.Bind(wx.EVT_MENU, self.OnOpenTerrain, id=ID_OpenTerrain) + self.Bind(wx.EVT_MENU, self.OnSaveTerrain, id=ID_SaveTerrain) + self.Bind(wx.EVT_MENU, self.OnSaveTerrainAs, id=ID_SaveTerrainAs) + self.Bind(wx.EVT_MENU, self.OnViewHelp, id=ID_ViewHelp) + + self.Bind(wx.EVT_MENU, self.OnCreateOgre, id=ID_CreateOgre) + + self.Bind(wx.EVT_MENU, self.OnCreatePerspective, id=ID_CreatePerspective) + self.Bind(wx.EVT_MENU, self.OnCopyPerspective, id=ID_CopyPerspective) + + self.Bind(wx.EVT_MENU, self.OnSettings, id=ID_Settings) + + self.Bind(wx.EVT_MENU, self.OnExit, id=ID_Quit) + self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT) + self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_About) + + self.Bind(wx.EVT_MENU_RANGE, self.OnRestorePerspective, id=ID_FirstPerspective, + id2=ID_FirstPerspective+1000) + + def changeEditorMode(self, id): + self._mgr.LoadPerspective(self._perspectives[id]) + self._mgr.Update() + + def OnViewHelp(self, event=None): + # show the settings pane, and float it + floating_pane = self._mgr.GetPane("help").Float().Show() + + if floating_pane.floating_pos == wx.DefaultPosition: + floating_pane.FloatingPosition(self.GetStartPosition()) + + self._mgr.Update() + + + def addObjectToTerrain(self, filename): + try: + self.changeEditorMode(1) + onlyfilename, extension = os.path.splitext(os.path.basename(filename)) + if extension.lower() in ['.truck', '.load']: + if not self.terrainOgreWin.addTruckToTerrain(truckFilename=filename): + dlg = wx.MessageDialog(self, "You must select a position on the ground first!", "error", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + elif extension.lower() in ['.odef']: + if not self.terrainOgreWin.addObjectToTerrain(odefFilename=filename): + dlg = wx.MessageDialog(self, "You must select a position on the ground first!", "error", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + except: + pass + + def previewObject(self, filename): + #try: + self.objectPreviewWindow.loadFile(filename) + #except: + # pass + + def editODefFile(self, filename): + #try: + self.odefEditorOgreWin.loadFile(filename) + self.changeEditorMode(2) + self.oddefEditorViewSettings.resetControls() + #except Exception, err: + # print err + # pass + + def editTruck(self, filename): + #try: + tree = self.truckEditorOgreWin.LoadTruck(filename) + self.changeEditorMode(3) + self.truckEditorUVOgreWin.setTree(tree) + #except Exception, err: + # print err + # pass + + def updateObjPosRot(self, event=None): + self.statusbar.SetStatusText(self.terrainOgreWin.currentStatusMsg, 1) + if self.terrainOgreWin.terrain is None: + return + if self.terrainOgreWin.selectedEntry is None: + self.statusbar.SetStatusText("Nothing selected", 2) + return + entry = self.terrainOgreWin.selectedEntry + #comment = self.terrainOgreWin.getCommentsForObject(n.getName()).lstrip('/') + #if comment.strip() != "": + # txt = "%s / %s" % (n.getName(), comment) + #else: + txt = "%s %s" % (entry.data.name, " ".join(entry.data.additionaloptions)) + self.statusbar.SetStatusText(txt, 2) + + posx, posy, posz, rotx, roty, rotz = self.terrainOgreWin.getSelectionPositionRotation() + txt = "%0.2f, %0.2f, %0.2f / %0.2f, %0.2f, %0.2f" % (posx, posy, posz, rotx, roty, rotz) + self.statusbar.SetStatusText(txt, 3) + + def OnGUITimer(self, event): + #fill labels with some information, all windows have the same FPS! + txt = "%0.2f FPS" % (self.terrainOgreWin.renderWindow.getStatistics().lastFPS) + self.statusbar.SetStatusText(txt, 4) + self.updateObjPosRot() + + def onUpdateRender(self, event=None): + getOgreManager().RenderAll() + pass + + def openTerrain(self, filename): + self.changeEditorMode(1) + self.terrainOgreWin.LoadTerrain(filename) + self.terraintoolbar.EnableTool(ID_AddObject, True) + self.terraintoolbar.EnableTool(ID_DeleteSelection, True) + self.terraintoolbar.EnableTool(ID_CopySelection, True) + self.terraintoolbar.EnableTool(ID_PasteSelection, True) + self.terraintoolbar.EnableTool(ID_UndoAction, True) + self.terraintoolbar.EnableTool(ID_RedoAction, True) + self.terraintoolbar.EnableTool(ID_FindObject, True) + self.terraintoolbar.EnableTool(ID_SaveTerrain, True) + self.terraintoolbar.EnableTool(ID_SaveTerrainAs, True) + + def OnOpenTerrain(self, event=None): + default = "" + if self.rordir: + default = os.path.join(self.rordir, TERRAINDIR) + dialog = wx.FileDialog(self, "Open Terrain", default, "", "Terrain Files (*.terrn)|*.terrn", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) + res = dialog.ShowModal() + if res == wx.ID_OK: + self.openTerrain(dialog.GetPath()) + + def OnSaveTerrain(self, event=None): + if not self.terrainOgreWin.SaveTerrain(): + dlg = wx.MessageDialog(self, "error while saving, see console!\n","error", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + + def OnSaveTerrainAs(self, event=None): + default = "" + if self.rordir: + default = os.path.join(self.rordir, TERRAINDIR) + dialog = wx.FileDialog(self, "Save Terrain as", default, "", "Terrain Files (*.terrn)|*.terrn", wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) + res = dialog.ShowModal() + if res == wx.ID_OK: + if not self.terrainOgreWin.SaveTerrain(dialog.GetPath()): + dlg = wx.MessageDialog(self, "error while saving as another file, see console!\n","error", wx.OK | wx.ICON_INFORMATION) + dlg.ShowModal() + dlg.Destroy() + + def OnClose(self, event): + self.OnExit(event) + + def OnExit(self, event): + all_panes = self._mgr.GetAllPanes() + for ii in xrange(len(all_panes)): + if not all_panes[ii].IsToolbar(): + all_panes[ii].Hide() + self._mgr.UnInit() + del self._mgr + self.Destroy() + self.Close() + + def OnAbout(self, event): + ShowOnAbout() + + def GetDockArt(self): + return self._mgr.GetArtProvider() + + def DoUpdate(self): + self._mgr.Update() + + def OnEraseBackground(self, event): + event.Skip() + + def OnSize(self, event): + event.Skip() + + def OnSettings(self, event): + # show the settings pane, and float it + floating_pane = self._mgr.GetPane("settings").Float().Show() + + if floating_pane.floating_pos == wx.DefaultPosition: + floating_pane.FloatingPosition(self.GetStartPosition()) + + self._mgr.Update() + + def managerInit(self): + flags = self._mgr.GetFlags() + # based on default settings! + flags |= wx.aui.AUI_MGR_ALLOW_ACTIVE_PANE + flags &= ~wx.aui.AUI_MGR_TRANSPARENT_DRAG + self._mgr.SetFlags(flags) + + def OnCreatePerspective(self, event): + dlg = wx.TextEntryDialog(self, "Enter a name for the new perspective:", "AUI Test") + + dlg.SetValue(("Perspective %d")%(len(self._perspectives)+1)) + if dlg.ShowModal() != wx.ID_OK: + return + + if len(self._perspectives) == 0: + self._perspectives_menu.AppendSeparator() + + self._perspectives_menu.Append(ID_FirstPerspective + len(self._perspectives), dlg.GetValue()) + self._perspectives.append(self._mgr.SavePerspective()) + + + def OnCopyPerspective(self, event): + s = self._mgr.SavePerspective() + + if wx.TheClipboard.Open(): + + wx.TheClipboard.SetData(wx.TextDataObject(s)) + wx.TheClipboard.Close() + + def OnRestorePerspective(self, event): + self._mgr.LoadPerspective(self._perspectives[event.GetId() - ID_FirstPerspective]) + + + def GetStartPosition(self): + self.x = self.x + 20 + x = self.x + pt = self.ClientToScreen(wx.Point(0, 0)) + + return wx.Point(pt.x + x, pt.y + x) + + def OnCreateOgre(self, event): + self._mgr.AddPane(self.CreateOgreCtrl(), wx.aui.AuiPaneInfo(). + Caption("Ogre Window"). + Float().FloatingPosition(self.GetStartPosition()). + CloseButton(True).MaximizeButton(False)) + self._mgr.Update() + + def CreateOgreCtrl(self): + return RoRTerrainOgreWindow(self, wx.ID_ANY, maininstance=self.terrainOgreWin) + +def startApp(): + MainApp = wx.PySimpleApp(0) + wx.InitAllImageHandlers() #you may or may not need this + myFrame = MainFrame(None, -1, "") + + MainApp.SetTopWindow(myFrame) + + myFrame.SetSize((800, 600)) + myFrame.SetFocus() + myFrame.Show() + + MainApp.MainLoop() \ No newline at end of file Added: trunk/lib/roreditor/MainFrame_Tools.py =================================================================== --- trunk/lib/roreditor/MainFrame_Tools.py (rev 0) +++ trunk/lib/roreditor/MainFrame_Tools.py 2007-08-07 23:14:17 UTC (rev 159) @@ -0,0 +1,342 @@ +import sys, os, os.path + +from ror.logger import log +from ror.settingsManager import getSettingsManager + +import wx +import wx.grid +import wx.html +import wx.aui + +import cStringIO +# -- wx.SizeReportCtrl -- +# (a utility control that always reports it's client size) + +HELPFILENAME = os.path.join(os.path.dirname(os.path.abspath(__file__)), "terrainhelp.html") + +class HelpPanel(wx.Panel): + def __init__(self, parent, frame): + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + self._frame = frame + + vert = wx.BoxSizer(wx.VERTICAL) + self.htmlctrl = wx.html.HtmlWindow(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(800, 600)) + if "gtk2" in wx.PlatformInfo: + ctrl.SetStandardFonts() + readme = self.loadReadme() + if readme is None: + self.Hide() + return + self.htmlctrl.SetPage(readme) + vert.Add(self.htmlctrl, 2, wx.EXPAND, 0) + self.SetSizer(vert) + self.GetSizer().SetSizeHints(self) + + def loadReadme(self): + if os.path.isfile(HELPFILENAME): + try: + f = open(HELPFILENAME,'r') + content = f.read() + f.close() + return content + except Exception, err: + log().error(str(err)) + return None + else: + log().error("TerrainEditor Readme not found: %s" % HELPFILENAME) + return None + +ID_PaneBorderSize = wx.ID_HIGHEST + 1 +ID_SashSize = ID_PaneBorderSize + 1 +ID_CaptionSize = ID_PaneBorderSize + 2 +ID_BackgroundColor = ID_PaneBorderSize + 3 +ID_SashColor = ID_PaneBorderSize + 4 +ID_InactiveCaptionColor = ID_PaneBorderSize + 5 +ID_InactiveCaptionGradientColor = ID_PaneBorderSize + 6 +ID_InactiveCaptionTextColor = ID_PaneBorderSize + 7 +ID_ActiveCaptionColor = ID_PaneBorderSize + 8 +ID_ActiveCaptionGradientColor = ID_PaneBorderSize + 9 +ID_ActiveCaptionTextColor = ID_PaneBorderSize + 10 +ID_BorderColor = ID_PaneBorderSize + 11 +ID_GripperColor = ID_PaneBorderSize + 12 + +class SettingsPanel(wx.Panel): + + def __init__(self, parent, frame): + + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + + self._frame = frame + + vert = wx.BoxSizer(wx.VERTICAL) + + s1 = wx.BoxSizer(wx.HORIZONTAL) + self._border_size = wx.SpinCtrl(self, ID_PaneBorderSize, "", wx.DefaultPosition, wx.Size(50,20)) + s1.Add((1, 1), 1, wx.EXPAND) + s1.Add(wx.StaticText(self, -1, "Pane Border Size:")) + s1.Add(self._border_size) + s1.Add((1, 1), 1, wx.EXPAND) + s1.SetItemMinSize(1, (180, 20)) + #vert.Add(s1, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5) + + s2 = wx.BoxSizer(wx.HORIZONTAL) + self._sash_size = wx.SpinCtrl(self, ID_SashSize, "", wx.DefaultPosition, wx.Size(50,20)) + s2.Add((1, 1), 1, wx.EXPAND) + s2.Add(wx.StaticText(self, -1, "Sash Size:")) + s2.Add(self._sash_size) + s2.Add((1, 1), 1, wx.EXPAND) + s2.SetItemMinSize(1, (180, 20)) + #vert.Add(s2, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5) + + s3 = wx.BoxSizer(wx.HORIZONTAL) + self._caption_size = wx.SpinCtrl(self, ID_CaptionSize, "", wx.DefaultPosition, wx.Size(50,20)) + s3.Add((1, 1), 1, wx.EXPAND) + s3.Add(wx.StaticText(self, -1, "Caption Size:")) + s3.Add(self._caption_size) + s3.Add((1, 1), 1, wx.EXPAND) + s3.SetItemMinSize(1, (180, 20)) + #vert.Add(s3, 0, wx.EXPAND | wxLEFT | wxBOTTOM, 5) + + #vert.Add(1, 1, 1, wx.EXPAND) + + b = self.CreateColorBitmap(wx.BLACK) + + s4 = wx.BoxSizer(wx.HORIZONTAL) + self._background_color = wx.BitmapButton(self, ID_BackgroundColor, b, wx.DefaultPosition, wx.Size(50,25)) + s4.Add((1, 1), 1, wx.EXPAND) + s4.Add(wx.StaticText(self, -1, "Background Color:")) + s4.Add(self._background_color) + s4.Add((1, 1), 1, wx.EXPAND) + s4.SetItemMinSize(1, (180, 20)) + + s5 = wx.BoxSizer(wx.HORIZONTAL) + self._sash_color = wx.BitmapButton(self, ID_SashColor, b, wx.DefaultPosition, wx.Size(50,25)) + s5.Add((1, 1), 1, wx.EXPAND) + s5.Add(wx.StaticText(self, -1, "Sash Color:")) + s5.Add(self._sash_color) + s5.Add((1, 1), 1, wx.EXPAND) + s5.SetItemMinSize(1, (180, 20)) + + s6 = wx.BoxSizer(wx.HORIZONTAL) + self._inactive_caption_color = wx.BitmapButton(self, ID_InactiveCaptionColor, b, + wx.DefaultPosition, wx.Size(50,25)) + s6.Add((1, 1), 1, wx.EXPAND) + s6.Add(wx.StaticText(self, -1, "Normal Caption:")) + s6.Add(self._inactive_caption_color) + s6.Add((1, 1), 1, wx.EXPAND) + s6.SetItemMinSize(1, (180, 20)) + + s7 = wx.BoxSizer(wx.HORIZONTAL) + self._inactive_caption_gradient_color = wx.BitmapButton(self, ID_InactiveCaptionGradientColor, + b, wx.DefaultPosition, wx.Size(50,25)) + s7.Add((1, 1), 1, wx.EXPAND) + s7.Add(wx.StaticText(self, -1, "Normal Caption Gradient:")) + s7.Add(self._inactive_caption_gradient_color) + s7.Add((1, 1), 1, wx.EXPAND) + s7.SetItemMinSize(1, (180, 20)) + + s8 = wx.BoxSizer(wx.HORIZONTAL) + self._inactive_caption_text_color = wx.BitmapButton(self, ID_InactiveCaptionTextColor, b, + wx.DefaultPosition, wx.Size(50,25)) + s8.Add((1, 1), 1, wx.EXPAND) + s8.Add(wx.StaticText(self, -1, "Normal Caption Text:")) + s8.Add(self._inactive_caption_text_color) + s8.Add((1, 1), 1, wx.EXPAND) + s8.SetItemMinSize(1, (180, 20)) + + s9 = wx.BoxSizer(wx.HORIZONTAL) + self._active_caption_color = wx.BitmapButton(self, ID_ActiveCaptionColor, b, + wx.DefaultPosition, wx.Size(50,25)) + s9.Add((1, 1), 1, wx.EXPAND) + s9.Add(wx.StaticText(self, -1, "Active Caption:")) + s9.Add(self._active_caption_color) + s9.Add((1, 1), 1, wx.EXPAND) + s9.SetItemMinSize(1, (180, 20)) + + s10 = wx.BoxSizer(wx.HORIZONTAL) + self._active_caption_gradient_color = wx.BitmapButton(self, ID_ActiveCaptionGradientColor, + b, wx.DefaultPosition, wx.Size(50,25)) + s10.Add((1, 1), 1, wx.EXPAND) + s10.Add(wx.StaticText(self, -1, "Active Caption Gradient:")) + s10.Add(self._active_caption_gradient_color) + s10.Add((1, 1), 1, wx.EXPAND) + s10.SetItemMinSize(1, (180, 20)) + + s11 = wx.BoxSizer(wx.HORIZONTAL) + self._active_caption_text_color = wx.BitmapButton(self, ID_ActiveCaptionTextColor, + b, wx.DefaultPosition, wx.Size(50,25)) + s11.Add((1, 1), 1, wx.EXPAND) + s11.Add(wx.StaticText(self, -1, "Active Caption Text:")) + s11.Add(self._active_caption_text_color) + s11.Add((1, 1), 1, wx.EXPAND) + s11.SetItemMinSize(1, (180, 20)) + + s12 = wx.BoxSizer(wx.HORIZONTAL) + self._border_color = wx.BitmapButton(self, ID_BorderColor, b, wx.DefaultPosition, + wx.Size(50,25)) + s12.Add((1, 1), 1, wx.EXPAND) + s12.Add(wx.StaticText(self, -1, "Border Color:")) + s12.Add(self._border_color) + s12.Add((1, 1), 1, wx.EXPAND) + s12.SetItemMinSize(1, (180, 20)) + + s13 = wx.BoxSizer(wx.HORIZONTAL) + self._gripper_color = wx.BitmapButton(self, ID_GripperColor, b, wx.DefaultPosition, + wx.Size(50,25)) + s13.Add((1, 1), 1, wx.EXPAND) + s13.Add(wx.StaticText(self, -1, "Gripper Color:")) + s13.Add(self._gripper_color) + s13.Add((1, 1), 1, wx.EXPAND) + s13.SetItemMinSize(1, (180, 20)) + + grid_sizer = wx.GridSizer(0, 2) + grid_sizer.SetHGap(5) + grid_sizer.Add(s1) + grid_sizer.Add(s4) + grid_sizer.Add(s2) + grid_sizer.Add(s5) + grid_sizer.Add(s3) + grid_sizer.Add(s13) + grid_sizer.Add((1, 1)) + grid_sizer.Add(s12) + grid_sizer.Add(s6) + grid_sizer.Add(s9) + grid_sizer.Add(s7) + grid_sizer.Add(s10) + grid_sizer.Add(s8) + grid_sizer.Add(s11) + + cont_sizer = wx.BoxSizer(wx.VERTICAL) + cont_sizer.Add(grid_sizer, 1, wx.EXPAND | wx.ALL, 5) + self.SetSizer(cont_sizer) + self.GetSizer().SetSizeHints(self) + + self._border_size.SetValue(frame.GetDockArt().GetMetric(wx.aui.AUI_DOCKART_PANE_BORDER_SIZE)) + self._sash_size.SetValue(frame.GetDockArt().GetMetric(wx.aui.AUI_DOCKART_SASH_SIZE)) + self._caption_size.SetValue(frame.GetDockArt().GetMetric(wx.aui.AUI_DOCKART_CAPTION_SIZE)) + + self.UpdateColors() + + self.Bind(wx.EVT_SPINCTRL, self.OnPaneBorderSize, id=ID_PaneBorderSize) + self.Bind(wx.EVT_SPINCTRL, self.OnSashSize, id=ID_SashSize) + self.Bind(wx.EVT_SPINCTRL, self.OnCaptionSize, id=ID_CaptionSize) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_BackgroundColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_SashColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_InactiveCaptionColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_InactiveCaptionGradientColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_InactiveCaptionTextColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_ActiveCaptionColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_ActiveCaptionGradientColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_ActiveCaptionTextColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_BorderColor) + self.Bind(wx.EVT_BUTTON, self.OnSetColor, id=ID_GripperColor) + + + def CreateColorBitmap(self, c): + image = wx.EmptyImage(25, 14) + + for x in xrange(25): + for y in xrange(14): + pixcol = c + if x == 0 or x == 24 or y == 0 or y == 13: + pixcol = wx.BLACK + + image.SetRGB(x, y, pixcol.Red(), pixcol.Green(), pixcol.Blue()) + + return image.ConvertToBitmap() + + + def UpdateColors(self): + + bk = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_BACKGROUND_COLOUR) + self._background_color.SetBitmapLabel(self.CreateColorBitmap(bk)) + + cap = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_INACTIVE_CAPTION_COLOUR) + self._inactive_caption_color.SetBitmapLabel(self.CreateColorBitmap(cap)) + + capgrad = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR) + self._inactive_caption_gradient_color.SetBitmapLabel(self.CreateColorBitmap(capgrad)) + + captxt = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR) + self._inactive_caption_text_color.SetBitmapLabel(self.CreateColorBitmap(captxt)) + + acap = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_ACTIVE_CAPTION_COLOUR) + self._active_caption_color.SetBitmapLabel(self.CreateColorBitmap(acap)) + + acapgrad = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR) + self._active_caption_gradient_color.SetBitmapLabel(self.CreateColorBitmap(acapgrad)) + + acaptxt = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR) + self._active_caption_text_color.SetBitmapLabel(self.CreateColorBitmap(acaptxt)) + + sash = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_SASH_COLOUR) + self._sash_color.SetBitmapLabel(self.CreateColorBitmap(sash)) + + border = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_BORDER_COLOUR) + self._border_color.SetBitmapLabel(self.CreateColorBitmap(border)) + + gripper = self._frame.GetDockArt().GetColour(wx.aui.AUI_DOCKART_GRIPPER_COLOUR) + self._gripper_color.SetBitmapLabel(self.CreateColorBitmap(gripper)) + + + def OnPaneBorderSize(self, event): + + self._frame.GetDockArt().SetMetric(wx.aui.AUI_DOCKART_PANE_BORDER_SIZE, + event.GetInt()) + self._frame.DoUpdate() + + + def OnSashSize(self, event): + + self._frame.GetDockArt().SetMetric(wx.aui.AUI_DOCKART_SASH_SIZE, + event.GetInt()) + self._frame.DoUpdate() + + + def OnCaptionSize(self, event): + + self._frame.GetDockArt().SetMetric(wx.aui.AUI_DOCKART_CAPTION_SIZE, + event.GetInt()) + self._frame.DoUpdate() + + + def OnSetColor(self, event): + + dlg = wx.ColourDialog(self._frame) + + dlg.SetTitle("Color Picker") + + if dlg.ShowModal() != wx.ID_OK: + return + + var = 0 + if event.GetId() == ID_BackgroundColor: + var = wx.aui.AUI_DOCKART_BACKGROUND_COLOUR + elif event.GetId() == ID_SashColor: + var = wx.aui.AUI_DOCKART_SASH_COLOUR + elif event.GetId() == ID_InactiveCaptionColor: + var = wx.aui.AUI_DOCKART_INACTIVE_CAPTION_COLOUR + elif event.GetId() == ID_InactiveCaptionGradientColor: + var = wx.aui.AUI_DOCKART_INACTIVE_CAPTION_GRADIENT_COLOUR + elif event.GetId() == ID_InactiveCaptionTextColor: + var = wx.aui.AUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR + elif event.GetId() == ID_ActiveCaptionColor: + var = wx.aui.AUI_DOCKART_ACTIVE_CAPTION_COLOUR + elif event.GetId() == ID_ActiveCaptionGradientColor: + var = wx.aui.AUI_DOCKART_ACTIVE_CAPTION_GRADIENT_COLOUR + elif event.GetId() == ID_ActiveCaptionTextColor: + var = wx.aui.AUI_DOCKART_ACTIVE_CAPTION_TEXT_COLOUR + elif event.GetId() == ID_BorderColor: + var = wx.aui.AUI_DOCKART_BORDER_COLOUR + elif event.GetId() == ID_GripperColor: + var = wx.aui.AUI_DOCKART_GRIPPER_COLOUR + else: + return + + self._frame.GetDockArt().SetColor(var, dlg.GetColourData().GetColour()) + self._frame.DoUpdate() + self.UpdateColors() + + Added: trunk/lib/roreditor/MainFrame_Tools_ODefEditor.py =================================================================== --- trunk/lib/roreditor/MainFrame_Tools_ODefEditor.py (rev 0) +++ trunk/lib/roreditor/MainFrame_Tools_ODefEditor.py 2007-08-07 23:14:17 UTC (rev 159) @@ -0,0 +1,83 @@ +import sys, os, os.path + +from ror.logger import log +from ror.settingsManager import getSettingsManager + +import wx +import wx.aui + +import cStringIO + +ID_ChangeMainMeshTrans = wx.NewId() +ID_ChangeMainMeshVisibility = wx.NewId() +ID_ChangeNormalBoxesVisibility = wx.NewId() +ID_ChangeVirtualBoxesVisibility = wx.NewId() + +class OdefViewPanel(wx.Panel): + def __init__(self, parent, frame): + wx.Panel.__init__(self, parent, wx.ID_ANY, wx.DefaultPosition, + wx.DefaultSize) + self._frame = frame + self.parent = parent + + vert = wx.BoxSizer(wx.VERTICAL) + + s1 = wx.BoxSizer(wx.HORIZONTAL) + self.ObjTransparencySlider = wx.SpinCtrl(self, ID_ChangeMainMeshTrans, "", wx.DefaultPosition, wx.Size(50,20), min=0, max=100, initial=60) + s1.Add((1, 1), 1, wx.EXPAND) + s1.Add(wx.StaticText(self, -1, "Object Transparency:")) + s1.Add(self.ObjTransparencySlider) + s1.Add((1, 1), 1, wx.EXPAND) + vert.Add(s1, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM, 5) + + self.chkMeshVisible = wx.CheckBox(self, ID_ChangeMainMeshVisibility, "Display Object", wx.DefaultPosition, wx.Size(50,20)) + vert.Add(self.chkMeshVisible, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM, 5) + + self.chkBoxNormalVisible = wx.CheckBox(self, ID_ChangeNormalBoxesVisibility, "Display Collision Boxes", wx.DefaultPosition, wx.Size(50,20)) + vert.Add(self.chkBoxNormalVisible, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM, 5) + + self.chkBoxVirtualVisible = wx.CheckBox(self, ID_ChangeVirtualBoxesVisibility, "Display Virtual Boxes", wx.DefaultPosition, wx.Size(50,20)) + self.chkBoxVirtualVisible.SetValue(True) + vert.Add(self.chkBoxVirtualVisible, 0, wx.EXPAND | wx.LEFT | wx.BOTTOM, 5) + + + self.Bind(wx.EVT_SPINCTRL, self.OnMainMeshTransChange, id=ID_ChangeMainMeshTrans) + self.Bind(wx.EVT_CHECKBOX, self.OnMainMeshVisibilityChange, id=ID_ChangeMainMeshVisibility) + self.Bind(wx.EVT_CHECKBOX, self.OnNormalBoxesVisibilityChange, id=ID_ChangeNormalBoxesVisibility) + self.Bind(wx.EVT_CHECKBOX, self.OnVirtualBoxesVisibilityChange, id=ID_ChangeVirtualBoxesVisibility) + + self.SetSizer(vert) + self.GetSizer().SetSizeHints(self) + self.resetControls() + + def resetControls(self): + self.chkMeshVisible.SetValue(True) + self.chkBoxNormalVisible.SetValue(True) + self.ObjTransparencySlider.SetValue(60) + + + def OnMainMeshTransChange(self, event): + self.parent.odefEditorOgreWin.setMainMeshTrans(event.GetInt()) + + def OnMainMeshVisibilityChange(self, event): + self.parent.odefEditorOgreWin.setMainMeshVisible(event.IsChecked()) + + def OnNormalBoxesVisibilityChange(self, event): + self.parent.odefEditorOgreWin.setBoxesVisibility("normal", event.IsChecked()) + + def OnVirtualBoxesVisibilityChange(self, event): + self.parent.odefEditorOgreWin.setBoxesVisibility("virtual", event.IsChecked()) + + def loadReadme(self): + if os.path.isfile(HELPFILENAME): + try: + f = open(HELPFILENAME,'r') + content = f.read() + f.close() + return content + except Exception, err: + log().error(str(err)) + return None + else: + log().error("TerrainEditor Readme not found: %s" % HELPFILENAME) + return None Added: trunk/lib/roreditor/MainFrame_old.py =================================================================== --- trunk/lib/roreditor/MainFrame_old.py (rev 0) +++ trunk/lib/roreditor/MainFrame_old.py 2007-08-07 23:14:17 UTC (rev 159) @@ -0,0 +1,412 @@ +#Thomas Fischer 31/05/2007, th...@th... +from wxogre.OgreManager import * +from ror.RoROgreWindow import * + +from ror.logger import log +from ror.settingsManager import getSettingsManager + +from ror.rorcommon import * +from RoRTerrainOgreWindow import * +from RoRTerrainSelectedObjectOgreWindow import * +from RoRTerrainSelectedObjectTopOgreWindow import * + +ID_ABOUT = 101 +ID_OPENFILE = 102 +ID_SAVEFILE = 103 +ID_VIEWOBJ = 104 +ID_OGRESET = 105 +ID_SHOWHELP = 106 +ID_ADDTRUCK = 107 +ID_ADDMESH = 108 +ID_CHECKUPDATE = 109 +ID_SAVEFILEAS = 110 +ID_TERRAINCOLLISION = 111 +ID_EXIT = 199 + +DATADIR = "data" +TRUCKDIR = os.path.join(DATADIR, "trucks") +TERRAINDIR = os.path.join(DATADIR, "terrains") +OBJECTDIR = os.path.join(DATADIR, "objects") + + +class MainFrame(wx.Frame): + def __init__(self, *args, **kwds): + kwds["style"] = wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLIP_CHILDREN + + wx.Frame.__init__(self, *args, **kwds) + + + #main splitter + self.splitter = wx.SplitterWindow(self, wx.ID_ANY, style=wx.SP_PERMIT_UNSPLIT|wx.SP_3DSASH) + self.splitterleft = wx.Panel(self.splitter, wx.ID_ANY) + self.splitterright = wx.Panel(self.splitter, wx.ID_ANY) + self.splitter.SetSashGravity(1) + self.splitter.SetSashPosition(100) + self.splitter.SetMinimumPaneSize(200) + + #viewsplitter + self.viewsplitter = wx.SplitterWindow(self.splitterright, wx.ID_ANY) + self.viewsplitterup = wx.Panel(self.viewsplitter, wx.ID_ANY) + self.viewsplitterdown = wx.Panel(self.viewsplitter, wx.ID_ANY) + self.splitter.SetSashGravity(0.5) + self.splitter.SetSashPosition(100) + self.splitter.SetMinimumPaneSize(200) + + self.rordir = getSettingsManager().getSetting("RigsOfRods", "BasePath") + + #ogre windows + self.terrainOgreWin = RoRTerrainOgreWindow(self.splitterleft, wx.ID_ANY, rordir=self.rordir) + self.sharedOgreWin = RoRTerrainSelectedObjectOgreWindow(self.viewsplitterup, wx.ID_ANY, self.terrainOgreWin) + self.sharedOgreWin2 = RoRTerrainSelectedObjectTopOgreWindow(self.viewsplitterdown, wx.ID_ANY, self.terrainOgreWin) + + #some labels + #self.helptext = wx.StaticText(self.splitterleft, wx.ID_ANY, "short help: right click = ro... [truncated message content] |