@@ -22,6 +22,7 @@ zend_class_entry *opencv_point_ce;
2222zend_class_entry *opencv_scalar_ce;
2323zend_class_entry *opencv_size_ce;
2424zend_class_entry *opencv_rect_ce;
25+ zend_class_entry *opencv_rotated_rect_ce;
2526
2627/* *
2728 * -----------------------------------【CV\Point】--------------------------------------
@@ -542,7 +543,7 @@ void opencv_rect_write_property(zval *object, zval *member, zval *value, void **
542543
543544
544545/* *
545- * Scalar Init
546+ * Rect Init
546547 */
547548void opencv_rect_init (int module_number){
548549 zend_class_entry ce;
@@ -557,6 +558,117 @@ void opencv_rect_init(int module_number){
557558 opencv_rect_object_handlers.free_obj = opencv_rect_free_obj;
558559}
559560
561+ // -----------------------------------【CV\RotatedRect】--------------------------------
562+ //
563+ // -------------------------------------------------------------------------------------
564+
565+ zend_object_handlers opencv_rotated_rect_object_handlers;
566+
567+ zend_object* opencv_rotated_rect_create_handler (zend_class_entry *type)
568+ {
569+ int size = sizeof (opencv_rotated_rect_object);
570+ opencv_rotated_rect_object *obj = (opencv_rotated_rect_object *)ecalloc (1 ,size);
571+ memset (obj, 0 , sizeof (opencv_rotated_rect_object));
572+ zend_object_std_init (&obj->std , type);
573+ object_properties_init (&obj->std , type);
574+ obj->std .ce = type;
575+ obj->std .handlers = &opencv_rotated_rect_object_handlers;
576+ return &obj->std ;
577+ }
578+
579+
580+ /* *
581+ * RotatedRect Class write_property
582+ * @param object
583+ * @param member
584+ * @param value
585+ * @param cache_slot
586+ */
587+ void opencv_rotated_rect_write_property (zval *object, zval *member, zval *value, void **cache_slot){
588+
589+ // zend_string *str = zval_get_string(member);
590+ // char *memberName=ZSTR_VAL(str);
591+ // opencv_rect_object *obj = Z_PHP_RECT_OBJ_P(object);
592+ //
593+ // if(strcmp(memberName, "x") == 0 && obj->rect->x!=(int)zval_get_long(value)){
594+ // obj->rect->x=(int)zval_get_long(value);
595+ // }else if(strcmp(memberName, "y") == 0 && obj->rect->y!=(int)zval_get_long(value)){
596+ // obj->rect->y=(int)zval_get_long(value);
597+ // }else if(strcmp(memberName, "width") == 0 && obj->rect->width!=(int)zval_get_long(value)){
598+ // obj->rect->width=(int)zval_get_long(value);
599+ // }else if(strcmp(memberName, "height") == 0 && obj->rect->height!=(int)zval_get_long(value)){
600+ // obj->rect->height=(int)zval_get_long(value);
601+ // }
602+ // zend_string_release(str);//free zend_string not memberName(zend_string->val)
603+ std_object_handlers.write_property (object,member,value,cache_slot);
604+
605+ }
606+
607+
608+ void opencv_rotated_rect_free_obj (zend_object *object)
609+ {
610+ opencv_rotated_rect_object *obj;
611+ obj = get_rotated_rect_obj (object);
612+ delete obj->rotatedRect ;
613+ zend_object_std_dtor (object);
614+ }
615+
616+ /* *
617+ * todo center is Point2f and size is Size2f
618+ * RotatedRect __construct
619+ * @param execute_data
620+ * @param return_value
621+ */
622+ PHP_METHOD (opencv_rotated_rect, __construct)
623+ {
624+ zval *center_zval = NULL , *size_zval;
625+ double angle = 0.0 ;
626+ Point center = Point ();
627+ Size size = Size ();
628+ if (zend_parse_parameters (ZEND_NUM_ARGS (), " |OOd" ,
629+ ¢er_zval, opencv_point_ce,
630+ &size_zval, opencv_size_ce,
631+ &angle) == FAILURE) {
632+ RETURN_NULL ();
633+ }
634+
635+ if (center_zval != NULL ){
636+ opencv_point_object *center_object = Z_PHP_POINT_OBJ_P (center_zval);
637+ center = *center_object->point ;
638+ }
639+
640+ if (size_zval != NULL ){
641+ opencv_size_object *size_object = Z_PHP_SIZE_OBJ_P (size_zval);
642+ size = *size_object->size ;
643+ }
644+
645+ opencv_rotated_rect_object *obj = Z_PHP_ROTATED_RECT_OBJ_P (getThis ());
646+ obj->rotatedRect = new RotatedRect (center, size, (float )angle);
647+ // opencv_rect_update_property_by_c_rect(getThis(),obj->rect);
648+ }
649+
650+ /* *
651+ * opencv_rect_methods[]
652+ */
653+ const zend_function_entry opencv_rotated_rect_methods[] = {
654+ PHP_ME (opencv_rotated_rect, __construct, NULL , ZEND_ACC_PUBLIC|ZEND_ACC_CTOR)
655+ PHP_FE_END
656+ };
657+ /* }}} */
658+
659+ void opencv_rotated_rect_init (int module_number){
660+ zend_class_entry ce;
661+ INIT_NS_CLASS_ENTRY (ce,OPENCV_NS, " RotatedRect" , opencv_rotated_rect_methods);
662+ opencv_rotated_rect_ce = zend_register_internal_class (&ce);
663+
664+ opencv_rotated_rect_ce->create_object = opencv_rotated_rect_create_handler;
665+ memcpy (&opencv_rotated_rect_object_handlers,
666+ zend_get_std_object_handlers (), sizeof (zend_object_handlers));
667+ opencv_rotated_rect_object_handlers.clone_obj = NULL ;
668+ opencv_rotated_rect_object_handlers.write_property = opencv_rotated_rect_write_property;
669+ opencv_rotated_rect_object_handlers.free_obj = opencv_rotated_rect_free_obj;
670+ }
671+
560672
561673/* *
562674 * Type Init
@@ -566,4 +678,5 @@ void opencv_type_init(int module_number){
566678 opencv_scalar_init (module_number);
567679 opencv_size_init (module_number);
568680 opencv_rect_init (module_number);
681+ opencv_rotated_rect_init (module_number);
569682}
0 commit comments