plus做画板简单实现方法

By admin at 2020-02-23 • 0人收藏 • 276人看过

aardio的新建工程里面, 有个示例 [简单画板] , 很完整了, 位置如下:

image.png


我这里新增一个 [点选功能] , 能够删除所选择的线

简单的代码示例如下:

image.png

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=642;border="dialog frame")
winform.add(
button={cls="button";text="画";left=680;top=595;right=757;bottom=635;z=6};
button2={cls="button";text="随机生成";left=593;top=596;right=670;bottom=636;z=9};
button3={cls="button";text="删除所选线";left=596;top=539;right=760;bottom=579;z=10};
plus={cls="plus";left=0;top=0;right=760;bottom=537;bgcolor=8421376;notify=1;z=1};
q1={cls="edit";left=59;top=606;right=155;bottom=635;edge=1;z=2};
q2={cls="edit";left=161;top=606;right=257;bottom=635;edge=1;z=3};
static={cls="static";text="起点";left=2;top=606;right=57;bottom=635;transparent=1;z=7};
static2={cls="static";text="终点";left=308;top=606;right=363;bottom=635;transparent=1;z=8};
z1={cls="edit";left=371;top=604;right=467;bottom=633;edge=1;z=4};
z2={cls="edit";left=471;top=604;right=567;bottom=633;edge=1;z=5}
)
/*}}*/

import console
console.open()

var mtab = {};
var panding = function(mtab,x,y,fuzzyDistance){
	if(mtab){
       for(i=1;#mtab;1){
        	if(math.sqrt((mtab[i][1]-mtab[i][3])**2 + (mtab[i][2]-mtab[i][4])**2) + fuzzyDistance >= math.sqrt((mtab[i][1]-x)**2 + (mtab[i][2]-y)**2) + math.sqrt((mtab[i][3]-x)**2 + (mtab[i][4]-y)**2))
        	{
        		return true,i; 
        	}
       }
       return false,null;
   }
}

var selLine = null;
winform.plus.onMouseClick = function(wParam,lParam){
    var x,y = win.getMessagePos(lParam);
	console.log(x,y)
	var ret,sel = panding(mtab,x,y,2)
	selLine = sel;
	console.log(ret,selLine)
	winform.plus.redraw()
	
}
winform.plus.onMouseEnter = function(wParam,lParam){
	win.ui.waitCursor(true,::User32.LoadCursor(null,0x7F03/*_IDC_CROSS*/));
}
winform.plus.onMouseLeave = function(wParam,lParam){
    win.ui.waitCursor(false);
}

winform.plus.onDrawBackground = function(graphics,rc,backgroundColor,clr){
    var pen = gdip.pen(0xFF006666,2);
    var pensel = gdip.pen(0xFFC43152,2);
	//graphics.drawLine(pen,(rc.right-rc.left)/2,rc.top,(rc.right-rc.left)/2,rc.bottom);
	
	if(mtab){
       for(i=1;#mtab;1){
           if(selLine==i){  
           		graphics.drawLine(pensel,mtab[i][1],mtab[i][2],mtab[i][3],mtab[i][4]);	
           }else {  
           		graphics.drawLine(pen,mtab[i][1],mtab[i][2],mtab[i][3],mtab[i][4]);
           }
       }
   }
	
	pen.delete()
	pensel.delete()
	return true;//返回true阻止绘制默认背景
}

winform.plus.orphanWindow(true)



winform.button.oncommand = function(id,event){

	table.push(mtab,{winform.q1.text;winform.q2.text;winform.z1.text;winform.z2.text});
	winform.plus.redraw()
	console.dump(mtab)
}

winform.button2.oncommand = function(id,event){
	var q1 = math.random(0,500);
    var q2 = math.random(0,500);
    var z1 = math.random(0,500);
    var z2 = math.random(0,500);
    winform.q1.text = q1;
    winform.q2.text = q2;
    winform.z1.text = z1;
    winform.z2.text = z2;
}

winform.button3.oncommand = function(id,event){
    if(selLine){
    	table.remove(mtab,selLine);
    	selLine = null;
		winform.plus.redraw()	
    }
    
}

winform.show();
win.loopMessage();


以上只是演示用, 实际应该要在mtab表里面设置颜色线宽等等参数, 来表述不同的线.


通过以上类似方法可以增加:

点是否在圆上, 点是否在弧线上........ 实现可选可控功能.

登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前正在学aardio+halcon机器视觉.
Sciter中文在线文档Sciter在线学习文档
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
C大Aardio论坛:Aar爱好者论坛
简码教程网:简码编程
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...