SetObjectProperty
The value of card gives the actual card of the values list.
The list values of integers is a list of handles to instances, this list
has a length as given in the values card.
The return value always should be 0, if not something is wrong in the way this property is called.
Note: the client application needs to make sure the cardinality of
the property is within the boundaries.
Syntax
// // Strong typing definition // int64_t SetObjectProperty( OwlInstance owlInstance, OwlObjectProperty owlObjectProperty, const OwlInstance * values, int64_t card ); static inline int64_t SetObjectProperty( OwlInstance owlInstance, OwlObjectProperty owlObjectProperty, OwlInstance value ) { assert(GetPropertyType(owlObjectProperty) == OBJECTPROPERTY_TYPE); const int64_t card = 1; return SetObjectProperty( owlInstance, owlObjectProperty, (const OwlInstance*) &value, card ); } // // Weak typing definition // int64_t __declspec(dllexport) __stdcall SetObjectProperty( int64_t owlInstance, int64_t owlObjectProperty, const int64_t * values, int64_t card ); static inline int64_t SetObjectProperty( int64_t owlInstance, int64_t owlObjectProperty, int64_t value ) { assert(GetPropertyType(owlObjectProperty) == OBJECTPROPERTY_TYPE); const int64_t card = 1; return SetObjectProperty( owlInstance, owlObjectProperty, (const OwlInstance*) &value, card ); }
Property owlInstance
Size: 64 bit / 8 byte (value)Property owlObjectProperty
Size: 64 bit / 8 byte (value)Property values
Size: 64 bit / 8 byte (reference)Property card
Size: 64 bit / 8 byte (value)
Example (based on pure API calls)
Here you can find code snippits that show how the API call SetObjectProperty can be used.
#include "./include/engine.h" #include <stdio.h> #include <string.h> int64_t model = CreateModel(); if (model) { // // Classes // int64_t classAbcd = CreateClass(model, "ABCD"); // // Object Properties (relations) // int64_t propertyAb = CreateProperty(model, OBJECTPROPERTY_TYPE, "Ab"); // // Instances // int64_t instanceAbcdI = CreateInstance(classAbcd, nullptr), instanceAbcdII = CreateInstance(classAbcd, nullptr); // // Set Properties // { SetObjectProperty(instanceAbcdI, propertyAb, &instanceAbcdII, 1); int64_t valuesAb[3] = { instanceAbcdI, instanceAbcdII, instanceAbcdI }; SetObjectProperty(instanceAbcdII, propertyAb, valuesAb, 3); } // // Get Properties // { int64_t card = 0, * values = nullptr; GetObjectProperty(instanceAbcdI, propertyAb, &values, &card); assert(card == 1 && values[0] == instanceAbcdII); } { int64_t card = 0, * values = nullptr; GetObjectProperty(instanceAbcdII, propertyAb, &values, &card); assert(card == 3 && values[0] == instanceAbcdI && values[1] == instanceAbcdII && values[2] == instanceAbcdI); } // // The same can be applied to existing classes and properties // // // Classes // int64_t classCollection = GetClassByName(model, "Collection"), classCube = GetClassByName(model, "Cube"); // // Object Properties (relations) // int64_t propertyObjects = GetPropertyByName(model, "objects"); // // Datatype Properties (attributes) // int64_t propertyLength = GetPropertyByName(model, "length"); // // Instances (creating) // int64_t instanceCollectionI = CreateInstance(classCollection, nullptr), instanceCollectionII = CreateInstance(classCollection, nullptr), instanceCube = CreateInstance(classCube, nullptr); double length = 1.0; SetDatatypeProperty(instanceCube, propertyLength, &length, 1); int64_t values[3] = { instanceCollectionII, instanceCube, instanceCube }; SetObjectProperty(instanceCollectionI, propertyObjects, values, 3); SetObjectProperty(instanceCollectionII, propertyObjects, &instanceCube, 1); // // CollectionI contains 3 cubes and CollectionII contains 1 cube // assert(GetVolume(instanceCollectionI, nullptr, nullptr) == 3); assert(GetVolume(instanceCollectionII, nullptr, nullptr) == 1); // // The resulting model can be viewed in 3D-Editor.exe // SaveModel(model, "c:\\created\\myFile.bin"); CloseModel(model); }