How to translate a C tree structure to ruby tree objects

Discussion in 'Ruby' started by anne001, Feb 18, 2006.

  1. anne001

    anne001 Guest

    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
    that trees are something people think about in ruby. Do any of those
    reference have a bearing on my question?
    anne001, Feb 18, 2006
    #1
    1. Advertising

  2. anne001

    Guest

    Re: How to translate a C tree structure to ruby tree objects

    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
    , Feb 18, 2006
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Stub

    B tree, B+ tree and B* tree

    Stub, Nov 12, 2003, in forum: C Programming
    Replies:
    3
    Views:
    10,109
  2. 7stud
    Replies:
    11
    Views:
    684
    Dennis Lee Bieber
    Mar 20, 2007
  3. sharan
    Replies:
    4
    Views:
    689
    CBFalconer
    Oct 30, 2007
  4. sharan
    Replies:
    2
    Views:
    828
    SM Ryan
    Oct 31, 2007
  5. sharan
    Replies:
    1
    Views:
    687
    CBFalconer
    Oct 30, 2007
Loading...

Share This Page