Esempio n. 1
0
static bool HHVM_METHOD(ImagickDraw, affine, const Array& affine) {
  auto wand = getDrawingWandResource(Object{this_});
  AffineMatrix affineMatrix;
  getAffineMatrixElement(affine, s_sx, affineMatrix.sx);
  getAffineMatrixElement(affine, s_rx, affineMatrix.rx);
  getAffineMatrixElement(affine, s_ry, affineMatrix.ry);
  getAffineMatrixElement(affine, s_sy, affineMatrix.sy);
  getAffineMatrixElement(affine, s_tx, affineMatrix.tx);
  getAffineMatrixElement(affine, s_ty, affineMatrix.ty);
  DrawAffine(wand->getWand(), &affineMatrix);
  return true;
}
Esempio n. 2
0
MAGICK_NET_EXPORT void DrawingWand_Affine(DrawingWand *instance, const double scaleX, const double scaleY, const double shearX, const double shearY, const double translateX, const double translateY, ExceptionInfo **exception)
{
  AffineMatrix
    matrix;

  matrix.sx = scaleX;
  matrix.sy = scaleY;
  matrix.rx = shearX;
  matrix.ry = shearY;
  matrix.tx = translateX;
  matrix.ty = translateY;

  DrawAffine(instance, &matrix);
  MAGICK_NET_SET_DRAW_EXCEPTION;
}
Esempio n. 3
0
/* {{{ proto bool GmagickDraw::affine(array affine)
	Adjusts the current affine transformation matrix with the specified affine transformation matrix. Note that the current affine transform is adjusted rather than replaced.
*/
PHP_METHOD(gmagickdraw, affine)
{
	php_gmagickdraw_object *internd;
	zval *affine_matrix, **ppzval;
	HashTable *affine;
	char *matrix_elements[] = { "sx", "rx", "ry",
						        "sy", "tx", "ty" };
	int i;
	double value;
	AffineMatrix *pmatrix;

	/* Parse parameters given to function */
	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &affine_matrix) == FAILURE) {
		return;
	}

	/* Allocate space to build matrix */
	pmatrix = emalloc(sizeof(AffineMatrix));

	affine = Z_ARRVAL_P(affine_matrix);
	zend_hash_internal_pointer_reset_ex(affine, (HashPosition *) 0);

	for (i = 0; i < 6 ; i++) {

		if (zend_hash_find(affine, matrix_elements[i], 3, (void**)&ppzval) == FAILURE) {
			efree(pmatrix);
            GMAGICK_THROW_EXCEPTION_WITH_MESSAGE(GMAGICKDRAW_CLASS, "AffineMatrix should contain keys: sx, rx, ry, sy, tx and ty", 2);
		} else {
			
			zval tmp_zval, *tmp_pzval;

			tmp_zval = **ppzval;
			zval_copy_ctor(&tmp_zval);
			tmp_pzval = &tmp_zval;
			convert_to_double(tmp_pzval);

			value = Z_DVAL(tmp_zval);

			if (strcmp(matrix_elements[i], "sx") == 0) {
				pmatrix->sx = value;
			} else if (strcmp(matrix_elements[i], "rx") == 0) {
				pmatrix->rx = value;
			} else if (strcmp(matrix_elements[i], "ry") == 0) {
				pmatrix->ry = value;
			} else if (strcmp(matrix_elements[i], "sy") == 0) {
				pmatrix->sy = value;
			} else if (strcmp(matrix_elements[i], "tx") == 0) {
				pmatrix->tx = value;
			} else if (strcmp(matrix_elements[i], "ty") == 0) {
				pmatrix->ty = value;
			}
		}
	}
	
	internd = (php_gmagickdraw_object *) zend_object_store_get_object(getThis() TSRMLS_CC);

	DrawAffine(internd->drawing_wand, pmatrix);
	efree(pmatrix);

	RETURN_TRUE;
}