WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Plug-in development (https://forum.worldviz.com/forumdisplay.php?f=8)
-   -   Multiple Copies of same sensor plugin (https://forum.worldviz.com/showthread.php?t=1346)

RedSpikeyThing 02-12-2008 12:29 PM

Multiple Copies of same sensor plugin
 
I'm trying to write a sensor for Vizard that simply regurgitates a text file of (x, y, z) positions whenever the update function is called. Internally, it uses a vector to keep track of which sensor is associated with which file. This works as expected with one sensor.
When a second sensor is added, however, no data is returned and Vizard simply gets (0, 0, 0). I've tried outputting the memory address of the sensor that is passed as a parameter to the DLS and it is always the same. This suggests that either Vizard is never calling the update function with the second sensor, or that it is calling it with a pointer to the same sensor. I should note that each sensor does call the initialize function properly and that two separate memory addresses are received when they are initialized.

Any help would be greatly appreciated. Thanks!

farshizzo 02-12-2008 02:06 PM

The UpdateSensor function is called once per frame, regardless of how many instances of your sensors have been created. You should store each sensor pointer in a global vector during initialization, then iterate through them in the UpdateSensor function. Here is some pseudo code that should explain the general idea:
Code:

typedef struct {
        VRUTSensorObj*                instance;
        SOME_OBJECT_HANDLE        handle;
} MySensor;

std::vector< MySensor > m_sensors;

void InitializeSensor(void *sensor)
{
        //Create internal sensor object
        MySensor ms;
        ms.instance = (VRUTSensorObj *)sensor);
        ms.handle = CREATE_OBJECT_HANDLE;

        //Save sensor number in user field
        ms.instance->user[0] = m_sensors.size();

        //Set data size
        ms.instance->dataSize = 7;

        //Notify successfull initialization
        ms.instance->status = TRUE;

        //Save object in global array
        m_sensors.push_back(ms);
}


void UpdateSensor(void *sensor)
{
        //Update 'data' field of all sensors
        for(unsigned int i = 0; i < m_sensors.size(); ++i) {
                GET_OBJECT_DATA(m_sensors[i].handle,m_sensors[i].instance->data);
        }
}

Let me know if anything is unclear.

RedSpikeyThing 02-12-2008 02:10 PM

beautiful, thank you for the quick reply. The lack of documentation for this is very frustrating...


All times are GMT -7. The time now is 01:58 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC