jw_cad 外部変形 - (番外) jw.rbの円弧データ -

外部変形は データのやり取りをテキストファイルで行うので プログラム言語は 自由に選ぶことができます。図形は機能的かつシンプルなため、数多くのユーザーに受け入れられています。

 

外部変形の円弧データを考えます。

  ◎弧・楕円データ
ci %lg %lg %lg %lg %lg %lg %lg            ( x y r p1 p2 w d )
      x  : 中心点の X 方向の座標
      y  : 中心点の Y 方向の座標
      r  : 半径
      p1 : 始角(゚)
      p2 : 終角(゚)
      w  : 扁平率(0.0001 ~ 10000 程度までが描画できる範囲)
      d  : 傾角(゚)

  ・円弧データを指示・選択するときは指示番号や指標が利用できます
    ①指示番号の円弧データを取り出す
    ci 1
    ci 1, 2
    ci 1..2
    ci 1, 2, 3..4

    ②指標(文字列)で円弧データを代表する
    1.ci
    [1, 2].ci :index
    (1..2).ci
    [1, 2, 3..4].index.ci :index

    ③指標(シンボル)で円弧データを代表する
    :ci1

  ・円弧データは配列、文字列が利用できます
    ④配列
    [1.0, 2.0, 3.0, 30.0, 120.0, 1.0, 0.0]
    ["ci", 1, 2, 3, 30, 120, 1, 0]

    ⑤文字列
    "1 2 3 30 120 1 0"
    "1, 2, 3, 30, 120, 1, 0"
    "ci 1 2 3 30 120 1 0"

  ・配列、文字列の要素にキーワードが利用できます
    ⑥ハッシュ
    (x y r p1 p2 w d)
    {x:1, y:2, r:3, p1:30, p2:120, w:1, d:0}
    {:x=>1, :y=>2, :r=>3, :p1=>30, :p2=>120, :w=>1, :d=>0}

    (C あるいは ci)
    {C:[1, 2, 3, 30, 120, 1, 0]}
    {:C=>[1, 2, 3, 30, 120, 1, 0]}

    ⑦キーワード引数
    (x y r p1 p2 w d)
    ci x:1, y:2, r:3, p1:30, p2:120, w:1, d:0
    ci :x=>1, :y=>2, :r=>3, :p1=>30, :p2=>120, :w=>1, :d=>0

    (C あるいは ci)
    ci C:[1, 2, 3, 30, 120, 1, 0]
    ci :C=>[1, 2, 3, 30, 120, 1, 0]

    ⑧キーワード配列
    (x y r p1 p2 w d)
    [x:1, y:2, r:3, p1:30, p2:120, w:1, d:0]
    [:x=>1, :y=>2, :r=>3, :p1=>30, :p2=>120, :w=>1, :d=>0]

    (C あるいは ci)
    [C:[1, 2, 3, 30, 120, 1, 0]]
    [:C=>[1, 2, 3, 30, 120, 1, 0]]

    ⑨キーワード文字列
    (x y r p1 p2 w d)
    "x:1, y:2, r:3, p1:30, p2:120, w:1, d:0"
    ":x=>1, :y=>2, :r=>3, :p1=>30, :p2=>120, :w=>1, :d=>0"
    "x=1, y=2, r=3, p1=30, p2=120, w=1, d=0"

    (C あるいは ci)
    "C:[1, 2, 3, 30, 120, 1, 0]"
    ":C=>[1, 2, 3, 30, 120, 1, 0]"
    "C=[1, 2, 3, 30, 120, 1, 0]"


ci 1, 2, 3, 4, 5, 6, 7 が 指示円弧 1, 2, 3, 4, 5, 6, 7 なのか [x=1, y=2, r=3, p1=4, p2=5, w=6, d=7] なのかは 
  p ci as 1, 2, 3, 4, 5, 6, 7 #=> [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], …, [19.0, 20.0, 21.0]]

  p ci at 1, 2, 3, 4, 5, 6, 7 #=> [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]
のように as と at を使い分けることで解決できます。as は そのまま、at は いちど前に立ち止まって くらいの意味(まちがっているかもしれない)です。

なお ci 1, 2, 3, 30, 120, 1, 0 は 指示円弧の番号は 0~99(0 は 予備) なので 120 があるため 引数は指示番号ではないと判断します。
  p ci 1, 2, 3, 30, 120, 1, 0 #=> [1.0, 2.0, 3.0, 30.0, 120.0, 1.0, 0.0]