performance issue /

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 18/05/2009 at 13:36, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   r11 
Platform:   Windows  ;   
Language(s) :     C++  ;

---------
hi,

i am facing performance issues. while my object plugin is parametric there is a HUGE editor slowdown. i know why (because the object is rebuilt everytime something changes within the editor, nomatter if it belongs to my plugin object or not)

within the BaseObject *MyPluginObject::GetVirtualObjects(PluginObject *op, HierarchyHelp *hh)
{ ... Part i have placed all the generating code (which can easiely get quite complex due to high counts and much calculations)

So i wonder how i can prevent this and just have the object to be rebuilt when some parameters or childobjects have changed..

thanks for any help,
ello

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 18/05/2009 at 13:41, xxxxxxxx wrote:

Really, you should use the search-function of this forum. Just the keyword 'cache' helped me to find an entry within a few seconds. Hope it helps ;)

click

cheers, Shawni

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 18/05/2009 at 14:26, xxxxxxxx wrote:

thanks. my fault, i didnt search in message body :)

anyhow, now other strange things happen, but i'll try to get the hang of it...

cheers,
ello

edit: now i get memory leaks, they are related to this:

> `

  
\>  dirty = op->CheckCache(hh) || op->IsDirty(DIRTY_DATA|DIRTY_CHILDREN);  
\>    
\>       if (!dirty) return op->GetCache(hh);  
\>  

`

what do i need to do, now?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 19/05/2009 at 03:44, xxxxxxxx wrote:

Free the objects you allocated before returning the cache ;-)

Greetings,
Jack

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 20/05/2009 at 12:53, xxxxxxxx wrote:

thank you! that helped alot. now i need to find out how to let the object run from the beginning, as for now it just works after i changed a parameter

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 20/05/2009 at 15:17, xxxxxxxx wrote:

Quote: Originally posted by anubis23 on 20 May 2009
>
> * * *
>
> as for now it just works after i changed a parameter
>
>
> * * *

Isn't that what you wanted?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 20/05/2009 at 15:28, xxxxxxxx wrote:

yes, but if i have one of my plugin objects as a child and i change its parameters, the change is only visible when i change a parameter of the other pluginobject (where the object is linked via IN_EXCLUDE).

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 20/05/2009 at 23:31, xxxxxxxx wrote:

Didn't you use the dependency list?

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 21/05/2009 at 05:55, xxxxxxxx wrote:

i have used it, but maybe not the right way??
this is how i did it:

> `

  
\>       zeit = doc->GetTime().GetFrame(doc->GetFps())*anmSpeed;  
\>       if (anmSpeed!=0) bc->SetReal(ZEIT,zeit);  
\>    
\>       BaseObject *main = BaseObject::Alloc(Onull);   
\>       if (!main) goto Error;  
\>       main->SetName(pluginName);  
\>       BaseObject *child = NULL;  
\>       InExcludeData *mylist = (InExcludeData* )bc->GetCustomDataType(CHILDLIST,CUSTOMDATATYPE_INEXCLUDE_LIST);  
\>       if (!mylist ) goto Error;  
\>       LONG objcnt = mylist->GetObjectCount();  
\>       LONG ccnt=0;   
\>       op->NewDependenceList();  
\>       if (mylist)   
\>       {  
\>            for(int i=0; i<objcnt; i++)  
\>            {  
\>                 op->AddDependence(hh,(BaseObject* )mylist->ObjectFromIndex(doc, i));  
\>            }  
\>       if (profileLink) op->AddDependence(hh,(BaseObject* )(bc->GetLink(PROFILE,doc)));  
\>       if (userSpline) op->AddDependence(hh,(SplineObject* )(bc->GetLink(USERSPLINE,doc)));  
\>       if (child) op->AddDependence(hh,child);  
\>       }   
\>       op->TouchDependenceList();  
\>       Bool dirty=FALSE;  
\>       dirty = op->CheckCache(hh) || op->IsDirty(DIRTY_DATA|DIRTY_CHILDREN);  
\>       if (!dirty)   
\>       {  
\>            blDelete(main);  
\>            return op->GetCache(hh);  
\>       }  
\>  

`

the first lines are there to make the animation possible. i guess there is a more elegant way, too..

if i put those AddDependence Lines into the if(!dirty) condition the objects only get invisible when changing parameters