Skip to content

Commit 86e2cbe

Browse files
abastieadujardin
authored andcommitted
Add setters + bugfix in sl.Mat (#64)
- Add missing Property setters in Parameters classes - Fix bug in sl.Mat initialization that was caused by its &= operator. Now it uses move.
1 parent a16e114 commit 86e2cbe

File tree

1 file changed

+120
-17
lines changed

1 file changed

+120
-17
lines changed

pyzed/sl.pyx

Lines changed: 120 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ cdef class Matrix3f:
208208
else:
209209
return ""
210210

211+
@matrix_name.setter
212+
def matrix_name(self, str name):
213+
self.mat.matrix_name.set(name.encode())
214+
211215
@property
212216
def nbElem(self):
213217
return self.mat.nbElem
@@ -346,6 +350,10 @@ cdef class Matrix4f:
346350
else:
347351
return ""
348352

353+
@matrix_name.setter
354+
def matrix_name(self, str name):
355+
self.mat.matrix_name.set(name.encode())
356+
349357
@property
350358
def m(self):
351359
nbElem = self.nbElem
@@ -734,10 +742,18 @@ cdef class Resolution:
734742
def width(self):
735743
return self.width
736744

745+
@width.setter
746+
def width(self, value):
747+
self.width = value
748+
737749
@property
738750
def height(self):
739751
return self.height
740752

753+
@height.setter
754+
def height(self, value):
755+
self.height = value
756+
741757
def __richcmp__(Resolution left, Resolution right, int op):
742758
if op == 2:
743759
return left.width==right.width and left.height==right.height
@@ -753,38 +769,86 @@ cdef class CameraParameters:
753769
def fx(self):
754770
return self.camera_params.fx
755771

772+
@fx.setter
773+
def fx(self, float fx_):
774+
self.camera_params.fx = fx_
775+
756776
@property
757777
def fy(self):
758778
return self.camera_params.fy
759779

780+
@fy.setter
781+
def fy(self, float fy_):
782+
self.camera_params.fy = fy_
783+
760784
@property
761785
def cx(self):
762786
return self.camera_params.cx
763787

788+
@cx.setter
789+
def cx(self, float cx_):
790+
self.camera_params.cx = cx_
791+
764792
@property
765793
def cy(self):
766794
return self.camera_params.cy
767795

796+
@cy.setter
797+
def cy(self, float cy_):
798+
self.camera_params.cy = cy_
799+
768800
@property
769801
def disto(self):
770-
return self.camera_params.disto
802+
cdef np.ndarray arr = np.zeros(5)
803+
for i in range(5):
804+
arr[i] = self.camera_params.disto[i]
805+
return arr
806+
807+
def set_disto(self, float value1, float value2, float value3, float value4, float value5):
808+
self.camera_params.disto[0] = value1
809+
self.camera_params.disto[1] = value2
810+
self.camera_params.disto[2] = value3
811+
self.camera_params.disto[3] = value4
812+
self.camera_params.disto[4] = value5
771813

772814
@property
773815
def v_fov(self):
774816
return self.camera_params.v_fov
775817

818+
@v_fov.setter
819+
def v_fov(self, float v_fov_):
820+
self.camera_params.v_fov = v_fov_
821+
776822
@property
777823
def h_fov(self):
778824
return self.camera_params.h_fov
779825

826+
@h_fov.setter
827+
def h_fov(self, float h_fov_):
828+
self.camera_params.h_fov = h_fov_
829+
780830
@property
781831
def d_fov(self):
782832
return self.camera_params.d_fov
783833

834+
@d_fov.setter
835+
def d_fov(self, float d_fov_):
836+
self.camera_params.d_fov = d_fov_
837+
784838
@property
785839
def image_size(self):
786-
return self.camera_params.image_size
840+
return Resolution(self.camera_params.image_size.width, self.camera_params.image_size.height)
841+
842+
@image_size.setter
843+
def image_size(self, Resolution size_):
844+
self.camera_params.image_size.width = size_.width
845+
self.camera_params.image_size.height = size_.height
787846

847+
def set_up(self, float fx_, float fy_, float cx_, float cy_) :
848+
self.camera_params.fx = fx_
849+
self.camera_params.fy = fy_
850+
self.camera_params.cx = cx_
851+
self.camera_params.cy = cy_
788852

789853
cdef class CalibrationParameters:
790854
cdef c_CalibrationParameters calibration
@@ -810,21 +874,43 @@ cdef class CalibrationParameters:
810874
arr[i] = self.calibration.R[i]
811875
return arr
812876

877+
def set_R(self, float value1, float value2, float value3) :
878+
self.calibration.R[0] = value1
879+
self.calibration.R[1] = value2
880+
self.calibration.R[3] = value3
881+
self.set()
882+
813883
@property
814884
def T(self):
815885
cdef np.ndarray arr = np.zeros(3)
816886
for i in range(3):
817887
arr[i] = self.calibration.T[i]
818888
return arr
819889

890+
def set_T(self, float value1, float value2, float value3) :
891+
self.calibration.T[0] = value1
892+
self.calibration.T[1] = value2
893+
self.calibration.T[2] = value3
894+
self.set()
895+
820896
@property
821897
def left_cam(self):
822898
return self.py_left_cam
823899

900+
@left_cam.setter
901+
def left_cam(self, CameraParameters left_cam_) :
902+
self.calibration.left_cam = left_cam_.camera_params
903+
self.set()
904+
824905
@property
825906
def right_cam(self):
826907
return self.py_right_cam
827908

909+
@right_cam.setter
910+
def right_cam(self, CameraParameters right_cam_) :
911+
self.calibration.right_cam = right_cam_.camera_params
912+
self.set()
913+
828914

829915
cdef class CameraInformation:
830916
cdef CalibrationParameters py_calib
@@ -850,7 +936,7 @@ cdef class CameraInformation:
850936

851937
@property
852938
def camera_model(self):
853-
return self.camera_model
939+
return MODEL(self.camera_model)
854940

855941
@property
856942
def calibration_parameters(self):
@@ -875,49 +961,47 @@ cdef class CameraInformation:
875961

876962
cdef class Mat:
877963
cdef c_Mat mat
878-
def __cinit__(self):
879-
self.mat = c_Mat()
964+
def __cinit__(self, width=0, height=0, mat_type=MAT_TYPE.MAT_TYPE_32F_C1, memory_type=MEM.MEM_CPU):
965+
c_Mat(width, height, <c_MAT_TYPE>(mat_type.value), <c_MEM>(memory_type.value)).move(self.mat)
880966

881967
def init_mat_type(self, width, height, mat_type, memory_type=MEM.MEM_CPU):
882968
if isinstance(mat_type, MAT_TYPE) and isinstance(memory_type, MEM):
883-
self.mat = c_Mat(width, height, mat_type.value, memory_type.value)
969+
c_Mat(width, height, <c_MAT_TYPE>(mat_type.value), <c_MEM>(memory_type.value)).move(self.mat)
884970
else:
885971
raise TypeError("Argument are not of MAT_TYPE or MEM type.")
886972

887973
def init_mat_cpu(self, width, height, mat_type, ptr, step, memory_type=MEM.MEM_CPU):
888974
if isinstance(mat_type, MAT_TYPE) and isinstance(memory_type, MEM):
889-
self.mat = c_Mat(width, height, mat_type.value, ptr.encode(), step, memory_type.value)
975+
c_Mat(width, height, <c_MAT_TYPE>(mat_type.value), ptr.encode(), step, <c_MEM>(memory_type.value)).move(self.mat)
890976
else:
891977
raise TypeError("Argument are not of MAT_TYPE or MEM type.")
892978

893979
def init_mat_cpu_gpu(self, width, height, mat_type, ptr_cpu, step_cpu, ptr_gpu, step_gpu):
894980
if isinstance(mat_type, MAT_TYPE):
895-
self.mat = c_Mat(width, height, mat_type.value, ptr_cpu.encode(), step_cpu, ptr_gpu.encode(), step_gpu)
981+
c_Mat(width, height, mat_type.value, ptr_cpu.encode(), step_cpu, ptr_gpu.encode(), step_gpu).move(self.mat)
896982
else:
897983
raise TypeError("Argument is not of MAT_TYPE type.")
898984

899985
def init_mat_resolution(self, Resolution resolution, mat_type, memory_type):
900986
if isinstance(mat_type, MAT_TYPE) and isinstance(memory_type, MEM):
901-
self.mat = c_Mat(c_Resolution(resolution.width, resolution.height), mat_type.value, memory_type.value)
987+
c_Mat(c_Resolution(resolution.width, resolution.height), mat_type.value, memory_type.value).move(self.mat)
902988
else:
903989
raise TypeError("Argument are not of MAT_TYPE or MEM type.")
904990

905991
def init_mat_resolution_cpu(self, Resolution resolution, mat_type, ptr, step, memory_type=MEM.MEM_CPU):
906992
if isinstance(mat_type, MAT_TYPE) and isinstance(memory_type, MEM):
907-
self.mat = c_Mat(c_Resolution(resolution.width, resolution.height), mat_type.value, ptr.encode(),
908-
step, memory_type.value)
993+
c_Mat(c_Resolution(resolution.width, resolution.height), mat_type.value, ptr.encode(), step, memory_type.value).move(self.mat)
909994
else:
910995
raise TypeError("Argument are not of MAT_TYPE or MEM type.")
911996

912997
def init_mat_resolution_cpu_gpu(self, Resolution resolution, mat_type, ptr_cpu, step_cpu, ptr_gpu, step_gpu):
913998
if isinstance(mat_type, MAT_TYPE):
914-
self.mat = matResolution(c_Resolution(resolution.width, resolution.height), mat_type.value, ptr_cpu.encode(),
915-
step_cpu, ptr_gpu.encode(), step_gpu)
999+
matResolution(c_Resolution(resolution.width, resolution.height), mat_type.value, ptr_cpu.encode(), step_cpu, ptr_gpu.encode(), step_gpu).move(self.mat)
9161000
else:
9171001
raise TypeError("Argument is not of MAT_TYPE type.")
9181002

9191003
def init_mat(self, Mat matrix):
920-
self.mat = c_Mat(matrix.mat)
1004+
c_Mat(matrix.mat).move(self.mat)
9211005

9221006
def alloc_size(self, width, height, mat_type, memory_type=MEM.MEM_CPU):
9231007
if isinstance(mat_type, MAT_TYPE) and isinstance(memory_type, MEM):
@@ -1151,10 +1235,18 @@ cdef class Mat:
11511235
else:
11521236
return ""
11531237

1238+
@name.setter
1239+
def name(self, str name_):
1240+
self.mat.name.set(name_.encode())
1241+
11541242
@property
11551243
def verbose(self):
11561244
return self.mat.verbose
11571245

1246+
@verbose.setter
1247+
def verbose(self, bool verbose_):
1248+
self.mat.verbose = verbose_
1249+
11581250
def __repr__(self):
11591251
return self.get_infos()
11601252

@@ -1437,6 +1529,10 @@ cdef class Texture:
14371529
else:
14381530
return ""
14391531

1532+
@name.setter
1533+
def name(self, str name_):
1534+
self.texture.name.set(name_.encode())
1535+
14401536
def get_data(self, Mat py_mat):
14411537
py_mat.mat = self.texture.data
14421538
return py_mat
@@ -1618,7 +1714,14 @@ cdef class Plane:
16181714

16191715
@property
16201716
def type(self):
1621-
return self.plane.type
1717+
return PLANE_TYPE(self.plane.type)
1718+
1719+
@type.setter
1720+
def type(self, type_):
1721+
if isinstance(type_, PLANE_TYPE) :
1722+
self.plane.type = <c_PLANE_TYPE>(type_.value)
1723+
else :
1724+
raise TypeError("Argument is not of PLANE_TYPE type")
16221725

16231726
def get_normal(self):
16241727
normal = self.plane.getNormal()
@@ -2225,7 +2328,7 @@ cdef class Pose:
22252328
def timestamp(self, unsigned long long timestamp):
22262329
self.pose.timestamp = timestamp
22272330

2228-
def pose_data(self, Transform pose_data):
2331+
def pose_data(self, Transform pose_data = Transform()):
22292332
pose_data.transform = self.pose.pose_data
22302333
pose_data.mat = self.pose.pose_data
22312334
return pose_data
@@ -2312,7 +2415,7 @@ cdef class IMUData:
23122415
raise TypeError("Argument is not of bool type.")
23132416
return arr
23142417

2315-
def pose_data(self, Transform pose_data):
2418+
def pose_data(self, Transform pose_data = Transform()):
23162419
pose_data.transform = self.imuData.pose_data
23172420
pose_data.mat = self.imuData.pose_data
23182421
return pose_data

0 commit comments

Comments
 (0)