アニメーターさんからの連絡
ワイヤーフレームが真っ黒になるんですが、なんとかなりませんか
との事。
まっさかぁー・・・・・
真っ黒くろすけかむひぁ
確認
現象としては
- 同じファイルを2個以上リファレンスすると、ワイヤーフレームの太さ・RGBがリセットされてしまう。
- 数値的にlineWidthが-1になっている
- カラーは 0,0,0になっている
- 結果黒い細い表示になる。
数値がリセットされてるというよりも、数値が入力されず結果デフォルト値になってしまっているという印象
対策
とりあえずのところ、該当のファイルをreload referenceすると正常な表示に戻る様子。
ただ、アセット数が多いとリロードするだけでも面倒よのぉ
- アトリビュートをロックしてみる
- 数値保存用のattrを用意してコネクトしておく
アトリビュートをロックしてみる
shapes = cmds.listRelatives(target,s =True) or []
for shape in shapes:
cmds.setAttr(shape + '.wireColorRGB',l=True)
結果はー
ダークネス!
ロックだけ生かし!
数値保存用のattrを用意してコネクトしておく
アトリビュートをわざわざ作ってコネクトしておけば・・・・
def addWireSettingKeep(target,wireColor,lineWidth):
shapes = cmds.listRelatives(target,s =True) or []
if len(shapes) == 0:
return
if cmds.objExists(target + ".wireColorKeep") ==False:
cmds.addAttr(target, ln = "wireColorKeep",at = "compound",numberOfChildren = 3)
cmds.addAttr(target, ln = "wireColorKeepR",at = "float", p = "wireColorKeep",dv = wireColor[0], min = 0.0,max = 1.0)
cmds.addAttr(target, ln = "wireColorKeepG",at = "float", p = "wireColorKeep",dv = wireColor[1], min = 0.0,max = 1.0)
cmds.addAttr(target, ln = "wireColorKeepB",at = "float", p = "wireColorKeep",dv = wireColor[2], min = 0.0,max = 1.0)
cmds.addAttr(target, ln = "lineWidthKeep",at = "long",dv = lineWidth)
cmds.setAttr(target + ".wireColorKeep",*wireColor,type = "float3")
cmds.setAttr(target + ".lineWidthKeep",lineWidth)
for shape in shapes:
cmds.setAttr(shape + '.useObjectColor', 2)
cmds.connectAttr(target + ".wireColorKeepR",shape + ".wireColorR",f=True)
cmds.connectAttr(target + ".wireColorKeepG",shape + ".wireColorG",f=True)
cmds.connectAttr(target + ".wireColorKeepB",shape + ".wireColorB",f=True)
cmds.connectAttr(target + ".lineWidthKeep",shape + ".lineWidth",f=True)
target = "nurbsCircle1"
wireColor = [1,1,0]
lineWidth = 10
addWireSettingKeep(target,wireColor,lineWidth)
やったでk・・・・・細くね?
再評価?
シェイプの何かを再評価すれば良いっぽいのだけども
とりあえず選択
for shape in cmds.ls(type = "nurbsCurve"):
cmds.select(shape)
ダメー
cmds.refresh()
ダメー
アトリビュートエディタでシェイプのタブをアクティブにしないと復活しませんね・・・
個人的に信頼してる dgevalは・・・・
for shape in cmds.ls(type = "nurbsCurve"):
cmds.dgeval(shape + ".lineWidth")
だm・・・・・
あー
dgeval後にtransformノード選択すればアトリビュートエディタ閉じてても復活しますね
まとめ
- とりあえずアトリビュートつないでおく
- 何らかの方法でシェイプをdgevalで評価する
- 何らかの方法で親ノード選択させる
ってやっておけばリロードはしなくてもよさそう。
若干手間だけど、リロードするよりは・・・・・・ましですかね?
もっとスマートな解決方法ご存じの方はぜひ教えてください!