Skip to content

Commit

Permalink
Fixed issue with duplicate texture attribs appeared on material list
Browse files Browse the repository at this point in the history
  • Loading branch information
is-blackhole committed Dec 18, 2012
1 parent 600f5e0 commit 42fd96b
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 18 deletions.
5 changes: 0 additions & 5 deletions src/userPlugins/materials/editorPlugin/editorPlugin.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
import wx

import pandac.PandaModules as pm

from wxExtra import utils as wxUtils

import p3d
from game.plugins.base import Base

from materialProperties import MaterialProperties
from previewViewport import PreviewViewport

ID_CREATE_MATERIAL = wx.NewId()
ID_WIND_MATERIAL_PREVIEW = wx.NewId()
Expand All @@ -26,7 +22,6 @@ def OnInit(self):
self.ui.mCreate.AppendSeparator()
self.ui.mCreate.AppendSubMenu(self.mPrim, '&Materials')
self.pnlMaterialProperties = MaterialProperties(self.ui, style=wx.SUNKEN_BORDER)
#self.pnlMaterialProperties = PreviewViewport(self.ui, style=wx.SUNKEN_BORDER)
self.pnlMaterialProperties.Initialize()

self.paneDef = wx.aui.AuiPaneInfo()\
Expand Down
33 changes: 20 additions & 13 deletions src/userPlugins/materials/editorPlugin/materialProperties.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@

import pandac.PandaModules as pm

from p3d.wxPanda import Viewport
import p3d.geometry

from previewViewport import PreviewViewport


Expand All @@ -24,16 +21,18 @@ def Initialize(self):
self.SetSizer(box)
self.materialsCB = wx.ComboBox(self, style=wx.CB_DROPDOWN)
self.materialsCB.Bind(wx.EVT_COMBOBOX, self.OnChooseMaterial)
st1 = wx.StaticText(self, label='Materials')
box.Add(st1, flag=wx.RIGHT, border=8)
box.Add(self.materialsCB, flag=wx.RIGHT, border=8)
self.materialsCB.Enable(False)
self.materialsCB.SetEditable(False)
#st1 = wx.StaticText(self, label='Materials')
#box.Add(st1, flag=wx.RIGHT, border=8)
box.Add(self.materialsCB, flag=wx.RIGHT | wx.LEFT | wx.TOP | wx.EXPAND, border=10)
box.Add(self.pnlPreview, 1, wx.EXPAND | wx.ALL, 10)

def OnChooseMaterial(self, event):
index = self.materialsCB.GetSelection()
print index, self.materialsCB.GetValue(), self.materialsCB.GetSelection()
if not index == wx.NOT_FOUND:
self.pnlPreview.ApplyTextureAttrib(self.materials[index])
ta_hash = self.materialsCB.GetClientData(index)
self.pnlPreview.ApplyTextureAttrib(self.materials[ta_hash])

def GetTextureAttrib(self, model):
def_ta = pm.TextureAttrib.makeDefault()
Expand All @@ -50,27 +49,35 @@ def GetTextureAttrib(self, model):

def OnUpdate(self, msg):
if not msg.data:
self.materialsCB.Enable(False)
self.pnlPreview.ResetPreview()
return
node = msg.data[0]
self.materials = self.CollectMaterials(node)
if not len(self.materials):
self.materialsCB.Enable(False)
return
cb_items = [ta.getTexture().getFilename().getBasename() for ta in self.materials]
self.materialsCB.Enable(True)
self.materialsCB.Clear()
self.materialsCB.AppendItems(cb_items)
for ta in self.materials.values():
self.materialsCB.Append(self.GetMaterialName(ta), ta.getHash())
self.materialsCB.SetSelection(0)
ta = self.GetTextureAttrib(node)
self.pnlPreview.ApplyTextureAttrib(ta)

def CollectMaterials(self, nodePath):
materials = []
materials = dict()
for np in nodePath.findAllMatches('**/+GeomNode'):
gn = np.node()
for gi in range(gn.getNumGeoms()):
state = gn.getGeomState(gi)
ta = state.getAttrib(pm.TextureAttrib.getClassType())
if ta and not ta.isOff():
materials.append(ta)
print ta
ta_hash = ta.getHash()
if ta_hash not in materials:
materials[ta_hash] = ta
return materials

def GetMaterialName(self, ta):
parts = [ts.getName() for ts in ta.getOnStages()]
return ":".join(parts)

0 comments on commit 42fd96b

Please sign in to comment.