GetCentroid
Syntax
// // Strong typing definition // double GetCentroid( OwlInstance owlInstance, const void * vertexBuffer, const void * indexBuffer, double * centroid ); static inline double GetCentroid( OwlInstance owlInstance, double * centroid ) { const void * vertexBuffer = nullptr, * indexBuffer = nullptr; return GetCentroid( owlInstance, vertexBuffer, indexBuffer, centroid ); } // // Weak typing definition // double __declspec(dllexport) __stdcall GetCentroid( int64_t owlInstance, const void * vertexBuffer, const void * indexBuffer, double * centroid ); static inline double GetCentroid( int64_t owlInstance, double * centroid ) { const void * vertexBuffer = nullptr, * indexBuffer = nullptr; return GetCentroid( owlInstance, vertexBuffer, indexBuffer, centroid ); }
Property owlInstance
Size: 64 bit / 8 byte (value)Property vertexBuffer
Size: 32 bit / 4 byte (reference)Property indexBuffer
Size: 32 bit / 4 byte (reference)Property centroid
Size: 32 bit / 4 byte (reference)
Example (based on pure API calls)
Here you can find code snippits that show how the API call GetCentroid can be used.
#include "./include/engine.h" #include <assert.h> void main() { int64_t model = CreateModel(); if (model) { // // Classes // int64_t classBox = GetClassByName(model, "Box"); // // Datatype Properties (attributes) // int64_t propertyLength = GetPropertyByName(model, "length"), propertyWidth = GetPropertyByName(model, "width"), propertyHeight = GetPropertyByName(model, "height"); // // Instances (creating) // int64_t instanceBox = CreateInstance(classBox, nullptr); double length = 2.8, width = 1.3, height = 1.4; SetDatatypeProperty(instanceBox, propertyLength, &length, 1); SetDatatypeProperty(instanceBox, propertyWidth, &width, 1); SetDatatypeProperty(instanceBox, propertyHeight, &height, 1); // // Simple use of the derived information functions // double centroid[3], volume = GetCentroid(instanceBox, nullptr, nullptr, ¢roid); int64_t vertexBufferSize = 0, indexBufferSize = 0; CalculateInstance(instanceBox, &vertexBufferSize, &indexBufferSize, 0); if (vertexBufferSize && indexBufferSize) { float * vertexBuffer = new float[6 * vertexBufferSize]; UpdateInstanceVertexBuffer(instanceBox, vertexBuffer); int32_t * indexBuffer = new int32_t[indexBufferSize]; UpdateInstanceIndexBuffer(instanceBox, indexBuffer); // // Reuse knowledge to improve performance (in case of single precision, with less accuracy) // volume = GetCentroid(instanceBox, vertexBuffer, indexBuffer, ¢roid); } // // The resulting model can be viewed in 3D-Editor.exe // SaveModel(model, "c:\\created\\myFile.bin"); CloseModel(model); } }