Fold/Unfold in Object Manager



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

    On 22/02/2007 at 14:09, xxxxxxxx wrote:

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

    ---------
    For some reason, the same code that works in every other version doesn't work in R10 to accomplish folding and unfolding of object hierarchies in the Object Manager.

    Care to advise on why it doesn't work and how to make it work in R10?

    Thanks,



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

    On 22/02/2007 at 14:28, xxxxxxxx wrote:

    SetBit(BIT_OFOLD) or ToggleBit() doesn´t work? If so I don´t know what the prob may be. :-)



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

    On 22/02/2007 at 15:31, xxxxxxxx wrote:

    That be it. I'm using SetBit(), DelBit(), and GetBit() from a dialog TreeView and this is been working everywhere else as expected (R8.2-R9.6). No response in R10 - the object is selected in the O.M., but the hierarchy does not expand (or contract).

    This type of stuff and random crashes are starting to irritate me no end (this is not even Xcode!). Maybe it's time to redo my website and plugin - "R10 support has been suspended until stability and functionality have been restored." ;0)



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

    On 22/02/2007 at 15:43, xxxxxxxx wrote:

    lol, yes, that would be an option. ;-) Maybe it´s a bug in R10 or an undocumented functionality is necessary (due to the ability to have several OMs in R10...just a guess).



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

    On 22/02/2007 at 16:07, xxxxxxxx wrote:

    Several OMs and even possibly Layers (these have crossed my mind and my eyes).

    Thing is, nothing in the documentation about any changes that would appear to affect this.

    Oh well. Time to wait and see. :)



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

    On 22/02/2007 at 16:10, xxxxxxxx wrote:

    Quote: _Thing is, nothing in the documentation about any changes that would appear to affect this.
    >
    > * * *
    _


    You should know by now that this doesn´t mean absolutely no nothing! ;-D

    (trible negation to accentuate this was necessary *g* )



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

    On 22/02/2007 at 16:42, xxxxxxxx wrote:

    Iow, if it's omitted from the documentation - then it's not a bug - it's an overlooked feature? ;P



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

    On 23/02/2007 at 08:10, xxxxxxxx wrote:

    No comment. :D



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

    On 26/02/2007 at 04:25, xxxxxxxx wrote:

    Hi guys.. not long ago i came across the "Bool GetNBit(LONG bit) const" Function. It is in the manual, and is probably exactly what you need ( if it works correctly ;-) )



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

    On 26/02/2007 at 05:34, xxxxxxxx wrote:

    Ah! Then one must also use ChangeNBit() for this. Thanks for the info Michael!....well, if it works ;-)



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

    On 26/02/2007 at 06:59, xxxxxxxx wrote:

    Already looked at the *NBit() methods. They are for 64-bit bitfields - if that were to have any bearing on a 32-bit version of Cinema 4D, strange.

    How would you use these fields anyway? For instance, the Object Manager fold is represented by four LONG fields. What do you check here - for all of them to be non-zero? No further information.



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

    On 26/02/2007 at 07:35, xxxxxxxx wrote:

    That info seems misleading.. it probably just means that you have 64 "flags". You should be able to do sth. like GetNBit(NBIT_OM1_FOLD) or ChangeNBit(NBIT_OM1_FOLD,NBIT_SET
    ) without problems on any architecture. It is not possible to combine the bits though. GetNBit(NBIT_OM1_FOLD | NBIT_OM2_FOLD) is illegal ( see definition of these constants in ge_prepass.h )

    I guess that the four fold bits correspond to the four different object managers.



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

    On 26/02/2007 at 08:23, xxxxxxxx wrote:

    It does seem to work.

    But what do you mean by 'the four different object managers'? I know that you can have more than one OM, but have not seen any other type of OM. Oh I see - you can have up to four OMs open (previous descriptions sounded like there could be any number opened).

    I guess that I'll continue in the current vane and just get/set/del all four of them - poor users. :)

    Looking at these NBIT fields, do you notice that all (except for the OM ones) are timeline related - ALL of them: TL=TimeLine, FC=F-Curve, CKEY= (well) CKey? The natural question arises - why is the Object Manager folding now tied directly to the TimeLine?

    Thanks,
    Robert



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

    On 26/02/2007 at 08:51, xxxxxxxx wrote:

    With this information in hand, anyone care to speculate how you would determine which of the four possible OMs (Scene Browsers - I take it from ManagerInfo) is the active one?



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

    On 12/04/2007 at 13:44, xxxxxxxx wrote:

    Robert -
    I ran into the same issue you did while doing a tutorial based on 9.6.
    I'm a newb at scripting in COFFEE and I was able to get most of the script to work by changing CallCommand #'s, the only thing that drives me crazy is the folded hierarchy that SetBit, DelBit, ToggleBit don't seem to phase.  Any results with that other GetNBit function vs. the 4 OM's?   (I don't completely understand the syntax - just hoping you've found something).
    Dell



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

    On 12/04/2007 at 14:01, xxxxxxxx wrote:

    This is the code that I'm using (within a TreeViewFunctions that somewhat mirrors the OM - but not exactly). Note that I'm only interested in the one Object Manager and decided not to do it in any others that may be available.

    //*---------------------------------------------------------------------------*  
    Bool DoubleClick(void* root, void* userdata, void* obj, LONG col, MouseInfo* mouseinfo)  
    //*---------------------------------------------------------------------------*  
    {  
         BaseObject*          op =               (BaseObject* )obj;  
         if (!op->IsInstanceOf(Obase))     return FALSE;  
         BaseObject*          op2 =               op;  
         op =                                   op->GetUp();  
         if (!op)                              return TRUE;  
         // Find first contracted set  
         while (op)  
         {  
    #ifdef     C4D_R10  
              if (!op->GetNBit(NBIT_OM1_FOLD))     break;  
    #else  
              if (!op->GetBit(BIT_OFOLD)) break;  
    #endif  
              op = op->GetUp();  
         }  
         // If there is a folded object, expand to op2  
         if (op)  
         {  
              // Expand  
              do  
              {  
                   op2 = op2->GetUp();  
                   if (op2)  
                   {  
    #ifdef     C4D_R10  
                        op2->ChangeNBit(NBIT_OM1_FOLD, NBIT_SET);  
    #else  
                        op2->SetBit(BIT_OFOLD);  
    #endif  
                   }  
              } while (op2);  
         }  
         // If all parents expanded, contract to first IPP parent  
         else  
         {  
              // Contract  
              while (op2)  
              {  
                   op2->DelBit(BIT_OFOLD);  
                   op2 = op2->GetUp();  
                   if (op2 && (op2->GetTag(ID_IPPFIGURETAG) || op2->GetTag(ID_IPPOBJECTTAG)))  
                   {  
    #ifdef     C4D_R10  
                        op2->ChangeNBit(NBIT_OM1_FOLD, NBIT_DEL);  
    #else  
                        op2->DelBit(BIT_OFOLD);  
    #endif  
                        break;  
                   }  
              }  
         }  
         EventAdd();  
         return TRUE;  
    }
    


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

    On 12/04/2007 at 14:46, xxxxxxxx wrote:

    Wow!  Thank you very much Robert.  The code is a bit over my head, so I think I'll just manually expand my resulting hierarchy until I get a better handle on C4D scripting in R10.   At the moment, ChangeNBit doesn't even turn black in my script manager (ie doesn't appear to be a valid member function of Hypernurb or symmetry objects)... :-(
    The code I'm having trouble with (with redundant debugging here - I've tried both Del and SetBits:
    ///////////////////PROBLEM AREA.......
    //hN is a hypernurb object
    //sym is a symmetry object
    hN->SetBit(BIT_OFOLD);          // doesn't work R10
    sym->SetBit(BIT_OFOLD);          // doesn't work R10
    println("Using SetBit and BIT_OFOLD ");
    println(hN->GetBit(BIT_OFOLD));
    hN->DelBit(BIT_OFOLD);
    sym->DelBit(BIT_OFOLD);
    println("Using DelBit and BIT_OFOLD ");
    println(hN->GetBit(BIT_OFOLD));
    hN->SetBit(NBIT_OM1_FOLD);   //idea from SDK R10,  but doesn't work (64 bit OS only?)
    sym->SetBit(NBIT_OM1_FOLD);  //idea from SDK R10,  but doesn't work (64 bit OS only?)
    println("Using SetBit and NBIT_OM1_FOLD ");
    println(hN->GetBit(NBIT_OM1_FOLD));
    hN->DelBit(NBIT_OM1_FOLD);
    sym->DelBit(NBIT_OM1_FOLD);       //appears to set bit for OM1, but doesn't seem to change folding
    println("NBIT_OM1_FOLD after modification: ");
    println(hN->GetBit(NBIT_OM1_FOLD));  //confirms FOLD bit change 1 to 0 but no change in display OM
    //hN->ChangeNBit(NBIT_OM1_FOLD, NBIT_SET); //ChangeNBit apparently not valid member function nH (Hypernurb object)
    //sym->ChangeNBit(NBIT_OM1_FOLD, NBIT_SET);//or sym (symmetry object)

    //////////////// .....END PROBLEM AREA



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

    On 12/04/2007 at 15:21, xxxxxxxx wrote:

    My code is C++ only. Don't know about COFFEE in R10 - it looks to be still R9.5 support only. Hopefully one of the dev support users can provide more information in this case.



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

    On 12/04/2007 at 16:30, xxxxxxxx wrote:

    Thanks, Robert.  Ah, the assumption I made was that scripting would be similar to plugin C++ syntax.  I thought I could practice with scripts before jumping in to plugins.  I learned something anyway.  Thanks.
    Dell


Log in to reply