Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
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