board package

Submodules

board.backupcaller module

forward_medhods.py

  • 未定義メソッドの代理呼び出しをするクラス.

  • Pythonのリフレクション機能を用いる.

  • 220830: Created by Hiroki Arimura, arim@ist.hokudai.ac.jp

class board.backupcaller.BackupCaller(host, fname, verbose=False, verbose_prefix=None)[source]

Bases: object

メソッド呼び出しの転送をするクラス.

Parameters
  • host (Object) – 呼び出しの転送先オブジェクト.

  • fname (str) – 呼び出しの関数名/メソッド名.

  • verbose (bool) – デバグ用出力のフラグ. default=False.

Notes

具体的な利用法は,下記のExampleを参照されたい.次の手順で,メソッド転送が実行される.

  • `MyObject`の初期化時に,自分が実装していないメソッドの転送先オブジェクトに,`OtherObject`を設定する.

  • `MyObject`は,特殊関数 `__getattr__()`を次のように実装する:

    • もし関数名(属性名)`name`が自身に対して呼ばれたら,

    • 代理オブジェクト`agent`と関数名`name`を引数として,オブジェクト BackupCaller(self.agent, name)を生成して,それを返り値として返す.この時点では,元の呼び出しの引数`(a1,…,aN)`は渡されないことに注意.

  • 呼び出し側では,返り値のBackupCallerオブジェクトを受け取り,python処理系が,それに元の呼び出しの引数`(a1,…,aN)`を与えて実行する.

Example:

import sys
import backupcaller as bc

class OtherObject:
    #転送先オブジェクトのクラス.
    #ふつうのオブジェクトであり,特別な準備は不要.
    def swim(self, name):
        print(f'      @OtherObject: method="swim" is called')
        print(f'An animal {name} swims!')

class MyObject:
    #転送元オブジェクトのクラス.
    def __init__(self, agent=None):
        #ここで,転送先オブジェクトを準備する.#
        if agent != None:
            self.agent = agent #転送先オブジェクト

    ## メソッド転送
    def __getattr__(self, name):
        #メソッドが未定義のとき,呼び出される特殊関数.
        #未定義の属性呼び出しのときも呼ばれるので注意.
        print(f'      @MyObject: method="__getattr__" is called')
        return bc.BackupCaller(self.agent, name, verbose=True)

    def walk(self, name):
        print(f'      @OtherObject: method=swim is called')
        print(f'A cat {name} walk!')

#a duck can swim
a_duck = OtherObject()

#a cat can walk, but cannot swim
a_cat = MyObject(agent=a_duck)

a_cat.walk('a_cat') #a cat can walk
=> walk
a_cat.swim('a_cat') #Since a cat cannot swim, a duck swims instead
=> swim
a_cat.donothing('a_cat')
=> fail

board.cboard module

画盤モジュール

  • 画盤システムの実装モジュール.

  • 220815: Created by Hiroki Arimura, arim@ist.hokudai.ac.jp

  • based on board.py

Attributes:

DEFAULT_PPT = 720 (int): デフォールトの解像度 DEFAULT_LINE_WIDTH = 1 (float): デフォールトの辺幅 DEFAULT_COLOR_BORDER_INNER = ‘red’ (str): デフォールトの境界色(内側) DEFAULT_COLOR_BORDER_OUTER = ‘blue’ (str): デフォールトの境界色(外側)

class board.cboard.Board(**kwargs)[source]

Bases: PlaceBoard

描画を行う画盤(board)のクラス.`PackerBoard`のラッパー.

Parameters

**kwargs – 他のキーワード引数.上位クラスに渡される.

class board.cboard.BoardBase(shape=None, anchor=None, **kwargs)[source]

Bases: Loggable

図形(Board)の描画に関する基本機能を提供するクラス.子孫クラスから呼び出される二つの私的関数`_arrange()`と`_draw(self, cr)`を提供する.

Parameters
  • anchor_str (str, tuple(str,str)) – 文字列対によるアンカー表記.それ自体が`None`でも良いし,対の片方または両方の要素が`None`を取っても良い.

  • shape (tuple(float,float)) – 形状ベクトル (sx, sy) in R^2

  • **kwargs – 他のキーワード引数.上位クラスに渡される.

trans

自身の変換

Type

GeoTransform

box

自身の包含矩形.

Type

tuple(float,float,float,float)

boxes

子全体の包含矩形.

Type

float,float,float,float

anchor

正規化アンカーベクトル a = (ax,ay) in [0,1]^2.配置時点での包含矩形に対する原点の相対位置を表す.

Type

tuple(float,float)

verbose

ログ出力のフラグ

Type

bool

Notes

本クラスでは,主ループとして,配置関数`_arrange()`と描画関数`_draw(self, cr)`を提供し,子孫クラスにおいて,これらの以下のサブメソッドを実装することで,独自の振る舞いを定義する.

  • 関数`_arrange()`のサブメソッド

    • arrange_box_children(self): 子を相互に配置し,子全体の包含矩形`self.boxes`を求める.

    • arrange_box_self(self): 子全体の包含矩形`self.boxes`と修飾情報(modifiers)から自身の包含矩形を求める.ボードは,修飾情報として,余白やアンカー点の情報をもつ.

  • 関数`_draw()`のサブメソッド:

    • draw_me_before(self, cr): Cairoの文脈オブジェクト`cr`を受け取り,子の描画の前に,自身を描画する手続きを定義する.

    • draw_me_after(self, cr): Cairoの文脈オブジェクト`cr`を受け取り,子の描画の後に,自身を描画する手続きを定義する.

Note

アンカー表記の対の要素に`None`を許す.

  • アンカー表記自身が`None`のときは,値としてDEFAULT_ANCHOR_STRをとる.現在は,`ANCHOR_STR_ORIGIN = (‘left’,’top’)`である.

  • 対の要素が`None`のときは,値`None`を,`mid`に相当する値`DEFAULT_ANCHOR_VALUE = 0.5`に置き換える.

Example:

anchor=('left' , 'top') => (0.0, 0.0)
anchor=('mid'  , 'mid') => (0.5, 0.5)
anchor=('right', 'bot') => (1.0, 1.0)
anchor=('left' ,  None) => (0.0, 0.5)
anchor=(None   , 'top') => (0.5, 0.0)
arrange_box_children()[source]

自身の子たちの配置情報を計算する.子孫クラスでオーバーライドすること.

Note

配置情報として,子リストにおいて子それぞれの変換と子自身を計算する.終了前に属性`self.boxes`を設定すること. 次の属性を操作する:

  • 読み出し: self.children_

  • 書き込み: self.boxes (非None)

arrange_box_self()[source]

修飾情報から自身の配置情報を計算する.子孫クラスでオーバーライドすること

Notes

自身の配置情報として変換と包含矩形を求める.終了前に属性`self.box`と`self.trans`を設定すること.次の属性を操作する:

  • 読み出し: self.boxes (非None)

  • 書き込み: self.box (非None)

  • 書き込み: self.trans (Noneも許す)

draw_me_after(cr)[source]

自分の描画を行う.子の描画の前に実行される.子孫クラスでオーバーライドすること.

Parameters

cr (Cairo.Context) – Cairoの文脈オブジェクト

Notes

文脈オブジェクトに,配置情報を元に直接書き込みを行う.

draw_me_before(cr)[source]

自分の描画を行う.子の描画の前に実行される.子孫クラスでオーバーライドすること.

Parameters

cr (Cairo.Context) – Cairoの文脈オブジェクト

Notes

文脈オブジェクトに,配置情報を元に直接書き込みを行う.

draw_origin_and_box(cr)[source]

自分の原点位置と包含矩形をマーカーで描画する.

draw_perturbed_box(box, context=None, max_perturb=None)[source]

自分の包含矩形を描画する.視認性のため, max_perturbで決まる摂動を加えて描画する.

get_anchor()[source]

自身の包含矩形上のアンカー点(配置の原点)を返す.ここに,各種の配置関数`_arrange()`は,アンカー点を原点として図形を配置する.

Returns

2次元平面上のアンカー点 b = (bx,by) in R^2

Return type

(tuple(float, float))

Notes

