GUI作りの基礎の基礎の基礎のお勉強
mayaのPythonは maya.cmds よりも pymel の方がよさげというお話を聴いたので、ちょっとやってみようかなと。
pymelのインポートは
from pymel.core import *
ってしているところと
import pymel.core as pm
とかしているところと二通りぐらいネットを見ているとありますかな。取りあえず後者でいきませう。 GUI周りに関するドキュメントは
Building User Interfaces [PyMEL 1.0.6 documentation]
あたりをまずは読めばいいのかい? このドキュメントを解説というか検証してくれている日本語サイトありました。
PymelのGUIについてかんがえる [日々の忘備録]
助かりますなぁ。
![](https://blogimg.goo.ne.jp/user_image/57/6a/c088286a908693a042f9d5a63c0bda6a.jpg?random=f38e0f54145deec18b703d3e74114f93)
lambda式ってのが個人的に実はよく分かっていなかったのです。
>>> def mult( x, y ):
... return x * y
...
>>> print mult( 5, 3 )
15
というのを
>>> f = lambda x, y: x * y
>>> print f( 5, 3 )
15
という書き方が出来る。文ではなく式なので、def では出来ない書き方が出来ますぜって事らしい。
さて、読み進めていくと、lambdaの欠点ってのが書かれていて、for文でボタンを作る時うまくいかないって事が描かれています。 実行するとすぐに分かるのだけど、UIはきちんと用意されるけど、実行結果が意図通りではないってことっすね。
![](https://blogimg.goo.ne.jp/user_image/1d/32/94a7f60b9f5cb9372506d7a9a13c94fa.jpg?random=8895eae68ec7f9b024e4f33c6d2cd16e)
ボタンがすべて用意された段階で、name に入っている値はリストnamesの一番最後の値だから、ってことかな?
で、それを解決する手段として、Callbackクラスが用意されております、だそうな。
![](https://blogimg.goo.ne.jp/user_image/3c/0f/85b8b8e4fa86c18112d877a3adefc12f.jpg?random=40ac454370f66bdb682b7f3be1b290da)
ふむ。
レイアウトについては、ここでwithステートメントが出てきますね。GUI部品をレイアウトして行く際に、入れ子にしていくわけですけど、その時に使用するみたい。withについては、あまりよく分かっておりませんが、クラスの中に__enter__ と__exit__ メソッドが存在している物については利用出来るようです。
でまぁ、やってみるわけですが…
![](https://blogimg.goo.ne.jp/user_image/36/29/ae2cd90138d5cc7b5c6d366bc70b8ddb.jpg?random=1262d23c2b936a2817275c7865fe3bc5)
AというframeLayoutの幅をウインドウの幅にするにはどうすんでしょ。
ていうか、Bの中でredistribute(1,2,3)って書いて、ボタンの幅の比率を変えているわけですが(1:2:3:1:1 になっているはず)、引数の最初の数字を1以外にするとウインドウ幅がAに合わせられちゃって、ボタンがはみ出すんですが、これはMac版のバグですか? …と思ってWindowsで実行してみたら同じ結果だった。 何か間違ってんだろうなぁ…
![](https://blogimg.goo.ne.jp/user_image/7f/f4/3f516ad906a962ca3eb55a622cc4340d.jpg?random=d0408f5e8946c9ec641834e8de584ca3)
というわけで自分への忘備録として…
マシン名をつける時
例えば田中一郎君の Dell Precision T5600 ならT5600_I-Tanakaとかなんとか。
つまり、スペースはさすがに使用禁止だろうから見やすいようにアンダースコアを挟んでいます。しかして、OS Xの場合、例えばコンピュータ名をMacPro_I-Tanakaとした場合、Windowsネットワーク向けにはMacPro-I-Tanakaと自身を名乗るようなのですな。アンダースコアがハイフンに置き換えられています。
有効な TCP/IP ホスト名 (RFC 952 で指定された) [Microsoft]
RFC 952で規定されているそうで、ホスト名として使用する場合にはアンダースコアは禁止らしいです。
WindowsやMacのネットワーク上ではアンダースコアは普通に使われている事と思います。けれども、最初から使わないでおくほうが安心で安全なのかもしれないなぁと思った水曜日の午後なのでした。
宇宙兄弟#0
ちなみに予告編は観たことありませんでした。観たことあったのはテレビ放送時末期に映画をやるよって予告が番組のお尻についていたけど、それだけ。だから#0ってタイトルから、何となく子供時代の話かなって思っていたんですけど、そうじゃないのは予告編を観ての通りです。
絵のクオリティはテレビシリーズより圧倒的に上がっているとは思いますけど、違和感を感じるような物じゃなく、あっさりとテレビを見ていた時のように物語に入り込んでいくことが出来ました。そしてその物語は、本編にうまく繋がるさまざまな要素がちりばめられており、本編を観ているがゆえに、非常に楽しめる素晴らしい構成になっていたと思います。
宇宙兄弟のアニメや原作マンガを楽しんでいた人は、是非とも観ておくといいんじゃないかって思いますよ、ホント。もちろん、両者に全くなじんだことの無い人でも楽しめるとは思いますけど、せめて、原作を10巻ぐらいまで読破した上で観に行って欲しいとは思います。
というわけで、観に行って本当に良かったとホクホクしているのでした。
How To Train Your Dragon 2
日本で公開されることになったら、ヒックとドラゴン2、とかになるんでしょうか。でも現状、公開の予定はたっていないようです。
それを何となく観る機会に恵まれました。当然ながら英語で字幕も無いので、英語が不自由な私には全てを理解することは出来ないし、周りの観客が笑っているところで、それが何で笑っているのか分からない部分も多かったです。しかして、全体として物語は理解できたと思うし、非常に楽しめました。実際、世界中で大ヒットしているそうで、興業成績は500億円を突破しているそうです。そして、それはさもありなんと思わせる内容じゃないかって思います。
前作の出来が非常に素晴らしく、感動したことを前作公開時に書きましたが、それに負けない内容なんじゃないかって想像させてくれましたよ。(言葉が分からないゆえに、完全にそうとは言いきれないのが歯がゆいです)
映像の素晴らしさは当然ながら前作を上回りますしね。
日本公開を求める著名活動を行っているサイトがあるようです。
是非とも日本語吹き替えじゃなくても字幕で観たいと思うので、是非良い成果が現れることを期待したいですね。
で、ツバメ
5月後半ぐらいから巣を作りはじめて、下の写真は6/1で、巣の具合でも確認しているんでしょうか。
上の写真は6月半ばだけど卵をもう産んだ後なのか、巣の上に居座る事が多くなりました。
で、下はうっかりと網戸越しに撮影してしまったものなんですけど、6/21の物です。真ん中にヒナが見えます。
この頃は巣の外に顔を出すことがほとんど無くて、生まれたばかりなんだなぁって感じですよね。
6/26になると、身を乗り出して餌を要求するような成長を見せておりました。
6/29が上の写真。けっこう動きが大きくなってきたなぁって感じです。
下は6/30ですけど、ちょくちょく餌を口に含んだ状態の物も撮影できました。見た感じだとトンボ系が多い感じかなぁって印象です。
7/3の写真。のど元に色が目立ってきました。かなり大きくなっています。
そして、5日。ついに巣の外にまで出て動き回るようになっております。いよいよ旅立ちも近い感じがしてきますね。正直、この下に停めてある車にフンがぼとぼとつくので、ちょっとうんざりしていたので、早く飛び立つのは大歓迎なのです。
6日。まだです。
そして7日。ついに
巣立ちました。でも↓一羽だけ飛び立つのを躊躇している様子でした。それを催促するように一羽飛んできてみたり。
という様子は確認できましたけど、残念ながら僕の出社時間になったので全羽巣立つ、その様子の撮影は出来ませんでした。
家に帰ってきた夜、巣は空っぽでしたよ。
けど、翌朝、駐車場の中を飛び回るツバメがおりました。近くで夜を過ごしていたみたいですね。だから車の上で飛び回るんじゃない、フンが…、と思ったけど、駐車場内でツバメを見かけたのはそれが最後でした。つい最近まで、家の前の電線にツバメが止まっている率がけっこう高かったような気もしますけど、それも最近はあまり感じないかな。
というわけで、今年のツバメは終了です。さて、巣をどうしようか。
このやり方でいいのか?
そうすると、MODOのスケマティック内でネットワークを組んでいくわけですけど、こんな考え方でいいのかな?
![](https://blogimg.goo.ne.jp/user_image/01/a6/246e0473ae09e9535f7ac60fe30c7791.jpg?random=215ebeddc4ae117b09367dfab214dc52)
オイラー値を行列に変換し、あらためてそれをベクトルとして取り出すという考え方。
一応、正しく動作しているように見えます。
![](https://blogimg.goo.ne.jp/user_image/76/f2/e3aa85b02394bda27ea7d5a0d26fa714.jpg?random=211537eb769c216cc9c7be23ff1237e6)
そうすると、例えば上図の球の質感をつける時、元となるLocatorの向きを元に色をつけたい場合(Locator方向の照明に照らされているようなイメージ)、下図のようなツリーでいいのかね?
![](https://blogimg.goo.ne.jp/user_image/20/f9/77ddcaae448fd2c3235b1b34c0f9d840.jpg?random=34d13f37d9eb12bb141f7f38297e9ec0)
オレンジ色になっているノード部分は一番上のスケマティックの画面と同じもの。オイラー値をベクトルにしているものです。で、球のシェーディング法線との内積で-1~1の範囲の値が出てくるはずなので、それをカラーブランドのブレンド値(マスク)に入れてやっている、と。
![](https://blogimg.goo.ne.jp/user_image/54/78/051c4633645d487658842aaeb1cc1cc9.jpg?random=89be74a292ba8e537dc684f3f0b74473)
正しい考え方なのかそうじゃないのか、さっぱり分からないですなぁ。
でもって、-1~1の値が出てくるはずって書いたけど、この-1~1の範囲を0~1の範囲にマップしなおしたい場合、それを簡単に実現するノードってMODOには無いですよね?
さらに0~1の範囲に変換できたとして、それを元にグラデーションのカラーを出力する、みたいな事はできるのかな?
いやぁ、分からない事だらけですよ(^^;
![](https://blogimg.goo.ne.jp/user_image/7e/88/05102cbb691417f9ed97ce683189b1a9.jpg?random=2da5ec1f209af24c019aab80b7fc3727)