What does GeMarker do?
Helper last edited by
On 05/12/2013 at 08:21, xxxxxxxx wrote:
Cinema 4D Version: 13
Language(s) : C++ ;
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.
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?