self._scene.centerAll()
self.sceneUpdated()
+ def OnFillPlatform(self, e):
+ if self._selectedObj is None:
+ return
+ while True:
+ newObj = self._selectedObj.copy()
+ self._scene.add(newObj)
+ self._scene.centerAll()
+ if not self._scene.checkPlatform(newObj):
+ break
+ self._scene.remove(newObj)
+ self._scene.centerAll()
+ self.sceneUpdated()
+
def OnSplitObject(self, e):
if self._selectedObj is None:
return
if self._selectedObj == self._focusObj:
self.Bind(wx.EVT_MENU, self.OnDuplicateObject, menu.Append(-1, 'Duplicate'))
self.Bind(wx.EVT_MENU, self.OnSplitObject, menu.Append(-1, 'Split'))
+ self.Bind(wx.EVT_MENU, self.OnFillPlatform, menu.Append(-1, 'Fill platform'))
if self._selectedObj != self._focusObj and self._focusObj is not None:
self.Bind(wx.EVT_MENU, self.OnMergeObjects, menu.Append(-1, 'Dual extrusion merge'))
if menu.MenuItemCount > 0:
initialList.sort(self._objIdxCmp)
+ n = 0
self._todo = [_objectOrder([], initialList)]
while len(self._todo) > 0:
+ n += 1
current = self._todo.pop()
- #print len(self._todo), len(current.order), len(initialList)
+ print len(self._todo), len(current.order), len(initialList), current.order
for addIdx in current.todo:
- if not self._checkHitFor(addIdx, current.order):
+ if not self._checkHitFor(addIdx, current.order) and not self._checkBlocks(addIdx, current.todo):
todoList = current.todo[:]
todoList.remove(addIdx)
order = current.order[:] + [addIdx]
if len(todoList) == 0:
self._todo = None
self.order = order
+ print n
return
self._todo.append(_objectOrder(order, todoList))
self.order = None
return True
return False
+ def _checkBlocks(self, addIdx, others):
+ for idx in others:
+ if addIdx != idx and self._hitMap[idx][addIdx]:
+ return True
+ return False
+
def _checkHit(self, addIdx, idx):
addPos = self._scene._objectList[addIdx].getPosition()
addSize = self._scene._objectList[addIdx].getSize()