Added support for dressing up another dogbone dressup.

This commit is contained in:
Markus Lampert 2016-10-11 11:47:36 -07:00
parent 8653c60821
commit 77a9dc53fd

View File

@ -313,22 +313,27 @@ class ObjectDressup:
inChordIsShorter = inChord.getLength() < outChord.getLength() inChordIsShorter = inChord.getLength() < outChord.getLength()
return self.tboneEdgeCommands(obj, inChord, outChord, inChordIsShorter) return self.tboneEdgeCommands(obj, inChord, outChord, inChordIsShorter)
def isBoneBlacklisted(self, obj, boneId, loc): def boneIsBlacklisted(self, obj, boneId, loc):
blacklisted = False blacklisted = False
parentConsumed = False
if boneId in obj.BoneBlacklist: if boneId in obj.BoneBlacklist:
blacklisted = True blacklisted = True
elif loc in self.locationBlacklist: elif loc in self.locationBlacklist:
obj.BoneBlacklist.append(boneId) obj.BoneBlacklist.append(boneId)
blacklisted = True blacklisted = True
elif hasattr(obj.Base, 'BoneBlacklist'):
parentConsumed = boneId not in obj.Base.BoneBlacklist
blacklisted = parentConsumed
if blacklisted: if blacklisted:
self.locationBlacklist.add(loc) self.locationBlacklist.add(loc)
return blacklisted return (blacklisted, parentConsumed)
# Generate commands necessary to execute the dogbone # Generate commands necessary to execute the dogbone
def boneCommands(self, obj, boneId, inChord, outChord): def boneCommands(self, obj, boneId, inChord, outChord):
loc = (inChord.End.x, inChord.End.y) loc = (inChord.End.x, inChord.End.y)
enabled = not self.isBoneBlacklisted(obj, boneId, loc) blacklisted, inaccessible = self.boneIsBlacklisted(obj, boneId, loc)
self.bones.append((boneId, loc, enabled)) enabled = not blacklisted
self.bones.append((boneId, loc, enabled, inaccessible))
if enabled: if enabled:
if obj.Shape == Shape.Dogbone: if obj.Shape == Shape.Dogbone:
@ -397,7 +402,11 @@ class ObjectDressup:
def setup(self, obj): def setup(self, obj):
if not hasattr(self, 'toolRadius'): if not hasattr(self, 'toolRadius'):
print("Here we go ... ") print("Here we go ... ")
# By default the side for dogbones is opposite of the base path side if hasattr(obj.Base, "BoneBlacklist"):
# dressing up a bone dressup
obj.Side = obj.Base.Side
else:
# otherwise dogbones are opposite of the base path's side
if obj.Base.Side == Side.Left: if obj.Base.Side == Side.Left:
obj.Side = Side.Right obj.Side = Side.Right
elif obj.Base.Side == Side.Right: elif obj.Base.Side == Side.Right:
@ -422,12 +431,12 @@ class ObjectDressup:
# If the receiver was loaded from file, then it never generated the bone list. # If the receiver was loaded from file, then it never generated the bone list.
if not hasattr(self, 'bones'): if not hasattr(self, 'bones'):
self.execute(obj) self.execute(obj)
for (id, loc, enabled) in self.bones: for (id, loc, enabled, inaccessible) in self.bones:
item = state.get(loc) item = state.get(loc)
if item: if item:
item[1].append(id) item[1].append(id)
else: else:
state[loc] = (enabled, [id]) state[loc] = (enabled, inaccessible, [id])
return state return state
class ViewProviderDressup: class ViewProviderDressup:
@ -549,16 +558,19 @@ class TaskPanel:
def updateBoneList(self): def updateBoneList(self):
itemList = [] itemList = []
for loc, state in self.obj.Proxy.boneStateList(self.obj).iteritems(): for loc, (enabled, inaccessible, ids) in self.obj.Proxy.boneStateList(self.obj).iteritems():
lbl = '(%.2f, %.2f): %s' % (loc[0], loc[1], ','.join(str(id) for id in state[1])) lbl = '(%.2f, %.2f): %s' % (loc[0], loc[1], ','.join(str(id) for id in ids))
item = QtGui.QListWidgetItem(lbl) item = QtGui.QListWidgetItem(lbl)
item.setFlags(QtCore.Qt.ItemFlag.ItemIsEnabled | QtCore.Qt.ItemFlag.ItemIsSelectable | QtCore.Qt.ItemFlag.ItemIsUserCheckable) if enabled:
if state[0]:
item.setCheckState(QtCore.Qt.CheckState.Checked) item.setCheckState(QtCore.Qt.CheckState.Checked)
else: else:
item.setCheckState(QtCore.Qt.CheckState.Unchecked) item.setCheckState(QtCore.Qt.CheckState.Unchecked)
item.setData(self.DataIds, state[1]) flags = QtCore.Qt.ItemFlag.ItemIsSelectable
item.setData(self.DataKey, state[1][0]) if not inaccessible:
flags |= QtCore.Qt.ItemFlag.ItemIsEnabled | QtCore.Qt.ItemFlag.ItemIsUserCheckable
item.setFlags(flags)
item.setData(self.DataIds, ids)
item.setData(self.DataKey, ids[0])
itemList.append(item) itemList.append(item)
self.form.bones.clear() self.form.bones.clear()
for item in sorted(itemList, key=lambda item: item.data(self.DataKey)): for item in sorted(itemList, key=lambda item: item.data(self.DataKey)):