void HLCALLBACK buttonCB(HLenum event, HLuint object, HLenum thread, HLcache *cache, void *userdata) { if (event == HL_EVENT_1BUTTONDOWN) { HLuint spring = *((HLuint *) userdata); HDdouble anchor[3]; hlCacheGetDoublev(cache, HL_PROXY_POSITION, anchor); hlEffectd(HL_EFFECT_PROPERTY_GAIN, 0.8); hlEffectd(HL_EFFECT_PROPERTY_MAGNITUDE, 1.0); hlEffectdv(HL_EFFECT_PROPERTY_POSITION, anchor); hlStartEffect(HL_EFFECT_SPRING, spring); } else if (event == HL_EVENT_1BUTTONUP) { HLuint spring = *((HLuint *) userdata); hlStopEffect(spring); } else if (event == HL_EVENT_2BUTTONDOWN) { static const HDdouble direction[3] = { 0, 0, 1 }; static const HDdouble duration = 100; /* ms */ /* Trigger an impulse by commanding a force with a direction and magnitude for a small duration. */ hlEffectd(HL_EFFECT_PROPERTY_DURATION, duration); hlEffectd(HL_EFFECT_PROPERTY_MAGNITUDE, 0.8); hlEffectdv(HL_EFFECT_PROPERTY_DIRECTION, direction); hlTriggerEffect(HL_EFFECT_CONSTANT); } }
/******************************************************************************* Creates a spring upon button press. *******************************************************************************/ void HLCALLBACK buttonCB(HLenum event, HLuint object, HLenum thread, HLcache *cache, void *userdata) { if (event == HL_EVENT_1BUTTONDOWN) { HLuint spring = *((HLuint *) userdata); HDdouble anchor[3]; hlCacheGetDoublev(cache, HL_PROXY_POSITION, anchor); hlEffectd(HL_EFFECT_PROPERTY_GAIN, 0.8); hlEffectd(HL_EFFECT_PROPERTY_MAGNITUDE, 1.0); hlEffectdv(HL_EFFECT_PROPERTY_POSITION, anchor); hlStartEffect(HL_EFFECT_SPRING, spring); } else if (event == HL_EVENT_1BUTTONUP) { HLuint spring = *((HLuint *) userdata); hlStopEffect(spring); } }
//******************************************************************************* void ConstantForceEffect::renderProperties() { hlEffectd(HL_EFFECT_PROPERTY_MAGNITUDE, m_Magnitude); hlEffectdv(HL_EFFECT_PROPERTY_DIRECTION, m_Direction); }
//******************************************************************************* void SpringForceEffect::renderProperties() { hlEffectd(HL_EFFECT_PROPERTY_MAGNITUDE, m_Magnitude); hlEffectd(HL_EFFECT_PROPERTY_GAIN, m_Gain); hlEffectdv(HL_EFFECT_PROPERTY_POSITION, m_AnchorPosition); }