選択したエッジを延長し、その交点で頂点をマージしたいという要望が会社でありました。
ベクトルを使えば簡単に解決できそうな感じがしましたが、気になったので調査してみました。
以下ソース
コードと考え方は以下を参考にしました。
http://www.sousakuba.com/Programming/gs_two_lines_intersect.html
大変わかりやすく解説されています。
このソースでは、選択したエッジの交点を求め、近いほうの頂点をその座標へ移動するまでとなっていますが、処理の根幹としては十分かと。
うん、やっぱベクトルってべんりだなーと…。
Hossan Maya Mel etc... practice
2018年6月3日日曜日
2018年5月26日土曜日
namespaceを指定してFBXインポート
手動で行う分には問題なく行える操作ですが、スクリプトで実行しようとしたとき、若干はまりポイントだと思うので、メモを。
以下ソース
fileコマンドからインポートした時、namespaceを指定しても無反応。
カレントネームスペースを設定したうえでインポートするところがポイント。
以下ソース
fileコマンドからインポートした時、namespaceを指定しても無反応。
カレントネームスペースを設定したうえでインポートするところがポイント。
2018年5月17日木曜日
Maya2017 systemからフォルダを開くと無限ループで落ちるMayaバグ
無印Maya2017では起こらなかったのですが、Maya2017 update4で以下ソースを実行すると、落ちます。
systemからエクスプローラーでダイアログを開こうとすると、なぜか処理がconfirmDialogのところへ戻って、以下無限ループ。
キャンセルなどして、systemの処理をスキップしようとすると、Mayaが固まって落ちました。
処理をpythonに逃がして対応できないかと模索したところ、
os.startfileの処理では、同様の結果となり、Mayaが落ちました。
しかし、subprocess.popenから処理を行ったところ、無事にクラッシュを回避できました。(以下ソース)
subprocessとos、melのsystemの大きな違いは、既定値でshellへ処理を飛ばすかどうか。
subprocessは既定ではshellで処理をしなかったはずなので、そのあたりに原因があるかも。
なお、最新のMaya2017 update5で発生するかどうかは未検証。 後日もう少し探ってみることにする。
systemからエクスプローラーでダイアログを開こうとすると、なぜか処理がconfirmDialogのところへ戻って、以下無限ループ。
キャンセルなどして、systemの処理をスキップしようとすると、Mayaが固まって落ちました。
処理をpythonに逃がして対応できないかと模索したところ、
os.startfileの処理では、同様の結果となり、Mayaが落ちました。
しかし、subprocess.popenから処理を行ったところ、無事にクラッシュを回避できました。(以下ソース)
subprocessとos、melのsystemの大きな違いは、既定値でshellへ処理を飛ばすかどうか。
subprocessは既定ではshellで処理をしなかったはずなので、そのあたりに原因があるかも。
なお、最新のMaya2017 update5で発生するかどうかは未検証。 後日もう少し探ってみることにする。
2018年5月6日日曜日
OpenMaya:頂点処理の速度比較
以前海外の記述で見つけた記述を参考に、選択頂点で、設定値より近接している頂点の検索処理を、OpenMayaとmayaPythonで比較してみました。
処理内容はどちらも
①選択頂点の座標を取得
②openMayaのMVectorクラスを使って閾値以上近接している頂点を検索
③エラーがあればリストに格納して返す
以下ソース
mayaPython
openMaya
で、結果。
mayaPythonの結果: elapsed_time:1.26999998093[sec]
openMayaの結果: elapsed_time:0.103000164032[sec]
うーん! これだけで10倍以上の処理速度の差が。
ソースはもっと洗練できると思う。 もっと早くなるんじゃないだろか。
参考;
http://jensvhansen.com/fastest-way-to-query-vertex-position-in-maya/
https://boomrigs.com/blog/2016/1/12/how-to-get-mesh-vertex-position-through-maya-api
処理内容はどちらも
①選択頂点の座標を取得
②openMayaのMVectorクラスを使って閾値以上近接している頂点を検索
③エラーがあればリストに格納して返す
以下ソース
mayaPython
openMaya
で、結果。
mayaPythonの結果: elapsed_time:1.26999998093[sec]
openMayaの結果: elapsed_time:0.103000164032[sec]
うーん! これだけで10倍以上の処理速度の差が。
ソースはもっと洗練できると思う。 もっと早くなるんじゃないだろか。
参考;
http://jensvhansen.com/fastest-way-to-query-vertex-position-in-maya/
https://boomrigs.com/blog/2016/1/12/how-to-get-mesh-vertex-position-through-maya-api
2018年4月30日月曜日
OpenMaya:現在のビューポートからフェースを選択する
大分前にopenMayaを使って、現在のビューポートからフェースを選択するコードを書いたのですが、
どこかに行ってしまい、参考にした海外の書き込みも見当たらず、どーしたもんかと思っていたところ、
ようやく見つけました。
こんどこそ忘れないように。
※後になって参考にした書き込みを発見…はやくいってよぉ…。
参考:http://forums.cgsociety.org/archive/index.php?t-1045968.html
なお、元ソースを探してさまよっていた際、porySelectConstraintを使った方法を紹介している記述を見つけたので、試してみました。
参考:https://forum.highend3d.com/t/select-polygons-facing-camera/2782/3
しかし、使ってみると、こちらはポリゴンメッシュ内部にカメラがめり込むと、そのポリゴンメッシュが選択不能になってしまったので、openMaya経由のほうが無難に使えました。
参考:http://forums.cgsociety.org/archive/index.php?t-1045968.html
なお、元ソースを探してさまよっていた際、porySelectConstraintを使った方法を紹介している記述を見つけたので、試してみました。
参考:https://forum.highend3d.com/t/select-polygons-facing-camera/2782/3
しかし、使ってみると、こちらはポリゴンメッシュ内部にカメラがめり込むと、そのポリゴンメッシュが選択不能になってしまったので、openMaya経由のほうが無難に使えました。
2018年3月27日火曜日
現在のアクティブなシェルフを取得する
作ったToolのボタンをシェルフに登録したい。
ShelfLayoutをそもそも使っていれば何の問題もないけど、
さまざまな理由から、遠回りをしたいとき。
例えば右クリック⇒現在のMayaシェルフに登録などさせる場合、
現在アクティブなシェルフレイアウトの名前を取得したい。
そんな時はこちら。
ShelfLayoutをそもそも使っていれば何の問題もないけど、
さまざまな理由から、遠回りをしたいとき。
例えば右クリック⇒現在のMayaシェルフに登録などさせる場合、
現在アクティブなシェルフレイアウトの名前を取得したい。
そんな時はこちら。
2017年11月21日火曜日
レンダリング画像上の、あるノードのxy座標を取得する方法
レンダリング画像上の、あるノードのxy座標を取得する方法。 OpenMayaを介して、ワールド空間空間内の座標位置をカメラから計算し、画像上のxy座標を算出します。 レンダリング情報はレンダリング設定のcommon設定のresolutionから取得して計算します。
ソースまるコピ:
http://forums.cgsociety.org/archive/index.php?t-1109300.html
非常に分かりやすい記事でした。
なお、実際は知らせてみると、Photoshop画像上でx座標は正しい位置を取得しましたが、y座標の上下が逆転しました。うーん、なんだろ。
以上、備忘録メモ
登録:
投稿 (Atom)