返り値は,次の属性に保持されている.

  • self.anchor (tuple(float,float)) : 正規化アンカーベクトル a = (ax,ay) in [0,1]^2

get_box()[source]

保持する自身の包含矩形を返す.

Returns

自身の包含矩形.親による自身の配置を規定する.

Return type

(tuple(float,float,float,float))

get_trans() GeoTransform[source]

保持する変換を返す.

Returns

自身に適用する変換.自身の子の配置を規定する.

Return type

(GeoTransform)

set_shape(shape=None, is_nullable=False)[source]

矩形形状を設定する.

Returns

自分自身を返す.

Return type

(Board)

class board.cboard.Canvas(imgtype=(cairo.Format.ARGB32,), format='pdf', outfile='out', imagesize=None, portrait=False, boundingbox=False, max_perturb=None, **kwargs)[source]

Bases: PlaceBoard

トップレベルのボードのクラス.描画のためのCairoのSurfaceを保持する. 描画対象のすべての要素(ボード)は,本オブジェクトの子孫として保持する.

Parameters
  • imgtype (cairo.Format) – Surfaceフォーマット (default: cairo.FORMAT_ARGB32)

  • format (str) – 出力ファイルフォーマット(拡張子 pdf, png)default: “pdf”

  • outfile (str) – 出力ファイル名(拡張子を除く)default: “out”

  • imagesize (str) – 初期の画像サイズ. default: ‘XGA’

  • verbose (bool) – ログ出力のフラグ.default=False

  • portrait (bool) – 画像サイズが縦長か?

  • boundingbox (bool) – デバッグ用: 包含矩形のデバッグ出力をする

  • max_perturb (float) – デバッグ用: 包含矩形の摂動幅

canvas_size()[source]
context() cairo.Context[source]

Cairo.contextオブジェクトを返す.

create_image_object(display_shape=None)[source]
save(imgfile, **kwargs)[source]

imgfile: 保存する画像ファイルの名前.

show(noshow=False, depth=0)[source]

配置と描画を行ない,画像をディスプレイに表示する. 次の手順で描画する.

  • ステップ1: 再帰的に子オブジェクトへ _arrange() 命令を送り,ボトムアップに配置の包含矩形 box を計算する

  • ステップ2: 包含矩形情報 box を元に,self.create_pim() 命令を発行して,pillowの画像盤 self.im を生成する.

  • ステップ3: 再帰的に draw() 命令を発行して,トップダウンに描画を行う

  • ステップ4: 自身のもつpillowオブジェクト self.imに show() 命令を送り,画像を表示する

class board.cboard.CoreBoard(**kwargs)[source]

Bases: BoardBase

描画を行う画盤(board)のクラス.具体的な子の配置方法は持たず,サブクラスで実装される.`WrapperBoard`とは比較不能(兄弟)な継承関係をもつ.

Parameters

**kwargs – 他のキーワード引数.上位クラスに渡される.

class board.cboard.DrawCircle(x=0.0, y=0.0, r=None, **kwargs)[source]

Bases: DrawCommandBase

描画演算オブジェクトのクラス.DrawCommandBaseクラスのサブクラス.

Parameters
  • x (float) – 円の中心位置のx座標.default=0.0.

  • y (float) – 円の中心位置のy座標.default=0.0.

  • r (float) – 円の半径.必須.

  • **kwargs (dict) – 上位コマンドに渡すオプション引数.

arrange_box_self()[source]

修飾情報から自身の配置情報を計算する.子孫クラスでオーバーライドすること

Notes

自身の配置情報として変換と包含矩形を求める.終了前に属性`self.box`と`self.trans`を設定すること.次の属性を操作する:

  • 読み出し: self.boxes (非None)

  • 書き込み: self.box (非None)

  • 書き込み: self.trans (Noneも許す)

draw_me_impl(cr)[source]

To be implemented

class board.cboard.DrawCommandBase(cmd=None, **kwargs)[source]

Bases: CoreBoard

描画演算オブジェクトの基底クラス.Boardクラスのサブクラス.

Parameters
  • cmd (str) – 命令の名前の文字列.default=None.

  • **kwargs (dict) – 上位コマンドに渡すオプション引数.

cmd

命令の名前の文字列.default=None.

Type

str

kwargs

コマンドの引数からなる辞書.各コマンドは,この辞書の項目を参照して実装する.

Type

dict

draw_me_before(cr)[source]

自分の描画を行う.子の描画の前に実行される.子孫クラスでオーバーライドすること.

Parameters

cr (Cairo.Context) – Cairoの文脈オブジェクト

Notes

文脈オブジェクトに,配置情報を元に直接書き込みを行う.

draw_me_impl(cr)[source]

To be implemented

class board.cboard.DrawMarkerCross(**kwargs)[source]

Bases: DrawPolyLines

原点 (0,0) を中心とした×印(Cross)を書く.

Parameters
  • ticklen (float) – ×印の交差辺の長さ. default=4.0.

  • line_width (float) – ×印の交差辺の線幅.default=0.75.

class board.cboard.DrawPolyLines(**kwargs)[source]

Bases: DrawCommandBase

描画演算オブジェクトのクラス.DrawCommandBaseクラスのサブクラス.

Parameters

**kwargs (dict) – 上位コマンドに渡すオプション引数.

Examples:

#サイズが4x4の十字型(X)を書く.
P = DrawPolyLine()
    P.move_to(0.0, 0.0)
    P.line_to(4.0, 4.0)
    P.move_to(0.0, 4.0)
    P.line_to(4.0, 0.0)
arrange_box_self()[source]

修飾情報から自身の配置情報を計算する.子孫クラスでオーバーライドすること

Notes

自身の配置情報として変換と包含矩形を求める.終了前に属性`self.box`と`self.trans`を設定すること.次の属性を操作する:

  • 読み出し: self.boxes (非None)

  • 書き込み: self.box (非None)

  • 書き込み: self.trans (Noneも許す)

draw_me_impl(cr)[source]

To be implemented

line_to(x, y, has_arrow=False) BoardBase[source]

ペンを現在位置から目標位置`(x,y)`まで移動して,直線を引く.

Parameters
  • x (float) – x- and y-coodinates

  • y (float) – x- and y-coodinates

Returns

自分自身.いわゆる’cascade object call interface’ のため.

Return type

(Board)

move_to(x, y) BoardBase[source]

ペンを位置`(x,y)`に移動する.直線は引かない. :param x: x- and y-coodinates :type x: float :param y: x- and y-coodinates :type y: float

Returns

自分自身.いわゆる’cascade object call interface’ のため.

Return type

(Board)

class board.cboard.DrawRectangle(x=0.0, y=0.0, width=None, height=None, **kwargs)[source]

Bases: DrawCommandBase

描画演算オブジェクトのクラス.DrawCommandBaseクラスのサブクラス.

Parameters
  • x (float) – default=0.0.

  • y (float) – default=0.0.

  • **kwargs (dict) – 上位コマンドに渡すオプション引数.

arrange_box_self()[source]

修飾情報から自身の配置情報を計算する.子孫クラスでオーバーライドすること

Notes

自身の配置情報として変換と包含矩形を求める.終了前に属性`self.box`と`self.trans`を設定すること.次の属性を操作する:

  • 読み出し: self.boxes (非None)

  • 書き込み: self.box (非None)

  • 書き込み: self.trans (Noneも許す)

draw_me_impl(cr)[source]

To be implemented

class board.cboard.GridPackerBoard(**kwargs)[source]

Bases: PackerBoard

描画を行う画盤(board)のクラス.`PackerBoard`のラッパー.

Parameters

**kwargs – 他のキーワード引数.上位クラスに渡される.

class board.cboard.MarginWrapper(child=None, margin=None, **kwargs)[source]

Bases: WrapperBoard

唯一の子を指定した余白(margin)で包むラッパーのクラス, 自身が持たないメソッド呼び出しを子に転送する.

Parameters
  • child (BoardBase) – 子として保持するBoardBaseオブジェクト.

  • margin (float, tuple(float, float)) – 子の外周に付与する余白の情報

  • **kwargs – 他のキーワード引数.上位クラスに渡される.

margin

余白情報 margin = (margin_x, margin_y).

Type

tuple(float,float)

box

