dev_set_draw( : : DrawMode : )
时间: 2024-02-04 07:02:45 浏览: 32
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中的接口进行查询。
相关问题
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 接口。
```c#
class CubeModel : IBufferSource {
```
类中定义了一个常量 halfLength,值为 0.5。
```c#
private const float halfLength = 0.5f;
```
类中定义了一个静态只读的 vec3 数组 positions,包含了八个顶点的位置。
```c#
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
};
```
类中定义了一个静态只读的 uint 数组 indexes,包含了组成立方体的三角形面的顶点索引。
```c#
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.
};
```
类中定义了一个常量 strPosition,值为 "position"。
```c#
public const string strPosition = "position";
```
类中定义了一个私有的 VertexBuffer 类型的 positionBuffer,用于在 GPU 中存储顶点位置数据。
```c#
private VertexBuffer positionBuffer; // array in GPU side.
```
类中定义了一个私有的 IDrawCommand 类型的 drawCommand,用于在 GPU 中绘制立方体。
```c#
private IDrawCommand drawCommand;
```
接下来是实现 IBufferSource 接口的方法。
```c#
#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");
}
}
```
GetVertexAttribute 方法返回一个可枚举的 VertexBuffer 集合,根据输入的 bufferName 参数选择返回的 VertexBuffer。如果 bufferName 的值等于 strPosition 常量的值,则返回存储顶点位置数据的 positionBuffer;否则抛出 ArgumentException 异常。
```c#
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
```
GetDrawCommand 方法返回一个可枚举的 IDrawCommand 集合,返回用于绘制立方体的 IDrawCommand。如果 drawCommand 为空,则创建一个 IDrawCommand 对象,存储绘制立方体所需的索引数据,并将其赋值给 drawCommand 变量。然后返回该 drawCommand 变量。
GLfloat initX = 0, initY = 0; GLfloat oldx = 0, oldy = 0; int times = 0; bool gDrawline = false; void drawkoch(GLfloat dir, GLfloat len, GLint iter) { GLdouble dirRad = dir * 3.1415926 / 180.f; GLfloat newX = oldx + len * cos(dirRad); GLfloat newY = oldy + len * sin(dirRad); if (iter == 0) { glVertex2f(oldx, oldy); glVertex2f(newX, newY); oldx = newX; oldy = newY; } else { iter--; len = len / 3; drawkoch(dir, len, iter); dir += 60; drawkoch(dir, len, iter); dir -= 120; drawkoch(dir, len, iter); dir += 60; drawkoch(dir, len, iter); } } typedef GLfloat point2d[2]; int iter = 0; float snowAngle = 0; point2d p = { 960, 20 }; point2d anyline[2]; point2d pp; void CMFCGLSetupView::OnDraw(CDC* pDC) { CMFCGLSetupDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here wglMakeCurrent(pDC->m_hDC, m_hRC); oldx = initX; oldy = initY; glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, Cx, 0, Cy, -1000, 1000); switch (drawMode) { case 0: glTranslatef(400, 450, 0); glBegin(GL_LINES); glColor3f(0.0, 1.0, 0.0); drawkoch(0, 500, iter); glEnd(); break; case 1: glTranslatef(400, 450, 0); glPushMatrix(); glTranslated(250, -125 * sqrt(3), 0); glRotated(snowAngle, 0, 1, 0); glTranslated(-250, 125 * sqrt(3), 0); glBegin(GL_LINES); glColor3f(0.0, 1.0, 0.0); drawkoch(0, 500, iter); drawkoch(-120, 500, iter); drawkoch(-240, 500, iter); glEnd(); glPopMatrix(); break; case 2: if (gDrawline) { oldx = anyline[0][0]; oldy = anyline[0][1]; point2d v; v[0] = (anyline[1][0] - anyline[0][0]); v[1] = (anyline[1][1] - anyline[0][1]); float len = sqrt(v[0] * v[0] + v[1] * v[1]); v[0] /= len; v[1] /= len; point2d n = { 1, 0 }; float cosTheta = v[0] * n[0] + v[1] * n[1]; float angle = acos(cosTheta) * 180.f / PI; if (anyline[1][1] < anyline[0][1]) { angle = -angle; } glBegin(GL_LINES); drawkoch(angle, len, iter); glEnd(); } break; default: break; } glBegin(GL_POINTS); glVertex2f(pp[0], pp[1]); glEnd(); glFlush(); wglMakeCurrent(pDC->m_hDC, NULL); }
这段代码是使用OpenGL库绘制Koch曲线的实现。具体来说,这段代码定义了一个名为`drawkoch`的函数,该函数使用递归的方式绘制Koch曲线。在`OnDraw`函数中,根据不同的`drawMode`变量值,选择不同的绘制模式来绘制Koch曲线:
- 当`drawMode`为0时,绘制一个普通的Koch曲线;
- 当`drawMode`为1时,绘制一个Koch雪花;
- 当`drawMode`为2时,绘制用户自定义的线段。
其中,绘制Koch曲线和Koch雪花的实现方式相同,都是调用`drawkoch`函数来进行递归绘制。而绘制用户自定义线段的方式则需要先计算出线段的长度和方向,然后调用`drawkoch`函数来进行绘制。
此外,代码中还定义了一些全局变量,如`initX`、`initY`、`oldx`、`oldy`等,用于记录绘制Koch曲线时的初始点和当前绘制点的坐标。还有一些辅助函数,如计算角度和距离的函数等。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)