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).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 05/01/2008 at 18:27, xxxxxxxx wrote:
User Information: Cinema 4D Version: 10.5 Platform: Language(s) : C.O.F.F.E.E ;
--------- Hi,
I have a function which should only be executed if a Polygonobject or a Primitive (Cube, sphere, cyl, ...) is selected.
So I created another function which analyses an object. Here it is:
> _ > AnalyseObject( obj ) { > var arr = new(array, 17); > > arr[0] = 5159; // Cube > arr[1] = 5160; // Sphere > arr[2] = 5162; // Cone > arr[3] = 5170; // Cylinder > arr[4] = 5174; // Polygon > arr[5] = 5168; // Plane > arr[6] = 5164; // ... > arr[7] = 5167; > arr[8] = 5171; > arr[9] = 5172; > arr[10] = 5161; > arr[11] = 5163; > arr[12] = 5165; > arr[13] = 5169; > arr[14] = 5166; > arr[15] = 5173; > arr[16] = 5100; // PolygoneObject > > var i = 0; > while (i < 17) { > if (arr _== obj- >GetType()) return obj; > i++; > } > println("NOT WHAT I WANT"); > return NULL; > } > _
Now my question: Isn't there a faster way in COFFEE?
On 05/01/2008 at 18:36, xxxxxxxx wrote:
I think that's about it. There is no general categorization of object types (say, to see if an object is a primitive type). You can't even use class derivation to check a general category, say, of your own plugin objects all derived from your base plugin object:
class MyPluginObject : ObjectData {} // ID_MYPLUGINOBJECT class DerivedObj1 : MyPluginObject {} // ID_DERIVEDOBJ1 class DerivedObj2 : MyPluginObject {} // ID_DERIVEDOBJ2 etc.
To check if the object is any of these, you can't check:
if (obj->IsInstanceOf(ID_MYPLUGINOBJECT)) ...
or even
if (obj->IsInstanceOf(Obase)) // surprise, your object isn't an object!
This will fail for DerivedObj1 and DerivedObj2 - sad huh? So, you have to check for each case individually:
if (obj->IsInstanceOf(ID_DERIVEDOBJ1) || obj->IsInstanceOf(ID_DERIVEDOBJ2) || etc.) ...
This may be C++ but the situation is the same with COFFEE. Unfortunately, the way that C4D instances work, using C++ class derivation tactics can't be employed.
On 06/01/2008 at 04:54, xxxxxxxx wrote:
Oh, ok, yes this is sad...
What would be a better approach? Iterrating through an array like in my example (supposing the array is already full), or writing all in a single if condition? Would there be a speed gain with the 'if'?
On 06/01/2008 at 05:55, xxxxxxxx wrote:
Quote: _What would be a better approach? Iterrating through an array like in my example (supposing the array is already full), or writing all in a single if condition? Would there be a speed gain with the 'if'? > > * * * _
Just use the switch statement and GetType(). Little example:
> _ > var type = op- >GetType(); > > switch(type) > { > case Opolygon: > println("polygon"); > break; > case Ocube: > println("cube"); > break; > default: > println("none of these"); > break; > } > _
cheers, Matthias
On 06/01/2008 at 09:00, xxxxxxxx wrote:
I agree with Matthias that this is the best way to go. Simply replace the array/loop with the switch in your AnalyzeObject() method.
The 'Oxxxx' types are delineated in the coffeesymbols.h file
On 06/01/2008 at 18:07, xxxxxxxx wrote:
Ok, thank you. I'm going to take a look into the coffeesymbols.h file.