Module: Sevgi::Graphics::Mixtures::Duplicate

Defined in:
lib/sevgi/graphics/mixtures/duplicate.rb

Overview

DSL helpers for duplicating elements and their subtrees.

Instance Method Summary collapse

Instance Method Details

#Duplicate(dx: nil, dy: nil, parent: nil, &block) ⇒ Sevgi::Graphics::Element

Duplicates an element subtree and optionally translates it.

Parameters:

  • dx (Numeric, nil) (defaults to: nil)

    x translation

  • dy (Numeric, nil) (defaults to: nil)

    y translation

  • parent (Sevgi::Graphics::Element, nil) (defaults to: nil)

    parent for the duplicated subtree

Returns:



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/sevgi/graphics/mixtures/duplicate.rb', line 13

def Duplicate(dx: nil, dy: nil, parent: nil, &block)
  duplicated = dup

  duplicated.Traverse() do |element|
    element.children = element.children.map(&:dup)
    id = (element.attributes = element.attributes.dup).delete(:id)
    element[:"#{ATTRIBUTE_INTERNAL_PREFIX}id"] = id if id
    block&.call(element)
  end

  duplicated.Translate(dx, dy) if dx || dy

  duplicated.Adopt(parent)

  duplicated
end

#DuplicateX(dx, parent: nil, &block) ⇒ Sevgi::Graphics::Element

Duplicates an element subtree along the x-axis.

Parameters:

  • dx (Numeric)

    x translation

  • parent (Sevgi::Graphics::Element, nil) (defaults to: nil)

    parent for the duplicated subtree

Returns:



34
# File 'lib/sevgi/graphics/mixtures/duplicate.rb', line 34

def DuplicateX(dx, parent: nil, &block) = Duplicate(dx:, dy: 0, parent:, &block)

#DuplicateY(dy, parent: nil, &block) ⇒ Sevgi::Graphics::Element

Duplicates an element subtree along the y-axis.

Parameters:

  • dy (Numeric)

    y translation

  • parent (Sevgi::Graphics::Element, nil) (defaults to: nil)

    parent for the duplicated subtree

Returns:



40
# File 'lib/sevgi/graphics/mixtures/duplicate.rb', line 40

def DuplicateY(dy, parent: nil, &block) = Duplicate(dx: 0, dy:, parent:, &block)