From 42fd96bdf484e55ed54965dbd2cd471d53b6f67b Mon Sep 17 00:00:00 2001 From: is Date: Tue, 18 Dec 2012 19:27:36 +0200 Subject: [PATCH] Fixed issue with duplicate texture attribs appeared on material list --- .../materials/editorPlugin/editorPlugin.py | 5 --- .../editorPlugin/materialProperties.py | 33 +++++++++++-------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/userPlugins/materials/editorPlugin/editorPlugin.py b/src/userPlugins/materials/editorPlugin/editorPlugin.py index 11122aa..a97256c 100644 --- a/src/userPlugins/materials/editorPlugin/editorPlugin.py +++ b/src/userPlugins/materials/editorPlugin/editorPlugin.py @@ -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() @@ -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()\ diff --git a/src/userPlugins/materials/editorPlugin/materialProperties.py b/src/userPlugins/materials/editorPlugin/materialProperties.py index e6fac4c..b9bba38 100644 --- a/src/userPlugins/materials/editorPlugin/materialProperties.py +++ b/src/userPlugins/materials/editorPlugin/materialProperties.py @@ -6,9 +6,6 @@ import pandac.PandaModules as pm -from p3d.wxPanda import Viewport -import p3d.geometry - from previewViewport import PreviewViewport @@ -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() @@ -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)