dev_set_draw( : : DrawMode : )
时间: 2024-02-04 14:02:45 浏览: 171
dev_set_draw是HALCON中用于设置图像显示的绘制模式的算子,它可以设置图像显示窗口中的绘制模式为输入的绘制模式。
具体来说,dev_set_draw算子可以通过以下参数进行调用:
- DrawMode:输入的绘制模式,可以是以下几种模式之一:
- "margin":绘制模式为边缘模式,即在图像显示窗口中只绘制图像边缘。
- "image":绘制模式为图像模式,即在图像显示窗口中绘制整个图像。
- "none":绘制模式为无模式,即在图像显示窗口中不进行绘制。
在运行该算子时,它会将图像显示窗口中的绘制模式设置为输入的绘制模式。根据不同的绘制模式,图像显示窗口中的显示效果也会有所不同。
需要注意的是,dev_set_draw算子只能设置当前图像显示窗口的绘制模式。如果需要对其他图像显示窗口进行设置,需要调用其他的设置绘制模式接口,如dev_set_part_draw、dev_set_full_draw等接口。另外,HALCON支持的绘制模式可以通过调用dev_get_draw中的接口进行查询。
相关问题
C#winform的comboBox的DrawMode属性介绍
C# WinForms中的ComboBox控件的DrawMode属性用于控制ComboBox中项目的绘制方式。该属性有两个可能的值:Normal和OwnerDrawFixed。
1. Normal: 这是默认值,表示ComboBox将使用系统提供的绘制方式来显示项目。在这种模式下,每个项目都被视为一个字符串,并且ComboBox会负责将其绘制到屏幕上。
2. OwnerDrawFixed: 当设置为这个值时,开发者需要自行处理ComboBox中项目的绘制。这意味着你需要编写代码来定义如何绘制每个项目。这通常用于需要自定义项目外观的情况,例如在项目中包含图标或特殊格式文本时。
要使用OwnerDrawFixed模式,你需要设置ComboBox的DrawMode属性为OwnerDrawFixed,并处理DrawItem事件。在这个事件的事件处理器中,你可以使用Graphics对象来自定义每个项目的绘制方式。
示例代码如下:
```csharp
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
// 检查是否处于绘制状态
if (e.Index < 0) return;
// 获取当前项的数据
string item = comboBox1.Items[e.Index].ToString();
// 设置背景色
e.DrawBackground();
// 设置前景色
Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ?
Brushes.Blue : Brushes.Black;
// 绘制文本
e.Graphics.DrawString(item, e.Font, brush, e.Bounds);
}
```
在这个例子中,我们首先检查索引是否有效,然后获取当前项的数据。接着,我们根据项的状态设置背景和前景颜色,并使用Graphics对象的DrawString方法绘制文本。
class CubeModel : IBufferSource { private const float halfLength = 0.5f; private static readonly vec3[] positions = new vec3[] { new vec3(+halfLength, +halfLength, +halfLength), // 0 new vec3(+halfLength, +halfLength, -halfLength), // 1 new vec3(+halfLength, -halfLength, +halfLength), // 2 new vec3(+halfLength, -halfLength, -halfLength), // 3 new vec3(-halfLength, +halfLength, +halfLength), // 4 new vec3(-halfLength, +halfLength, -halfLength), // 5 new vec3(-halfLength, -halfLength, +halfLength), // 6 new vec3(-halfLength, -halfLength, -halfLength), // 7 }; private static readonly uint[] indexes = new uint[] { 0, 2, 1, 1, 2, 3, // +X faces. 0, 1, 5, 0, 5, 4, // +Y faces. 0, 4, 2, 2, 4, 6, // +Z faces. 7, 6, 4, 7, 4, 5, // -X faces. 7, 5, 3, 3, 5, 1, // -Z faces. 7, 3, 2, 7, 2, 6, // -Y faces. }; public const string strPosition = "position"; private VertexBuffer positionBuffer; // array in GPU side. private IDrawCommand drawCommand; #region IBufferSource 成员 public IEnumerable<VertexBuffer> GetVertexAttribute(string bufferName) { if (strPosition == bufferName) // requiring position buffer. { if (this.positionBuffer == null) { // transform managed array to vertex buffer. this.positionBuffer = positions.GenVertexBuffer( VBOConfig.Vec3, // mapping to 'in vec3 someVar;' in vertex shader. BufferUsage.StaticDraw); // GL_STATIC_DRAW. } yield return this.positionBuffer; } else { throw new ArgumentException("bufferName"); } } public IEnumerable<IDrawCommand> GetDrawCommand() { if (this.drawCommand == null) { // indexes in GPU side. IndexBuffer indexBuffer = indexes.GenIndexBuffer(BufferUsage.StaticDraw); this.drawCommand = new DrawElementsCmd(indexBuffer, DrawMode.Triangles); // GL_TRIANGLES. } yield return this.drawCommand; } #endregion }逐行解释上述程序
这段程序定义了一个名为 CubeModel 的类,它实现了接口 IBufferSource,表示它可以提供 GPU 缓冲区数据。类中定义了一个静态的 float 类型变量 halfLength,它表示立方体边长的一半,以及一个静态的 vec3 类型数组 positions,它包含了立方体的 8 个顶点的坐标。还定义了一个静态的 uint 类型数组 indexes,它包含了构成立方体的 6 个面的索引数据。
接着,类中实现了 IBufferSource 接口的两个方法:GetVertexAttribute 和 GetDrawCommand。GetVertexAttribute 方法接受一个字符串参数 bufferName,如果参数等于 "position",则返回 positionBuffer,它是 positions 数组的映射到 GPU 端的缓冲区;如果参数不等于 "position",则抛出 ArgumentException 异常。GetDrawCommand 方法返回一个 DrawElementsCmd 对象,表示绘制立方体的指令。
在 CubeModel 类中,还定义了一个常量字符串 strPosition,它的值是 "position"。还有一个 VertexBuffer 类型的变量 positionBuffer,表示 position 缓冲区数据在 GPU 端的映射。还有一个 IDrawCommand 类型的变量 drawCommand,表示绘制立方体的命令。
阅读全文