From: <spo...@us...> - 2008-05-24 17:26:34
|
Revision: 903 http://opengate.svn.sourceforge.net/opengate/?rev=903&view=rev Author: spom_spom Date: 2008-05-24 10:26:37 -0700 (Sat, 24 May 2008) Log Message: ----------- Add very basic ogre.material editor, properties can be changed on the fly but not yet stored. Modified Paths: -------------- branches/ogEditor/ogEditor.py branches/ogEditor/propgridtest.py branches/ogEditor/src/ObjectInspectorPanels.py branches/ogEditor/src/OgreWindowWx.py branches/ogEditor/src/PropertyGrid.py Modified: branches/ogEditor/ogEditor.py =================================================================== --- branches/ogEditor/ogEditor.py 2008-05-21 20:04:57 UTC (rev 902) +++ branches/ogEditor/ogEditor.py 2008-05-24 17:26:37 UTC (rev 903) @@ -21,22 +21,11 @@ import opengate as og -#class OGView3D( OgreWindow ): - #def _PopulateScene(self): - ##automatic called by parent init -## self.headEnt = self.sceneManager.createEntity("ogreHead", "athene.mesh") - ##self.headEnt = self.sceneManager.createEntity("ogreHead", "ogrehead.mesh") - ###self.headEnt = self.sceneManager.createEntity("ogreHead", "Firefly.mesh") - ##self.headNode = self.sceneManager.getRootSceneNode().createChildSceneNode( ) - ##self.headNode.attachObject( self.headEnt ) - ##self.sceneManager.setAmbientLight( (0.0, 0.0, 1.0, 1.0) ) - #sector = og.Sector( self.sceneManager, None ) - ##sector.populate("testsector") - ID_MB_FILE_EXIT = wx.NewId() ID_MB_VIEW_SCENETREE = wx.NewId() ID_MB_VIEW_OBJECT = wx.NewId() ID_MB_VIEW_RESOURCE = wx.NewId() +ID_MB_VIEW_MATERIAL = wx.NewId() ID_MB_VIEW_PYCRUST = wx.NewId() ID_TB_EXIT = wx.NewId() ID_TB_TMP = wx.NewId() @@ -44,6 +33,7 @@ NAME_SCENETREE = "Scene tree" NAME_OBJECT = "Property inspector" NAME_RESOURCE = "Resource browser" +NAME_MATERIAL = "Material editor" NAME_PYCRUST = "PyCrust" class WorkSpace: @@ -54,11 +44,18 @@ class Opengate: resourceManager_ = None - def __init__( self, ): + def __init__( self, OgreWindow ): + self.resourceManager_ = og.ResourceManager() self.resourceManager_.logManager = og.LogManager() self.resourceManager_.entityManager = og.EntityManager( ) + self.resourceManager_.ogreRoot = OgreWindow.ogreRoot + self.resourceManager_.renderWindow = OgreWindow.renderWindow + for res in OgreWindow.resourceLocations: + self.resourceManager_.addResourceLocation( res[0], res[1] ) + + def initOpenGateResources_( self ): self.resourceManager_.loadGlobalIDs( "ids.xml" ) entityManager = self.resourceManager_.entityManager @@ -85,8 +82,16 @@ value = "Default", itemList = shaderSchemes, cback = vp.setMaterialScheme ) - +class OGEditorPane: + def __init__( self, ID, Name, mbShortcut, creator, defaultCheck ): + self.ID_ = ID + self.name_ = Name + self.mbItem_ = None + self.mbShortcut_ = mbShortcut + self.creator_ = creator + self.defaultCheck_ = defaultCheck + class MainFrame(wx.Frame): def __init__(self, *args, **kwds): kwds["style"] = wx.DEFAULT_FRAME_STYLE @@ -95,14 +100,19 @@ global ws ws = WorkSpace + self.allPanes = [] + self.allPanes.append( OGEditorPane( ID_MB_VIEW_SCENETREE, NAME_SCENETREE, "\tF1", None, True ) ) + self.allPanes.append( OGEditorPane( ID_MB_VIEW_OBJECT, NAME_OBJECT , "\tF2", None, False ) ) + self.allPanes.append( OGEditorPane( ID_MB_VIEW_RESOURCE, NAME_RESOURCE , "\tF3", None, False ) ) + self.allPanes.append( OGEditorPane( ID_MB_VIEW_MATERIAL, NAME_MATERIAL , "\tF4", None, True ) ) + self.allPanes.append( OGEditorPane( ID_MB_VIEW_PYCRUST, NAME_PYCRUST , "\tF9", None, False ) ) - self.og = Opengate() - self.initMenuBar_() self.initToolBar_() self.initStatusBar_() self.initFrameManager_() + self.og = Opengate( self.ogreRenderWindow ) self.og.initOpenGateResources_(); self.og.sector = og.Sector( self.ogreRenderWindow.sceneManager, None ); @@ -117,24 +127,18 @@ self.mb.Append( self.mbFile, "&File" ) self.mbView = wx.Menu() - self.mbViewScenetree = wx.MenuItem( self.mbView, ID_MB_VIEW_SCENETREE, NAME_SCENETREE + "\tF1", "", wx.ITEM_CHECK) - self.mbViewObject = wx.MenuItem( self.mbView, ID_MB_VIEW_OBJECT, NAME_OBJECT + "\tF2", "", wx.ITEM_CHECK) - self.mbViewResource = wx.MenuItem( self.mbView, ID_MB_VIEW_RESOURCE, NAME_RESOURCE + "\tF3", "", wx.ITEM_CHECK) - self.mbViewPyCrust = wx.MenuItem( self.mbView, ID_MB_VIEW_PYCRUST, NAME_PYCRUST + "\tF9", "", wx.ITEM_CHECK) - self.mbView.AppendItem( self.mbViewScenetree ) - self.mbView.AppendItem( self.mbViewObject ) - self.mbView.AppendItem( self.mbViewResource ) - self.mbView.AppendItem( self.mbViewPyCrust ) + + for pane in self.allPanes: + pane.mbItem_ = wx.MenuItem( self.mbView, pane.ID_, pane.name_ + pane.mbShortcut_, "", wx.ITEM_CHECK) + self.mbView.AppendItem( pane.mbItem_ ) + self.Bind( wx.EVT_MENU, self.doSwitchViewPane, id = pane.ID_ ) + self.mb.Append( self.mbView, "&View") self.SetMenuBar( self.mb ) self.Bind( wx.EVT_MENU, self.doExit, id = wx.ID_EXIT ) - self.Bind( wx.EVT_MENU, self.doSwitchViewPane, id = ID_MB_VIEW_SCENETREE) - self.Bind( wx.EVT_MENU, self.doSwitchViewPane, id = ID_MB_VIEW_OBJECT) - self.Bind( wx.EVT_MENU, self.doSwitchViewPane, id = ID_MB_VIEW_RESOURCE) - self.Bind( wx.EVT_MENU, self.doSwitchViewPane, id = ID_MB_VIEW_PYCRUST) - + def initToolBar_( self ): self.tb = wx.ToolBar(self, -1) self.SetToolBar( self.tb ) @@ -177,6 +181,11 @@ BestSize( wx.Size( 250, 200 ) ).MinSize( wx.Size( 250, 200 ) ). Left().Layer( 1 ).Position( 2 ).CloseButton(True).MaximizeButton(True)) + self.auiMgr.AddPane( self.createMaterialInspector_(), + wx.aui.AuiPaneInfo().Name( NAME_MATERIAL ).Caption( NAME_MATERIAL ). + BestSize( wx.Size( 250, 200 ) ).MinSize( wx.Size( 250, 200 ) ). + Left().Layer( 1 ).Position( 4 ).CloseButton(True).MaximizeButton(True)) + self.auiMgr.AddPane( self.createResourceInspector_(), wx.aui.AuiPaneInfo().Name( NAME_RESOURCE ).Caption( NAME_RESOURCE ). BestSize( wx.Size( 250, 200 ) ).MinSize( wx.Size( 250, 200 ) ). @@ -188,7 +197,7 @@ ################################################################################# def createRenderWindow_( self ): - self.ogreRenderWindow = OgreWindow( self, -1, ogResourceMan = self.og.resourceManager_ ) + self.ogreRenderWindow = OgreWindow( self, -1 ) return self.ogreRenderWindow def createCrustWindow_( self ): @@ -210,11 +219,17 @@ self.sceneTree.AssignImageList( il ) self.Bind( wx.EVT_TREE_SEL_CHANGED, self.doSelectTreeObject, self.sceneTree ) + self.Bind( CT.EVT_TREE_ITEM_CHECKED, self.doCheckTreeObject, self.sceneTree ) + #EVT_TREE_ITEM_CHECKING return self.sceneTree def createObjectInspector_( self ): - self.objectInspector = ObjectInspectorPanel( self, -1, wx.Point(0, 0), wx.Size(160, 250) ) + self.objectInspector = ObjectInspectorPanel( self, self, -1, wx.Point(0, 0), wx.Size(160, 250) ) return self.objectInspector + + def createMaterialInspector_( self ): + self.materialInspector = MaterialInspectorPanel( self, self, -1, wx.Point(0, 0), wx.Size(160, 250) ) + return self.materialInspector def createResourceInspector_( self ): self.resourceTree = ResourceTreePane( self, -1, wx.Point( 0, 0 ), wx.Size( 160, 250 ), @@ -225,18 +240,13 @@ def setDefaultProperties_( self ): self.SetTitle("ogEditor") self.sb.SetStatusWidths([-1]) - - self.mbViewScenetree.Check( ) - self.auiMgr.GetPane( NAME_SCENETREE ).Show() - - self.mbViewObject.Check( ) - self.auiMgr.GetPane( NAME_OBJECT ).Show() - self.mbViewResource.Check( False ) - self.auiMgr.GetPane( NAME_RESOURCE ).Hide() - - self.mbViewPyCrust.Check( False ) - self.auiMgr.GetPane( NAME_PYCRUST ).Hide() + for pane in self.allPanes: + pane.mbItem_.Check( pane.defaultCheck_ ) + if pane.defaultCheck_: + self.auiMgr.GetPane( pane.name_ ).Show() + else: + self.auiMgr.GetPane( pane.name_ ).Hide() self.UpdateSceneGraphEvent( None ) self.resourceTree.buildResourceTree( ) @@ -251,29 +261,21 @@ def doClosePane( self, event ): caption = event.GetPane().caption - if caption == NAME_SCENETREE: - self.mb.Check( ID_MB_VIEW_SCENETREE, False ) - elif caption == NAME_OBJECT: - self.mb.Check( ID_MB_VIEW_OBJECT, False ) - elif caption == NAME_RESOURCE: - self.mb.Check( ID_MB_VIEW_RESOURCE, False ) - elif caption == NAME_PYCRUST: - self.mb.Check( ID_MB_VIEW_PYCRUST, False ) + for pane in self.allPanes: + if pane.name_ == caption: + self.mb.Check( pane.ID_, False ) + break def doSwitchViewPane( self, event ): - if event.GetId() == ID_MB_VIEW_SCENETREE: - pane = self.auiMgr.GetPane( NAME_SCENETREE ) - elif event.GetId() == ID_MB_VIEW_OBJECT: - pane = self.auiMgr.GetPane( NAME_OBJECT ) - elif event.GetId() == ID_MB_VIEW_RESOURCE: - pane = self.auiMgr.GetPane( NAME_RESOURCE ) - elif event.GetId() == ID_MB_VIEW_PYCRUST: - pane = self.auiMgr.GetPane( NAME_PYCRUST ) + for pane in self.allPanes: + if event.GetId() == pane.ID_: + auiPane = self.auiMgr.GetPane( pane.name_ ) + if event.IsChecked(): + auiPane.Show( ) + else: + auiPane.Hide() + break - if event.IsChecked(): - pane.Show( ) - else: - pane.Hide() self.auiMgr.Update() event.Skip() @@ -282,8 +284,12 @@ obj = event.GetEventObject().GetPyData( event.GetEventObject().GetSelection() ) if type( obj ) == ogre.SceneNode: self.ogreRenderWindow.camera.lookAt( obj.getWorldPosition() ) - self.objectInspector.showData( obj ); + if type( obj ) == ogre.Material: + self.materialInspector.showData( obj ); + else: + self.objectInspector.showData( obj ); + if ws.activeResource: if type( ws.activeResource ) == ogre.SceneNode: ws.activeResource.showBoundingBox( False ); @@ -294,6 +300,14 @@ ws.activeResource = obj event.Skip() + def doCheckTreeObject( self, event ): + obj = event.GetEventObject().GetPyData( event.GetItem() ) + checked = event.GetEventObject().IsItemChecked( event.GetItem() ); + obj.setVisible( checked ) + + event.GetEventObject().EnableChildren( event.GetItem(), checked) + event.Skip() + ################################################################################# # utils ################################################################################# @@ -345,11 +359,15 @@ object_it = scenenode.getAttachedObjectIterator() while object_it.hasMoreElements(): m = object_it.getNext() - item = self.sceneTree.AppendItem( treenode, m.getName() ) + item = self.sceneTree.AppendItem( treenode, m.getName(), 1 ) #item = self.sceneTree.AppendItem( treenode, m.getMovableType() + "-" + m.getName() ) if m.getMovableType() == "Entity": id = self.SceneEntityIconID + if m.getNumSubEntities() > 1: + for i in range( 0, m.getNumSubEntities() ): + subentNode = self.sceneTree.AppendItem( item, m.getSubEntity( i ).getMaterialName(), 1 ) + self.sceneTree.SetPyData( subentNode, m.getSubEntity( i ) ) else: id = self.SceneUnknownIconID Modified: branches/ogEditor/propgridtest.py =================================================================== --- branches/ogEditor/propgridtest.py 2008-05-21 20:04:57 UTC (rev 902) +++ branches/ogEditor/propgridtest.py 2008-05-24 17:26:37 UTC (rev 903) @@ -23,40 +23,61 @@ self.SetSize( wx.Size( 800, 600 ) ) self.propertyGrid = PropertyMainGrid( self, -1, wx.DefaultPosition, wx.DefaultSize ) - self.propertyGrid.appendRowItemName( "Main", "name" ) - self.propertyGrid.appendRowItemName( "float", value = 10.1, format = FORMAT_FLOAT, cback = test.printValue ) - self.propertyGrid.appendRowItemName( "int", value = 10, format = FORMAT_INT, cback = test.printValue ) + self.propertyGrid.appendRowItemName( "Main", "name", toolTip = "toolTip" ) + self.propertyGrid.appendRowItemName( "float", value = 10.1, format = FORMAT_FLOAT, cback = test.printValue, toolTip = "toolTip" ) + self.propertyGrid.appendRowItemName( "int", value = 10, format = FORMAT_INT, cback = test.printValue, toolTip = "toolTip" ) - self.propertyGrid.appendRowItemSlider( "slider", cback = test.printValue ) - self.propertyGrid.appendRowItemColourSelect( "Colour", cback = test.printValue ) + self.propertyGrid.appendRowItemSlider( "slider", cback = test.printValue, toolTip = "toolTip" ) + self.propertyGrid.appendRowItemColourSelect( "Colour", cback = test.printValue, toolTip = "toolTip" ) - pane = PropertyPaneItem( self.propertyGrid, "testPane " ) - self.propertyGrid.appendPane( pane ) + collpane = self.propertyGrid.createAndAppendPane( "Child 1", toolTip = "toolTip" ) + collpane.appendRowItemName( "Child 1 A", "name", toolTip = "toolTip" ) + collpane.appendRowItemName( "Child 1 B", "name", toolTip = "toolTip" ) + collpane.appendRowItemName( "Child 1 C", "name", toolTip = "toolTip" ) - text = PropertyRowItemName( pane.GetPane(), "Name", "Val") - pane.appendRow( text ) - pane.Layout() - pane.Show() + subPane = collpane.createAndAppendPane( "Child 1-1", toolTip = "toolTip" ) + subPane.appendRowItemName( "Child 1-1 A", "name", toolTip = "toolTip") + subPane.appendRowItemName( "Child 1-1 B", "name", toolTip = "toolTip") + subPane.appendRowItemName( "Child 1-1 C", "name", toolTip = "toolTip") + subPane.appendPaneColourSelect( "Colour", cback = test.printValue, toolTip = "toolTip" ); + + subPane = collpane.createAndAppendPane( "Child 1-2", toolTip = "toolTip" ) + subPane.appendRowItemName( "Child 1-2 A", "name", toolTip = "toolTip") + subPane.appendRowItemName( "Child 1-2 B", "name", toolTip = "toolTip") + subPane.appendRowItemName( "Child 1-2 C", "name", toolTip = "toolTip") + subPane.appendPaneColourSelect( "Colour", cback = test.printValue , toolTip = "toolTip"); + + collpane2 = self.propertyGrid.createAndAppendPane( "Child 2", toolTip = "toolTip" ) + collpane2.appendRowItemName( "Child 2 A", "name", toolTip = "toolTip" ) + collpane2.appendRowItemName( "Child 2 B", "name", toolTip = "toolTip" ) + collpane2.appendRowItemName( "Child 2 C", "name", toolTip = "toolTip" ) + + subPane2 = collpane2.createAndAppendPane( "Child 1-1", toolTip = "toolTip" ) + subPane2.appendRowItemName( "Child 2-1 A", "name", toolTip = "toolTip") + subPane2.appendRowItemName( "Child 2-1 B", "name", toolTip = "toolTip") + subPane2.appendRowItemName( "Child 2-1 C", "name", toolTip = "toolTip") + subPane2.appendRowItemColourSelect( "Colour", cback = test.printValue, toolTip = "toolTip" ); self.propertyGrid.appendRowItemSlider( "expDensity", 0.0001, 0.0002, format = FORMAT_LOG10, - cback = test.printValue ) + cback = test.printValue, toolTip = "toolTip" ) modes = ("one", "two", "three" ) self.propertyGrid.appendRowItemChoice( "Choice set", value = "one", - itemList = modes, cback = test.printValue ) + itemList = modes, cback = test.printValue , toolTip = "toolTip") dic = ( (1, "eins"), (2, "zwei"), (3, "drei")) self.propertyGrid.appendRowItemChoice( "Choice map", value = 1, - itemMap = dic, cback = test.printValue ) + itemMap = dic, cback = test.printValue , toolTip = "toolTip") - self.propertyGrid.appendRowItemFileSelect( "File", cback = test.printValue ) + self.propertyGrid.appendRowItemFileSelect( "File", cback = test.printValue, toolTip = "toolTip" ) self.propertyGrid.appendRowItemFileSelect( "Files", cback = test.printValue, - flag = wx.MULTIPLE ) + flag = wx.MULTIPLE, toolTip = "toolTip" ) - self.propertyGrid.appendRowItemButton( "Button", cback = test.printValue ) - self.propertyGrid.appendRowItemInfo( "here is a long an verbose text entry" ) + self.propertyGrid.appendRowItemButton( "Button", cback = test.printValue, toolTip = "toolTip" ) + self.propertyGrid.appendRowItemInfo( "here is a long an verbose text entry", toolTip = "toolTip" ) + self.propertyGrid.appendRowItemCheck( "Check button", cback = test.printValue , toolTip = "toolTip") if __name__ == "__main__": ogEditor = wx.PySimpleApp(0) Modified: branches/ogEditor/src/ObjectInspectorPanels.py =================================================================== --- branches/ogEditor/src/ObjectInspectorPanels.py 2008-05-21 20:04:57 UTC (rev 902) +++ branches/ogEditor/src/ObjectInspectorPanels.py 2008-05-24 17:26:37 UTC (rev 903) @@ -12,7 +12,24 @@ def toStr( vec ): return ("%g, %g, %g"%(vec.x, vec.y, vec.z)) + +ogreCompareFunctions = ((ogre.CMPF_ALWAYS_FAIL, "CMPF_ALWAYS_FAIL"), + (ogre.CMPF_ALWAYS_PASS, "CMPF_ALWAYS_PASS"), + (ogre.CMPF_LESS, "CMPF_LESS"), + (ogre.CMPF_LESS_EQUAL, "CMPF_LESS_EQUAL"), + (ogre.CMPF_EQUAL, "CMPF_EQUAL"), + (ogre.CMPF_NOT_EQUAL, "CMPF_NOT_EQUAL"), + (ogre.CMPF_GREATER_EQUAL, "CMPF_GREATER_EQUAL"), + (ogre.CMPF_GREATER, "CMPF_GREATER") ) +ogreCullingMode = (( ogre.CULL_NONE, "CULL_NONE"), # Hardware never culls triangles and renders everything it receives. + (ogre.CULL_CLOCKWISE, "CULL_CLOCKWISE" ), # Hardware culls triangles whose vertices are listed clockwise in the view (default). + (ogre.CULL_ANTICLOCKWISE, "CULL_ANTICLOCKWISE" ) )# Hardware culls triangles whose vertices are listed anticlockwise in the view. + +ogreShadeOptions = (( ogre.SO_FLAT , "SO_FLAT" ), + ( ogre.SO_GOURAUD, "SO_GOURAUD" ), + ( ogre.SO_PHONG, "SO_PHONG" ) ) + class PropertyCollapsibleOgreFogPane( PropertyPaneItem ): def __init__( self, parent, name, object = None ): PropertyPaneItem.__init__(self, parent, name) @@ -80,9 +97,10 @@ self.object.setFog(self.mode, col, self.expDensity, self.linearStart, self.linearEnd ) class ObjectInspectorPanel(wx.Panel): - def __init__(self, *args, **kwds): + def __init__(self, parent, *args, **kwds): kwds["style"] = wx.TAB_TRAVERSAL wx.Panel.__init__(self, *args, **kwds) + self.parent_ = parent self.typeStaticText = wx.StaticText(self, -1, "Type") self.propertyGrid = PropertyMainGrid( self, -1, style=wx.SIMPLE_BORDER ) @@ -121,6 +139,8 @@ self.showNone() if type( data ) == ogre.SceneNode: self.showSceneNode( data ) + elif type( data ) == ogre.SubEntity: + self.showSubEntity( data ) elif type( data ) == ogre.Entity: self.showEntity( data ) elif issubclass( type( data ), ogre.SceneManager): @@ -200,13 +220,20 @@ def showEntity( self, data ): self.typeStaticText.SetLabel( "ogre.Entity" ) self.showName( data ) + if data.getNumSubEntities() == 1: + self.propertyGrid.appendRowItemName( "Material", data.getSubEntity( 0 ).getMaterialName() ) + self.parent_.materialInspector.showData( data.getSubEntity( 0 ).getMaterial() ) + + def showSubEntity( self, data ): + self.typeStaticText.SetLabel( "ogre.SubEntity" ) + self.propertyGrid.appendRowItemName( "Material", data.getMaterialName() ) + self.parent_.materialInspector.showData( data.getMaterial() ) def showResource( self, data ): self.typeStaticText.SetLabel( "Resource: " + data.getCreator().getResourceType() ) self.showName( data ); self.propertyGrid.appendRowItemName( "Group", data.getGroup() ) self.propertyGrid.appendRowItemName( "Origin", data.getOrigin() ) - # params = data.getParameters() # if len( params ) > 0: # pane = self.propertyTree.createPane( "Parameters" ) @@ -216,7 +243,7 @@ # # if type( data ) == ogre.Texture: # print "Texture" - + def showMovableObject( self, data ): self.typeStaticText.SetLabel( "Movable object: " + data.getMovableType() ) self.showName( data ); @@ -233,5 +260,159 @@ # end of class ObjectInspectorPanel +class MaterialInspectorPanel( ObjectInspectorPanel ): + def showData( self, data ): + self.propertyGrid.clean() + if type( data ) == ogre.Material: + self.showMaterial( data ) + else: + print "data is no material", data + def showPass( self, data, parenpane ): + collpane = parenpane.createAndAppendPane( "Pass " + data.getName() ) + + collpane.appendRowItemInfo( "programmable %d" % data.isProgrammable(), + toolTip ="Returns true if this pass is programmable ie includes either a vertex or fragment program." ) + + collpane.appendRowItemInfo( "hasVertexProgram %d" % data.hasVertexProgram(), + toolTip ="Returns true if this pass uses a programmable vertex pipeline." ) + + collpane.appendRowItemInfo( "hasFragmentProgram %d" % data.hasFragmentProgram(), + toolTip ="Returns true if this pass uses a programmable fragment pipeline." ) + + + #Returns true if this pass uses a shadow caster vertex program. + #bool hasShadowCasterVertexProgram (void) const + + #Returns true if this pass uses a shadow receiver vertex program. + #bool hasShadowReceiverVertexProgram (void) const + + #Returns true if this pass uses a shadow receiver fragment program. + #bool hasShadowReceiverFragmentProgram (void) const + + collpane.appendPaneColourSelect( "setAmbient", cback = data.setAmbient, + toolTip = "Sets the ambient colour reflectance properties for every Pass in every Technique.") + + collpane.appendPaneColourSelect( "setDiffuse", cback = data.setDiffuse, + toolTip = "Sets the diffuse colour reflectance properties of every Pass in every Technique." ) + + collpane.appendPaneColourSelect( "setSpecular", cback = data.setSpecular, + toolTip = "Sets the specular colour reflectance properties of every Pass in every Technique." ) + + collpane.appendPaneColourSelect( "setSelfIllumination", cback = data.setSelfIllumination, + toolTip = "Sets the shininess properties of every Pass in every Technique." ) + + def showTechnique( self, data ): + collpane = self.propertyGrid.createAndAppendPane( "Technique " + data.getName() ) + + collpane.appendRowItemName( "scheme name ", cfront = data.getSchemeName, cback = data.setSchemeName, + toolTip = "Returns the scheme to which this technique is assigned." ) + collpane.appendRowItemInfo( "supported %d" % data.isSupported(), + toolTip ="Indicates if this technique is supported by the current graphics card." ) + + collpane.appendRowItemInfo( "transparent %d"% data.isTransparent(), + toolTip = "Indicates if this Technique involves transparency" ) + + collpane.appendRowItemInfo( "loaded %d"% data.isLoaded(), "technique.isLoaded()" ) + + collpane.appendPaneColourSelect( "setAmbient", cback = data.setAmbient, + toolTip = "Sets the ambient colour reflectance properties for every Pass in every Technique." ) + + collpane.appendPaneColourSelect( "setDiffuse", cback = data.setDiffuse, + toolTip = "Sets the diffuse colour reflectance properties of every Pass in every Technique." ) + + collpane.appendPaneColourSelect( "setSpecular", cback = data.setSpecular, + toolTip = "Sets the specular colour reflectance properties of every Pass in every Technique.") + + #void setShininess (Real val) + #Sets the shininess properties of every Pass in every Technique. + + collpane.appendPaneColourSelect( "setSelfIllumination", cback = data.setSelfIllumination, + toolTip = "Sets the shininess properties of every Pass in every Technique." ) + + collpane.appendRowItemCheck( "depth check", cfront = data.isDepthCheckEnabled, cback = data.setDepthCheckEnabled, + toolTip = "Sets whether or not each Pass renders with depth-buffer checking on or not." ) + + collpane.appendRowItemCheck( "depth write", cfront = data.isDepthWriteEnabled, cback = data.setDepthWriteEnabled, + toolTip = "Sets whether or not each Pass renders with depth-buffer writing on or not." ) + + collpane.appendRowItemChoice( "depth function", value = 1, itemMap = ogreCompareFunctions, cback = data.setDepthFunction, + toolTip = "Sets the function used to compare depth values when depth checking is on." ) + + collpane.appendRowItemChoice( "culling mode", value = 1, itemMap = ogreCullingMode, cback = data.setCullingMode, + toolTip = "Sets the culling mode for each pass based on the 'vertex winding'." ) + + collpane.appendRowItemCheck( "colour write", value = not data.hasColourWriteDisabled(), cback = data.setColourWriteEnabled, + toolTip = "Sets whether or not colour buffer writing is enabled for each Pass." ) + + collpane.appendRowItemCheck( "lighting", value = True, cback = data.setLightingEnabled, + toolTip = "Sets whether or not dynamic lighting is enabled for every Pass." ) + + collpane.appendRowItemChoice( "shading mode", value = 1, itemMap = ogreShadeOptions, cback = data.setShadingMode, + toolTip = "Sets the type of light shading required." ) + + #String _compile (bool autoManageTextureUnits) + #Internal compilation method; see Material::compile. + #void _compileIlluminationPasses (void) + #Internal method for splitting the passes into illumination passes. + #Pass * createPass (void) + #Creates a new Pass for this Technique. + #void removePass (unsigned short index) + #Removes the Pass with the given index. + #bool movePass (const unsigned short sourceIndex, const unsigned short destinationIndex) + #Move a pass from source index to destination index. + + #const IlluminationPassIterator getIlluminationPassIterator (void) + #Gets an iterator over the illumination-stage categorised passes. + + #void _notifyNeedsRecompile (void) + #Tells the technique that it needs recompilation. + #void setPointSize (Real ps) + #Sets the point size properties for every Pass in this Technique. + + #void setManualCullingMode (ManualCullingMode mode) + #Sets the manual culling mode, performed by CPU rather than hardware. + + #void setFog (bool overrideScene, FogMode mode=FOG_NONE, const ColourValue &colour=ColourValue::White, Real expDensity=0.001, Real linearStart=0.0, Real linearEnd=1.0) + #Sets the fogging mode applied to each pass. + #void setDepthBias (float constantBias, float slopeScaleBias) + #Sets the depth bias to be used for each Pass. + #void setTextureFiltering (TextureFilterOptions filterType) + #Set texture filtering for every texture unit in every Pass. + #void setTextureAnisotropy (unsigned int maxAniso) + #Sets the anisotropy level to be used for all textures. + #void setSceneBlending (const SceneBlendType sbt) + #Sets the kind of blending every pass has with the existing contents of the scene. + #void setSceneBlending (const SceneBlendFactor sourceFactor, const SceneBlendFactor destFactor) + #Allows very fine control of blending every Pass with the existing contents of the scene. + #void setLodIndex (unsigned short index) + #Assigns a level-of-detail (LOD) index to this Technique. + #unsigned short getLodIndex (void) const + #Gets the level-of-detail index assigned to this Technique. + + #void setSchemeName (const String &schemeName) + #Set the 'scheme name' for this technique. + #const String & getSchemeName (void) const + #Returns the scheme to which this technique is assigned. + #unsigned short _getSchemeIndex (void) const + #Internal method for getting the scheme index. + + #void setName (const String &name) + #Set the name of the technique. + #const String & getName (void) const + #Gets the name of the technique. + #bool applyTextureAliases (const AliasTextureNamePairList &aliasList, const bool apply=true) const + #Applies texture names to Texture Unit State with matching texture name aliases. + + + nPasses = data.getNumPasses() + for i in range(0,nPasses): + self.showPass( data.getPass( i ), collpane ) + + def showMaterial( self, data ): + self.showResource( data ) + self.typeStaticText.SetLabel( "Material" ) + nTechniques = data.getNumTechniques() + for i in range(0,nTechniques): + self.showTechnique( data.getTechnique( i ) ) \ No newline at end of file Modified: branches/ogEditor/src/OgreWindowWx.py =================================================================== --- branches/ogEditor/src/OgreWindowWx.py 2008-05-21 20:04:57 UTC (rev 902) +++ branches/ogEditor/src/OgreWindowWx.py 2008-05-24 17:26:37 UTC (rev 903) @@ -44,10 +44,10 @@ #if you don't like the idea sceneEntities = Struct() - def __init__( self, parent, ID, size = wx.Size( 800, 600 ), renderSystem = "OpenGL", ogResourceMan = None, **kwargs ): + def __init__( self, parent, ID, size = wx.Size( 800, 600 ), renderSystem = "OpenGL", **kwargs ): self.parent = parent wx.PyWindow.__init__( self, parent, ID, size = size, **kwargs ) - self.ogResourceMan = ogResourceMan + #Event bindings self.Bind( wx.EVT_CLOSE, self._OnCloseWindow) self.Bind( wx.EVT_SIZE, self._OnSize) @@ -67,21 +67,22 @@ def _OgreInit(self,size,renderSystem): #Root creation self.ogreRoot = ogre.Root( getPluginPath(), "ogre.cfg" ) - if self.ogResourceMan: - self.ogResourceMan.ogreRoot = self.ogreRoot # setup resources config = ogre.ConfigFile() config.load( 'resources.cfg' ) + self.resourceLocations = [] section_iter = config.getSectionIterator() while section_iter.hasMoreElements(): section_name = section_iter.peekNextKey() settings = section_iter.getNext() for key, path in settings: ogre.ResourceGroupManager.getSingleton().addResourceLocation( path, key, section_name, False) - if self.ogResourceMan: - self.ogResourceMan.addResourceLocation( path, section_name ) + #if self.ogResourceMan: + #self.ogResourceMan.addResourceLocation( path, section_name ) + + self.resourceLocations.append( (path, section_name ) ) if os.path.exists( "ogre.cfg" ): self.ogreRoot.restoreConfig() @@ -140,9 +141,6 @@ renderWindow = self.ogreRoot.createRenderWindow('wxPython render window', size[ 0 ], size[ 1 ], False, renderParameters) renderWindow.active = True self.renderWindow = renderWindow - - if self.ogResourceMan: - self.ogResourceMan.renderWindow = renderWindow ogre.ResourceGroupManager.getSingleton().initialiseAllResourceGroups() Modified: branches/ogEditor/src/PropertyGrid.py =================================================================== --- branches/ogEditor/src/PropertyGrid.py 2008-05-21 20:04:57 UTC (rev 902) +++ branches/ogEditor/src/PropertyGrid.py 2008-05-24 17:26:37 UTC (rev 903) @@ -200,19 +200,24 @@ return wx.combo.ComboPopup.LazyCreate(self) class PropertyRowItem( ): + cfront_ = None cback_ = None parent_ = None - size_ = None + sizer_ = None labelTextCtrl_ = None rowHeight_ = 10 - def __init__( self, parent, name, cback = None ): - self.cback_ = cback - self.parent_ = parent - self.sizer_ = wx.BoxSizer( wx.HORIZONTAL ) + def __init__( self, parent, name, cfront = None, cback = None, toolTip = None): + self.cfront_ = cfront + self.cback_ = cback + self.parent_ = parent + self.sizer_ = wx.BoxSizer( wx.HORIZONTAL ) self.labelTextCtrl_ = wx.TextCtrl( parent, -1, name, style = wx.NO_BORDER | wx.ALIGN_LEFT ) + if toolTip: + self.labelTextCtrl_.SetToolTip( wx.ToolTip( toolTip ) ) + self.rowHeight_ = self.labelTextCtrl_.GetSize()[ 1 ] self.labelTextCtrl_.SetEditable( False ) self.sizer_.Add( self.labelTextCtrl_, 0, wx.EXPAND | wx.ALIGN_RIGHT ) @@ -228,20 +233,25 @@ item.GetWindow().Enable( value ) class PropertyRowItemInfo( PropertyRowItem ): - def __init__( self, parent, name ): + def __init__( self, parent, name, toolTip = None ): self.sizer_ = wx.BoxSizer( wx.HORIZONTAL ) self.labelTextCtrl_ = wx.TextCtrl( parent, -1, name, style = wx.NO_BORDER | wx.ALIGN_LEFT ) + if toolTip: + self.labelTextCtrl_.SetToolTip( wx.ToolTip( toolTip ) ) + self.labelTextCtrl_.SetEditable( False ) self.sizer_.Add( self.labelTextCtrl_, 1, wx.EXPAND | wx.ALIGN_RIGHT ) class PropertyRowItemName( PropertyRowItem ): valueTextCtrl_ = None format_ = None - def __init__( self, parent, name, value = None, format = FORMAT_STRING, cback = None): - PropertyRowItem.__init__( self, parent, name, cback = cback ) + def __init__( self, parent, name, value = None, format = FORMAT_STRING, cfront = None, cback = None, toolTip = None ): + PropertyRowItem.__init__( self, parent, name, cfront = cfront, cback = cback, toolTip = toolTip ) self.format_ = format self.validator = MyValidator() + if cfront: + value = cfront() if format == FORMAT_INT: self.validator = MyValidator( DIGIT_ONLY ) @@ -250,6 +260,8 @@ size = wx.Size( 40, self.rowHeight_ ), style = wx.NO_BORDER | wx.ALIGN_LEFT | wx.EXPAND, validator = self.validator ) + if ( toolTip ): + self.valueTextCtrl_.SetToolTip( wx.ToolTip( toolTip ) ) if ( format == FORMAT_STRING ): self.valueTextCtrl_.SetValue( "%s" % value ); @@ -280,28 +292,33 @@ class PropertyRowItemButton( PropertyRowItem ): button_ = None - def __init__( self, parent, name, cback = None ): - PropertyRowItem.__init__( self, parent, name, cback = cback ) + def __init__( self, parent, name, cback = None, toolTip = None ): + PropertyRowItem.__init__( self, parent, name, cback = cback, toolTip = toolTip ) self.button_ = wx.Button( parent, -1, size = wx.Size( 40, self.rowHeight_ ), style = wx.NO_BORDER | wx.ALIGN_LEFT | wx.EXPAND) + if ( toolTip ): + self.button_.SetToolTip( wx.ToolTip( toolTip ) ) + self.sizer_.AddSpacer( 1 ) self.sizer_.Add( self.button_, 1, wx.EXPAND | wx.ALIGN_LEFT ) self.button_.Bind( wx.EVT_BUTTON, self.cback_ ) class PropertyRowItemFileSelect( PropertyRowItem ): - def __init__( self, parent, name, value = "", cback = None, flag = 0, + def __init__( self, parent, name, value = "", cback = None, flag = 0, toolTip = None, wildcard = "All files (*.*)|*.*" ): - PropertyRowItem.__init__( self, parent, name, cback = cback ) + PropertyRowItem.__init__( self, parent, name, cback = cback, toolTip = toolTip ) self.value = value self.filename = self.value self.paths = [] self.wildcard = wildcard self.flag = flag if self.flag == wx.MULTIPLE: - self.choice = wx.combo.ComboCtrl( parent, -1, + self.choice = wx.combo.ComboCtrl( parent, -1,#shortHelp = "PropertyRowItem", size = wx.Size( 100, self.rowHeight_ ), style = wx.NO_BORDER | wx.NO_3D | wx.CB_READONLY ) + + self.popup = ListCtrlComboPopup( cback = self.setFilenameIdx ) self.popup.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) self.choice.SetPopupControl( self.popup ) @@ -364,10 +381,19 @@ self.cback_( self.filename ) class PropertyRowItemCheck( PropertyRowItem ): - def __init__( self, parent, name, value = False, cback = None): - PropertyRowItem.__init__( self, parent, name, cback = cback ) - self.isChecked = value + def __init__( self, parent, name, value = False, cfront = None, cback = None, toolTip = None ): + PropertyRowItem.__init__( self, parent, name, cfront = cfront, cback = cback, toolTip = toolTip ) + + if self.cfront_: + self.isChecked = self.cfront_() + else: + self.isChecked = value + self.checkbox = wx.CheckBox( parent, -1 ) + + if ( toolTip ): + self.checkbox.SetToolTip( wx.ToolTip( toolTip ) ) + self.sizer_.AddSpacer( 1 ) self.sizer_.Add( self.checkbox, 1, wx.EXPAND | wx.ALIGN_LEFT ) self.checkbox.Bind( wx.EVT_CHECKBOX, self.onChecked ) @@ -384,8 +410,8 @@ class PropertyRowItemSlider( PropertyRowItem ): def __init__( self, parent, name, value = 0, start = 0, end = 100, - format = FORMAT_INT, cback = None ): - PropertyRowItem.__init__( self, parent, name, cback = cback ) + format = FORMAT_INT, cback = None, toolTip = None ): + PropertyRowItem.__init__( self, parent, name, cback = cback, toolTip = toolTip ) self.format = format self.value = value self.start = start @@ -412,9 +438,12 @@ size = wx.Size( 40, self.rowHeight_ ), style = wx.NO_BORDER | wx.ALIGN_LEFT | wx.EXPAND, validator = self.validator) + + if ( toolTip ): + self.valueTextCtrl.SetToolTip( wx.ToolTip( toolTip ) ) - self.slider = wx.Slider( parent, -1, self.sliderValue, self.sliderStart, self.sliderEnd, - size = wx.Size( 100, self.rowHeight_ ), + self.slider = wx.Slider( parent, -1, self.sliderValue, self.sliderStart, self.sliderEnd, + size = wx.Size( 100, self.rowHeight_ ),#shortHelp = "PropertyRowItemSlider", style = wx.NO_BORDER | wx.NO_3D ) self.sizer_.AddSpacer( 1 ) @@ -460,8 +489,8 @@ self.cback_( self.value ) class PropertyRowItemChoice( PropertyRowItem ): - def __init__( self, parent, name, value = None, itemList = None, itemMap = None, cback = None): - PropertyRowItem.__init__( self, parent, name, cback = cback ) + def __init__( self, parent, name, value = None, itemList = None, itemMap = None, cback = None, toolTip = None): + PropertyRowItem.__init__( self, parent, name, cback = cback, toolTip = toolTip ) self.value = "" @@ -527,14 +556,18 @@ self.cback_( self.value ) class PropertyRowItemColourSelect( PropertyRowItemName ): - def __init__( self, parent, name, cback = None ): - PropertyRowItemName.__init__( self, parent, name, cback = cback ) + def __init__( self, parent, name, cback = None, toolTip = None ): + PropertyRowItemName.__init__( self, parent, name, cback = cback, toolTip = toolTip ) self.value = wx.Colour(0,0,0) self.colourButton = csel.ColourSelect( parent, -1, "", colour = self.value, size = wx.Size( self.rowHeight_, self.rowHeight_ ), - style = wx.NO_BORDER ) + style = wx.NO_BORDER ) + + if ( toolTip ): + self.colourButton.SetToolTip( wx.ToolTip( toolTip ) ) + self.sizer_.AddSpacer( 1 ) self.sizer_.Add( self.colourButton, 0, wx.EXPAND ) @@ -559,80 +592,97 @@ class PropertyGrid( ): def __init__(self): self.sizer_ = wx.BoxSizer( wx.VERTICAL ) - self.SetSizer( self.sizer_ ) self.widthCol0 = 50 self.widthCol2 = 24 self.xOffset = 17 def appendRow(self, row ): self.sizer_.AddSpacer(1) - self.sizer_.Add( row.sizer_, 0, wx.EXPAND ) + #self.sizer_.Add( row.sizer_, 0, wx.EXPAND ) - def appendRowItemInfo(self, name ): - item = PropertyRowItemInfo( self.pane, name ) + rowsizer = wx.BoxSizer( wx.HORIZONTAL ) + rowsizer.AddSpacer( 17 ) + rowsizer.Add( row.sizer_, 1, wx.EXPAND ) + self.sizer_.Add( rowsizer, 0, wx.EXPAND ) + + def appendRowItemInfo(self, name, toolTip = None): + item = PropertyRowItemInfo( self.pane, name, toolTip = toolTip ) self.appendRow( item ) return item - def appendRowItemName(self, name, value = None, format = FORMAT_STRING, cback = None ): - item = PropertyRowItemName( self.pane, name, value, format, cback ) + def appendRowItemName(self, name, value = None, format = FORMAT_STRING, cfront = None, cback = None, toolTip = None ): + item = PropertyRowItemName( self.pane, name, value, format, cfront = cfront, cback = cback, toolTip = toolTip ) self.appendRow( item ) return item - def appendRowItemButton(self, name, cback = None ): + def appendRowItemButton(self, name, cback = None, toolTip = None ): item = PropertyRowItemButton( self.pane, name, cback = cback) self.appendRow( item ) return item - def appendRowItemCheck(self, name, value = False, cback = None ): - item = PropertyRowItemCheck( self.pane, name, value, cback = cback) + def appendRowItemCheck(self, name, value = False, cfront = None, cback = None, toolTip = None ): + item = PropertyRowItemCheck( self.pane, name, value, cfront = cfront, cback = cback, toolTip = toolTip) self.appendRow( item ) return item - def appendRowItemChoice(self, name, value = None, itemList = None, itemMap = None, cback = None ): - item = PropertyRowItemChoice( self.pane, name = name , value = value, itemList = itemList, itemMap = itemMap, cback = cback ) + def appendRowItemChoice(self, name, value = None, itemList = None, itemMap = None, cback = None, toolTip = None ): + item = PropertyRowItemChoice( self.pane, name = name , value = value, itemList = itemList, itemMap = itemMap, + cback = cback, toolTip = toolTip ) self.appendRow( item ) return item - def appendRowItemFileSelect(self, name, value = "", cback = None, flag = 0, + def appendRowItemFileSelect(self, name, value = "", cback = None, flag = 0, toolTip = None, wildcard = "All files (*.*)|*.*" ): item = PropertyRowItemFileSelect( self.pane, name, value = value, - cback = cback, flag = flag, + cback = cback, flag = flag, toolTip = toolTip, wildcard = wildcard ) self.appendRow( item ) return item def appendRowItemSlider( self, name, value = 0, start = 0, end = 100, - format = FORMAT_INT, cback = None ): - item = PropertyRowItemSlider( self.pane, name, value, start, end, format, cback ) + format = FORMAT_INT, cback = None, toolTip = None ): + item = PropertyRowItemSlider( self.pane, name, value, start, end, format, cback = cback, toolTip = toolTip ) self.appendRow( item ) return item - def appendRowItemColourSelect( self, name, cback = None ): - item = PropertyRowItemColourSelect( self.pane, name, cback = cback ) + def appendRowItemColourSelect( self, name, cback = None, toolTip = None ): + item = PropertyRowItemColourSelect( self.pane, name, cback = cback, toolTip = toolTip ) self.appendRow( item ) return item + def createAndAppendPane( self, name, toolTip = None): + pane = PropertyPaneItem( self, name, toolTip = toolTip ) + return self.appendPane( pane ) + def appendPane(self, pane ): - self.sizer_.AddSpacer( 1 ) + rowsizer = wx.BoxSizer( wx.HORIZONTAL ) + rowsizer.AddSpacer( 13 ) + rowsizer.Add( pane, 1, wx.EXPAND ) + self.sizer_.Add( rowsizer, 0, wx.EXPAND ) + return pane + #self.sizer_.AddSpacer( 1 ) #self.sizer_.Add( pane, 0, wx.EXPAND ) - self.sizer_.Add( pane, 0, wx.EXPAND ) - def appendPaneColourSelect( self, name, cfront = None, cback = None ): - pane = PropertyPaneItemColour( self.pane, name, cfront, cback ) + def appendPaneColourSelect( self, name, cfront = None, cback = None, toolTip = None): + pane = PropertyPaneItemColour( self, name, cfront = cfront, cback = cback, toolTip = toolTip ) self.appendPane( pane ) return pane #class PropertyPaneItem( wx.Panel, PropertyGrid ): class PropertyPaneItem( wx.CollapsiblePane, PropertyGrid ): - def __init__(self, parent, name): + def __init__(self, parent, name, toolTip = None): self.parent_ = parent - - wx.CollapsiblePane.__init__( self, parent, -1, name, - style = wx.CP_DEFAULT_STYLE - | wx.CP_NO_TLW_RESIZE - ) + if issubclass( type( parent ), PropertyPaneItem ): + parentWin = self.parent_.GetPane() + else: + parentWin = self.parent_ + + wx.CollapsiblePane.__init__( self, parentWin, -1, name, style = wx.CP_DEFAULT_STYLE | wx.CP_NO_TLW_RESIZE ) #wx.Panel.__init__( self, parent, -1 ) + if toolTip: + self.SetToolTip( wx.ToolTip( toolTip ) ) + PropertyGrid.__init__( self ) self.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) @@ -641,27 +691,22 @@ self.pane = self.GetPane() self.pane.SetFont( wx.Font( 8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "" ) ) - self.sizer_ = wx.BoxSizer( wx.VERTICAL ) self.pane.SetSizer( self.sizer_ ) #def GetPane( self ): #return self.pane def OnPaneChanged(self, event = None): - if event: - if ( event.Collapsed ): - event.GetEventObject().GetPane().Hide() - else: - event.GetEventObject().GetPane().Show() - #self.pane.Show() - #self.Layout() - #self.parent_.Layout() + if ( issubclass( type( self.parent_ ), PropertyPaneItem ) ): + self.parent_.Collapse( ) + self.parent_.Expand( ) + self.GetParent().Layout() class PropertyPaneItemColour( PropertyPaneItem ): - def __init__( self, parent, name, cfront = None, cback = None ): - PropertyPaneItem.__init__(self, parent, name) + def __init__( self, parent, name, cfront = None, cback = None, toolTip = None ): + PropertyPaneItem.__init__(self, parent, name, toolTip = toolTip) self.cback = cback self.cfront = cfront self.value = [0, 0, 0, 0] @@ -710,6 +755,8 @@ argv["style"] = wx.TAB_TRAVERSAL wx.Panel.__init__(self, *argc, **argv) PropertyGrid.__init__(self) + self.SetSizer( self.sizer_ ) + self.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) #self.SetBackgroundColour( wx.Colour(200, 200, 200) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |