11、自定义函数
当开始一个新的HDevelop程序时,只有一个主函数,随着代码的增加,时常发现一大块代码可以重复使用或者可以构成一个小的单元使得代码窗口更加清晰。这种情况下可以把相应的程序行新建成一个函数。方法如下:
- 选中要创建函数的行
- 右键单击-------创建新函数:
①:函数的名字
②:这个复选框决定这个函数式本地函数还是外部函数,本地函数保存在HDevelop程序内,而外部函数作为单独
的文件保存。可不函数可以再其他的HDevelop程序中使用并可以修改编辑该函数。当不勾选时,表示把1、中选中这几行代码创建为一个外部函数,只有在不勾选的情况下⑤才会弹出。
③:对这个函数进行加密,使用时要输入密码才可以使用。
④:创建新的函数后,是否把这个函数代替原来选中的那几行代码
⑤:当创建外部函数时,要求选择一个路径,这个路径默认是C:/Program Files/MVTec/HALCON-10.0/procedures/,
也可以选择其他路径,当选择其他路径时,它会提示是否把这个新的路径加入外部目录。当HDevelop软件启动时,它会自动扫描外部目录,把外部目录下的函数加载进来,存放到下面列表中,随时提供用户使用。
注:若想使用别人创建好的函数,先把函数复制到外部目录,但启动软件时,它会扫描外部目录。
⑥:参数分为:图形变量和控制变量
⑦:选中方案:根据1、中选中这几行代码中的变量的先后出现顺序以及次数,HDevelop建议把那个变量作为输
入,那个变量作为输出。
- 一般文档和参数文档:可以设置这个函数的参数的提示以及默认值,使得它像Halcon说明文档中的算子一样,在使用过程中当鼠标靠近它会自动提示它的语意以及默认值等信息。
- 创建完成后效果如下图:
- 可以右键单击这个函数并进入函数体并可以重新编辑:
- 变量的作用域(局部或全局):
(1)、声明:
HDelelop所有的变量都是默认为全局变量,也就是它们值存在于它们所在的函数中,因此不同函数的局部变量可以以相同的名字存在,它们相互没有干扰。与此相反,全部变量是整个程序中可以访问,使用全局变量必须使用算子global进行显式声明。
如:
声明一个全局的控制变量(变量名为File,可以随意修改)
global tuple File
声明一个全局的图像变量(变量名为Image,可随意修改)
global object Image
注:
关键字def允许在变量定义的地方标记一个显式声明,如,global def object Image,字只有把HDevelop程序到处为一种编程语言是才有意义,更多信息,参见global算子。
(2)、使用:
如果想在另外一个函数中访问全局变量,必须也要在该函数中再一次声明(如果不声明则会认为这个同名的
变量为局部变量)。
例:
global tuple File
global object Image
File:='Clip'
read_image (Image, File)
prcoess_image()//调用prcoess_image函数
*******************************************************************************
*********************prcoess_image()函数体************************************
global object Image//再次声明Image是全局变量
bin_threshold(Image, Region)//读取去全局变量,这时全区变量的值为'Clip'图片
File:='fuse'//修改File变量
read_image(Image,File)//修改Image变量
分析:由于全局变量Image在函数prcoess_image()中再次声明,所以它一直被认为是全局的变量使用 而File变量没有在函数prcoess_image()中再次声明,所以它被认为是一个prcoess_image()局部变量
全局变量在变量窗口中有一个"地球"的标识