Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Szepe <HG1_public@gmx.net>2015-04-11 17:16:46 +0300
committerThomas Szepe <HG1_public@gmx.net>2015-04-11 17:17:07 +0300
commit87b6d3c7960461249e80c4c8c304cfc968c6586c (patch)
tree336bd2dfc3b85652b978723c459801630e9a96ab
parentb329016b29c3189e23bafebbe984008dae0d60a2 (diff)
BGE: Add keyword arguments to createConstraint API
Added keyword arguments to createConstraint. Changed initial values for the pivod XYZ form 1 to 0.0. Changed initial values for the axis Z form 1 to 0.0. Delete the parsing for 4 parameters, because parsing only the X pivot is not necessary, also it was not working correctly (int instead of float). Reviewers: brita_, sybren, lordloki, campbellbarton, moguri Reviewed By: lordloki, campbellbarton Subscribers: campbellbarton Differential Revision: https://developer.blender.org/D705
-rw-r--r--doc/python_api/rst/bge.constraints.rst32
-rw-r--r--source/gameengine/Ketsji/KX_PyConstraintBinding.cpp89
2 files changed, 45 insertions, 76 deletions
diff --git a/doc/python_api/rst/bge.constraints.rst b/doc/python_api/rst/bge.constraints.rst
index 018be96fd14..636a66273e8 100644
--- a/doc/python_api/rst/bge.constraints.rst
+++ b/doc/python_api/rst/bge.constraints.rst
@@ -11,14 +11,14 @@ Physics Constraints (bge.constraints)
.. literalinclude:: ../examples/bge.constraints.py
:lines: 6-
-.. function:: createConstraint(physicsid, physicsid2, constrainttype, [pivotX, pivotY, pivotZ, [axisX, axisY, axisZ, [flag]]]])
+.. function:: createConstraint(physicsid_1, physicsid_2, constraint_type, pivot_X, pivot_y, pivot_z, axis_x, axis_y, axis_z, flag)
Creates a constraint.
- :arg physicsid: the physics id of the first object in constraint
+ :arg physicsid_1: the physics id of the first object in constraint
:type physicsid: int
- :arg physicsid2: the physics id of the second object in constraint
+ :arg physicsid_2: the physics id of the second object in constraint
:type physicsid2: int
:arg constrainttype: the type of the constraint. The constraint types are:
@@ -32,26 +32,26 @@ Physics Constraints (bge.constraints)
:type constrainttype: int
- :arg pivotX: pivot X position
- :type pivotX: float
+ :arg pivot_X: pivot X position
+ :type pivot_X: float (optional)
- :arg pivotY: pivot Y position
- :type pivotY: float
+ :arg pivot_Y: pivot Y position
+ :type pivot_Y: float (optional)
- :arg pivotZ: pivot Z position
- :type pivotZ: float
+ :arg pivot_Z: pivot Z position
+ :type pivot_Z: float (optional)
- :arg axisX: X axis
- :type axisX: float
+ :arg axis_X: X axis angle in degrees
+ :type axis_X: float (optional)
- :arg axisY: Y axis
- :type axisY: float
+ :arg axis_Y: Y axis angle in degrees
+ :type axis_Y: float (optional)
- :arg axisZ: Z axis
- :type axisZ: float
+ :arg axis_Z: Z axis angle in degrees
+ :type axis_Z: float (optional)
:arg flag: 128 to disable collision between linked bodies
- :type flag: int
+ :type flag: int (optional)
.. attribute:: error
diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
index 94f5064261f..77453916e44 100644
--- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
+++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
@@ -496,78 +496,47 @@ static PyObject *gPyCreateConstraint(PyObject *self,
{
/* FIXME - physicsid is a long being cast to a pointer, should at least use PyCapsule */
unsigned long long physicsid = 0, physicsid2 = 0;
- int constrainttype=0, extrainfo=0;
+ int constrainttype = 0;
int len = PyTuple_Size(args);
- int success = 1;
int flag = 0;
+ float pivotX = 0.0f, pivotY = 0.0f, pivotZ = 0.0f, axisX = 0.0f, axisY = 0.0f, axisZ = 0.0f;
- float pivotX=1,pivotY=1,pivotZ=1,axisX=0,axisY=0,axisZ=1;
- if (len == 3)
- {
- success = PyArg_ParseTuple(args, "KKi", &physicsid, &physicsid2, &constrainttype);
- }
- else if (len == 6)
- {
- success = PyArg_ParseTuple(args, "KKifff", &physicsid, &physicsid2, &constrainttype,
- &pivotX, &pivotY, &pivotZ);
- }
- else if (len == 9)
- {
- success = PyArg_ParseTuple(args, "KKiffffff", &physicsid, &physicsid2, &constrainttype,
- &pivotX, &pivotY, &pivotZ, &axisX, &axisY, &axisZ);
- }
- else if (len == 10)
- {
- success = PyArg_ParseTuple(args, "KKiffffffi", &physicsid, &physicsid2, &constrainttype,
- &pivotX, &pivotY, &pivotZ, &axisX, &axisY, &axisZ, &flag);
- }
+ static const char *kwlist[] = {"physicsid_1", "physicsid_2", "constraint_type", "pivot_x", "pivot_y", "pivot_z",
+ "axis_X", "axis_y", "axis_z", "flag", NULL};
- /* XXX extrainfo seems to be nothing implemented. right now it works as a pivot with [X,0,0] */
- else if (len == 4)
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "KKi|ffffffi:createConstraint", (char **)kwlist,
+ &physicsid, &physicsid2, &constrainttype,
+ &pivotX, &pivotY, &pivotZ, &axisX, &axisY, &axisZ, &flag))
{
- success = PyArg_ParseTuple(args,"KKii", &physicsid, &physicsid2, &constrainttype, &extrainfo);
- pivotX=extrainfo;
+ return NULL;
}
- if (success)
- {
- if (PHY_GetActiveEnvironment())
- {
-
- PHY_IPhysicsController* physctrl = (PHY_IPhysicsController*) physicsid;
- PHY_IPhysicsController* physctrl2 = (PHY_IPhysicsController*) physicsid2;
- if (physctrl) //TODO:check for existence of this pointer!
- {
- int constraintid =0;
-
- //convert from euler angle into axis
- float radsPerDeg = 6.283185307179586232f / 360.f;
+ if (PHY_GetActiveEnvironment()) {
+ PHY_IPhysicsController *physctrl = (PHY_IPhysicsController*)physicsid;
+ PHY_IPhysicsController *physctrl2 = (PHY_IPhysicsController*)physicsid2;
+ if (physctrl) { //TODO:check for existence of this pointer!
+ //convert from euler angle into axis
+ const float deg2rad = 0.017453292f;
- //we need to pass a full constraint frame, not just axis
- //localConstraintFrameBasis
- MT_Matrix3x3 localCFrame(MT_Vector3(radsPerDeg*axisX,radsPerDeg*axisY,radsPerDeg*axisZ));
- MT_Vector3 axis0 = localCFrame.getColumn(0);
- MT_Vector3 axis1 = localCFrame.getColumn(1);
- MT_Vector3 axis2 = localCFrame.getColumn(2);
+ //we need to pass a full constraint frame, not just axis
+ //localConstraintFrameBasis
+ MT_Matrix3x3 localCFrame(MT_Vector3(deg2rad*axisX, deg2rad*axisY, deg2rad*axisZ));
+ MT_Vector3 axis0 = localCFrame.getColumn(0);
+ MT_Vector3 axis1 = localCFrame.getColumn(1);
+ MT_Vector3 axis2 = localCFrame.getColumn(2);
- constraintid = PHY_GetActiveEnvironment()->CreateConstraint(physctrl,physctrl2,(enum PHY_ConstraintType)constrainttype,
- pivotX,pivotY,pivotZ,
- (float)axis0.x(),(float)axis0.y(),(float)axis0.z(),
- (float)axis1.x(),(float)axis1.y(),(float)axis1.z(),
- (float)axis2.x(),(float)axis2.y(),(float)axis2.z(),flag);
+ int constraintid = PHY_GetActiveEnvironment()->CreateConstraint(
+ physctrl, physctrl2, (enum PHY_ConstraintType)constrainttype, pivotX, pivotY, pivotZ,
+ (float)axis0.x(), (float)axis0.y(), (float)axis0.z(),
+ (float)axis1.x(), (float)axis1.y(), (float)axis1.z(),
+ (float)axis2.x(), (float)axis2.y(), (float)axis2.z(), flag);
- KX_ConstraintWrapper* wrap = new KX_ConstraintWrapper((enum PHY_ConstraintType)constrainttype,constraintid,PHY_GetActiveEnvironment());
+ KX_ConstraintWrapper *wrap = new KX_ConstraintWrapper(
+ (enum PHY_ConstraintType)constrainttype, constraintid, PHY_GetActiveEnvironment());
- return wrap->NewProxy(true);
- }
-
-
+ return wrap->NewProxy(true);
}
}
- else {
- return NULL;
- }
-
Py_RETURN_NONE;
}
@@ -680,7 +649,7 @@ static struct PyMethodDef physicsconstraints_methods[] = {
{"createConstraint",(PyCFunction) gPyCreateConstraint,
- METH_VARARGS, (const char *)gPyCreateConstraint__doc__},
+ METH_VARARGS|METH_KEYWORDS, (const char *)gPyCreateConstraint__doc__},
{"getVehicleConstraint",(PyCFunction) gPyGetVehicleConstraint,
METH_VARARGS, (const char *)gPyGetVehicleConstraint__doc__},