Problems with cloning...
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 17/09/2008 at 11:46, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 10.1
Platform: Windows ; Mac ;
Language(s) : C++ ;---------
Hi,I have written a generator object, that returns a virtual hierarchy.
I can also create clones of objects that create clones themselves (e.g. the Array Object) as shown here:
_<_img border="0" src= "http://www.c4d-jack.de/projects/spread/cloning_problem_1.jpg"_>_It is also possible to put my object into another cloning object (again like e.g. the Array Object) :<_<_img border="0" src= "http://www.c4d-jack.de/projects/spread/cloning_problem_3.jpg"_>_pg">
But here comes the first problem: It is not possible for me to create clones of my own object, see he_<_img border="0" src= "http://www.c4d-jack.de/projects/spread/cloning_problem_2.jpg"_>__2.jpg">
That's the first problem. What can I do here? Is there something I have to do? I just create clones of the source object(s) by using obj- >GetClone(0, NULL); and then inserting the cloned object into the virtual hierarchy, which I return in ::GetVirtualHierarchy().
+ + + + + + + + + + + + +
2nd Problem:
As you can also see on the sceenshots 1 and 3, my source objects are still visible. I do obj->Touch() on all ob them after creating the clones, but that does only hide the top object. If I have a whole hierarchy which I clone (like the Array Object on screenshot 1) only the Array Object gets hidden, but the Sphere Object stays visible. Do I have to iterate the object's whole hierarchy and touch every object I find, or is there a nicer way?Thanks for any help I am really stuck here
Best regards & greetings,
Jack -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 17/09/2008 at 12:54, xxxxxxxx wrote:
OK, already got it. Have to use the AliasTrans class, too.
>
\> // Use AliasTrans \> AliasTrans \*at = AliasTrans::Alloc(); \> if (!at || !at->Init(doc)) return FALSE; \> \> cl=static_cast<BaseObject\*>(tp->GetClone(0, at)); \> if (!cl) return FALSE; \> \> // Alias Translate \> at->Translate(TRUE); \> \> // insert as last object under main \> cl->InsertUnderLast(main); \> \> // Free AliasTrans object \> AliasTrans::Free(at); \>
But since I do this, I have several memory leaks. If I comment the whole AliasTrans stuff away, no leaks appear in the c4d trace window.
It seems Free(at) is not enough. Anything else to do here?
Cheers,
Jack -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 18/09/2008 at 00:39, xxxxxxxx wrote:
cl=static_cast<BaseObject\*>(tp->GetClone(0, at)); \> if (!cl) return FALSE;
The memory leaks are probably because you forget to free the AliasTrans here.
cheers,
Matthias -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/09/2008 at 02:59, xxxxxxxx wrote:
Does anybody know something about my 2nd Problem? Do I really have to iterate the whole hierarchy and touch every object?
> Quote: Originally posted by c4dJack on 17 September 2008
>
> * * *
>
> User Information:
>
> Cinema 4D Version: 10.1
> Platform: Windows ; Mac ;
> Language(s) : C++ ;
>
>
> ---------
>
>
> 2nd Problem:
> As you can also see on the sceenshots 1 and 3, my source
> objects are still visible. I do obj->Touch() on all of
> them after creating the clones, but that does only hide
> the top object. If I have a whole hierarchy which I
> clone (like the Array Object on screenshot 1) only the
> Array Object gets hidden, but the Sphere Object stays
> visible. Do I have to iterate the object's whole
> hierarchy and touch every object I find, or is there a
> nicer way?
>
>
> * * *Thanks again in advance...
Greetings,
Jack -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/09/2008 at 04:41, xxxxxxxx wrote:
Hi Jack,
use GetAndCheckHierarchyClone() instead. No need for dependence lists etc. then. It handles the hiding and touching too.
Use it like this.
>
BaseObject\* down = op->GetDown(); if(!down) return BaseObject::Alloc(Onull); \> down = op->GetAndCheckHierarchyClone(hh, down, HCLONE_ASPOLY, &dirty;, NULL, TRUE); \> \> if (!dirty) return down;
You will get a null-object with all the objects of your hierarchy cloned underneath it. Decide with HCLONE_ASPOLY what you want the hierarchy clones to be (HCLONE_ASIS for example to simply get clones, not converted to polys...see doc for more info).
Now go on coding.
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/09/2008 at 05:15, xxxxxxxx wrote:
Thanks, working fine!
Cheers,
Jack