温故知新 (I) Halcon 画直线、虚线、圆、矩形
温故而知新
先建一个窗体吧。我想不管做什么都需要这个开头吧
*关闭窗体
dev_close_window ()
*打开窗体(窗体左上角x坐标,窗体左上角y坐标,窗体长,窗体宽,背景颜色,窗体名称)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
一、画线
*算子draw_line(窗体名称,起始点x坐标,起始点y坐标,终止点x坐标,终止点y坐标)
draw_line (WindowHandle, Row1, Column1, Row2, Column2)
disp_line (WindowHandle, Row1, Column1, Row2, Column2)
执行到draw_line的时候会让你在窗体上画一条线,画完线后鼠标右键确认,就退出了画线状态(我是这么认为的,具体是怎么叫,其实无所谓了。能记得住的就可以),至于说还可以按esc键,没尝试过,还真不清楚。
退出后,如果没有后面那就disp_line(…),那就什么都没有,只有起始点和终止点坐标被记录了下来,也就是上面的
起始点x坐标,起始点y坐标 Row1, Column1
终止点x坐标,终止点y坐标 Row2, Column2
现在需要这条线显示的话,那么在加上这句话disp_line
disp可以看作display 显示的意思
line 则表示行(所以我现在也不是很理解我现在画的这个是线还是行)
最终效果:
最终效果就是一条线显示。
二、虚线
从“一”可以知道画线和显示就两句画,draw跟disp。但是画虚线的话,很多人还是不知道。至少我在网络上找如何画虚线的时候。很少有列子提供参考。唯数不多的资料,就我这水平能力,能找到最相近的,也就下面这个了。
链接: Halcon——绘制虚线
而且我看了一下,这几句话还是就在halcon帮助里就有的
而想要画虚线的方法就是:
set_line_style (WindowHandle, [10])
也是用这句话。只不过需要将这句话写到draw跟disp的中间,才能让直线变成虚线。
*算子draw_line(窗体名称,起始点x坐标,起始点y坐标,终止点x坐标,终止点y坐标)
draw_line (WindowHandle, Row1, Column1, Row2, Column2)
set_line_style (WindowHandle, [10])
disp_line (WindowHandle, Row1, Column1, Row2, Column2)
set_line_style (WindowHandle, [])
最终效果是:
就能画条(或者说,生成一条)虚线
最后面的
set_line_style (WindowHandle, [])
为什么又要写一遍,并置空呢?
原因是set_line_style就像是dev_set_color(‘red’)设置属性一样。如果更改后,没有再给它改回去,那么它后面就会以set_line_style (WindowHandle, [10])的属性继续执行。
三、画圆
*算子draw_circle (窗体,圆中心x坐标,圆中心y坐标,圆半径)
draw_circle (WindowHandle, Row, Column, Radius)
同样是以鼠标右键确认。
这里画完后数据同意也有保存,但是想让圆显示的话,就需要用到
空心圆
gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1)
如果在上一步,画虚线的时候,没有
set_line_style (WindowHandle, [])
那么就会出现一个虚线的空心圆
所以在用完set_line_style后,如果非必要,最好还是加上一句set_line_style (WindowHandle, []),把属性改回来。
实心圆
gen_circle (Circle, Row, Column, Radius)
还是挺有意思的嘛。
矩形
draw_rectangle1 (WindowHandle, Row11, Column11, Row21, Column21)
显示的算子跟画圆的一致
gen_rectangle1 (Rectangle, Row11, Column11, Row21, Column21)
不过怎么画空心矩形就是个问题了,有能力的朋友麻烦指点一下。因为我怎么找也没看见gen_rectangle1_contour_xld了,只能看见gen_rectangle2_contour_xld。
在此感谢大佬的支援:
最终可以实现空心矩形的画法。
最后附上所有的代码
*关闭窗体
dev_close_window ()
*打开窗体(窗体左上角x坐标,窗体左上角y坐标,窗体长,窗体宽,背景颜色,窗体名称)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*算子draw_line(窗体名称,起始点x坐标,起始点y坐标,终止点x坐标,终止点y坐标)
draw_line (WindowHandle, Row1, Column1, Row2, Column2)
set_line_style (WindowHandle, [10])
disp_line (WindowHandle, Row1, Column1, Row2, Column2)
set_line_style (WindowHandle, [])
stop()
*清屏幕
dev_clear_window ()
draw_circle (WindowHandle, Row, Column, Radius)
*实心圆
gen_circle (Circle, Row, Column, Radius)
*空心圆
*gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, 6.28318, 'positive', 1)
stop()
dev_clear_window ()
*实现空心矩形的方式
dev_set_draw('margin')
*矩形
draw_rectangle1 (WindowHandle, Row11, Column11, Row21, Column21)
gen_rectangle1 (Rectangle, Row11, Column11, Row21, Column21)
留言
敲了这么久,结果才是一点点的东西,这可能只是我迈出的一小步,想要达到一定的高度还遥遥无期。有点感慨那些成千上万字的大佬们,把总结写的那么好,真的是辛苦了,值得我学习。这路子果然还长着的。
辗转反侧,最终还是来自己的文章上看以前的写的东西啊。
上一篇: 论语》2.11:学而时习之,不亦说乎?