Exemplo n.º 1
0
static PyObject*
nb_subtract (PyObject* o1, PyObject* o2) {
    float o1w = 0, o1h = 0, o1d = 0;
    float o2w = 0, o2h = 0, o2d = 0;
    PyObject *args, *result;
    PySoy_atoms_Size_Object *so1, *so2;

    //* parse object attributes
    if (!PySoy_atoms_Size_Check(o1) || !PySoy_atoms_Size_Check(o2)) {
        PyErr_SetString(PyExc_TypeError, "unsupported operand type(s)");
        return NULL;
    }

    so1 = (PySoy_atoms_Size_Object*)o1;
    o1w = soy_atoms_size_get_width(so1->g);
    o1h = soy_atoms_size_get_height(so1->g);
    o1d = soy_atoms_size_get_depth(so1->g);

    so2 = (PySoy_atoms_Size_Object*)o2;
    o2w = soy_atoms_size_get_width(so2->g);
    o2h = soy_atoms_size_get_height(so2->g);
    o2d = soy_atoms_size_get_depth(so2->g);

    // build args with calculated values
    args = Py_BuildValue("((fff))", o1w - o2w, o1h - o2h, o1d - o2d);

    // create result object
    result = tp_new(&PySoy_atoms_Size_Type, args, NULL);

    // decref args tuple and tmp
    Py_DECREF(args);

    // return calculated result
    return result;
}
Exemplo n.º 2
0
static PyObject*
nb_multiply (PyObject* o1, PyObject* o2) {
    float o1w = 0, o1h = 0, o1d = 0;
    float o2w = 0, o2h = 0, o2d = 0;
    PyObject *args, *result;
    PySoy_atoms_Size_Object *so1, *so2;

    // parse object 1
    if (PyLong_Check(o1)) {
        o1w = o1h = o1d = PyLong_AsDouble(o1);
    }
    else if (PyFloat_Check(o1)) {
        o1w = o1h = o1d = PyFloat_AsDouble(o1);
    }
    else if (PySoy_atoms_Size_Check(o1)) {
        so1 = (PySoy_atoms_Size_Object*)o1;
        o1w = soy_atoms_size_get_width(so1->g);
        o1h = soy_atoms_size_get_height(so1->g);
        o1d = soy_atoms_size_get_depth(so1->g);
    }
    else {
        PyErr_SetString(PyExc_TypeError, "unsupported operand type(s)");
        return NULL;
    }

    // parse object 2
    if (PyLong_Check(o2)) {
        o2w = o2h = o2d = PyLong_AsDouble(o2);
    }
    else if (PyFloat_Check(o2)) {
        o2w = o2h = o2d = PyFloat_AsDouble(o2);
    }
    else if (PySoy_atoms_Size_Check(o2)) {
        so2 = (PySoy_atoms_Size_Object*)o2;
        o2w = soy_atoms_size_get_width(so2->g);
        o2h = soy_atoms_size_get_height(so2->g);
        o2d = soy_atoms_size_get_depth(so2->g);
    } else {
        PyErr_SetString(PyExc_TypeError, "unsupported operand type(s)");
        return NULL;
    }

    // build args with calculated values
    args = Py_BuildValue("((fff))", o1w * o2w, o1h * o2h, o1d * o2d);

    // create result object
    result = tp_new(&PySoy_atoms_Size_Type, args, NULL);

    // decref args tuple and tmp
    Py_DECREF(args);

    // return calculated result
    return result;
}
Exemplo n.º 3
0
Arquivo: Box.c Projeto: RONNCC/pysoy
static void _soy_bodies_box_size_set (soybodiesBox* self, soyatomsSize* size) {
	soyatomsSize* _tmp0_;
	gfloat _tmp1_;
	gfloat _tmp2_;
	soyatomsSize* _tmp3_;
	gfloat _tmp4_;
	gfloat _tmp5_;
	soyatomsSize* _tmp6_;
	gfloat _tmp7_;
	gfloat _tmp8_;
	soyscenesScene* _tmp9_;
	struct dxGeom* _tmp11_;
	GLfloat _tmp12_;
	GLfloat _tmp13_;
	GLfloat _tmp14_;
	soyscenesScene* _tmp15_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (size != NULL);
	g_mutex_lock (&((soybodiesBody*) self)->mutex);
	_tmp0_ = size;
	_tmp1_ = soy_atoms_size_get_width (_tmp0_);
	_tmp2_ = _tmp1_;
	self->priv->_width = (GLfloat) _tmp2_;
	_tmp3_ = size;
	_tmp4_ = soy_atoms_size_get_height (_tmp3_);
	_tmp5_ = _tmp4_;
	self->priv->_height = (GLfloat) _tmp5_;
	_tmp6_ = size;
	_tmp7_ = soy_atoms_size_get_depth (_tmp6_);
	_tmp8_ = _tmp7_;
	self->priv->_depth = (GLfloat) _tmp8_;
	self->priv->_updated = TRUE;
	g_mutex_unlock (&((soybodiesBody*) self)->mutex);
	_tmp9_ = ((soybodiesBody*) self)->scene;
	if (_tmp9_ != NULL) {
		soyscenesScene* _tmp10_;
		_tmp10_ = ((soybodiesBody*) self)->scene;
		g_rw_lock_writer_lock (&_tmp10_->stepLock);
	}
	_tmp11_ = ((soybodiesBody*) self)->geom;
	_tmp12_ = self->priv->_width;
	_tmp13_ = self->priv->_height;
	_tmp14_ = self->priv->_depth;
	dGeomBoxSetLengths ((struct dxGeom*) _tmp11_, (dReal) _tmp12_, (dReal) _tmp13_, (dReal) _tmp14_);
	_tmp15_ = ((soybodiesBody*) self)->scene;
	if (_tmp15_ != NULL) {
		soyscenesScene* _tmp16_;
		_tmp16_ = ((soybodiesBody*) self)->scene;
		g_rw_lock_writer_unlock (&_tmp16_->stepLock);
	}
}
Exemplo n.º 4
0
static PyObject*
tp_repr (SELF self) {
    char* str;
    PyObject* ret;

    // We can't use PyUnicode_FromFormat because it doesn't support floats
    str = g_strdup_printf("<Size (%f, %f, %f)>",
                          soy_atoms_size_get_width(self->g),
                          soy_atoms_size_get_height(self->g),
                          soy_atoms_size_get_depth(self->g));
    ret = PyUnicode_FromString(str);

    // Free str and return
    g_free(str);
    return ret;
}