Folding an object in the Object Manager



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

    On 04/06/2012 at 18:38, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   13 
    Platform:      Mac OSX  ; 
    Language(s) :       PYTHON  ;

    ---------
    I'm trying to force the folding of an object with children, in the Object Manager.
    I tried it in COFFEE and it didn't work.
    Now I was trying to do it in Python and it seems that it doesn't work either :-(
    I tried with:

    op.SetBit(BIT_OFOLD)

    and with

    op.SetBit(NBIT_OM1_FOLD)

    But nothing happens. Is it also not possible with Python?

    Rui Batista



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

    On 05/06/2012 at 00:25, xxxxxxxx wrote:

    Have You tried 'GeListNode.ChangeNBit(c4d.NBIT_OM1_FOLD, c4d.NBITCONTROL_SET)' in Python?

    Cheers
    Peter



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

    On 05/06/2012 at 03:28, xxxxxxxx wrote:

    How should I apply it?
    Like this?

    op.ChangeNBit(c4d.NBIT_OM1_FOLD, c4d.NBITCONTROL_SET)

    If it is, it is still not working :-(



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

    On 05/06/2012 at 03:54, xxxxxxxx wrote:

    It's necessary to inform the manager about the update with an EventAdd().

    Toggles the fold state:

      
    op.ChangeNBit(c4d.NBIT_OM1_FOLD, c4d.NBITCONTROL_TOGGLE)  
    op.Message(c4d.MSG_CHANGE)  
    c4d.EventAdd()  
    

    cheers,
    Matthias



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

    On 05/06/2012 at 04:21, xxxxxxxx wrote:

    Well, what I'm trying to achieve is an object that folds itself as soon as an object is dropped in or outside it.
    For that, I created a Python Generator with the following code:

      
    old_childs=0   
      
    import c4d   
    #Welcome to the world of Python   
      
    def main() :   
        global old_childs   
        childs=0   
        current=op.GetDown()   
        if current is None: return   
           
        while current is not None:   
            childs=childs+1   
            current=current.GetNext()   
           
        if childs==old_childs: return   
        old_childs=childs   
        op.ChangeNBit(c4d.NBIT_OM1_FOLD, c4d.NBITCONTROL_SET)   
        op.Message(c4d.MSG_CHANGE)   
        c4d.EventAdd()   
        return c4d.BaseObject(c4d.Onull)   
    

    But it is not working. Could it be because the object is trying to fold itself?



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

    On 05/06/2012 at 05:23, xxxxxxxx wrote:

    A bit confusing, but the clear bit folds the object.

    Example for Python generator:

      
    import c4d  
    #Welcome to the world of Python  
      
      
    def main() :  
      op.ChangeNBit(c4d.NBIT_OM1_FOLD, c4d.NBITCONTROL_CLEAR)  
      op.Message(c4d.MSG_CHANGE)  
      c4d.EventAdd()  
       
      return c4d.BaseObject(c4d.Ocube)  
     
    

    Personally I think it's not a good idea to do and I'm not sure if it's thread safe etc.

    cheers,
    Matthias



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

    On 05/06/2012 at 05:37, xxxxxxxx wrote:

    Weird!! I would assume that to fold we would need to SET the bit.
    This is for a Vault object - I would place in it objects that I want to keep but that I currently don't need.
    It will only fold when objects are added or removed from it. But I can still fold/unfold it manually.
    Thank you very much for your help, Matthias.

    Rui Batista



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

    On 05/06/2012 at 05:57, xxxxxxxx wrote:

    This should work in an Python Expression Tag.
    Let me know.
    Should you need to do this via a Command script,
    you would need to store the childcount in the parent object
    itself, using a unique ID from PlugIn Cafe'.

    Cheers
    Lennart

      
    import c4d   
      
    childcountmemo = 0   
      
    def main() :   
        global childcountmemo   
        obj = op.GetObject()   
        obj[c4d.TPYTHON_RESET] = False # Turn off 'Reset on Frame 0'   
        obj[c4d.TPYTHON_FRAME] = False # and 'Frame Dependent'   
        childcount = len(obj.GetChildren())   
           
        if childcount != childcountmemo and obj.GetNBit(c4d.NBIT_OM1_FOLD) :   
            obj.ChangeNBit(c4d.NBIT_OM1_FOLD,c4d.NBITCONTROL_CLEAR)   
              
        childcountmemo = childcount   
    

Log in to reply