修正された包含矩形.子の包含矩形の外側にmarginで指定したx方向とy方向の幅の余白を拡大した形状になる.関数`get_box()`で返される.

Type

tuple(float,float,float,float)

trans

修正された変換.拡大された包含矩形の左上隅を原点とする.

Type

GeoTransform

verbose

ログ出力のフラグ

Type

bool

box_propagate_downward(shape=None)[source]

親から矩形形状`shape=(sx,sy)`を受け取り,子の矩形形状を返す. 子孫クラスでオーバライドして用いる.

box_propagate_upward(child_box=None)[source]

子矩形`box`を受け取り,親矩形と並行移動ベクトルを返す. 子孫クラスでオーバライドして用いる.

class board.cboard.PackerBoard(orient='x', packing=None, cell_margin=None, cell_side=None, **kwargs)[source]

Bases: CoreBoard

画盤(board)のクラス.Boardのサブクラス

Parameters
  • orient (str) – 並べる主軸方向の指定.`x`または`y`の値をとる.default=’x’

  • packing (str) – 内部のボードの詰め方の指定情報. packing in (‘even’,’pack’)

  • width (float) – 自身の幅.default=None.

  • height (float) – 自身の高さ.default=None.

  • kwargs – 他のキーワード引数.上位クラスに渡される.

add(child: Optional[BoardBase] = None) BoardBase[source]

子を追加する.関数`BoardBase.put(child, trans=None)`へのラッパー関数.

Parameters

child (Board) – 子として追加するBoardオブジェクト

Returns

追加した子

Return type

(Board)

Example:

root = Canvas()
parent= root.put(Board())
child = parent.add(Rectangle())
child = parent.add(Circle())
arrange_box_children(**kwargs)[source]

自身の子すべてを再配置する.必ず終わりにself.boxesを設定すること. 次の属性を操作する:

children_box_enumerated() iterator[source]

添字とエントリの対`idx, triple`の並び children を返す. 現在は,`triple`は,三つ組`trans, child, child_box`である.必要なら部分クラスで上書きする.

Returns

