Added support for dressing up another dogbone dressup.
This commit is contained in:
parent
8653c60821
commit
77a9dc53fd
|
@ -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)):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user