Skip to content

Commit f12aaa8

Browse files
csu-bot-zividchrisasc
authored andcommitted
Samples: Update CaptureHalconViaZivid
Reduce the total capture time when using Zivid API in combination with HALCON. The improvements can be seen in `CaptureHalconViaZivid` sample.
1 parent e0924ca commit f12aaa8

File tree

2 files changed

+48
-41
lines changed

2 files changed

+48
-41
lines changed

source/Camera/Advanced/CaptureHalconViaZivid/CaptureHalconViaZivid.cs

Lines changed: 44 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

source/Camera/Basic/CaptureTutorial.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,8 @@ As with all cameras there are settings that can be configured.
159159

160160
### Presets
161161

162-
The recommendation is to use [Zivid
163-
Presets](https://support.zivid.com/latest/reference-articles/presets-settings.html)
162+
The recommendation is to use
163+
[Presets](https://support.zivid.com/latest/reference-articles/presets-settings.html)
164164
available in Zivid Studio and as .yml files (see `load_yml_label`
165165
below). Alternatively, you can use our Capture Assistant, or you may
166166
configure the settings manually.
@@ -340,8 +340,8 @@ var settings2D = new Zivid.NET.Settings2D
340340
Zivid Studio can store the current settings to .yml files. These can be
341341
read and applied in the API. You may find it easier to modify the
342342
settings in these (human-readable) yaml-files in your preferred editor.
343-
Check out [Zivid
344-
Presets](https://support.zivid.com/latest/reference-articles/presets-settings.html)
343+
Check out
344+
[Presets](https://support.zivid.com/latest/reference-articles/presets-settings.html)
345345
for recommended .yml files tuned for your application.
346346

347347
([go to

0 commit comments

Comments
 (0)