diff options
author | Benoit Bolsee <benoit.bolsee@online.be> | 2009-12-08 11:58:24 +0300 |
---|---|---|
committer | Benoit Bolsee <benoit.bolsee@online.be> | 2009-12-08 11:58:24 +0300 |
commit | d765068fca979efece01bf124141d4df56fca9ef (patch) | |
tree | d479a85fcfbee95432738a2f1c9348328d37cb24 | |
parent | 2318886f7029cef4c0890d3ae9c56b86cc49d7ad (diff) |
BGE: add hitUV property to mouse focus sensor to return UV coordinates under mouse pointer. Useful for texture painting. More details in PyDoc.
-rw-r--r-- | source/gameengine/Ketsji/KX_MouseFocusSensor.cpp | 16 | ||||
-rw-r--r-- | source/gameengine/Ketsji/KX_MouseFocusSensor.h | 7 | ||||
-rw-r--r-- | source/gameengine/PyDoc/GameTypes.py | 4 |
3 files changed, 26 insertions, 1 deletions
diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp index 2dbaf3c9081..110e3abd6d8 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp @@ -150,6 +150,7 @@ bool KX_MouseFocusSensor::RayHit(KX_ClientObjectInfo* client_info, KX_RayCast* r m_hitObject = hitKXObj; m_hitPosition = result->m_hitPoint; m_hitNormal = result->m_hitNormal; + m_hitUV = result->m_hitUV; return true; } @@ -284,7 +285,8 @@ bool KX_MouseFocusSensor::ParentObjectHasFocusCamera(KX_Camera *cam) KX_IPhysicsController* physics_controller = cam->GetPhysicsController(); PHY_IPhysicsEnvironment* physics_environment = m_kxscene->GetPhysicsEnvironment(); - KX_RayCast::Callback<KX_MouseFocusSensor> callback(this,physics_controller); + // get UV mapping + KX_RayCast::Callback<KX_MouseFocusSensor> callback(this,physics_controller,NULL,false,true); KX_RayCast::RayTest(physics_environment, m_prevSourcePoint, m_prevTargetPoint, callback); @@ -340,6 +342,11 @@ const MT_Vector3& KX_MouseFocusSensor::HitNormal() const return m_hitNormal; } +const MT_Vector2& KX_MouseFocusSensor::HitUV() const +{ + return m_hitUV; +} + #ifndef DISABLE_PYTHON /* ------------------------------------------------------------------------- */ @@ -380,6 +387,7 @@ PyAttributeDef KX_MouseFocusSensor::Attributes[] = { KX_PYATTRIBUTE_RO_FUNCTION("hitObject", KX_MouseFocusSensor, pyattr_get_hit_object), KX_PYATTRIBUTE_RO_FUNCTION("hitPosition", KX_MouseFocusSensor, pyattr_get_hit_position), KX_PYATTRIBUTE_RO_FUNCTION("hitNormal", KX_MouseFocusSensor, pyattr_get_hit_normal), + KX_PYATTRIBUTE_RO_FUNCTION("hitUV", KX_MouseFocusSensor, pyattr_get_hit_uv), KX_PYATTRIBUTE_BOOL_RW("usePulseFocus", KX_MouseFocusSensor,m_bTouchPulse), { NULL } //Sentinel }; @@ -428,6 +436,12 @@ PyObject* KX_MouseFocusSensor::pyattr_get_hit_normal(void *self_v, const KX_PYAT return PyObjectFrom(self->HitNormal()); } +PyObject* KX_MouseFocusSensor::pyattr_get_hit_uv(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef) +{ + KX_MouseFocusSensor* self= static_cast<KX_MouseFocusSensor*>(self_v); + return PyObjectFrom(self->HitUV()); +} + #endif // DISABLE_PYTHON /* eof */ diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.h b/source/gameengine/Ketsji/KX_MouseFocusSensor.h index e3f0e2b34f5..b107b54434b 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.h +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.h @@ -92,6 +92,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor const MT_Point3& RayTarget() const; const MT_Point3& HitPosition() const; const MT_Vector3& HitNormal() const; + const MT_Vector2& HitUV() const; #ifndef DISABLE_PYTHON @@ -106,6 +107,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor static PyObject* pyattr_get_hit_object(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_hit_position(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); static PyObject* pyattr_get_hit_normal(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); + static PyObject* pyattr_get_hit_uv(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef); #endif // DISABLE_PYTHON @@ -165,6 +167,11 @@ class KX_MouseFocusSensor : public SCA_MouseSensor MT_Vector3 m_hitNormal; /** + * UV texture coordinate of the hit point if any, (0,0) otherwise + */ + MT_Vector2 m_hitUV; + + /** * The KX scene that holds the camera. The camera position * determines a part of the start location of the picking ray. */ KX_Scene* m_kxscene; diff --git a/source/gameengine/PyDoc/GameTypes.py b/source/gameengine/PyDoc/GameTypes.py index 27b4685ca14..ba22dbd4e8f 100644 --- a/source/gameengine/PyDoc/GameTypes.py +++ b/source/gameengine/PyDoc/GameTypes.py @@ -2414,6 +2414,10 @@ class KX_MouseFocusSensor(SCA_MouseSensor): @type hitPosition: list (vector of 3 floats) @ivar hitNormal: the worldspace normal from the face at point of intersection. @type hitNormal: list (normalized vector of 3 floats) + @ivar hitUV: the UV coordinates at the point of intersection. + If the object has no UV mapping, it returns [0,0]. + The UV coordinates are not normalized, they can be < 0 or > 1 depending on the UV mapping. + @type hitUV: list (vector of 2 floats) @ivar usePulseFocus: When enabled, moving the mouse over a different object generates a pulse. (only used when the 'Mouse Over Any' sensor option is set) @type usePulseFocus: bool """ |