三つ組`trans (GeoTransform)`, child (BoardBase), child_box (tuple(float,float,float,float))`のリスト.

Return type

(list)

Notes

ただし,childはNoneでないことを保証し,そうでないときはErrorを投げる. transとchild_boxはNoneでも良い.

class board.cboard.PlaceBoard(**kwargs)[source]

Bases: CoreBoard

画盤(board)のクラス: 座標系オブジェクト

Parameters

**kwargs – 他のキーワード引数.上位クラスに渡される.

verbose

ログ出力のフラグ

Type

bool

count = 0
put(child=None, trans=None) BoardBase[source]

子を追加する.

Parameters
  • trans (cairo.Matrix) – 自座標における子の配置を指示する変換行列.原点にある子を所望の場所に配置するためのアフィン変換を表す.

  • child (Board) – 子として追加するBoardオブジェクト

Returns

追加した子

Return type

(Board)

Example:

root = Canvas()
child = root.put(Board())
child = parent.put(trans=Translate(dest=(1,2)),
        Rectangle())
class board.cboard.SideWrapper(side=None, **kwargs)[source]

Bases: WrapperBoard

唯一の子を,指定した側面(side)に基づいて配置するラッパーのクラス. 自身が持たないメソッド呼び出しを子に転送する.

Parameters

**kwargs – 他のキーワード引数.上位クラスに渡される.

box_propagate_downward(shape=None)[source]

親から矩形形状`shape=(sx,sy)`を受け取り,子の矩形形状を返す. 子孫クラスでオーバライドして用いる.

box_propagate_upward(child_box=None)[source]

子矩形`box`を受け取り,親矩形と並行移動ベクトルを返す. 子孫クラスでオーバライドして用いる.

class board.cboard.WrapperBoard(child=None, **kwargs)[source]

Bases: BoardBase

ラッパーのクラス.描画は行わず,唯一の子の位置パラメータ決めのみを行う.自身が持たないメソッド呼び出しを,唯一の子に転送する. `CoreBoard`とは比較不能(兄弟)な継承関係をもつ.

Parameters
  • child (BoardBase) – 子として保持するBoardBaseオブジェクト.

  • **kwargs – 他のキーワード引数.上位クラスに渡される.

verbose

ログ出力のフラグ

Type

bool

arrange_box_self()[source]

アンカー情報から,変換と包含矩形を計算する.子孫クラスでオーバーライドする. 次の属性を操作する:

  • self.boxes : 読み出し

  • self.box : 書き込み

  • self.trans : 書き込み

crt.ANCHOR_ORIGINは,左上原点のアンカー指定(left,top)

box_propagate_downward(shape=None)[source]

親から矩形形状`shape=(sx,sy)`を受け取り,子の矩形形状を返す. 子孫クラスでオーバライドして用いる.

box_propagate_upward(child_box=None)[source]

子矩形`box`を受け取り,親矩形と並行移動ベクトルを返す. 子孫クラスでオーバライドして用いる.

get_the_child() BoardBase[source]
board.cboard.numpair_normalize(margin=None, default=None)[source]

マージン指定を正規化する.margin が数の対(float,float)ならばそのまま返し, margin が数ならば,(margin,margin)を返す. margin==Noneのときは,(0.0,0.0)を返す.

board.cboard.pair_normalize(pair=None)[source]

変換と子ボードの対を分解し,検査して返す.

Parameters

pair (tuple()) –

Returns

変換と子ボードの対 (trans, child)

Return type

(tuple())

board.cboard.perturb_point(x=0.0, y=0.0, max_perturb=0.0)[source]

与えられた点 (x, y) に対して,幅 [(-1)*max_perturb, (+1)*max_perturb] の摂動を与えた点(x1, y1)を返す. :param x: 入力点のx- and y-coordinates.デフォールト値 x = y = 0.0 :type x: float :param y: 入力点のx- and y-coordinates.デフォールト値 x = y = 0.0 :type y: float

Returns

摂動を加えた点のx- and y-coordinates

Return type

x1, y1 (float)

Notes

xとyが省略されたときは,値0.0, 0.0を中心とした摂動を返す.

board.common module

board.common.elemtype_normalize(etype=None)[source]

与えられた入力オブジェクトetypeが,正しい型オブジェクトかを検査し, 型リストetypes_を返す.もしそうでなければ,エラーを投げて異常終了する. ただし,etype==Noneのときは,そのまま返す(任意の型を表す).

Parameters

etype (Object) – 基礎型,または,基礎型のリスト(和)

Returns

正規化された型リスト

Return type

(list(型))

board.common.ensure(test, msg=None, outs=None)[source]

ブール式test を評価し,真ならばTrueを返し,偽ならば,panic関数を呼んで,メッセージ文字列を出力して実行を中止する.

Parameters
  • test (ブール式) – テストのためのブール式

  • msg (str) – メッセージ文字列

  • outs (outstream) – 出力ストリーム.デフォールトはsys.stdout.

board.common.ensure_box(value=None, name=None, nullable=True, default=None, etype=None, to_check_only=False)[source]

値が指定された型の点(数の対)かどうかを検査し,値valueをそのまま返す. 条件を満たさなければ,エラーを投げて終了する. 関数`ensure_vector`のラッパー.

  • 空のときに,フラグ`nullable==False`ならば即時にエラーを投げて停止する.

  • そうでないときに,非空のデフォールト値`default`が与えられていれば,それを返す.

Parameters
  • value (Any) – 値

  • etype (tuple(type)) – 選言型のタプル.defaultは(float,int).

  • nullable (bool) – 値がNoneでも良いことを表すフラグ.

  • etype – 型のタプル.型の選言を表す.数値ベクトルは,デフォールトの`etype=(int, float)`で良い.

  • default (Any) – 任意のデフォールト値を与える.値がNoneのとき返される.

  • to_check_only (bool) – もし真ならば,型を満たさない時は,エラーを投げずに実行されて,Noneを返す.default is False.ここに,to_check_onlyが真ならば,`nullable==False`および`default = None`に上書きされるので注意.

board.common.ensure_defined(value=None, default=None, required=False)[source]

空でなければ,値valueをそのまま返す.代入時に,変数の値が空でないことを保証するために用いる.

  • 空のときに,フラグ`required==True`ならば即時にエラーを投げて停止する.

  • そうでないときに,非空のデフォールト値`default`が与えられていれば,それを返す.

Parameters
  • value (Any) – 値

  • default (Any) – デフォールト値

  • required (bool) – 値が非Noneであることを要請するフラグ.

board.common.ensure_point(value=None, name=None, nullable=True, default=None, etype=None, to_check_only=False)[source]

値が指定された型の点(数の対)かどうかを検査し,値valueをそのまま返す. 条件を満たさなければ,エラーを投げて終了する. 関数`ensure_vector`のラッパー.

  • 空のときに,フラグ`required==True`ならば即時にエラーを投げて停止する.

  • そうでないときに,非空のデフォールト値`default`が与えられていれば,それを返す.

Parameters
  • value (Any) – 値

  • nullable (bool) – 値がNoneでも良いことを表すフラグ.

  • default (Any) – 任意のデフォールト値を与える.値がNoneのとき返される.

  • etype (tuple(type)) – 型のタプル.型の選言を表す.数値ベクトルは,デフォールトの`etype=(int, float)`で良い.

  • to_check_only (bool) – もし真ならば,型を満たさない時は,エラーを投げずに実行されて,Noneを返す.default is False.ここに,to_check_onlyが真ならば,`nullable==False`および`default = None`に上書きされるので注意.

board.common.ensure_value(value=None, default=None, etype=None, nullable=True, name='it', typename=None, to_check_only=False)[source]

入力として受け取った値`value`が指定された要素型`etype`の値であるかを検査し,条件を満たせば値をそのまま返す.もし指定の条件を満たさなければ,エラーを投げて終了する.

  • 空でなければ,値valueをそのまま返す.

  • 空のときに,フラグ`required==True`ならば即時にエラーを投げて停止する.

  • そうでないときに,非空のデフォールト値`default`が与えられていれば,それを返す.

Parameters
  • value (Any) – 値

  • etype (tuple(type)) – 型のタプル.型の選言を表す.デフォールト値`etype=None`.

  • default (Any) – 任意のデフォールト値を与える.値がNoneのとき返される.

  • nullable (bool) – 値がNoneでも良いことを表すフラグ.nullable=Trueかつ値がNullならばエラーを投げる.

  • to_check_only (bool) – もし真ならば,型を満たさない時は,エラーを投げずに実行されて,Noneを返す.default is False.ここに,to_check_onlyが真ならば,`nullable==False`および`default = None`に上書きされるので注意.

Notes

データの検査を行う関数の実装用に用いる.典型的な使用例は,次の通り:

  • 変数の値を保証して代入するためのフィルタの実装

  • 値の型を保証した代入

Note

引数`etype`の組の要素として,`None`の型を与えたい時は,要素型として`type(None)`を与えること.

board.common.ensure_vector(value=None, dim=2, default=None, etype=None, nullable=True, name='it', typename=None, to_check_only=False)[source]

入力として受け取った値`value`が指定された要素型`etype`と要素数`dim`をもつ数値の組であるかを検査し,条件を満たせば値をそのまま返す.もし指定の条件を満たさなければ,エラーを投げて終了する.

  • 空でなければ,値valueをそのまま返す.

  • 空のときに,フラグ`required==True`ならば即時にエラーを投げて停止する.

  • そうでないときに,非空のデフォールト値`default`が与えられていれば,それを返す.

Parameters
  • value (Any) – 値

  • dim (int) – ベクトルの長さ

  • etype (tuple(type)) – 型のタプル.型の選言を表す.デフォールト値`etype=None`.

  • default (Any) – 任意のデフォールト値を与える.値がNoneのとき返される.

  • nullable (bool) – 値がNoneでも良いことを表すフラグ.nullable=Trueかつ値がNullならばエラーを投げる.

  • to_check_only (bool) – もし真ならば,型を満たさない時は,エラーを投げずに実行されて,Noneを返す.default is False.ここに,to_check_onlyが真ならば,`nullable==False`および`default = None`に上書きされるので注意.

Notes

データの検査を行う関数の実装用に用いる.典型的な使用例は,次の通り:

  • 変数の値を保証して代入するためのフィルタの実装

  • 値の型を保証した代入

Note

引数`etype`の組の要素として,`None`の型を与えたい時は,要素型として`type(None)`を与えること.

board.common.get_cyclic(elements=None, idx=0)[source]

非負整数idxを受け取り,長さnの配列の`(idx % n)`番目の要素を返す. :param elements=None: :type elements=None: list(object) :param idx=0: :type idx=0: int

Returns

選択された要素

Return type

object

Notes

どのように大きなidxに対しても,添字エラーにならず何かの要素を返す.

board.common.is_typeof_seq(L, etype=None, dim=None, verbose=False)[source]

オブジェクトLが,指定された型と長さをもつ系列オブジェクトかを真偽で返す. さらに系列型であり,etypeがNoneでないときに,系列の全ての要素が型etypeをもつならば`True`,そうでなければ`False`を返す.

Parameters
  • L (object) – オブジェクト

  • etype (Type) – int, float, strなどのprimitive型,または,型の選言(union etype)を表すリスト (ty1, …, tyN).

  • length (int) – 系列が満たすべき長さ

  • verbose (bool) – ログ出力のスイッチ

Returns

オブジェクトLが,etypeの型指定を満たす系列型ならば`True`を, そうでなければ`False`を返す.

Return type

(bool)

Example:

>>> com.is_typeof_seq([1,2,3], etype=int)
True
>>> com.is_typeof_seq([1,2.0,3], etype=int)
False
>>> com.is_typeof_seq([1,2.0,3], etype=(int, float))
True
>>> com.is_typeof_seq([1,'b',3], etype=int)
False
>>> com.is_typeof_seq([1,'b',3], etype=(int, str))
True
board.common.is_typeof_value(obj, etype=None)[source]

オブジェクトobjが空でなく,型etypeをもつとき,`True`を返し,それ以外のとき`False`を返す.

Parameters
  • obj (object) – オブジェクト

  • etype (Type) – 型のリスト`(ty1, …, tyN)`.

Returns

オブジェクトobjが,etypeの型指定を満たすならば`True`を, そうでなければ`False`を返す.

Return type

(bool)

board.common.log(msg, outs=<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>)[source]

標準関数print(msg)のラッパー.出力ストリームoutsを与えるとそこへ,指定がなければstd.errへ,print(msg)の出力を書き込む.

Parameters
  • msg (str) – 出力する文字列

  • outs (出力ストリーム) – 出力先.default=sys.stderr.

board.common.panic(msg, outs=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>)[source]

メッセージ文字列を標準出力に印刷して,例外を投げて実行を中止する.

Parameters
  • msg (str) – メッセージ文字列

  • outs (outstream) – 出力ストリーム.デフォールトはsys.stdout.

board.common.parse_opt_shape(str_shape=None, default_shape=None)[source]

shape文字列str_shape==’m:n’をパーズしてshape = (m,n)を返す

board.common.parse_opt_width(width=None)[source]
board.common.report_module_path(name)[source]

board.crtool module

Cairoライブラリの描画機能を提供するモジュール.

board.crtool.FONT_SLANT

フォントの斜体スタイルを表す定数の辞書.次の値をもつ

  • ‘italic’: cairo.FontSlant.ITALIC

  • ‘normal’: cairo.FontSlant.NORMAL

  • ‘oblique’: cairo.FontSlant.OBLIQUE

Type

dict(str, cairo.FontSlant)

board.crtool.FONT_WEIGHT

フォントの太字スタイルを表す定数の辞書.次の値をもつ.

  • ‘bold’: cairo.FontWeight.BOLD

  • ‘normal’: cairo.FontWeight.NORMAL

Type

dict(str, cairo.FontWeight)

board.crtool.LINE_CAP

線の終端のスタイルを表す定数の辞書.次の値をもつ.

  • ‘square’: cairo.LINE_CAP_SQUARE

  • ‘round’: cairo.LINE_CAP_ROUND

  • ‘butt’: cairo.LINE_CAP_BUTT

Type

dict(str, Object)

board.crtool.LINE_JOIN

線の結合部のスタイルを表す定数の辞書.次の値をもつ.

  • ‘miter’: cairo.LINE_JOIN_MITER

  • ‘round’: cairo.LINE_JOIN_ROUND

  • ‘bevel’: cairo.LINE_JOIN_BEVEL

Type

dict(str, Object)

board.crtool.ANCHOR_X

位置合わせ用のx方向のアンカー値を表す定数の辞書.範囲`[0,1]`の値をとり,辺上の正規化された位置を表す.複数の別名を提供している.

  • ‘left’ : 0.0, ‘center’ : 0.5, ‘right’ : 1.0, #標準名

  • ‘beg’ : 0.0, ‘mid’ : 0.5, ‘end’ : 1.0, #xとy方向の共通名

Type

dict(str, float)

board.crtool.ANCHOR_Y

位置合わせ用のy方向のアンカー値を表す定数の辞書.範囲`[0,1]`の値をとり,辺上の正規化された位置を表す.複数の別名を提供している.

  • ‘top’ : 0.0, ‘middle’ : 0.5, ‘bottom’ : 1.0, #標準名

  • ‘bot’ : 1.0, ‘above’ : 0.0, ‘below’ : 1.0, #別名

  • ‘beg’ : 0.0, ‘mid’ : 0.5, ‘end’ : 1.0, #xとy方向の共通名

Type

dict(str, float)

board.crtool.MYCOL

色を表す定数の辞書.色名の文字列に,RGB表現の三つ組$(r,g,b) in [0,1]^3$を対応させる.

  • pure color: ‘red’:(1,0,0),’blue’:(0,0,1),’lightgreen’:(0,1,0),

  • basic color: ‘yellow’:(1,1,0),’magenta’:(1,0,1),’cyan’:(0,1,1),

  • dark color: ‘darkgreen’:(0,0.5,0),’darkred’:(0.5,0,0),’darkblue’:(0,0,0.5),

  • alias color: ‘green’:(0,0.5,0),’brown’:(0.5,0,0),’navy’:(0,0,0.5),’orange’:(1.0 - 0.125, 0.0 + 0.125, 0.0),

  • black-and-white: ‘black’:(0,0,0), ‘grey0’:(0,0,0), ‘grey10’:(0.10,0.10,0.10), ‘grey25’:(0.25,0.25,0.25), ‘grey50’:(0.50,0.50,0.50), ‘grey75’:(0.75,0.75,0.75), ‘grey100’:(1,1,1), ‘white’:(1,1,1).

Type

dict(str, (float,float,float))

board.crtool.DARKCOL

色を表す定数の辞書.色名の文字列に,RGB表現の三つ組$(r,g,b) in [0,1]^3$を対応させる.

  • pure color: ‘red’:(1,0,0), ‘blue’:(0,0,1),

  • dark color: ‘darkgreen’:(0,0.5,0), ‘darkred’:(0.5,0,0), ‘darkblue’:(0,0,0.5), ‘orange’:(1.0 - 0.125, 0.0 + 0.125, 0.0),

  • black-and-white: ‘black’:(0,0,0), ‘grey0’:(0,0,0), ‘grey10’:(0.10,0.10,0.10), ‘grey25’:(0.25,0.25,0.25), ‘grey50’:(0.50,0.50,0.50), ‘grey75’:(0.75,0.75,0.75), ‘grey100’:(1,1,1),

Type

dict(str, (float,float,float))

class board.crtool.GeoTransform[source]

Bases: object

空間変換の抽象クラス.これを継承した具体クラスを作成して用いる.

apply_context(verbose=False) NoReturn[source]

変換をCairoの文脈contextに適用する.オーバーライドすること.

Parameters
  • context (cairo.Context) – 文脈.

  • verbose (bool) – デバッグ出力のフラグ.default=False.

apply_point(x: float, y: float) tuple[source]

変換を点(x, y)に適用した結果(x1, y1)を返す.オーバーライドすること.

Parameters
  • x (float) – 適用対象の点のx座標

  • y (float) – 適用対象の点のy座標

Returns

変換後の点(x1, y1)

Return type

(tuple(float, float))

class board.crtool.ImageBoard(imgtype=cairo.Format.ARGB32, format='pdf', outfile='out', display_shape=None, verbose=False)[source]

Bases: object

Cairoの文脈(context)の生成と出力を実装するクラス.

  • 本オブジェクトの生成時に,オプション引数を与えると,Cairo.contextを生成し,保持する.

Parameters
  • imgtype (str) – 画像フォーマット (cairo)

  • format (str) – 出力ファイルの描画フォーマット (cairo) in “pdf”, “png”

  • display_shape (tuple(int, int)) – 画像のサイズ (xsize, ysize)

  • outfile (str) – 出力画像ファイル名の本体を表す文字列.例:out

  • verbose (bool) – デバッグ/実行情報の表示のフラグ

ims

Cairoの画像オブジェクト(Surface)を保持する.

Type

cairo.ImageSurface, cairo.PDFSurface

cr

Cairoの文脈オブジェクト.関数`context()`で取得し,各種のCairoの描画操作,または,crtoolの描画操作を適用できる.

Type

cairo.Context

context() Context[source]

描画ハンドル`self.cr`を返す.

Returns

Cairoの描画contextオブジェクト

Return type

(cairo.Context)

show(noshow=False, verbose=False)[source]

画像を,出力ファイルに書き出す.出力ファイル書式は`format`で,出力ファイル名(本体)文字列は`outfile`で,ImageBoardオブジェクトの生成時に指定する.

class board.crtool.Rotate(angle=None)[source]

Bases: GeoTransform

並行移動の変換のクラス

Parameters

angle (float) – 回転の量.単位はラジアンであり,math.pi*0.5, `math.pi/6`などのように指定する.

apply_context(verbose=False)[source]

変換を文脈に適用する.

Parameters
  • context (cairo.Context) – 文脈.

  • verbose (bool) – デバッグ出力のフラグ.default=False.

apply_point(x: float, y: float) tuple[source]

変換を点(x, y)に適用した結果(x1, y1)を返す.

Parameters
  • x (float) – 適用対象の点のx座標

  • y (float) – 適用対象の点のy座標

Returns

変換後の点(x1, y1)

Return type

(tuple(float, float))

class board.crtool.Translate(dest=None, src=None)[source]

Bases: GeoTransform

並行移動の変換のクラス.次の引数 destかsrcのどちらか一つを指定する.

Parameters
  • dest (tuple(float,float)) – 原点を移す先の点の座標

  • src (tuple(float,float)) – 点原点に移す元の点(アンカー)

Attributes: move (tuple(float, float)) : 並行移動ベクトル vect = (tx, ty)

apply_context(verbose=False)[source]
Parameters
  • context (cairo.Context) – 文脈.

  • verbose (bool) – デバッグ出力のフラグ.default=False.

apply_point(x: float, y: float) tuple[source]

変換を点(x, y)に適用した結果(x1, y1)を返す.

Parameters
  • x (float) – 適用対象の点のx座標

  • y (float) – 適用対象の点のy座標

Returns

変換後の点(x1, y1)

Return type

(tuple(float, float))

board.crtool.anchor_point_by_vector(box=None, vect=None)[source]

矩形`box`において,正規化アンカーベクトル`vect`が表すアンカー点を返す.

Parameters

vect (tuple(float, float)) – 正規化アンカー位置`vect=(ax,ay) in [0,1]^2`

Returns

包含矩形box上の点 a = (ax, ay)

Return type

(tuple(float, float))

board.crtool.anchor_vector(anchor_str=None, default=None, strict=False)[source]

文字列対によるアンカー表記を受け取り,対応する正規化アンカーベクトル`a = (ax,ay) in [0,1]^2`を返す.

Parameters
  • anchor_str (str, tuple(str,str)) – 文字列対によるアンカー表記.それ自体が`None`でも良いし,対の片方または両方の要素が`None`を取っても良い.

  • default (tuple(str,str)) – アンカー表記のデフォールト値.`anchor_str==None`のとき,代わりに用いられる.

Note

アンカー表記の対の要素に`None`を許す.

  • アンカー表記自身が`None`のときは,値としてDEFAULT_ANCHOR_STRをとる.現在は,`ANCHOR_STR_ORIGIN = (‘left’,’top’)`である.

  • 対の要素が`None`のときは,値`None`を,`mid`に相当する値`DEFAULT_ANCHOR_VALUE = 0.5`に置き換える.

Example:

anchor=('left' , 'top') => (0.0, 0.0)
anchor=('mid'  , 'mid') => (0.5, 0.5)
anchor=('right', 'bot') => (1.0, 1.0)
anchor=('left' ,  None) => (0.0, 0.5)
anchor=(None   , 'top') => (0.5, 0.0)
board.crtool.box_apply_trans(box, trans=None, verbose=False)[source]

変換を適用する

Parameters
  • cr (Cairo.Context) – Cairo.Context

  • trans (GeoTransform) – 空間変換

board.crtool.box_from_shape(shape=None, origin=None)[source]

形状shape=(sx, sy)を受け取り,矩形 box = (x0, y0, x1, y1)を返す.

board.crtool.box_normalize(box)[source]

4座標(矩形)からなる正しい矩形であることを検査し,2座標(点)なら4座標に正規化する.

board.crtool.box_to_shape(box)[source]

矩形 box = (x0, y0, x1, y1)を受け取り,その幅widthと高さheightを返す.

board.crtool.box_union(boxes, box1, verbose=False)[source]

矩形の対を受け取り,それらの最小包含長方形を表す対を返す.

Parameters
  • boxes – 点 (x0, y0) または矩形 (x0, y0, x1, y1)

  • box1 – 点 (x0, y0) または矩形 (x0, y0, x1, y1)

Returns

矩形 box = [p, q]

Return type

rect

board.crtool.cr_add_alpha(rgb=None, alpha=0.0)[source]

色指定の三つ組rgbにalpha in [0.0,1.0]を追加する

Parameters
  • rgb (tuple(float, float, float)) – 色を表す3つ組 $(r,g,b) in [0,1]^3$.

  • alpha (float) – アルファ値を表す実数 in $lpha in [0,1]$.

Returns

アルファ値つきの色を表す4つ組 $(r,g,b, a) in [0,1]^4$.

Return type

rgb (tuple(float, float, float))

board.crtool.cr_apply_trans(trans=None, context=None, verbose=False)[source]

変換を適用する

Parameters
  • context (Cairo.Context) – Cairo.Context

  • trans (GeoTransform) – 空間変換

board.crtool.cr_arc(x=None, y=None, r=None, start=None, end=None, context=None, **kwargs)[source]

円盤を描く.

Parameters
  • x (float) – x-coordinate of the center

  • y (float) – y-coordinate of the center

  • r (float) – radius

  • start (float) – the starting and ending angle in radian

  • end (float) – the starting and ending angle in radian

  • fill (bool) – fill (True) or stroke (False, default)

Returns

包含矩形

Return type

(Rect)

board.crtool.cr_arrow_head(x, y, x_last, y_last, context=None, head_shape=None, head_length=10, head_angle=0.3490658503988659, head_offset_ratio=0.3, to_surpress_short_head=True, **kwargs)[source]

ペンを移動する.

Parameters
  • x (float) – x-coordinate of the center

  • y (float) – y-coordinate of the center

  • x_last (float) – 矢印をもつ場合に,前の点の座標を与える.矢印の向きを決める.

  • y_last (float) – 矢印をもつ場合に,前の点の座標を与える.矢印の向きを決める.

  • context (cairo.Context) – 文脈オブジェクト.必須.

  • head_shape (str) – 矢印頭の形状. 省略時は,DEFAULT_HEAD_SHAPE=’sharp’.

  • head_length (float) – デフォールトARROWHEAD_LENGTH

  • head_angle (float) – デフォールトARROWHEAD_ANGLE

  • head_offset_ratio (float) – デフォールトARROWHEAD_OFFSET_RATIO

  • to_surpress_short_head (bool) – 矢印頭と同程度以下の長さの線分に対して矢印頭の描画を省略する.デフォールトTrue

Notes

矢印頭の形状 head_shape (str) は次のいずれかの値をとる.

  • stroke : 2辺の輪郭線によるV字型の矢印頭

  • triangle : 塗りつぶした二等辺三角形の矢印頭

  • sharp : 塗りつぶした尖った鏃型の矢印頭.`triangle`の根本が凹んだ形.

関数`line_to`による線分`(x_last, y_last), (x, y)`の描画時に呼びだされる.

board.crtool.cr_circle(x=None, y=None, r=None, context=None, **kwargs)[source]

円盤を描く

Parameters
  • x (float) – x-coordinate of the center

  • y (float) – y-coordinate of the center

  • r (float) – radius

  • fill (bool) – fill (True) or stroke (False, default)

Returns

包含矩形

Return type

(Rect)

board.crtool.cr_draw_marker(ax, ay, r=None, context=None, **kwargs)[source]

関数cr_draw_marker_circleのラッパー関数.下位互換性のため.

board.crtool.cr_draw_marker_circle(ax, ay, r=None, context=None, **kwargs)[source]

円形(circle)のマークを描画する.

Parameters
  • ax (float) – 配置位置のx座標

  • ay (float) – 配置位置のy座標

  • r (float) – 半径.

  • context (cairo.Context) – Cairoの文脈オブジェクト.

board.crtool.cr_draw_marker_cross(x=0.0, y=0.0, angle=0.7853981633974483, ticklen=4, context=None, **kwargs)[source]

十文字型(crossing)のマークを描画する.

Parameters
  • x (float) – 配置位置のx座標

  • y (float) – 配置位置のy座標

  • angle (float) – マーカーの十文字の向きをラジアンで指定する実数.

  • ticklen (float) – 十文字の各線分の長さ(default: DEFAULT_MARKER_TICKLEN)

  • context (cairo.Context) – Cairoの文脈オブジェクト.

board.crtool.cr_line_to(x, y, context=None, has_arrow=False, x_last=None, y_last=None, **kwargs)[source]

ペンを移動する.

Parameters
  • x (float) – x-coordinate of the center

  • y (float) – y-coordinate of the center

  • context (cairo.Context) – 文脈オブジェクト

  • has_arrow (bool) – 線分端に矢印をもつか?

  • x_last (float) – 矢印をもつ場合に,前の点の座標を与える.矢印の向きを決める.省略可能.

  • y_last (float) – 矢印をもつ場合に,前の点の座標を与える.矢印の向きを決める.省略可能.

  • arrow_head (str) – 矢印の形状. 値は,関数`crtool.cr_arrow_head`を参照のこと.

Returns

包含矩形

Return type

(Rect)

board.crtool.cr_move_to(x, y, context=None)[source]

ペンを移動する.

Parameters
  • x (float) – x- and y-coordinate of the center

  • y (float) – x- and y-coordinate of the center

Returns

包含矩形

Return type

(Rect)

board.crtool.cr_process_stroke_or_fill(context=None, **kwargs)[source]

図形描画後の書き出しを行う.

Parameters
  • context (cairo.Context) – Cairoの文脈オブジェクト.

  • cmd (str) – 次の命令の一つ: ‘stroke’, ‘fill’, ‘stroke_preserve’, ‘fill_preserve’.

  • preserve (bool) – 演算後のパス保持のフラグ.パスを保存するなら`True`, しないなら`False`

board.crtool.cr_rectangle(x=None, y=None, width=None, height=None, context=None, fill=None, edge_rgb=None, **kwargs)[source]

矩形を描く

Parameters
  • x (float) – x-coordinate of the center

  • y (float) – y-coordinate of the center

  • width (float) – width

  • height (float) – height

  • fill (bool) – fill if True or stroke if False (default)

Returns

包含矩形

Return type

(Rect)

board.crtool.cr_set_context_parameters(context=None, **kwargs)[source]

cairo.Contextに各種パラメータを設定するラッパー関数.各種の代替キーを提供する.

Parameters
  • context (cairo.Context) – Cairoの文脈オブジェクト.

  • source_rgb (tuple(float, float, float)) – Cairoの色指定の数の三つ組.代替キー’rgb’

  • linewidth (float) – 線幅.代替キー’line_width’, ‘pen_width’

  • linecap (str) – 線端の形状.代替キー’line_cap’, ‘line_end’

  • fontsize (float) – フォントサイズ.代替キー’font_size’, ‘fsize’.

  • fontfamily (str) – フォントファミリー指定.代替キーfont_family, ffamily.

  • fontslant (str) – フォントの斜体指定.代替キーfont_slant, fslant.値は`(‘italic’, ‘normal’, ‘oblique’)`をとる.詳しくは,関数`cr_font_face`を参照のこと.

  • fontweight (str) – フォントの太字指定.代替キーfont_weight, fweight.値は,`(‘normal’, ‘bold’)`をとる.詳しくは,関数`cr_font_face`を参照のこと.

board.crtool.cr_set_font_face(context=None, **kwargs)[source]

cairo.ContextにFont Faceを設定する.

Parameters
  • context (cairo.Context) – Cairoの文脈オブジェクト.

  • fontfamily (str) – Cairoのフォントファミリー指定.代替キーfont_family, ffamily

  • fontslant (str) – Cairoの斜体指定.値は`(‘italic’, ‘normal’, ‘oblique’)`をとる.詳しくは,辞書`crtool.FONT_SLANT`を参照のこと.代替キーfont_slant, fslant.

  • fontweight (str) – Cairoの太字指定.値は,`(‘normal’, ‘bold’)`をとる.詳しくは,辞書`crtool.FONT_WEIGHT`を参照のこと.代替キーfont_weight, fweight.

board.crtool.cr_set_source_rgb(source_rgb=None, context=None)[source]

contextに色source_rgbを設定する. source_rgbはアルファなし(r,g,b)とアルファあり(r,g,b,a)の両方を受け付ける.

board.crtool.cr_text(ox, oy, msg=None, context=None, **kwargs)[source]

文脈にテキストを描画する.Cairo.show_text(msg)のラッパー.

Parameters
  • context (cairo.Context) – Cairoの文脈オブジェクト.

  • ox (float) – テキストの配置位置 (ox, oy)

  • oy (float) – テキストの配置位置 (ox, oy)

  • msg (str) – テキスト

board.crtool.cr_text_extent(ox, oy, msg=None, context=None, **kwargs)[source]

テキストの配置情報を事前に取得する.Cairo.context.text_extents(msg)のラッパー.

Parameters
  • context (cairo.Context) – Cairoの文脈オブジェクト.

  • ox (float) – テキストの配置位置 (ox, oy)

  • oy (float) – テキストの配置位置 (ox, oy)

  • msg (str) – テキスト

Returns

テキストの描画情報の6つ組 (x, y, width, height, dx, dy)

Return type

(tuple)

Notes

返り値の6つ組は次の通り

  • x, y : テキストの配置位置.原点は左上

  • width, height : テキストの包含矩形のサイズ

  • dx, dy : グリフ位置の増分

board.crtool.get_display_shape(shape=None, portrait=None)[source]

入力の画像サイズ指定shapeから, 画像サイズを表す正数の組 shape = (xsize,ysize)を返す.

Parameters
  • shape (str, (float,float)) – 出力画像サイズを表す文字列sizenameまたは正数の組(xsize, ysize)

  • portrait (bool) – 画面向きの指定.Trueならば縦長画面か,Falseならば横長画面.default=False.

Returns

画像サイズを表す正数の組

Return type

((float,float))

board.crtool.lookup_dict(dict=None, key=None, default=None)[source]

与えられた辞書を,文字列キーで検索して,値を返す. ただし,辞書のキーは小文字化されていることを仮定する. このとき,次の点でpython組み込みの辞書と異なる.

  • キー文字列は大文字小文字を区別しないこと.

  • キーが登録されていなければ引数defaultの値を返すこと.

Parameters
  • dict (dict) – python組み込みの辞書.キーが小文字のみであること.

  • key (str) – キー文字列.大文字小文字の別は無視される.

  • default (Any) – デフォールト値.

Returns

キーに対応する値.ただし,値が見つからない時は,default値が返される.

Return type

(Any)

board.crtool.vt_add(vec0, vec1)[source]

二つのベクトルvec0, vec1の成分和のベクトル`vec0 + vec1`を返す.

Parameters
  • vec0 (tuple(float,float)) – vec0 = (x0, y0)

  • vec1 (tuple(float,float)) – vec1 = (x1, y1)

Returns

vec = (x0+x1, y0+y1)

Return type

(tuple(float,float))

board.crtool.vt_mult(vec0, vec1)[source]

二つのベクトルvec0, vec1の成分ごと積のベクトル`vec0 * vec1`を返す.

Parameters
  • vec0 (tuple(float,float)) – vec0 = (x0, y0)

  • vec1 (tuple(float,float)) – vec1 = (x1, y1)

Returns

vec = (x0*x1, y0*y1)

Return type

(tuple(float,float))

board.crtool.vt_scale(vec0, scale=None)[source]

ベクトルvec0とスカラーscaleの積のベクトル`scale * vec0`を返す.

Parameters
  • vec0 (tuple(float,float)) – ベクトル vec0 = (x0, y0)

  • scale (num) – スカラー

Returns

vec = (scale*x0, scale*y0)

Return type

(tuple(float,float))

board.crtool.vt_sub(vec0, vec1)[source]

二つのベクトルvec0, vec1の成分差のベクトル`vec0 - vec1`を返す.

Parameters
  • vec0 (tuple(float,float)) – vec0 = (x0, y0)

  • vec1 (tuple(float,float)) – vec1 = (x1, y1)

Returns

vec = (x0-x1, y0-y1)

Return type

(tuple(float,float))

board.kwargs module

board.kwargs.contains(kwargs=None, key=None)[source]

キーワード辞書がkeyの非None値を含むか?

board.kwargs.extract(kwargs=None, keys=[], required=[], deleted=[], trans=[], func=None, reduced=False, verbose=False)[source]

キーワード引数辞書から指定した属性を抽出して得られた新しい辞書を返す. このとき,パラメータtransに指定したキーワード属性は,ptからpxへ単位変換を行う.

Parameters
  • kwargs (dict) – 元のキーワード引数の辞書.

  • keys (list(str)) – 抽出するキーワードのリスト.Noneならば,transと全てのキーをコピーする.空リスト`[]`のときは,trans以外のキーはコピーしない

  • required (list(str)) – 必須のキーワードのリスト.検査して含まれてなければ,エラーで停止する.keysと重複して良い.

  • deleted (list(str)) – 除去するキーワードのリスト.keysと重複してはいけない(重複すると返り値の辞書から除去されるので注意).

  • trans (list(str)) – 値を変換して抽出するキーワードのリスト(keysに含まれていなくても良い)

  • func (lambda) – 座標変換関数. transのための座標変換関数またはラムダ式.ここに,関数func(xy)は,引数として,点xy=(x0,y0)または点のリストxy=[(x0,x1), (y0,y1), …]の型の入力を受けつけること.

  • reduced=False (bool) – 関数kwargs.reduceを用いて,値がNoneのキーワードを除去したコピーを作成して返す.非破壊的であり,元の辞書は変更しない.

Returns

新しいキーワード引数の辞書 kwargs1.

Return type

dict

  • 全ての属性をコピーしたい時は,引数keys=Noneとおく.このとき,transで指定した変換を行い,他の全ての属性をコピーする.

  • もしtrans以外の属性をコピーしたくない時は,明示的に`keys=[]`とおく.(空リスト[]と空値Noneのあつかいは異なるので注意)

Examples

例:描画情報`xy`を座標変換し,他のすべての属性を取り出す:

kwargs1 = kw.extract(kwargs, trans=['xy'], keys=None)

例:属性’fill’, ‘width’, ‘outline’を取り出す:

kwargs1 =
  kw.extract(kwargs=kwargs,
    keys=['fill', 'width', 'outline'])

例:属性’fill’, ‘width’, ‘outline’を取り出す:

kwargs1 =
  kw.extract(kwargs=kwargs,
     keys=['xy', 'text', 'font', 'size',
        'anchor', 'orient', 'direction',])

例: 指定属性 ‘margin’, ‘padding’ 以外の全ての属性を取り出す:

kwargs1 =
  kw.extract(kwargs, keys=None,
        deleted=['margin', 'padding'])
board.kwargs.get(kwargs=None, key=None, altkeys=None, required=False, default=None)[source]

キーワード辞書kwargsにおいて,key値の検査をして,その値を返す. もしそのkeyが見つからない場合には,続いて,次の動作を順に行う: - キーdefaultが指定されていればそれを返す.してされていなければ,次へ進む. - ブール値required=Trueが指定されていれば,直ちにエラーを起こして停止する. - もし見つからなければNoneを返す.

Parameters
  • kwargs (dict) – キーワード辞書 (None)

  • key (int or str) – 指定したキーワード.

  • default (object) – 任意の値.指定キーワードの値がNoneの場合に返すデフォールト値.

  • required (bool) – 必須キーワードかのフラグ.この値がTrueの場合,キーワードの値が未定義(None)ならば,エラーを投げる.default=False.

Returns

辞書におけるキーワードkeyの値.値がNoneの場合は上記の説明に従う.

Return type

object

board.kwargs.get_required(kwargs=None, key=None)[source]

キーワード辞書kwargsのkeyの値を返す. 未定義ならエラーを投げる

  • get(kwargs=kwargs, key=key, default=None)へのラッパー.

board.kwargs.reduce(kwargs=None)[source]

キーワード辞書kwargsからNone値のキーと値を取り除き,残りを複製して得られた辞書を返す.元の辞書は破壊されず,コピーを返す.

Parameters

kwargs (dict) – 元のキーワード引数の辞書.

Returns

新しいキーワード引数の辞書 kwargs1.

Return type

dict

board.kwargs.replace_apply(kwargs=None, keys=None, func=None, verbose=False)[source]

キーワード引数辞書において,指定したキーに関数funcを適用して置き換える.

Parameters
  • kwargs (dict) – 元のキーワード引数の辞書.

  • keys (list(str)) – 抽出するキーワードのリスト.Noneならば,transと全てのキーをコピーする.空リスト`[]`のときは,trans以外のキーはコピーしない

  • func (lambda) – 座標変換関数. transのための座標変換関数またはラムダ式.ここに,関数func(xy)は,引数として,点xy=(x0,y0)または点のリストxy=[(x0,x1), (y0,y1), …]の型の入力を受けつけること.

Returns

新しいキーワード引数の辞書 kwargs1.

Return type

dict

  • 引数のkwargsに破壊的変更を加えるので,注意すること.

  • 主に,数値引数の離散化に用いる(px).

board.kwargs.require(kwargs=None, keys=None, verbose=False)[source]

キーワード辞書kwargsがキーまたはキーのリストkeysのキーを含むかどうか検査する.検査に成功するとTrueを返し,失敗するとエラーを投げる.

board.loggable module

ボードの基本機能を提供するモジュール.

  • loggableモジュールは,ボードオブジェクトが,複合画像の木のノードとしてもつ最低限の機能を提供する.

  • 複合画像を表すボードオブジェクトは木構造をなす.

  • Loggableオブジェクトは,次の機能を提供する:

    • 親子情報の管理

    • ログ出力の管理

class board.loggable.Loggable(dep_init=0, max_children=-1, tags=None, verbose=False, **kwargs)[source]

Bases: object

ボードの最基底クラス. 複合画像を表すボードオブジェクトの木のノードがもつ最低限の機能を提供する.

Parameters
  • dep_init (int) – 深さの初期値.default=None.

  • tags (str, list(str)) – タグ文字列またはタグ文字列のリスト.タグ文字列のリストは,オブジェクトの属性`tags`に保持され,実装者と利用者により,各種の用途に用いることができる.default=None.

  • verbose (bool) – デバッグ用出力のフラグ.default=False.

  • **kwargs – 任意のオプション引数.オブジェクトの属性`kwargs`に保持されて,実装者と利用者により,各種の用途に用いることができる.

tags

タグ文字列またはタグ文字列のリスト.実装者と利用者により,各種の用途に用いることができる.

Type

str, list(str)

kwargs

オプション引数の辞書.オブジェクトの属性`kwargs`に保持されて,実装者と利用者により,各種の用途に用いることができる.

Type

dict

add_tag(tags) Loggable[source]

タグ文字列を追加する. :param tags: タグ文字列.任意のグルーピングに用いる. :type tags: str

Returns

自分自身.いわゆる’cascade object call interface’ のため.

Return type

(Loggable)

append(pair=None) Loggable[source]

子ボードの対 pair (trans, child)を受け取り,子配列に追加する.

  • trans (cairo.Matrix) : 自座標における子の配置を指示する変換オブジェクト

  • child (Board): 子として追加するBoardオブジェクト

Parameters

pair (tuple) – 変換と子ボードの対 (trans, child)

Returns

追加した子

Return type

(Board)

Example:

root = Canvas()
child = root.put(Board())
child = parent.put(trans=Translate(dest=(1, 2)), Rectangle())
children() list[source]

子エントリの並び children を返す.ここに,子エントリvalue = (trans, child) は,変換 trans と子オブジェクトchildの対である.

Returns

子エントリvalue = (trans, child) のリスト

Return type

list

children_enumerated() list[source]

添字と子エントリの対`idx, value`の並び children を返す. 現在は,`trans, child = value`である.部分クラスで上書きする.

Returns

子オブジェクトのリスト

Return type

list

Notes :

読み出し`idx, value = children_enumerated()`と書き込み`children_replace(idx, value)`を対にして用いる.

dump(dep=0, file=<_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'>)[source]

Loggableオブジェクトの構造を印刷する.

Parameters

B (Loggable) – ボードオブジェクトの根

fetch(key=None, default=None, verbose=False) Any[source]

自分の先祖にフィールド`key`が定義されているボードがあれば,そのような直近の先祖での値を返す.もしそのような先祖がなければ,`default`が指定されていれば,その値を返し,それ以外ならば`None`を返す.

Parameters
  • key (str) – 検索するキー文字列

  • default (Any) – キーをもつ先祖が見つからない時に返すデフォールト値

Returns

キーをもつ最近先祖におけるキーの値

Return type

(Any)

get_tags() list[source]

タグ文字列のリストを返す.

Returns

タグ文字列のリスト

Return type

(list(str))

myinfo(depth=False, ord=False, tag=False) str[source]

便利関数.ログ用に,Boardオブジェクトの情報の文字列を返す.

repo(msg=None, header=True, is_child=False, file=<_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>)[source]

入れ子深さを考慮したレポート文字列を出力する.

Parameters
  • dep=0 (int) – 入れ小深さ

  • msg=None (str) – 出力する文字列

  • header=True (str) – 出力するヘッダー文字列.ふつうは関数名 ‘methodname’

  • file (outstream) – 出力ストリーム.デフォールトsys.stderr

Examples:

self.repo(depth, msg=f'.send_draw: cmd={cmd} kwargs={kwargs1}')
set_child_by_idx(idx=None, pair=None) Loggable[source]

添字 idx と変換と子ボードの対 pair (trans, child)を受け取り, 子配列のidxセルにpairを代入する. 添字は,下記の例のように元の配列から取り出したものに限る.

  • trans (cairo.Matrix) : 自座標における子の配置を指示する変換オブジェクト

  • child (Board): 子として追加するBoardオブジェクト

Parameters
  • idx (int) – 子配列の添字

  • pair (tuple) – 変換と子ボードの対 (trans, child)

Example:

for idx, value in parent:
    trans, child = value
    trans1, child1 = modifing(trans, child)
    parent.set(idx, trans=trans1, child1)
vars() dict[source]

自身のオブジェクトの属性からなる辞書を返す. その際,未定義(値がNone)の属性はスキップする.

class board.loggable.LoggableHolder(child=None)[source]

Bases: object

Loggableにおける子のホルダー.子に加えて,補助情報を保持する子クラスを生成して利用する.

Parameters

child (Loggable) – 保持する子の初期値.default=None.

get_child()[source]

ホルダーの子要素を設定する.子要素は`None`を許す.

Returns

ホルダーがもつ子要素

Return type

(Loggable)

set_child(child=None)[source]

ホルダーの子要素を設定し,自分自身を返す. 子要素`child`が`None`のときは,エラーを投げて終了する.

Parameters

child (Loggable) – ホルダーに設定する子要素

Returns

自分自身.(cascading style API)

Return type

(Loggable)

Module contents