python

Boost.python使ってみた

ここのところwxWidgetsを使ってc++でごりごり書いていたのだが、やっぱりGUIをc++で書くのはめんどくさすぎるのでスクリプトを導入することにした。 速度が必要なところだけc++でモジュールを書く方向。去年の年末微妙に話題になっていたBoost.pythonでやっ…

Boost.pythonその2

vector_indexing_suiteではまった。 shared_ptrを格納したvectorから取り出したオブジェクトのメソッド呼び出しがうまくいかずにはまる。こんなの struct VertexBuffer { std::vector<boost::shared_ptr<IndexBufferArray> > &getBuffers(); }; エラー Boost.Python.ArgumentError: Python argume</boost::shared_ptr<indexbufferarray>…

書式化文字列

後ろにtuple作るのがめんどくさかったのだが、求めていたのに近い方法を発見。 http://python.matrix.jp/tips/container/dict.html#id8 name='hoge' print 'hello %(name)s' % vars() # "hello hoge" vars()は知らなかった。 覚えておこう。 ついでに試して…

行列関連のgl関数をなるべく使わないでやってみる

スキニングの都合上glRotatefやglTranslatefを使わずに変換を実装する必要があるので下準備にこれらをglMultMatrixfで置き換えるテストコードを書いてみた。 さらにOpenGL3に準拠しようと思うとglMultMatrixfすらdeprecatedなので計算した行列をvertex shade…

pmdとvmdインポータ

IKの読み込みまで完了。 足もちゃんと動くようになった。まだまだ不完全だがとりあえず http://github.com/ousttrue/blender-mmd-importer (2.49bじゃないと動かない) あとはテクスチャのアルファチャンネル対応と表情の読み込みをやれば完了。

骨選択

重なった骨が見にくいので八角形ボーンにしてみた。 さらに変な処理をして骨の親子関係がおかしかったところを整理した。 PMDは素直なデータ構造なので余計なことをせずにまっとうに組み立てればOK。 八角形にしたついでに、OpenGLのSELECT_MODEで骨を選択で…

標準のインデント

http://oldriver.org/python/pep-0008j.html スペースで4vimの設定をスペース2で使っていたので放置していたが、人様のコードを切り貼りするときに非常に不便なので悔い改めることにする。pythonだけスペース4に設定する。 とりあえず情報収集。 http://d.ha…

numpyの配列を受け取るCモジュールを作る

今作っているツールに次のようなコードがあるのだがかなり遅い。 # RGB配列とAlpha配列を合成してRGBAにするコード image=wx.Image(path) w=image.GetWidth() h=image.GetHeight() # RGB rgb=image.GetData() # Alphaチャンネル alpha=image.GetAlphaData() …

pmdビューワみたいなのができてきた

いつもの自前主義が発動して夏前に書いていたMikotoモーションビューワ(頓挫中)みたいなのをまた作り始めた。 今度は、pmd/vmd形式が対象でwxPython(wx.GLCanvas)で書いている。wxAUIが使えれば何でもよかったが、OpenGLのコード残骸がディスクに残っている…

メモ

とりあえずprint debugが簡単にできるように def p(*args): for arg in args: MQSystem.println(str(arg)) p(MQSystem.getDocument()) メタセコイアのpython用にモジュールを追加する Metaseq.exeと同じディレクトリに import sys p(sys.path) に出てくるデ…

スクリプトのデバッグ

メタセコイアのスクリプトは素の状態だとエラー情報が一部しか表示されない。 例えば def p(*args): """ プリント関数 複数の引数を渡せる。 """ if len(args)==0: # 改行させる MQSystem.println("") return for arg in args: MQSystem.println(str(arg)) d…

画像表示サンプル

ハードディスク発掘していたら微妙なコードが出てきたので書き直してメモ #!/usr/bin/python # -*- coding: utf-8 -*- import wx import os class ImagePanel(wx.Panel): def __init__(self, parent): super(ImagePanel, self).__init__(parent) self.bmp=No…

VitualTreeサンプル

http://www.wxpython.org/docs/api/wx.lib.mixins.treemixin.VirtualTree-class.htmlwxLC_VIRTUALのツリー版だそうで。 これはなかなか快適そうだ。 #!/usr/bin/python # coding: utf-8 # 2009/12/8 4タブ化してVTree.SelectPath()を追記 import wx from wx.…

LinuxとWindows共用で文字化けしないように書く

#!/usr/bin/python # coding: utf8 import wx app = wx.App() frame = wx.Frame(None, wx.ID_ANY, u'こんにちわ世界') frame.Show(True) app.MainLoop() unicode文字使うだけ。windowsは wxPython2.8-win32-unicode-2.8.10.1-py26.exe で試した。特に理由が…

UnicodeEncodeError対策

unicode文字列をprintするとUnicodeEncodeErrorが出るのに悶絶。 今までわりとpython使ってきたけどこのエラーには遭遇したことは無かった。 調べてみると、日本語周りではわりと起こりがちなエラーでhttp://d.hatena.ne.jp/SumiTomohiko/20070120/116930062…

