What does GeMarker do?



  • On 05/12/2013 at 08:21, xxxxxxxx wrote:

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

    ---------
    Hi,
    I'm trying to figure out just what the heck the GeMarker class does.
    The results I'm getting aren't  making any sense to me.

    Example:
    In this test. I create two of the same objects(two cubes, two spheres, etc..).
    Then run the code below to compare their markers

        BaseObject *obj = doc->GetFirstObject();  
      if(!obj) return FALSE;  
      BaseObject *next = obj->GetNext();  
      if(!obj) return FALSE;  
      
      const GeMarker &objM = obj->GetMarker();  
      const GeMarker &nextM = next->GetMarker();  
      
      //Check if the markers have content in them  
      Bool objEmpty = objM.Content();  
      Bool nextEmpty = nextM.Content();  
      
      //Check if the two markers are equal  
      Bool eql = objM.IsEqual(nextM);  
      GePrint("obj&next Markers Equal? = " + LongToString(eql));  
      
      //Compare the two markers(works like memcmp)  
      LONG comp = objM.Compare(nextM);  
      GePrint("Compare the obj&next Markers = " + LongToString(comp));
    

    The result of this code is that no two objects are ever "equal". Which I think I understand.
    But the results of the Compare() function are sometimes true, and sometimes false!?
    What is it about certain objects that makes them return different true or false results like that?

    //None of these are "equal"  
    //However...When using the Compare() function on them. Some are true and some are false! Why?  
      
    //Cylinder   compare = true  
    //Disc       compare = true  
    //Plane      compare = true  
    //polygon    compare = true  
    //Oil Tank   compare = true  
      
    //Cone       compare = false  
    //Cube       compare = false  
    //Capsule    compare = false  
    //Figure     compare = false  
    //Landscape  compare = false  
    //Platonic   compare = false  
    //Pyramid    compare = false  
    //Relief     compare = false  
    //Sphere     compare = false  
    //Torus      compare = false  
    //Tube       compare = false
    

    To make two objects return true using IsEqual() function.
    The only way I can do it is by creating a brand new marker. Then setting it to the same marker value of another object.

        //Create a new empty marker from scratch  
      AutoAlloc<GeMarker> myMarker;  
      
      //Make the new marker the same as the objM marker  
      myMarker->Set(objM);  
      Bool eql2 = objM.IsEqual(myMarker);  
      LONG comp2 = objM.Compare(nextM);  
      GePrint("New Marker Equal to obj Marker? = " + LongToString(eql2));  
      GePrint("New Marker Compare = " + LongToString(comp2));
    

    Is there any way to make two objects have the same marker value without creating a new one from scratch?

    Why do I even care about these markers?
    What purpose do they serve in the grand scheme of things?

    -ScottA


Log in to reply