ちょこちょこRubyCocoaをいじってたりはするんだけど。
ドキュメントがさっぱりまとまってないのが痛すぎる。
この前はCocoaBindingとやらをいじってみようと思って調べたんだけど、kvc_accessorという便利メソッドがあるらしい。
というところまでは分かったんだけど、kvc_accessorが何者なんだかさっぱり分からない。
rWiiRemoteとかが見つかったのでみてみた所
kvc_accessor :nanika
とかやると、keyとしてnanikaが使えて、@nanikaに値が入るようになるみたい。
なるほどー、と思って
kvc_accessor :port def awakeFromNib @port = 7144 end
みたいなことをして、テキストボックスのバインディングに設定してみたけど、うまくいかない。
どうも
self.port = 7144
じゃないといけないらしい。
で、表示は出来たんだけど、入力した値を取得したらNSCFStringのインスタンスとかになってしまった。あれー、テキストボックスだから文字列になるのはいいとして、なんでRubyのオブジェクトになってくれないんだ。
@portじゃなくてself.portでアクセスしてもダメ。なので明示的にto_rubyしてやればいいのかとも思ったけど、Rubyレベルで設定した場合は7144はそのままFixnumだ。
なので
port = (@port.respond_to?(:to_ruby) ? @port.to_ruby : @port).to_i
とかやって使うことにした。なんか気持ち悪い書き方だ。
このへんの使いかたが調べても誰も何も書いてないので分からんのだけど、誰も使ってないんだろうか。
うーん、自分でvalueForKeyみたいなの書くのが普通なので誰も使ってないってだけかもしれない。
あ、あとRubyCocoaで不満なのは10.4対応。10.4でも動くアプリケーションバンドル作ろうとしたときに10.4でビルドしてくださいはちょっと辛いよ。うちのマシンはもう10.5しかない…って外付けHDDにでも10.4入れ直せばいいだけじゃないか。
でも10.4の設定するのマンドクセ。
BlenderでCOLLADA書き出せるパッチをちょっと作ってた。
2.48aに付いてくるCOLLADA1.4.0のエクスポータは結構ぶっこわれた書き出しをしてくれるので、それの修正。
とりあえずCOLLADA Coherency Testが通るようなデータを書き出すことを目標にしてやってみたんだけど、意外にすぐできた。
前メモっといたsource内のaccessorがarrayじゃなくてsourceを参照するという無限ループって怖いよね問題を修正。
いろんなところに同じようなコードがあるんで根本的に勘違いしてたんだろうな、とおもいきや正しく配列を参照してる場所もあるから困る。
あとはskinの中で参照しているジョイント名の配列がforearm.Lとかになってしまう問題。IDにはスペースとピリオドが使えないというCOLLADAの微妙な制限によりforearm_Lとかにしなきゃいけない。
で、普通の要素のid属性書き出しではちゃんとその変形が入ってるんだが、IDREFの配列ではやってなかった。というか、なんか中途半端に対応した形跡はあるけどよくわからないことになってるな。修正。
あとArmature書き出し時に骨は一本のルートから全部つながってる木構造になってないといけないというなんともひどい制限が入ってた。
skeletonに指定できるルートはのがノード一つだからこうなってるのかもしれないが、それはボーンのノードを直接書き出さずにまずArmatureに相当するノードを書き出して、ボーンは全部その下に全部くっつければいいと思うんだけどなぁ。
しかしこれを直そうとすると結構大変そうなので、とりあえずボーンのルートは一つになるようにした。
で、とりあえずこれでCoherencyTest通るようになった。Physicsは使ってないのでそこはどうなるかわからない。あとマテリアルも一番簡単なのだけ。
とはいえこれが通ればちゃんと読めるだろうとFX Composerに突っ込んでみたんだが、なんか表示されないなぁ。
あんまり詳しくみれてないけど、選択するとバウンディングボックスは描かれるので、ジオメトリはちゃんと読めてるのかな?
良くみるとマテリアルが表示されてない。新しくマテリアルを追加すると表示されるからマテリアルかな?エフェクトかな?
しかしどっちを見ても特におかしい所があるようには見えないんだけど…。テクスチャが読めてないかのとも思ったけどそんなこともなかった。
うーん、あとこれが直れば最低限のCOLLADAは書き出せます!って言えるんだけどなぁ。
あとはこれが出来たあとどうするかだよなぁ。上記のボーンのルートは一つ制限問題の他にも、IPOカーブ一つが1アニメーションとして書き出されるとても使いづらい仕様があるんだよな。そこはアクションごとに1アニメーションだろJK。
そのへんも含めてごっそり変更したい所ではあるが、元のスクリプトはインポータ/エクスポータが一つのファイルになってるので、いじるのがだいぶしんどい。とりあえず俺に必要なのはエクスポータだけなんだが。
うーん、元のスクリプトはGPLだし、フォークして大整理しようかなぁ。元のソースも全然ダメダメとかいうわけじゃないから、自分で一から書くのは無駄っぽいし気が遠くなるような作業になりそうだしな。
まあそれよりRubyで読み込みの方もさくさくやっていかないとならないんだけど。
とりあえずFXComposerで読み込んで表示できたら、パッチを公開しよう。需要はそこそこありそうだし。