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