glyph_motion package

Subpackages

Submodules

glyph_motion.font_bcap_cobotta_writer module

glyph_motion.font_line_layout module

KanjiVG の文字ストロークを固定サイズの一行レイアウトへ配置する。

このモジュールは、文字列を文字単位のセルへ割り当て、KanjiVG から取得した ストローク座標を各セルの中央へ平行移動する。生成される座標列は FontStrokePath として保持され、後段の軌道生成処理やロボット制御処理へ 渡すことを想定している。

本モジュールの責務は幾何学的な配置に限定される。ロボットへの接続、姿勢変換、 ペンの上げ下げ、速度指定などの装置依存処理は行わない。これにより、文字配置の 検証と実機制御を分離し、同一のレイアウト結果を異なる出力装置で再利用できる。

配置処理では、作業空間を固定幅のセルに分割し、文字列中の各文字を一つのセルへ 対応付ける。文字の実幅がセル幅より小さい場合は水平方向に中央揃えし、文字高は 指定された character_height を基準として垂直方向に中央揃えする。空白文字も 一つのセルを消費するが、ストロークは生成しない。

class FontLineLayout(kanjivg_directory, workspace_width, workspace_height, cell_width, cell_height, character_height, curve_division=16, line_direction='left_to_right', writing_direction='horizontal', vertical_direction='top_to_bottom', mirror_horizontal=False, mirror_vertical=False)[source]

Bases: object

固定作業空間内に一行分の文字ストロークを配置する。

作業空間を cell_width と cell_height で定義される固定セルに分割し、 入力文字列の各文字を順番に割り当てる。文字データは FontKanjiVGStrokeLoader から取得し、セル中央へ移動した後、必要に応じて 水平方向の鏡像変換を適用する。

このクラスは、文字列から「どの文字が、どのセルに、どの座標列として置かれる か」を確定するレイアウト層である。後段のモーション生成処理が文字幅や余白を 再計算する必要がないよう、配置結果を絶対座標で返す。

Parameters:
  • kanjivg_directory (Path) – KanjiVG の SVG ファイルを格納したディレクトリ。

  • workspace_width (float) – 一行の配置に使用できる作業空間の幅。

  • workspace_height (float) – 作業空間の高さ。

  • cell_width (float) – 一文字へ割り当てるセルの幅。

  • cell_height (float) – 一文字へ割り当てるセルの高さ。

  • character_height (float) – KanjiVG から読み込む文字の基準高さ。

  • curve_division (int) – ベジェ曲線を折れ線へ分割するときの分割数。

  • line_direction (str) – 横書き時の進行方向。left_to_right または right_to_left を指定する。

  • writing_direction (str) – 文字列を横書きまたは縦書きのどちらで配置するか。

  • vertical_direction (str) – 縦書き時の進行方向。top_to_bottom または bottom_to_top を指定する。

  • mirror_horizontal (bool) – 各セル内の文字を水平方向に反転するかどうか。

  • mirror_vertical (bool) – 各セル内の文字を垂直方向に反転するかどうか。

Raises:
  • ValueError – 作業空間、セル寸法、文字高が正でない場合。

  • ValueError – セル寸法が作業空間を超える場合。

  • ValueError – 文字高がセル高を超える場合。

  • ValueError – 配置方向の指定が未対応の値である場合。

build(text)[source]

文字列を固定セルへ割り当て、配置済みストローク列を生成する。

各文字について、次の順序で配置を行う。

  1. 文字列中の位置から使用するセル番号を決定する。

  2. 書字方向に応じてセル原点を求める。

  3. 空白文字では空のストローク列を生成する。

  4. KanjiVG から文字ストロークと文字幅を読み込む。

  5. 文字をセル中央へ移動するためのオフセットを求める。

  6. 各点へ平行移動と必要な鏡像変換を適用する。

  7. 配置済み文字情報として結果へ追加する。

入力文字列の順序は PositionedCharacter.index に保持される。 返却リストの順序と各文字の筆順は常に入力順を維持し、進行方向の指定は 各文字へ割り当てるセル原点の増分符号だけを変更する。

Parameters:

text (str) – 配置する文字列。空白文字も一文字分のセルを使用する。

Returns:

入力文字列の順序で並んだ配置済み文字情報のリスト。

Raises:
  • ValueError – 文字数が作業空間の収容数を超える場合。

  • ValueError – 読み込んだ文字幅がセル幅を超える場合。

Return type:

List[PositionedCharacter]

property capacity: int

作業空間に収容できる最大セル数を返す。

横書きでは作業空間幅をセル幅で、縦書きでは作業空間高さをセル高で 整数除算し、書字方向へ完全に収まるセルだけを数える。端数として残る 領域は、一文字分のセルとしては使用しない。

Returns:

作業空間へ配置できる最大文字数。

class PositionedCharacter(character, index, cell_origin_x, cell_origin_y, strokes)[source]

Bases: object

一つの文字セルへ配置済みの文字情報を保持する。

文字そのものに加え、入力文字列中の位置、割り当てられたセルの原点、 およびセル座標系へ変換済みのストローク列をまとめて保持する。 空白文字では strokes が空になるが、文字列中の位置とセル割り当ては 他の文字と同様に保持される。

Parameters:
  • character (str) – 配置対象の一文字。

  • index (int) – 入力文字列中のゼロ始まりの文字位置。

  • cell_origin_x (float) – 割り当てられたセル左下原点の X 座標。

  • cell_origin_y (float) – 割り当てられたセル左下原点の Y 座標。

  • strokes (List[FontStrokePath]) – セル内へ配置済みのストローク列。

character

配置対象の一文字。

index

入力文字列中のゼロ始まりの文字位置。

cell_origin_x

セル原点の X 座標。

cell_origin_y

セル原点の Y 座標。

strokes

配置済みストローク列。