Sha256: 2bbd200842d4740bd94f6629042ee81582a13ef05071ec50bd93d39e9f545f52

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

# frozen_string_literal: true

module ChemScanner
  module ChemDraw
    # Geometry parser
    class ChemGeometry < BaseNode
      attr_reader :tail, :head, :head_type, :nogo, :line_type

      def initialize(parser, parser_type, id)
        super(parser, parser_type, id)

        @middle_points = []
        @line_type = 0
      end

      # NOTE: head ----> tail (head at tail)
      def parse_node(tag, _nid, data)
        case @props_ref[tag]
        when "3DTail"
          x, y = read_value(tag, data)
          @tail = { x: x, y: y }
        when "3DHead"
          x, y = read_value(tag, data)
          @head = { x: x, y: y }
        when "Arrow_ArrowHead_Head"
          @arrow_head = read_type(tag, data, CDXML_ARROW_TYPE)
        when "Arrow_NoGo" then @nogo = read_value(tag, data)
        when "Line_Type"
          @line_type = read_type(tag, data, CDXML_LINE_TYPE)
        else do_unhandled(tag)
        end
      end

      def segment
        Geometry::Segment.new_by_arrays(
          [@tail[:x], @tail[:y]],
          [@head[:x], @head[:y]],
        )
      end

      def vector
        segment.to_vector
      end

      def line
        segment.to_line
      end

      def headless
        @arrow_head != 2
      end

      def cross?
        !@nogo.nil?
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
chem_scanner-0.1.3 lib/chem_scanner/chem_draw/node/chem_geometry.rb