ワイヤーフレームが黒くなる

アニメーターさんからの連絡

ワイヤーフレームが真っ黒になるんですが、なんとかなりませんか

との事。

まっさかぁー・・・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/f912f05d-d522-9c6b-0576-7a6daa9ea52f.png)

ほらー大丈夫じゃーん
開き直すと・・・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/cc818740-4879-daaf-bbef-e5705c24c8e7.png)

真っ黒くろすけかむひぁ


確認
-
現象としては

- 同じファイルを2個以上リファレンスすると、ワイヤーフレームの太さ・RGBがリセットされてしまう。
- 数値的にlineWidthが-1になっている
- カラーは　0，0，0になっている
- 結果黒い細い表示になる。

数値がリセットされてるというよりも、数値が入力されず結果デフォルト値になってしまっているという印象

対策
-
とりあえずのところ、該当のファイルをreload referenceすると正常な表示に戻る様子。
ただ、アセット数が多いとリロードするだけでも面倒よのぉ

- アトリビュートをロックしてみる
- 数値保存用のattrを用意してコネクトしておく


アトリビュートをロックしてみる
-
対象のアトリビュートをロックしてしまえば行けるかな？と
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/8ad973e9-089a-6d44-ad3b-327d0e927ef0.png)


```python
shapes = cmds.listRelatives(target,s =True) or []
for shape in shapes:
    cmds.setAttr(shape + '.wireColorRGB',l=True)

```

結果はー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/845d2ba5-15ae-f081-9c10-e4b02bccb378.png)

ダークネス！
ロックだけ生かし！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/db82b0fe-c730-dc20-b3b2-bc7e4d929b38.png)


数値保存用のattrを用意してコネクトしておく
-
アトリビュートをわざわざ作ってコネクトしておけば・・・・

```python
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)
```

結果は・・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/8b956c74-7d82-1d0a-015a-91bfb7197f42.png)

やったでｋ・・・・・細くね？

数値的には問題なさそう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/5d6e534d-1c37-bd48-9ffe-e6eccc63d538.png)
というか選択したら太さ戻ったぞ。

再評価？
-

シェイプの何かを再評価すれば良いっぽいのだけども

とりあえず選択
```
for shape in cmds.ls(type = "nurbsCurve"):
    cmds.select(shape)
```
ﾀﾞﾒｰ

```
cmds.refresh()
```
ﾀﾞﾒｰ

アトリビュートエディタでシェイプのタブをアクティブにしないと復活しませんね・・・

個人的に信頼してる dgevalは・・・・
```
for shape in cmds.ls(type = "nurbsCurve"):
    cmds.dgeval(shape + ".lineWidth")
```
だｍ・・・・・
あー
dgeval後にtransformノード選択すればアトリビュートエディタ閉じてても復活しますね


まとめ
-

- とりあえずアトリビュートつないでおく
- 何らかの方法でシェイプをdgevalで評価する
- 何らかの方法で親ノード選択させる

ってやっておけばリロードはしなくてもよさそう。
若干手間だけど、リロードするよりは・・・・・・ましですかね？

もっとスマートな解決方法ご存じの方はぜひ教えてください！