Skip to content

Commit facc04a

Browse files
committed
opencv_rotated_rect_update_property_by_c_rotated_rect add CV\RotatedRect->size logic
1 parent 4c64aba commit facc04a

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

source/opencv2/core/opencv_type.cc

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,32 @@ void opencv_rotated_rect_free_obj(zend_object *object)
613613
zend_object_std_dtor(object);
614614
}
615615

616+
void opencv_rotated_rect_update_property_by_c_rotated_rect(zval *z, RotatedRect *rotatedRect){
617+
//RotatedRect->angle
618+
zend_update_property_double(opencv_rotated_rect_ce, z, "angle", sizeof("angle")-1, rotatedRect->angle);
619+
//RotatedRect->center
620+
zval center_zval;
621+
object_init_ex(&center_zval, opencv_point_ce);
622+
opencv_point_object *center_object = Z_PHP_POINT_OBJ_P(&center_zval);
623+
center_object->point = new Point(rotatedRect->center.x,rotatedRect->center.y);
624+
opencv_point_update_property_by_c_point(&center_zval, center_object->point);
625+
zend_update_property(opencv_rotated_rect_ce, z, "center", sizeof("center")-1, &center_zval);
626+
//RotatedRect->size
627+
zval size_zval;
628+
object_init_ex(&size_zval, opencv_size_ce);
629+
opencv_size_object *size_object = Z_PHP_SIZE_OBJ_P(&size_zval);
630+
size_object->size = new Size(rotatedRect->size);
631+
opencv_size_update_property_by_c_size(&size_zval, size_object->size);
632+
zend_update_property(opencv_rotated_rect_ce, z, "size", sizeof("size")-1, &size_zval);
633+
/**
634+
* 数组center_zval在object_init_ex()后refcount=1,
635+
* 插入成员属性zend_update_property()会自动加一次,变为2,
636+
* 对象销毁后只会减1,需要要在zend_update_property()后主动减一次引用
637+
*/
638+
Z_DELREF(center_zval);
639+
Z_DELREF(size_zval);
640+
}
641+
616642
/**
617643
* todo center is Point2f and size is Size2f
618644
* RotatedRect __construct
@@ -644,7 +670,7 @@ PHP_METHOD(opencv_rotated_rect, __construct)
644670

645671
opencv_rotated_rect_object *obj = Z_PHP_ROTATED_RECT_OBJ_P(getThis());
646672
obj->rotatedRect = new RotatedRect(center, size, (float)angle);
647-
// opencv_rect_update_property_by_c_rect(getThis(),obj->rect);
673+
opencv_rotated_rect_update_property_by_c_rotated_rect(getThis(), obj->rotatedRect);
648674
}
649675

650676
/**

0 commit comments

Comments
 (0)