11
11
#include "py/runtime.h"
12
12
#include "py/binary.h"
13
13
14
+ #include "extmod/ulab/code/ulab.h"
15
+ #include "extmod/ulab/code/ndarray.h"
16
+
14
17
#include "shared-module/_eve/__init__.h"
15
18
#include "shared-bindings/_eve/__init__.h"
16
19
@@ -844,6 +847,17 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(vertex2ii_obj, 3, 5, _vertex2ii);
844
847
845
848
// }
846
849
850
+ static bool is_vector (mp_obj_t a ) {
851
+ if (!mp_obj_is_type (a , & ulab_ndarray_type )) {
852
+ return false;
853
+ }
854
+ ndarray_obj_t * ndarray = MP_OBJ_TO_PTR (a );
855
+ if (!ndarray_is_dense (ndarray )) {
856
+ mp_raise_TypeError (MP_ERROR_TEXT ("input must be an ndarray" ));
857
+ }
858
+ return true;
859
+ }
860
+
847
861
// Hand-written functions {
848
862
849
863
//| def Vertex2f(self, b: float) -> None:
@@ -853,9 +867,19 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(vertex2ii_obj, 3, 5, _vertex2ii);
853
867
//| :param float y: pixel y-coordinate"""
854
868
//| ...
855
869
static mp_obj_t _vertex2f (mp_obj_t self , mp_obj_t a0 , mp_obj_t a1 ) {
856
- mp_float_t x = mp_obj_get_float (a0 );
857
- mp_float_t y = mp_obj_get_float (a1 );
858
- common_hal__eve_Vertex2f (EVEHAL (self ), x , y );
870
+ if (is_vector (a0 ) && is_vector (a1 )) {
871
+ ndarray_obj_t * v0 = MP_OBJ_TO_PTR (a0 );
872
+ ndarray_obj_t * v1 = MP_OBJ_TO_PTR (a1 );
873
+ mp_float_t * p0 = (mp_float_t * )v0 -> array ;
874
+ mp_float_t * p1 = (mp_float_t * )v1 -> array ;
875
+ for (size_t i = 0 ; i < v0 -> len ; i ++ , p0 ++ , p1 ++ ) {
876
+ common_hal__eve_Vertex2f (EVEHAL (self ), * p0 , * p1 );
877
+ }
878
+ } else {
879
+ mp_float_t x = mp_obj_get_float (a0 );
880
+ mp_float_t y = mp_obj_get_float (a1 );
881
+ common_hal__eve_Vertex2f (EVEHAL (self ), x , y );
882
+ }
859
883
return mp_const_none ;
860
884
}
861
885
static MP_DEFINE_CONST_FUN_OBJ_3 (vertex2f_obj , _vertex2f ) ;
0 commit comments