@@ -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 (¢er_zval, opencv_point_ce);
622+ opencv_point_object *center_object = Z_PHP_POINT_OBJ_P (¢er_zval);
623+ center_object->point = new Point (rotatedRect->center .x ,rotatedRect->center .y );
624+ opencv_point_update_property_by_c_point (¢er_zval, center_object->point );
625+ zend_update_property (opencv_rotated_rect_ce, z, " center" , sizeof (" center" )-1 , ¢er_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