python-fuメモ

python-fuを弄っていると プラグインがクラッシュしました。 という何やら致命的なメッセージに遭遇するが、 これはpythonの文法エラーレベルの問題のようだ。 こんな感じでコマンドラインでpythonに食わせてチェックする。 $ python layers.py File "layers…

レイヤーを別々のpngに保存するpython-fu

ディレクトリを指定してlayerをpngで保存する。 ファイル名はレイヤー名そのまま。 UTF-8で %USERPROFILE%/.gimp-2.6/plug-ins/layersplitter.py と保存する。 file_png_save_defaultsの引数がgimpのpdbで出てくるのと微妙に違ったりするのだが python向けの…

python-fuメモ

定型処理をスクリプト化するために久しぶりにやってみる。 いろいろひっかかるところがあったのでメモ。 スクリプトの配置場所 ~/.gimp-2.7/plug-ins/hoge.py 書き方 ascii文字のみで書くこと(コメントも含めて) 日本語使うときは # coding: UTF-8 を書いて…

MyPaint

Linux上で動く軽量なPaintツールを探していたら MyPaint http://mypaint.intilinux.com/ というのが見つかった。 PyGtkで書かれているがわりかし軽快。 細かい挙動を自分好みに改造すればよさげ。 素のままでは微妙に使いにくい。 ソースを少し読んだ gitリ…

スクリプトのメモ

使用環境はGentoo Linux でinkscape-0.46。まずはスクリプトの動作について。1. 起動時に ~/.inkscape/extensions/*.inx を読み込んでEffectsメニューに登録する。 2. 登録されたメニューを実行すると $ python rect.py --id=rect2383 /tmp/ink_ext_XXXXXX.s…

Boost.Pythonをやってみた

http://boost.cppll.jp/BDTJ_1_29/libs/python/doc/tutorial/doc/building_hello_world.html をやってみた。 環境はWindowsXP VC8(ExpressEdtion) boost-1.37.0に添付されているサンプルはそのままでは動かず結構苦労した。 過去のバージョンが放置されてい…

正規表現の使い方メモ

perlとかrubyと比べて若干使いにくいpythonの正規表現についてメモ。 とりあえずはmatchじゃなくてsearchを使う。 繰り返しが入る場合は、findall。 場合によってはsubをコールバックと一緒に使う。 import re # -*- encoding: utf-8 -*- html=""" <html> <head> <title>サンプル</title></head></html>…

UTF-8のbomに悩まされる

何故かvimがutf-8で保存したときにbomを付加するようになってしまい、 そのせいで正規表現がうまくマッチしないのに悩まされた。 とりあえずutf-8のBOMを削除するコード。 text=open('utf8.txt').read() import re re_bom=re.compile('^\xEF\xBB\xBF') text=…

長い行をインデントの文句を言われないように分割する

()で囲んでおくことと見つけたり。 long_long_string=( # この括弧でindentを無視する。隣あう文字列は勝手に連結されるので+無しでも可 "long long long very long long long long long long string" + "long long long very long long long long long long…

追加パッケージを使う時のメモ

新しいマシン環境でいつも忘れるので手順を書いておく http://peak.telecommunity.com/DevCenter/EasyInstall から ez_setup.py をダウンロード。 > python ez_setup.pyと実行。 windowsなら C:\Python25\Scriptsにpathを通しておく。コマンドラインで > eas…

curses練習

pythonでcursesの練習を作ってみた。 padとstdscrを混ぜて使って画面が更新されないのに2時間くらいはまる。 cursesデバッグしにくいよ。 いまいち勝手がわからない。 #!/usr/bin/python # -*- coding:utf-8 -*- import curses import locale import os # …

GLSL開始

glewpyのサンプルから vertexShaderとfragmentShaderのソースだけを変更して試すベースを作成。 これからGLSLの中身に入る。 #!/usr/bin/env python # -*- coding:utf-8 -*- import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT …

vc8とglewとpython2.5とpyopenglがインストール済みの環境でglewpyを動かす手順

pyrexのインストール http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/ からちょっと古い Pyrex-0.9.4.1.tar.gz をゲットしてきて解凍。 DOSプロンプトで中に入って、 > setup.py install glewpyのインストール glewpy-0.7.4.tar.gz を解凍。 DOS…

PyOpenGLでGLSL

http://glewpy.sourceforge.net/ を動かすのに成功。 かなり頓挫しかけでCでやろうかと思ったのだが、 いちおうvertex shaderとfragment shaderの動作まで確認できた。

透過に対応

思ったより大変だ(画像のほっぺのぐるぐるが透明ぶぶん)まずmqo形式の透明は、 模様画像にアルファチャンネルがついているもの(pngとかtgaで)と、 透明にグレイスケール画像(とは限らないが)を指定する2種類がある。ひとつめに対応するのは簡単で、 glEnabl…