Exemple #1
0
//-------------------------------------------------------------------------------------
PyObject* ScriptVector3::__py_pyFlatDistSqrTo(PyObject* self, PyObject* args)
{
	if (PyTuple_Size(args) != 1)
	{
		PyErr_SetString(PyExc_TypeError, "args > 1 is error!\n");
		PyErr_PrintEx(0);
		S_Return;
	}
	
	PyObject* pyVal = PyTuple_GET_ITEM(args, 0);
	if(!check(pyVal))
	{
		S_Return;
	}

	ScriptVector3* sv = static_cast<ScriptVector3*>(self);
	Vector3& v = sv->getVector();
	
	Vector3 v1;
	convertPyObjectToVector3(v1, pyVal);
	
	float x = v.x - v1.x;
	float z = v.z - v1.z;
	return PyFloat_FromDouble(x*x + z*z);
}
Exemple #2
0
//-------------------------------------------------------------------------------------
PyObject* ScriptVector3::py_subtract(PyObject *a, PyObject *b)
{
	if(!check(a) || !check(b))
	{
		PyErr_Clear();
		Py_INCREF(Py_NotImplemented);
		return Py_NotImplemented;
	}
	
	Vector3 av;
	Vector3 bv;

	convertPyObjectToVector3(av, a);
	convertPyObjectToVector3(bv, b);
	return new ScriptVector3(av - bv);
}
Exemple #3
0
//-------------------------------------------------------------------------------------
PyObject* ScriptVector3::__py_pySet(PyObject* self, PyObject* args)
{
	ScriptVector3* sv = static_cast<ScriptVector3*>(self);
	bool good = false;
	Vector3 v;

	// 如果参数只有1个元素
	int tupleSize = (int)PyTuple_Size(args);
	if(tupleSize == 1)
	{
		PyObject* pyItem = PyTuple_GetItem(args, 0);

		if(ScriptVector3::check(pyItem, false))
		{
			convertPyObjectToVector3(v, pyItem);
			good = true;
		}
		else
		{
			float f = float(PyFloat_AsDouble(pyItem));
			for (int i=0; i < VECTOR_SIZE; ++i)
			{
				v[i] = f;
			}
			good = true;
		}
	}
	else if(tupleSize >= VECTOR_SIZE)
	{
		convertPyObjectToVector3(v, args);
		good = true;
	}

	if(!good)
	{
		PyErr_Format(PyExc_TypeError, "Vector.set must be set to a tuple of %d floats, or one float", VECTOR_SIZE);
		PyErr_PrintEx(0);
		return NULL;
	}

	sv->setVector(v);
	S_Return;
}
Exemple #4
0
//-------------------------------------------------------------------------------------
PyObject* ScriptVector3::py_divide(PyObject *a, PyObject *b)
{
	if(!check(a))
	{
		PyErr_Clear();
		Py_INCREF(Py_NotImplemented);
		return Py_NotImplemented;
	}

	Vector3 av;
	convertPyObjectToVector3(av, a);
	float f = float(PyFloat_AsDouble(b));
	return new ScriptVector3(av / f);
}
Exemple #5
0
//-------------------------------------------------------------------------------------
PyObject* ScriptVector3::__py_pyFlatDistTo(PyObject* self, PyObject* args)
{
	if (PyTuple_Size(args) != 1)
	{
		PyErr_SetString(PyExc_TypeError, "args > 1 is error!\n");
		PyErr_PrintEx(0);
		S_Return;
	}
	
	ScriptVector3* sv = static_cast<ScriptVector3*>(self);
	Vector3& v = sv->getVector();
	
	Vector3 v1;
	convertPyObjectToVector3(v1, PyTuple_GET_ITEM(args, 0));
	return PyFloat_FromDouble(KBEVec3CalcVec2Length(v, v1));
}
Exemple #6
0
//-------------------------------------------------------------------------------------
PyObject* ScriptVector3::py_inplace_subtract(PyObject *self, PyObject *b)
{
	if(!check(b))
	{
		PyErr_Clear();
		Py_INCREF(Py_NotImplemented);
		return Py_NotImplemented;
	}
	
	Vector3 bv;
	convertPyObjectToVector3(bv, b);
	ScriptVector3* sv = static_cast<ScriptVector3*>(self);
	Vector3& v = sv->getVector();
	v -= bv;
	Py_INCREF(sv);
	return sv;
}
Exemple #7
0
//-------------------------------------------------------------------------------------
PyObject* ScriptVector3::__py_pyDistSqrTo(PyObject* self, PyObject* args)
{
	if (PyTuple_Size(args) != 1)
	{
		PyErr_SetString(PyExc_TypeError, "args > 1 is error!\n");
		PyErr_PrintEx(0);
		S_Return;
	}
	
	PyObject* pyVal = PyTuple_GET_ITEM(args, 0);
	if(!check(pyVal))
	{
		S_Return;
	}

	ScriptVector3* sv = static_cast<ScriptVector3*>(self);
	Vector3& v = sv->getVector();
	
	Vector3 v1;
	convertPyObjectToVector3(v1, pyVal);
	
	Vector3 rv = (v - v1);
	return PyFloat_FromDouble(KBEVec3LengthSq(&rv)); //计算点乘并返回
}
Exemple #8
0
//-------------------------------------------------------------------------------------
PyObject* ScriptVector3::py_inplace_multiply(PyObject *self, PyObject *b)
{
	ScriptVector3* sv = static_cast<ScriptVector3*>(self);
	Vector3& v = sv->getVector();
	
	if (check(b, false))
	{
		Vector3 bv;
		convertPyObjectToVector3(bv, b);
	
		// 叉乘
		v.x = (v.y * bv.z) - (v.z * bv.y);
		v.y = (v.z * bv.x) - (v.x * bv.z);
		v.z = (v.x * bv.y) - (v.y * bv.x);
	}
	else
	{
		float f = float(PyFloat_AsDouble(b));
		v *= f;
	}

	Py_INCREF(sv);
	return sv;
}