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