Class: Idml::Render::LayerFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/idml/render/layer_filter.rb

Overview

Filters page items by layer visibility. Items on hidden layers are excluded from rendering. Built from the Designmap's Layer collection — each Layer has a Visible attribute.

Constant Summary collapse

PAGE_ITEM_TYPES =
[
  Idml::Elements::Rectangle,
  Idml::Elements::TextFrame,
  Idml::Elements::Polygon,
  Idml::Elements::Group,
  Idml::Elements::GraphicLine,
].freeze
EXCLUDE_NONE =
new([].freeze)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hidden_layer_ids) ⇒ LayerFilter

Returns a new instance of LayerFilter.



34
35
36
# File 'lib/idml/render/layer_filter.rb', line 34

def initialize(hidden_layer_ids)
  @hidden = hidden_layer_ids.to_set
end

Class Method Details

.from_designmap(designmap) ⇒ Object



17
18
19
20
# File 'lib/idml/render/layer_filter.rb', line 17

def self.from_designmap(designmap)
  hidden = hidden_layer_ids(layers_for(designmap))
  hidden.empty? ? EXCLUDE_NONE : new(hidden)
end

Instance Method Details

#filter(items) ⇒ Object



49
50
51
# File 'lib/idml/render/layer_filter.rb', line 49

def filter(items)
  items.select { |item| visible?(item) }
end

#visible?(item) ⇒ Boolean

Returns:



40
41
42
43
44
45
46
47
# File 'lib/idml/render/layer_filter.rb', line 40

def visible?(item)
  return true unless page_item?(item)

  layer_ref = item.item_layer
  return true if layer_ref.nil? || layer_ref.empty?

  !@hidden.include?(layer_ref)
end