OneDriveがXgenを困らせていた話

:santa: Mayaアドカレ :santa: 3日目が空いておりましたので書いてみます。

https://qiita.com/advent-calendar/2018/maya

先日、xgenが起動しないという症状に出会いました。
とある方面からの相談だったのですが、いわく、いろいろ試してみたけどわからないとのこと。
なにしろ同じ症状がこちらには起きない（普通にxgen使える）ので、どう探ったものか困りました。

ある意味タイトルが全てなのですが、報告させていただく次第です。

# 事前情報

## xgen:four_leaf_clover::seedling::herb:

```
XGen は、ポリゴン メッシュのサーフェスに任意の数のプリミティブを
ランダムまたは均一に設定するためのジオメトリ インスタンサです。
```

https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2015/JPN/Maya/files/GUID-47644337-40F0-4766-BD3B-4104F9F9B7E2-htm.html

Disneyが開発し、5年前くらいからMayaに同梱されています

## OneDrive

先日時価総額でAppleを抜いたMicrosoft様のクラウドストレージサービスです

https://onedrive.live.com/

# 主訴

xgenが起動しません

## ここまでの試行

以下は試したとのこと

- プリファレンス削除
- Mayaアンインストール、再インストール
- 過去版を試す

## 確認

melコマンド`xgen`実行時に止まっているようでした。
さらに確認してみると、python関数`_getXgProject`だかそういう名前のがこけている模様

# パスに日本語は含まれてない

プロジェクトのパスを取得する関数でこけているので、
パスの中に文字列が含まれているのだろう、と思いました。

しかし確認してみると、プロジェクトフォルダの名前など含め、
日本語フォルダは含まれていないようでした。
あれ、思ったのと違う……

## 置き場所トリック

プロジェクトは **ドキュメント以下** に置かれていましたが、
Explorer上で「ドキュメント」に見えてもローカライズ表示されているだけで
パスとしては実際は「Documents」な **はずなので** 問題にしませんでした。

なんと相談者より
「このドキュメントはOneDrive以下です」
と伺っていたにも関わらずです。
同じ挙動をすると思っていました :angel_tone2:

これによって、一旦保留して持ち帰るなどちょっと時間がかかってしまいました。

# 解決

## 原因

もうネタを明かしてしまったも同然ですが、
OneDrive以下のドキュメントフォルダは
ユーザフォルダ以下のドキュメント（＝Documents）フォルダのようにはなっていません。
具体的には、
（Explorer上では「ドキュメント」、パスをみたら「Documents」、かと思っていたのですが）
OneDrive以下のドキュメントは本当に「~¥ドキュメント¥~」だったのです。

![O_dOwmEA.jpg](https://qiita-image-store.s3.amazonaws.com/0/298373/d2ec68e7-bed2-d3de-fe95-30d1f57590b1.jpeg)
(▲)OneDriveの「ドキュメント」

![THwbtQ37.jpg](https://qiita-image-store.s3.amazonaws.com/0/298373/6f1c8237-94ca-32ce-2577-4477a17db941.jpeg)
(▲)普通にみてる時（上段）と、パスをみてみたとき（下段）

## トリック2

…というか、
そもそも2バイト文字をパスに含んでいると set project できません。
なのになぜ「そもそもそこに set project できてしまっていたのか」
という点が、事態をややこしくしていました。

原因はおそらくこれです。

[Windows 10 は既定で OneDrive にファイルを保存する](https://support.office.com/ja-jp/article/windows-10-%E3%81%AF%E6%97%A2%E5%AE%9A%E3%81%A7-onedrive-%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B-33da0077-770c-4bda-b61e-8c8e8ca70ac7)

```
ファイルを作成すると、第 1 候補は [OneDrive] の下の 
[デスクトップ]、[ドキュメント]、または [画像] フォルダーになります
```

という設定があるのですが、これが入っていたのかなぁと。
（そのうち手元でも試したいところです（解決しちゃったことですしやらずに忘れそう））

## 対応1

別のフォルダにプロジェクトセットしてもらうことで解決しました。

「『ドキュメント』はパス的には **Documents** だから大丈夫」という思い込みが
対応を長引かせる結果となりました。
こうした思い込みには常々気をつけないとなと思いました…。

## 対応2

そもそもAutodesk様ともあろう開発力のある会社が
2バイト文字対応していないだなんて、いやいやそんなまさか

```python
return str( projectpath.encode('cp932') )
```

![u3cmhfQs.jpg](https://qiita-image-store.s3.amazonaws.com/0/298373/8ed16aa8-8b4b-3c29-6c91-c16e3f0d19fa.jpeg)

C:\Program Files\Autodesk\Maya{ver}\plug-ins\xgen\scripts\xgenm\
にある`xgGlobal.py`の 183行目を直せばいけるのではと思います。

***

# まとめ

というわけで、xgenそのものは関係ない内容ではありましたが……
autodeskさん対応お願いします、またはpy3化お願いします、
またはMicrosoftさん凝ったことしないで！

明日は、 ~~執筆時点ではどなたも登録されてませんが、
ひとネタあるという方は是非どうぞー~~ :bow_tone1: :thumbsup:
@chiyama さんの[「Mayaのノードで数学の演算を実現する」](http://philosy.com/blog/2018/12/21/maya%e3%81%ae%e3%83%8e%e3%83%bc%e3%83%89%e3%81%a7%e6%95%b0%e5%ad%a6%e3%81%ae%e6%bc%94%e7%ae%97%e3%82%92%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b/) が投稿されていました。


***

# その後(?)

この辺とか関係あるのかもしれないーと思いました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ちょっと訳あって Windows 10 のレジストリの状態調べてるんだけど、Microsoft が自分でめっちゃくちゃ間違ったキーを作りまくってて激しく治安が悪い。これは OneDrive が 上位キーの &quot;Software&quot; をつけ忘れたと見られるもの。こんなのがあちこち見つかる。 <a href="https://t.co/cUEJgOTIML">pic.twitter.com/cUEJgOTIML</a></p>&mdash; Unagi (@unagix) <a href="https://twitter.com/unagix/status/1210978426586353665?ref_src=twsrc%5Etfw">December 28, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>