class Disp3D::NodeCollection

Public Class Methods

new(name = nil) click to toggle source
Calls superclass method Disp3D::Node::new
# File lib/node/node_collection.rb, line 5
def initialize(name = nil)
  super
  @children = Hash.new()
end

Public Instance Methods

add(node) click to toggle source

returns generated path_id

# File lib/node/node_collection.rb, line 15
def add(node)
  if(node.kind_of?(Symbol))
    add_node_by_name(node)
  else
    add_node(node)
  end
end
box() click to toggle source
# File lib/node/node_collection.rb, line 35
def box
  return nil if @children == nil || @children.size == 0
  rtnbox = nil
  @children.each do |key, node|
    adding_box = box_transform(node.box)
    if rtnbox.nil?
      rtnbox = adding_box
    else
      rtnbox += adding_box
    end
  end
  return rtnbox
end
child(path_id) click to toggle source
# File lib/node/node_collection.rb, line 53
def child(path_id)
  return @children[path_id]
end
child_nodes() click to toggle source
# File lib/node/node_collection.rb, line 57
def child_nodes
  return @children.values
end
child_path_id() click to toggle source
# File lib/node/node_collection.rb, line 61
def child_path_id
  return @children.keys
end
draw(currnet_view) click to toggle source
# File lib/node/node_collection.rb, line 23
def draw currnet_view
  pre_draw()
  @children.each do |key, node|
    if(node.kind_of?(NodeLeaf))
      NodePathDB.add(key, node)
      GL.LoadName(key)
    end
    node.draw currnet_view
  end
  post_draw()
end
include?(path_id) click to toggle source
# File lib/node/node_collection.rb, line 49
def include?(path_id)
  @children.include?(path_id)
end
open(&block) click to toggle source
# File lib/node/node_collection.rb, line 10
def open(&block)
  self.instance_eval(&block)
end

Protected Instance Methods

remove_child_by_node(child_node) click to toggle source
# File lib/node/node_collection.rb, line 70
def remove_child_by_node(child_node)
  @children.reject!{|key, value| value == child_node}
end
remove_child_by_path_id(path_id) click to toggle source
# File lib/node/node_collection.rb, line 66
def remove_child_by_path_id(path_id)
  @children.delete(path_id)
end
update_for_display() click to toggle source
# File lib/node/node_collection.rb, line 74
def update_for_display
  @children.each do |key, node|
    node.update_for_display
  end
end

Private Instance Methods

add_new(node_info, &block) click to toggle source
# File lib/node/node_collection.rb, line 80
def add_new(node_info, &block)
  if(block_given?)
    create_and_add_node_by_block(node_info, &block)
  elsif(node_info.kind_of?(Hash))
    create_and_add_node(node_info)
  else
    Util3D.raise_argurment_error(node_info)
  end
end
add_node(node) click to toggle source
# File lib/node/node_collection.rb, line 107
def add_node(node)
  ancestors_ary = self.ancestors
  if(node.kind_of?(Array))
    new_ids = Array.new(node.size)
    node.each_with_index do |item,i|
      new_ids[i] = self.add(item)
    end
    return new_ids
  elsif(node.kind_of?(Node))
    if(ancestors_ary.include?(node.instance_id) || node.instance_id == self.instance_id)
      raise CircularReferenceException
    end
    new_id = gen_path_id()
    @children[new_id] = node
    node.parents.push(self)
    return new_id
  else
    Util3D.raise_argurment_error(node)
  end
end
add_node_by_name(node_name) click to toggle source
# File lib/node/node_collection.rb, line 101
def add_node_by_name(node_name)
  Util3D.check_arg_type(Symbol, node_name)
  nodes = NodeDB.find_by_name(node_name)
  add_node(nodes)
end
create_and_add_node(hash) click to toggle source
# File lib/node/node_collection.rb, line 128
def create_and_add_node(hash)
  new_node = create(hash)
  add_node(new_node)
end
create_and_add_node_by_block(hash, &block) click to toggle source
# File lib/node/node_collection.rb, line 133
def create_and_add_node_by_block(hash, &block)
  hash[:type] = :Collection
  new_node = create(hash)
  new_node.instance_eval(&block) if(block_given?)
  add_node(new_node)
end
gen_path_id() click to toggle source
# File lib/node/node_collection.rb, line 141
def gen_path_id
  id_adding = @@path_id_list.size
  @@path_id_list.push(id_adding)
  return id_adding
end
remove(path_id) click to toggle source
# File lib/node/node_collection.rb, line 90
def remove(path_id)
  if(path_id.kind_of?(Integer))
    node = NodePathDB.find_by_path_id(path_id)
  else
    Util3D::raise_argurment_error(path_id)
  end
  node.parents.each do |parent|
    parent.remove_child_by_path_id(path_id)
  end
end