PlusPole, MinusPole
放置していた電池のプラス極・マイナス極をいい感じのオブジェクトにしておきます。
Unit::PlusPole
Unit::MinusPole
これまでは LiboDraw::Rectangle
のオブジェクトをそのまま使って矩形を描画していましたが、
一度プラス極・マイナス極を担当するオブジェクトに変換して描画に使うようにします。
マイナス、プラスの記号も表示するようにしました。 一部線が重なっていますが、これは後で直します。
Circuit
viewer.rb
がだいぶ膨らんできたので整理します。
今の時点で 300 行弱あります。
circuit.rb
を新規作成して下記のメソッドを
Circuit
クラスにごっそり移動。
純粋関数っぽいメソッドはリファクタリングが楽でいいですね。
to_plus_pole to_minus_pole to_wire_fragments make_degree_map select_start_points make_pt_wfs_map select_next_wfs take_edge to_edges
それから、
ファクトリメソッド Circuit.create()
を作り、
edges
など回路に属するパーツを作成する処理をそこに移動。
View
描画部分も野暮ったい感じなので
View
というクラスを作ってそっちに移動させます。
雰囲気としては MVC の V っぽいイメージです。
これにより Drawer が View 内に隠蔽され、メインのロジック(viewer.rb
)から見えなくなりました。
viewer.rb
がすっきりしました。
メインの部分がこんな感じになり、見通しが良くなったと思います。
doc = LiboDraw::Document.new(path) page = doc.pages[page_no - 1] circuit = Circuit.create( page.lines, page.rectangles ) view = View.new(PPC) view.draw_grid(8, 10) circuit.plus_poles.each { |pole| view.draw_plus_pole(pole) } circuit.minus_poles.each { |pole| view.draw_minus_pole(pole) } circuit.edges.each { |edge| view.draw_edge(edge) }