UNDO_XXX Clarification...

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

On 20/08/2006 at 03:35, xxxxxxxx wrote:

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

---------
It looks like the UNDO_ types changed at some point after R7.3, so I just wanted to get some clarification on what to use and where.  In the 7.3 ge_prepass.h file, I see these:

    
    
    
    
    #define UNDO_OBJECT_REC        1  
    #define UNDO_OBJECT          2  
    #define UNDO_OBJECT_DATA_REC      3  
    #define UNDO_OBJECT_DATA       4  
    #define UNDO_MATERIAL_DATA        5  
    #define UNDO_TAG_DATA         6  
    #define UNDO_KEY_DATA         7  
    #define UNDO_SEQUENCE_DATA        8  
    #define UNDO_TRACK_DATA        9  
    #define UNDO_OBJECT_NEW       10  
    #define UNDO_TAG_NEW        11  
    #define UNDO_KEY_NEW        12  
    #define UNDO_SEQUENCE_NEW        13  
    #define UNDO_TRACK_NEW       14  
    #define UNDO_MATERIAL_NEW      15  
    #define UNDO_OBJECT_DEL       17  
    #define UNDO_TAG_DEL        18  
    #define UNDO_KEY_DEL        19  
    #define UNDO_SEQUENCE_DEL        20  
    #define UNDO_TRACK_DEL       21  
    #define UNDO_MATERIAL_DEL        22  
    #define UNDO_OBJECT_ACTIVE       23  
    

...and in the R8.206 (and later) SDK ge_prepass.h file, I see these:

    
    
    
    
    #define UNDO_CHANGE       40  
    #define UNDO_CHANGE_NOCHILDS  41  
    #define UNDO_CHANGE_SMALL    42  
    #define UNDO_CHANGE_SELECTION  43  
                      
    #define UNDO_NEW        44  
    #define UNDO_DELETE       45  
                      
    #define UNDO_ACTIVATE      46  
    #define UNDO_DEACTIVATE     47  
    #define UNDO_TLACTIVATE     48  
    #define UNDO_TLDEACTIVATE    49  
    

...but I don't see the first group listed in the later files or the second group listed in the 7.3 file, so I assume the second (smaller) set of UNDO_ types replace the earlier ones?
Specifically, I'm mostly 'changing' the BaseSelect returned from op->GetPolygonS() and op->GetPointS()... so I'd use:

    
    
    
    
     BaseSelect *pSel = op->GetPolygonS();
    
    
    
    
     m_baseDoc->StartUndo();  
     if( pSel->GetCount() == 0 )  
     {  
      m_baseDoc->AddUndo(UNDO_CHANGE_SELECTION, pSel);  
      m_pUserSelected->SelectAll(0, op->GetPolygonCount()-1); // select all  
     }  
     do_other_stuff();  
     m_baseDoc->EndUndo();  
    

...?  My question in this case is related to the fact that I'm not really changing a 'Selection Tag' that's attached to the object, I'm making changes directly to the object's current selection.  Would I still use UNDO_CHANGE_SELECTION there?
Also, if I'm making changes to the UVW tag on an object, do I use UNDO_CHANGE?
Thanks,
Keith

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

On 20/08/2006 at 03:39, xxxxxxxx wrote:

...actually, I'm guessing that I should be using AddUndo(UNDO_CHANGE, op) for changes to the BaseSelect returned by op->GetPolygonS()... right?

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

On 20/08/2006 at 04:18, xxxxxxxx wrote:

Hey Keith,

Yes. UNDO_CHANGE_SELECTION is only for Editor selections. UNDO_CHANGE will store an undo for an object, including substructures - i.e.: tags. Nonetheless, best to verify that the undo covers the change of the tag's BaseSelect.