# How to translate a C tree structure to ruby tree objects

**URL:** <https://www.ruby-forum.com/t/how-to-translate-a-c-tree-structure-to-ruby-tree-objects/70086>\
**Category:** Ruby\
**Created:** [February 18, 2006, 1:51pm UTC](https://www.ruby-forum.com/t/how-to-translate-a-c-tree-structure-to-ruby-tree-objects/70086 "2006-02-18T13:51:12Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![anne001](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/34f0e0/32.png) [@anne001](https://www.ruby-forum.com/u/anne001)\
**Post date:** [February 18, 2006, 1:51pm UTC](https://www.ruby-forum.com/t/how-to-translate-a-c-tree-structure-to-ruby-tree-objects/70086/1 "2006-02-18T13:51:12Z")

</div>

I want to draw a figure with opengl. The key seems to start from a tree  
structure.  
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 = []  
end  
end

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 [http://raa.ruby-lang.org/search.rhtml?search=tree](http://raa.ruby-lang.org/search.rhtml?search=tree)  
that trees are something people think about in ruby. Do any of those  
reference have a bearing on my question?

---

<div class="post-metadata">

**Author:** ![anne001](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/34f0e0/32.png) [@anne001](https://www.ruby-forum.com/u/anne001)\
**Post date:** [February 18, 2006, 4:19pm UTC](https://www.ruby-forum.com/t/how-to-translate-a-c-tree-structure-to-ruby-tree-objects/70086/2 "2006-02-18T16:19:12Z")

</div>

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  
function).

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  
end

def add\_child(node)  
@children.push(node)  
node.parent = self  
end

def draw(&block)  
yield  
end  
end
