![]() |
Treeview with custom tree |
Page 12> |
Author |
![]() |
||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() Posted: 2014 Jan 16 at 7:39am |
||
User Information: Cinema 4D Version: R15Platform: Windows ; Language(s): C++ ; --------- All the Treeview examples I see are using cinema objects or materials.What if I want to create my own tree and display this tree using treeview. E.g.: - Family A - parent A - parent B - Family B - ... Etc. I think I have to make the tree using BaseList2D hierarchies (which
include GeListNode and GeListHead), but I do not if this is the correct way and if so, where to start? |
|||
![]() |
|||
NiklasR ![]() Member ![]() Joined: 2010 Dec 13 Location: Germany Online Status: Offline Posts: 2575 |
![]() |
||
You need to create your own datastructure that can represent a tree. Like
The gui/activeobject.cpp example in the Cinema 4D SDK does it. Best, -Niklas
Edited by NiklasR - 2014 Jan 16 at 8:26am |
|||
![]() |
|||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() |
||
Thank you.
I'll try it out.
|
|||
![]() |
|||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() |
||
Sorry, more complicated then I thought.
From the example should I use DebugArray or ListHeader / ListObject? A more simple example would help me. If a simple example on how to create tree data structure. My C++ is still not that good.
|
|||
![]() |
|||
Yannick Puech ![]() Forum Moderator ![]() Joined: 2011 Apr 13 Location: Spain Online Status: Offline Posts: 1143 |
![]() |
||
Hi, |
|||
MAXON
Developer Support |
|||
![]() |
|||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() |
||
Hi Yannick,
I know that example and that was the start of my question. Instead of using objects or materials I want to use my own tree and display it with treeview. But I do not know how to create my own tree data structure and display it / link it to treeview. Regards, Pim
|
|||
![]() |
|||
NiklasR ![]() Member ![]() Joined: 2010 Dec 13 Location: Germany Online Status: Offline Posts: 2575 |
![]() |
||
Hey Yannick,
I think that's not what Pim is searching for. The blog shows how to use the TreeView by leveraging the BaseList2D's hierarchical tree structure, which is what he already denoted as being the only thing he examples for. Pim, it has less to do with C++ but with logic.
Add some members to this class which will contain data that you want to display in the Treeview and use it to cast void* to Node* instead of BaseList2D*. Beware of the memory management, while the BaseList2D* classes are managed by Cinema 4D (assuming they are inserted in the tree), you'll need to manage the memory of the Node* structure for yourself. Best, -Niklas Edited by NiklasR - 2014 Jan 17 at 2:50am |
|||
![]() |
|||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() |
||
Ok, based on your example and another tutorial, I can now create my own tree structure.
What I need to do now is: How do I handle child's in my structure. Set an extra bit to indicate? void* root is the address of the first node? In my case 'start'? See code below.
|
|||
![]() |
|||
NiklasR ![]() Member ![]() Joined: 2010 Dec 13 Location: Germany Online Status: Offline Posts: 2575 |
![]() |
||
A bit? No. As you can clearly see in my above code, a Node has not also a "prev" and "next" pointer, but also a "child" and "up" pointer. You could use the class directly, I wrote it extra for this very answer and tested it. ![]() You can either alter the code or subclass it. Something like this (though this code is untested):
|
|||
![]() |
|||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() |
||
It is getting clearer and clearer, thanks.
I looked at your first code, but did not use it because: - I got errors on
"Node" is not a nonstatic data member or base class of class "Node". Class "Node" has no member "name" - I do not how to insert the first record. So, how to use your class Node to insert records? Thanks for your effort, Pim
|
|||
![]() |
|||
ScottA ![]() Member ![]() Joined: 2011 Jan 07 Online Status: Offline Posts: 2288 |
![]() |
||
Is there a reason that you're writing your own node? The code you're posting (GetFirst, GetNext, GetUp, etc..) is already set up for us in the TreeViewFunctions SDK class. You haven't said what you want to display in your tree gizmo. But if you don't want to display objects or materials in your tree. And want to use it for displaying something else. Then I don't see why you'd go through the extra trouble of writing a node class. Suppose you wanted to display tags in the tree gizmo. Instead of using:
You would use something like this instead
Are you sure you really need to go through the trouble of creating a custom Node? -ScottA Edited by ScottA - 2014 Jan 17 at 12:54pm |
|||
![]() |
|||
NiklasR ![]() Member ![]() Joined: 2010 Dec 13 Location: Germany Online Status: Offline Posts: 2575 |
![]() |
||
@Scott: Well, he said he's only seen examples of using BaseList2D elements with the TreeView. I suppose
he wants to display something very different. And it's not that much of a trouble to write your own node class, the code is just a few posts earlier. @Pim: I used a C++11 feature in the code. You can rewrite the Node constructor like
instead of calling Node() in the initializer list of the second constructor. What problems do you have about "inserting the first record"? Just use the Insert~() functions
-Niklas
Edited by NiklasR - 2014 Jan 17 at 1:43pm |
|||
![]() |
|||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() |
||
@Scott: I want to download information from the Internet and present it in a treeview.
So, the information is not cinema 4d info, thus I need to define my own nodes and present it in the treeview. @Niklas: More clear now. Thanks for the example. Quite possibility I will come back with more questions. Regards, Pim
|
|||
![]() |
|||
kuroyume0161 ![]() Member ![]() ![]() Joined: 2002 Oct 29 Location: United States Online Status: Offline Posts: 3665 |
![]() |
||
It is quite possible (and easy) to use your own class structures in a tree view. InterPoser Pro uses a folder/file system to display items as a tree view. You need to have a root and items and associate levels with them (parents/children). If you would like to see my code, PM me.
|
|||
![]() |
|||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() |
||
Hi Niklas, sorry still very confusing. I can now create a data structure and defined the TreeViewFunctions. Not all of them, GetFirst and GetName, GetDown, GetNext and SetName. I now get a window with a starting treeview and one little arrow. No names however. Is *root in my case always root (so I have to define it globally) or is it somewhere else defined? Also, I seem to be mixing up class Node and class MyNode. When to use which class?
|
|||
![]() |
|||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() |
||
Hi Robert, your inbox is full. I like to see your code very much. Regards, Pim
|
|||
![]() |
|||
ScottA ![]() Member ![]() Joined: 2011 Jan 07 Online Status: Offline Posts: 2288 |
![]() |
||
I'd like to see an example too Robert.
Because while I can also wrote the gizmo. It crashes when I try to add things to it due to using a custom Node. And I still don't understand why we need to write a completely new Node for this? If we don't want to use a baselist2D object. Can't we just substitute another type of object in the various TreeViewFunctions class methods? Seeing a working example might help me answer those questions. -ScottA |
|||
![]() |
|||
NiklasR ![]() Member ![]() Joined: 2010 Dec 13 Location: Germany Online Status: Offline Posts: 2575 |
![]() |
||
I think this example should set things clear now.
![]() Best, -Niklas
Edited by NiklasR - 2014 Jan 19 at 3:48pm |
|||
![]() |
|||
ScottA ![]() Member ![]() Joined: 2011 Jan 07 Online Status: Offline Posts: 2288 |
![]() |
||
Thanks Niklas,
Only you're using a bunch of C++11 stuff. And when I convert it to work in R13. The selections don't work. And the new items are never created as children. I'm still trying to figure out why they don't work. -ScottA |
|||
![]() |
|||
pgrooff ![]() Member ![]() Joined: 2010 Nov 05 Online Status: Offline Posts: 817 |
![]() |
||
Great, thanks Niklas.
For me with R15 and VS Express 2010 it is working great. Adding new nodes, drag&drop, rename, delete, everything works! It looks very advanced C++ programming, so I will learn a lot from it. Thanks, Pim
|
|||
![]() |
Page 12> |
Forum Jump | Forum Permissions ![]() You cannot post new topics in this forum You cannot reply to topics in this forum You cannot delete your posts in this forum You cannot edit your posts in this forum You cannot create polls in this forum You cannot vote in polls in this forum |