Class: ChemScanner::Interpreter::Fragment
- Inherits:
-
Object
- Object
- ChemScanner::Interpreter::Fragment
- Extended by:
- Forwardable
- Defined in:
- lib/chem_scanner/interpreter/element/fragment.rb
Overview
Molecule class
Instance Method Summary collapse
- #add(other) ⇒ Object
- #clone ⇒ Object
-
#initialize(chemdraw_fragment) ⇒ Fragment
constructor
A new instance of Fragment.
- #line? ⇒ Boolean
- #set_id(new_id) ⇒ Object
Constructor Details
#initialize(chemdraw_fragment) ⇒ Fragment
Returns a new instance of Fragment.
13 14 15 |
# File 'lib/chem_scanner/interpreter/element/fragment.rb', line 13 def initialize(chemdraw_fragment) @fragment = chemdraw_fragment end |
Instance Method Details
#add(other) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'lib/chem_scanner/interpreter/element/fragment.rb', line 17 def add(other) @fragment.boxed |= other.boxed @fragment.node_map.merge!(other.node_map) @fragment.bond_map.merge!(other.bond_map) @fragment.rebuild_polygon end |
#clone ⇒ Object
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/chem_scanner/interpreter/element/fragment.rb', line 26 def clone cfrag = @fragment.clone cfrag.set_new_id cloned = self.class.new(cfrag) cloned.boxed = @fragment.boxed cloned.node_map = @fragment.node_map cloned.bond_map = @fragment.bond_map cloned end |
#line? ⇒ Boolean
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/chem_scanner/interpreter/element/fragment.rb', line 41 def line? node_map = @fragment.node_map return false if node_map.count < 3 points = [] node_map.values.each_with_index do |node, i| points << node.point next if i < 2 seg1 = Geometry::Segment.new(points[i - 3], points[i - 2]) seg2 = Geometry::Segment.new(points[i - 2], points[i - 1]) return false unless seg1.lies_on_one_line_with?(seg2) end true end |
#set_id(new_id) ⇒ Object
37 38 39 |
# File 'lib/chem_scanner/interpreter/element/fragment.rb', line 37 def set_id(new_id) @fragment.id = new_id end |