@@ -44,6 +44,19 @@ static int Main()
4444 return 0 ;
4545 }
4646
47+ private static HalconDotNet . HTuple arrayToHalconDouble ( params double [ ] arr )
48+ {
49+ var htup = new HalconDotNet . HTuple ( ( double ) 0 ) ;
50+ htup . DArr = arr ;
51+ return htup ;
52+ }
53+ private static HalconDotNet . HTuple arrayToHalconInt ( params int [ ] arr )
54+ {
55+ var htup = new HalconDotNet . HTuple ( ( int ) 0 ) ;
56+ htup . IArr = arr ;
57+ return htup ;
58+ }
59+
4760 private static void SaveHalconPointCloud ( HalconDotNet . HObjectModel3D model , string fileName )
4861 {
4962 model . WriteObjectModel3d ( "ply" , fileName , "invert_normals" , "false" ) ;
@@ -79,35 +92,22 @@ private static HalconDotNet.HObjectModel3D ZividToHalconPointCloud(Zivid.NET.Poi
7992 // tupleXYZMapping is of shape [width, height, rows[], cols[]], and is used for creating xyz mapping.
8093 // See more at: https://www.mvtec.com/doc/halcon/13/en/set_object_model_3d_attrib.html
8194
82- var tuplePointsX = new HalconDotNet . HTuple ( ) ;
83- var tuplePointsY = new HalconDotNet . HTuple ( ) ;
84- var tuplePointsZ = new HalconDotNet . HTuple ( ) ;
95+ var tuplePointsX = new double [ numberOfValidPoints ] ;
96+ var tuplePointsY = new double [ numberOfValidPoints ] ;
97+ var tuplePointsZ = new double [ numberOfValidPoints ] ;
8598
86- var tupleNormalsX = new HalconDotNet . HTuple ( ) ;
87- var tupleNormalsY = new HalconDotNet . HTuple ( ) ;
88- var tupleNormalsZ = new HalconDotNet . HTuple ( ) ;
99+ var tupleNormalsX = new double [ numberOfValidPoints ] ;
100+ var tupleNormalsY = new double [ numberOfValidPoints ] ;
101+ var tupleNormalsZ = new double [ numberOfValidPoints ] ;
89102
90- var tupleColorsR = new HalconDotNet . HTuple ( ) ;
91- var tupleColorsG = new HalconDotNet . HTuple ( ) ;
92- var tupleColorsB = new HalconDotNet . HTuple ( ) ;
103+ var tupleColorsR = new int [ numberOfValidPoints ] ;
104+ var tupleColorsG = new int [ numberOfValidPoints ] ;
105+ var tupleColorsB = new int [ numberOfValidPoints ] ;
93106
94- var tupleXYZMapping = new HalconDotNet . HTuple ( ) ;
107+ var tupleXYZMapping = new int [ 2 * numberOfValidPoints + 2 ] ;
95108
96- tuplePointsX [ numberOfValidPoints - 1 ] = ( float ) 0 ;
97- tuplePointsY [ numberOfValidPoints - 1 ] = ( float ) 0 ;
98- tuplePointsZ [ numberOfValidPoints - 1 ] = ( float ) 0 ;
99-
100- tupleNormalsX [ numberOfValidPoints - 1 ] = ( float ) 0 ;
101- tupleNormalsY [ numberOfValidPoints - 1 ] = ( float ) 0 ;
102- tupleNormalsZ [ numberOfValidPoints - 1 ] = ( float ) 0 ;
103-
104- tupleColorsR [ numberOfValidPoints - 1 ] = ( byte ) 0 ;
105- tupleColorsG [ numberOfValidPoints - 1 ] = ( byte ) 0 ;
106- tupleColorsB [ numberOfValidPoints - 1 ] = ( byte ) 0 ;
107-
108- tupleXYZMapping [ 2 * numberOfValidPoints + 2 - 1 ] = ( uint ) 0 ;
109- tupleXYZMapping [ 0 ] = ( uint ) width ;
110- tupleXYZMapping [ 1 ] = ( uint ) height ;
109+ tupleXYZMapping [ 0 ] = ( int ) width ;
110+ tupleXYZMapping [ 1 ] = ( int ) height ;
111111
112112 var validPointIndex = 0 ;
113113 for ( uint i = 0 ; i < height ; i ++ )
@@ -125,8 +125,8 @@ private static HalconDotNet.HObjectModel3D ZividToHalconPointCloud(Zivid.NET.Poi
125125 tupleColorsR [ validPointIndex ] = colorsRGBA [ i , j , 0 ] ;
126126 tupleColorsG [ validPointIndex ] = colorsRGBA [ i , j , 1 ] ;
127127 tupleColorsB [ validPointIndex ] = colorsRGBA [ i , j , 2 ] ;
128- tupleXYZMapping [ 2 + validPointIndex ] = i ;
129- tupleXYZMapping [ 2 + numberOfValidPoints + validPointIndex ] = j ;
128+ tupleXYZMapping [ 2 + validPointIndex ] = ( int ) i ;
129+ tupleXYZMapping [ 2 + numberOfValidPoints + validPointIndex ] = ( int ) j ;
130130
131131 if ( ! float . IsNaN ( normal ) )
132132 {
@@ -139,24 +139,31 @@ private static HalconDotNet.HObjectModel3D ZividToHalconPointCloud(Zivid.NET.Poi
139139 }
140140 }
141141
142+ var tuplePointsXH = arrayToHalconDouble ( tuplePointsX ) ;
143+ var tuplePointsYH = arrayToHalconDouble ( tuplePointsY ) ;
144+ var tuplePointsZH = arrayToHalconDouble ( tuplePointsZ ) ;
145+ var tupleNormalsXH = arrayToHalconDouble ( tupleNormalsX ) ;
146+ var tupleNormalsYH = arrayToHalconDouble ( tupleNormalsY ) ;
147+ var tupleNormalsZH = arrayToHalconDouble ( tupleNormalsZ ) ;
148+ var tupleColorsRH = arrayToHalconInt ( tupleColorsR ) ;
149+ var tupleColorsGH = arrayToHalconInt ( tupleColorsG ) ;
150+ var tupleColorsBH = arrayToHalconInt ( tupleColorsB ) ;
151+
142152 Console . WriteLine ( "Constructing ObjectModel3D based on XYZ data" ) ;
143- var objectModel3D = new HalconDotNet . HObjectModel3D ( tuplePointsX , tuplePointsY , tuplePointsZ ) ;
153+ var objectModel3D = new HalconDotNet . HObjectModel3D ( tuplePointsXH , tuplePointsYH , tuplePointsZH ) ;
144154
145155 Console . WriteLine ( "Mapping ObjectModel3D data" ) ;
146- HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D , "xyz_mapping" , "object" , tupleXYZMapping ) ;
156+ HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D , "xyz_mapping" , "object" , arrayToHalconInt ( tupleXYZMapping ) ) ;
147157
148158 Console . WriteLine ( "Adding normals to ObjectModel3D" ) ;
149159 var normalsAttribNames = new HalconDotNet . HTuple ( "point_normal_x" , "point_normal_y" , "point_normal_z" ) ;
150- var normalsAttribValues = new HalconDotNet . HTuple ( tupleNormalsX , tupleNormalsY , tupleNormalsZ ) ;
151- HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D ,
152- normalsAttribNames ,
153- "points" ,
154- normalsAttribValues ) ;
160+ var normalsAttribValues = new HalconDotNet . HTuple ( tupleNormalsXH , tupleNormalsYH , tupleNormalsZH ) ;
161+ HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D , normalsAttribNames , "points" , normalsAttribValues ) ;
155162
156163 Console . WriteLine ( "Adding RGB to ObjectModel3D" ) ;
157- HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D , "red" , "points" , tupleColorsR ) ;
158- HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D , "green" , "points" , tupleColorsG ) ;
159- HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D , "blue" , "points" , tupleColorsB ) ;
164+ HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D , "red" , "points" , tupleColorsRH ) ;
165+ HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D , "green" , "points" , tupleColorsGH ) ;
166+ HalconDotNet . HOperatorSet . SetObjectModel3dAttribMod ( objectModel3D , "blue" , "points" , tupleColorsBH ) ;
160167
161168 return objectModel3D ;
162169 }
0 commit comments