SetBehavior

This function sets the type of behavior, by setting a mask

  bit 0-7:  Reserved, by default 0

  bit 8:
    0  Do not optimize
    1  Vertex items returned as double (8 byte/64 bit)

  bit 9-31:  Reserved, by default 0

  bit 32-63:  Reserved, by default 0

Note: default setting is 0000 0000 0000 0000 0000 0000 0000 0000 - 0000 0000 0000 0000 0000 0001 0000 0000 = h0000 0000 - 0000 0100 = 256

Syntax

//
//   Strong typing definition
//
void            SetBehavior(
                        OwlModel                model,
                        uint64_t                setting,
                        uint64_t                mask
                    );


//
//   Weak typing definition
//
void    __declspec(dllexport) __stdcall SetBehavior(
                                                int64_t                 model,
                                                uint64_t                setting,
                                                uint64_t                mask
                                            );
    

Property model

Size: 64 bit / 8 byte (value)
The handle to the model. The model handle is static during its existance. Several models can be opened simultaniously within one session. Different models are always independent, threads are allowed to be running on different models simultaniously.

Property setting

Size: 64 bit / 8 byte (value)
The setting is the data that is defined for bitwise operations, only bits set in the mask will be relevant.

Property mask

Size: 64 bit / 8 byte (value)
This mask or bitmask is data that is used for bitwise operations, i.e. the bits set in the mask are the bits affected in the setting or return value.

Example (based on pure API calls)

Here you can find code snippits that show how the API call SetBehavior can be used.

#include    "./include/engine.h"

static  const   uint64_t    flagbit0 = 1;                           // 2^^0                          0000.0000..0000.0001
static  const   uint64_t    flagbit1 = 2;                           // 2^^1                          0000.0000..0000.0010
static  const   uint64_t    flagbit2 = 4;                           // 2^^2                          0000.0000..0000.0100
static  const   uint64_t    flagbit3 = 8;                           // 2^^3                          0000.0000..0000.1000

static  const   uint64_t    flagbit4 = 16;                          // 2^^4                          0000.0000..0001.0000
static  const   uint64_t    flagbit5 = 32;                          // 2^^5                          0000.0000..0010.0000
static  const   uint64_t    flagbit6 = 64;                          // 2^^6                          0000.0000..0100.0000
static  const   uint64_t    flagbit7 = 128;                         // 2^^7                          0000.0000..1000.0000

static  const   uint64_t    flagbit8 = 256;                         // 2^^8                          0000.0001..0000.0000
static  const   uint64_t    flagbit9 = 512;                         // 2^^9                          0000.0010..0000.0000
static  const   uint64_t    flagbit10 = 1024;                       // 2^^10                         0000.0100..0000.0000
static  const   uint64_t    flagbit11 = 2048;                       // 2^^11                         0000.1000..0000.0000

static  const   uint64_t    flagbit12 = 4096;                       // 2^^12                         0001.0000..0000.0000
static  const   uint64_t    flagbit13 = 8192;                       // 2^^13                         0010.0000..0000.0000
static  const   uint64_t    flagbit14 = 16384;                      // 2^^14                         0100.0000..0000.0000
static  const   uint64_t    flagbit15 = 32768;                      // 2^^15                         1000.0000..0000.0000

static  const   uint64_t    flagbit16 = 65536;                      // 2^^16   0000.0000..0000.0001  0000.0000..0000.0000
static  const   uint64_t    flagbit17 = 131072;                     // 2^^17   0000.0000..0000.0010  0000.0000..0000.0000
static  const   uint64_t    flagbit18 = 262144;                     // 2^^18   0000.0000..0000.0100  0000.0000..0000.0000
static  const   uint64_t    flagbit19 = 524288;                     // 2^^19   0000.0000..0000.1000  0000.0000..0000.0000

static  const   uint64_t    flagbit20 = 1048576;                    // 2^^20   0000.0000..0001.0000  0000.0000..0000.0000
static  const   uint64_t    flagbit21 = 2097152;                    // 2^^21   0000.0000..0010.0000  0000.0000..0000.0000
static  const   uint64_t    flagbit22 = 4194304;                    // 2^^22   0000.0000..0100.0000  0000.0000..0000.0000
static  const   uint64_t    flagbit23 = 8388608;                    // 2^^23   0000.0000..1000.0000  0000.0000..0000.0000

static  const   uint64_t    flagbit24 = 16777216;                   // 2^^24   0000.0001..0000.0000  0000.0000..0000.0000
static  const   uint64_t    flagbit25 = 33554432;                   // 2^^25   0000.0010..0000.0000  0000.0000..0000.0000
static  const   uint64_t    flagbit26 = 67108864;                   // 2^^26   0000.0100..0000.0000  0000.0000..0000.0000
static  const   uint64_t    flagbit27 = 134217728;                  // 2^^27   0000.1000..0000.0000  0000.0000..0000.0000

static  const   uint64_t    flagbit28 = 268435456;                  // 2^^28   0001.0000..0000.0000  0000.0000..0000.0000
static  const   uint64_t    flagbit29 = 536870912;                  // 2^^29   0010.0000..0000.0000  0000.0000..0000.0000
static  const   uint64_t    flagbit30 = (uint64_t) 1073741824;      // 2^^30   0100.0000..0000.0000  0000.0000..0000.0000
static  const   uint64_t    flagbit31 = (uint64_t) 2147483648;      // 2^^31   1000.0000..0000.0000  0000.0000..0000.0000

...

int64_t model = CreateModel();

if (model) {
    {
        //
        //  Initializing the mask with all possible options
        //
        int64_t setting = 0,
                mask = GetBehavior(0, 0);

        setting += 1 * flagbit8;        //    OFF / ON REMOVE ZERO VOLUME SOLIDS DURING PROCESSING

        setting += 0 * flagbit10;       //    OFF / ON INTEGRATE SEMANTIC GLOBAL POSITIONING (ONLY RELEVANT WHEN EMBEDDED IN STEP LIBRARY)
        setting += 0 * flagbit11;       //    OFF / ON FORCE CALCULATING WIREFRAME FOR CONCEPTUAL FACES IN NON-TRIVIAL CASES
        setting += 0 * flagbit12;       //    OFF / ON REMOVE DOUBLE LINING IN WIREFRAME (WILL SET BIT14 IN SETFORMAT)

        setting += 0 * flagbit29;       //    OFF / ON CREATE TRIANGLES WITH AREA ZERO (FOR CONSISTENCY)

        SetBehavior(model, setting, mask);
    }

    //
    //  Check if a certain option is set
    //
    if (GetBehavior(model, flagbit8)) {
        //  Zero Volume solids are removed when found during processing
    }
    else {
        //  Zero Volume solids are kept when found during processing
    }

    if (GetBehavior(model, flagbit29)) {
        //  Triangles with zero area are kept for consistancy
    }
    else {
        //  Triangles with zero area are removed
    }

    {
        //
        //  Get all set options
        //
        int64_t setting = GetBehavior(model, GetBehavior(0, 0));

        if (setting & flagbit8) {
            //  Zero Volume solids are removed when found during processing
        }
        else {
            //  Zero Volume solids are kept when found during processing
        }

        if (setting & flagbit29) {
            //  Triangles with zero area are kept for consistancy
        }
        else {
            //  Triangles with zero area are removed
        }
    }
}