11.3 使用向量

HALCON/.NET 提供了 HVector 类,用于使用 HDevelop 语言中 "向量" 类型的变量,即可以容纳任意数量相同数据类型(即元组、图标对象或向量)和维数的元素的容器。向量的类型(即维度和元素类型)是在初始化向量实例时定义的,在其生命周期内不能更改。一维向量可以是元组向量,也可以是图标对象向量。二维向量可以是元组向量的向量,也可以是图标对象向量的向量,以此类推。向量的实例可以从以下派生类中创建:

下面将介绍在 HALCON/.NET 中使用 C# 时使用向量的一些基本信息。

向量构造

如前所述,只能从 HObjectVectorHTupleVector 创建向量实例。

// Create a vector of iconic objects
HObjectVector   vectorObj;

// Create a vector of tuples
HTupleVector    vectorTup;

向量类型在构建后不能更改。因此,元组不能分配给图标对象的向量,反之亦然。

您也可以通过在括号中指定维数来创建多维向量,即向量的向量等。不过,向量的维数必须在程序中保持不变,不能更改。下面的代码行描述了如何创建一个二维向量,即一个由元组向量组成的向量。

HObjectVector vectorObjMulti = new HObjectVector(2);

请注意,通过这些调用创建的向量仍然是空的。下面将介绍如何访问和设置向量元素。

访问和设置向量元素

在设置或访问向量元素时,必须区分 HObjectVectorHTupleVector 类型的向量。图标对象向量的元素可以用 .O 访问,而元组向量的元素可以用 .T 访问。

// Access an element of a one-dimensional HObjectVector
vectorObj[0].O;

// Access an element of a one-dimensional HTupleVector
vectorTup[0].T;

方括号中的指定索引定义了要访问的元素。如果要访问多维向量的子元素,则必须使用相应子向量及其子元素的索引。

// Access a subelement of a two-dimensional HObjectVector
vectorObjMulti[0][1].O;

设置向量元素时,需要将访问向量元素的表达式分别作为 HObjectHTuple 的引用。必须在赋值的右侧指定要设置的值。

// Set an element of a one-dimensional HObjectVector
HImage image = new HImage("Image1");
vectorObj[0].O = image;

// Set an element of a HTupleVector
HTuple tuple = new HTuple(1,2);
vectorTup[1].T = tuple;

在示例代码中,图像被复制并设置为 vectorObj 的第一个元素。元组也被复制,但被设置为 vectorTup 的第二个向量元素。

设置多维向量的子元素与设置一维向量中的元素类似,都需要使用子向量及其子元素的相应索引。

如果设置或访问了一个不存在的向量元素,该向量会自动放大,并在必要时填充空元素。

销毁向量

如果不再需要对 HObjectVectorHTupleVector 进行进一步处理,则应使用 .Dispose() 清理其内容。

vectorObj.Dispose();

其他信息

除了访问和设置向量元素外,HObjectVectorHTupleVector 还为 HALCON 向量的使用提供了更多的功能,如插入和移除向量元素或连接向量。有关所提供向量功能的更多详细信息,您可以使用 Visual Studio 中的 IntelliSense 自动上下文帮助。