self.updateProfileToControls()
self.sceneUpdated()
+ def OnDuplicateObject(self, e):
+ if self._selectedObj is None:
+ return
+ self._scene.add(self._selectedObj.copy())
+ self._scene.centerAll()
+ self.sceneUpdated()
+
def OnMergeObjects(self, e):
if self._selectedObj is None or self._focusObj is None or self._selectedObj == self._focusObj:
return
self._focusObj = None
self._scene.remove(obj)
for m in obj._meshList:
- if m.vbo is not None:
+ if m.vbo is not None and m.vbo.decRef():
self.glReleaseList.append(m.vbo)
if self._isSimpleMode:
self._scene.arrangeAll()
self.Refresh()
if e.GetButton() == 3:
if self._selectedObj == self._focusObj:
- #menu = wx.Menu()
- #menu.Append(-1, 'Test')
- #self.PopupMenu(menu)
- #menu.Destroy()
- pass
+ menu = wx.Menu()
+ self.Bind(wx.EVT_MENU, self.OnDuplicateObject, menu.Append(-1, 'Duplicate'))
+ self.PopupMenu(menu)
+ menu.Destroy()
if self._selectedObj != self._focusObj and self._focusObj is not None:
menu = wx.Menu()
self.Bind(wx.EVT_MENU, self.OnMergeObjects, menu.Append(-1, 'Merge'))
platformMesh = None
-class GLShader(object):
+class GLReferenceCounter(object):
+ def __init__(self):
+ self._refCounter = 1
+
+ def incRef(self):
+ self._refCounter += 1
+
+ def decRef(self):
+ self._refCounter -= 1
+ return self._refCounter <= 0
+
+class GLShader(GLReferenceCounter):
def __init__(self, vertexProgram, fragmentProgram):
+ super(GLShader, self).__init__()
self._vertexString = vertexProgram
self._fragmentString = fragmentProgram
try:
if self._program is not None and bool(glDeleteProgram):
print "Shader was not properly released!"
-class GLVBO(object):
+class GLVBO(GLReferenceCounter):
def __init__(self, vertexArray, normalArray):
+ super(GLVBO, self).__init__()
self._buffer = glGenBuffers(1)
self._size = len(vertexArray)
glBindBuffer(GL_ARRAY_BUFFER, self._buffer)
self._matrix = numpy.matrix([[1,0,0],[0,1,0],[0,0,1]], numpy.float64)
self._transformedMin = None
self._transformedMax = None
+ self._transformedSize = None
self._boundaryCircleSize = None
+ self._drawOffset = None
+ self._loadAnim = None
+
+ def copy(self):
+ ret = printableObject()
+ ret._matrix = self._matrix.copy()
+ ret._meshList = self._meshList[:]
+ ret._transformedMin = self._transformedMin
+ ret._transformedMax = self._transformedMin
+ ret._transformedSize = self._transformedSize
+ ret._boundaryCircleSize = self._boundaryCircleSize
+ ret._drawOffset = self._drawOffset
+ for m in ret._meshList:
+ m.vbo.incRef()
+ return ret
def _addMesh(self):
m = mesh()