Forum: Ruby How to translate a C tree structure to ruby tree objects

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
E29eaefee1709918198c8a4f55c42667?d=identicon&s=25 anne001 (Guest)
on 2006-02-18 13:51
(Received via mailing list)
I want to draw a figure with opengl. The key seems to start from a tree
The top of the tree is the trunk, there are several childrens, head,
upper arms upper legs, each of these have children of their own...

I found a tutorial which explains

Information is stored in nodes which include
pointer to a function that draws the object
matrix which positions, scales and orient this node relative to parent
(including children)
pointer to children of node

typedef struct treenode {
GLfloat m[16]; 	//transformation - e.g. translation
void *f(); 		//figure - e.g. Left leg
struct treenode *child;
struct treenode *parent;
} treenode;

What is the OOP ruby way of building a tree? Can it be something like
this? (per Brian Schröder)

class Node
   attr_reader :children

  def initialize
     @children = []

what goes in @children?  the transformation and drawing would be Node
methods I think?
And how do you refer to parent (You need information on the parent to
know where to draw the node)
What do I do with my class Node (called traversing a tree? )

I saw
that trees are something people think about in ruby. Do any of those
reference have a bearing on my question?
3f591bcf8b0c5335f9acc85b6e83481b?d=identicon&s=25 (Guest)
on 2006-02-18 16:19
(Received via mailing list)
The children of a node go in @children.  They're probably other nodes.

The transformation matrix and function would likely be data members
holding, respectively, a matrix and a proc object.  An alternate
approach for the drawing function would be to make an instance method
that receives a block (where the block would contain the drawing

So, potentially something like this:

class Node
  attr_accessor :children, :parent, :transform
  def initialize(parent = nil, transform = some_sort_of _matrix_object)
    @children = []
    @transform = transform
    if parent then parent.add_child(self) end

  def add_child(node)
    node.parent = self

  def draw(&block)
This topic is locked and can not be replied to.