API整備
各頂点クラスや辺クラスのアクセス可能にすべき属性にはそれぞれXML-RPCでアクセスできるようなアクセッサをつけないといけませんね。結構面倒。
- 凡例
- s: 文字列
- i: 整数
- b: 真偽値
- f: 浮動小数点数
- (iii): 整数3つからなる配列
- H: ハッシュ、連想配列、辞書、など
- BoxVertex
- 四角い箱状の頂点。中に文字列(label)が表示される。
- 備考:文字列が空の場合は小さな四角になる。
- 属性
- label(s): 箱の中に表示される文字列(ラベル)
- bgcolor((iii)): 背景色
- frame_color((iii)): 縁の色
- letter_color((iii)): 文字の色
- self_link(b): 「自己リンクがある」マークの表示・非表示(ad hoc)
- bound((ii)): 縁のサイズ。ラベルを変更した場合には再計算される。
- CircleVertex
- 丸い頂点
- 属性
- bgcolor((iii)): 背景色
- frame_color((iii)): 縁の色
- diameter(i): 円の直径
- LinearEdge
- 直線の辺
- 属性
- color((iii)): 線の色
- RenderableEdge
- 辺の基底クラス
- 属性
- k: バネ係数(負の場合Mediatorが持つrepulsionKの値0.02が採用される)
- length: バネの自然長(負の場合Mediatorが持つdefaultNormalLengthの値1.0が採用される)
- XMLRPC
- pause(b): 自動整形のON/OFFを切り替える。
直前の値を返すので
isPaused = pause(True) // do something pause(isPaused)で安全に「一時停止」ができる。 - initGraph(): グラフを新しい物にする。 具体的には、頂点リスト・辺リストを空にし、 物理演算を初期設定に戻すことを意味する。
- addVertex(s typeName, H params): 頂点を追加する。 typeNameには頂点クラスの名前(たとえばBoxVertex)、 paramsには設定したい属性の名前と値(たとえば{"bgcolor": (255, 0, 0)})を指定する。整数値を返す。
- addEdge(s typeName, i v1, i v2, H params): 辺を追加する。 addVertexに同じ。v1, v2には頂点を追加した際に返ってきた整数値を指定する。
- modVertex(i, H params): 頂点の属性を変更する。 addVertex内でも呼ばれている。
- modEdge(i, H params): 辺の属性を変更する。 modVertexとほぼ同じ。
- delVertex(i): 頂点を削除する。
- delEdge(i): 辺を削除する。
- pause(b): 自動整形のON/OFFを切り替える。
直前の値を返すので
add系に共通の注意点。 XML-RPCでは生成されたオブジェクト自体を返すことができないので、 vertexListやedgeListの中で何番目にいるかを返しています。 そのため削除をした場合には後ろの物のindexが繰り上がり、以前の値ではアクセスできなくなります。 この挙動はidとインスタンスをマッピングするHashtableを用意すれば取り除くことができますが、その必要性があるかどうか疑問なので保留状態です。
今は位置や速度がXML-RPCでgetParamsしたときに返ってこないのだけど、やっぱそれもいじれるようにした方が面白い応用ができるかも知れませんね…。
とりあえず、やりたいことはいっぱいあるけど全部やるわけにもいかないので、今週末にGRINEdit-alpha 0.1を公開するという目標に向けて何をすべきか考えないと。
よし、PythonからXML-RPCで「ウェブサイトの可視化」をするサンプルスクリプトを作るとしましょう。その過程で足りない物にも気づくだろうし、漠然と「いろいろできます」より「こんなことができます」の方が訴求力が高い。