cchart波形图表在aardio中的简单调用示例
首先介绍下这个图表:
CChart可以绘制多种二维、三维曲线,包括折线图、等高线图、云图、饼图、柱图、散点图、面积图、直方图、极线图、甘特图、雷达图、瀑布图、K线图,频谱图等,功能非常全面。 而且,CChart内部选项极为丰富,无论是曲线本身,还是标题、坐标轴、图例、背景、图像注释等部分,都有大量的选项可供设置,甚至消息响应、右键菜单等元素,都提供了自定义的方法。
CChart最大的优势,还是在于其对用户的友好性。在追求功能的同时,CChart在简化调用方面,做到了极致,一般只用几句代码就可以画出精致的图像。这一点可以说不仅胜过绝大部分非商业的图表软件,甚至不输于大部分商业图表软件。
CChart 开源免费, 支持MIT开源协议
CChart官方:http://www.cchart.net/
提示: 此 cchart.dll 可以通过$符号内嵌到exe里, 这样就可以生成完全绿色版独立exe了,使用波形图的时候不用释放dll到外部目录.
2020/10/24更新:
jacen在aardio v28.20版本中的dll查看工具里增加了一个非常实用的功能, 以后遇到用c++编译的函数复用类型的dll , 可以直接用此工具生成aardio中可以直接使用的代码.
如下图所示:
可以把偷懒做到极致了.哈哈
注意: 使用下面的代码,请升级aardio到 v27 版本以上 , 因为下面的tocdecl函数,需要新增的功能支持.
下面的代码中, 主要看下dll中的回调函数在 aardio中怎么定义
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="创建";left=0;top=420;right=160;bottom=470;db=1;dl=1;z=2}; button2={cls="button";text="画图";left=183;top=420;right=343;bottom=470;db=1;dl=1;z=3}; static={cls="static";text="Static";left=0;top=0;right=760;bottom=407;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ var dll = ..raw.loadDll("\res\CChartu.dll","ccshare","cdecl"); Attach = dll.api("?Attach@Classless@@YAHPAUHWND__@@@Z", "int(addr hwnd)");//int __cdecl Attach(struct HWND__ *) CreateChart = dll.api("?CreateChart@Classless@@YAXXZ", "void(void)"); DestroyChart = dll.api("?DestroyChart@Classless@@YAXXZ", "void(void)"); SetType = dll.api("?SetType@Classless@@YA_NH@Z", "byte(int)");//bool __cdecl SetType(int) //静态回调函数 SetFieldFcn = dll.api("?SetFieldFcn@Classless@@YAXP6ANNN@Z@Z", "void(pointer fun)");//void __cdecl SetFieldFcn(double (__cdecl*)(double,double)) SetPlotRange = dll.api("?SetPlotRange@Classless@@YAXNNNN@Z", "void(double, double, double, double)");//(void __cdecl SetPlotRange(double,double,double,double)) ReDraw = dll.api("?ReDraw@Classless@@YAXXZ", "void(void)");//void __cdecl ReDraw(void) SetTitle = dll.api("?SetTitle@Classless@@YAXPB_W@Z", "void(ustring title)");//void __cdecl SetTitle(wchar_t const *) SimpleMsgLoop = dll.api("?SimpleMsgLoop@NsCChart@@YAHXZ", "void(void)"); winform.static.onEraseBkgnd = function(hwnd,message,wParam,lParam){ return 0;//禁止擦除背景 }; winform.button.oncommand = function(id,event){ CreateChart(); Attach(winform.static.hwnd); ReDraw(); } import console console.open() //定义静态回调函数 func = function(x,y){ var ret = 1.0/(x*x+y*y+1.0); return ret; } //dll中在别的线程中调用,所以这里用thread func_c = thread.tocdecl(func,"double(double,double)"); winform.button2.oncommand = function(id,event){ SetType(6) //主要看这个: 静态回调 SetFieldFcn(func_c); SetPlotRange(-3.0, 3.0, -2.0, 2.0); SetTitle("GCC标题"); ReDraw(); //SimpleMsgLoop(); } winform.show(); win.loopMessage(); return winform;
CChart 4.7.0.1版本
(注意:4.7.0由于增加了很多函数,此版本dll内函数有些是和之前版本不一样的,所以不能直接替换下面的示例中的dll , 请参考压缩包内Exports文件 , 自行替换下函数名)
下面是之前旧版本的cchart.dll文件
函数H头文件
↓↓↓↓↓以下所有aardio调用cchart示例集合工程:
这里补充个问题:
群里有人说如果mainform界面中有两个custom每个custom调用一个cchart的波形图界面, 会弹出错误[unpaird open strip at 1] 这样的错误提示
答: 将两个界面中的调用改为raw.loadll($"/res/cchart.dll",,"cdecl")即可, 共享名删除, 地址前加$符号.
cchart 第一个示例:
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="第一个示例";left=0;top=440;right=119;bottom=470;db=1;dl=1;z=2}; static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;transparent=1;z=1} ) /*}}*/ //调用CChart波形图动态库函数 var dll = raw.loadDll("\res\CChartu.dll","ccshare","cdecl"); Attach = dll.api("?Attach@Classless@@YAHPAUHWND__@@H@Z", "int(addr hwnd,int)"); Detach = dll.api("?Detach@Classless@@YA_NPAUHWND__@@@Z", "int(addr hwnd)"); CreateChart = dll.api("?CreateChart@Classless@@YAXXZ", "void(void)"); DestroyChart = dll.api("?DestroyChart@Classless@@YAXXZ", "void(void)"); ReDraw = dll.api("?ReDraw@Classless@@YAXXZ", "void(void)"); SetTitle = dll.api("?SetTitle@Classless@@YAXPB_W@Z", "void(ustring title)"); // AddPoint2D = dll.api("?AddPoint2D@Classless@@YAHNNHH@Z", "int(double,double,int,int)"); CreateChart(); //绑定窗口,并设置XY折线图样式 Attach(winform.static.hwnd,0);//kTypeXY = 0 折线图 ReDraw(); winform.button.oncommand = function(id,event){ AddPoint2D(-3.0, 9.0 ,0,0); AddPoint2D(-2.0, 4.0 ,0,0); AddPoint2D(-1.0, 1.0 ,0,0); AddPoint2D(0.0, 0.0 ,0,0); AddPoint2D(1.0, 1.0 ,0,0); AddPoint2D(2.0, 4.0 ,0,0); AddPoint2D(3.0, 9.0 ,0,0); SetTitle("Hello World,我的第一个CChart程序!"); ReDraw(); } winform.onClose = function(hwnd,message,wParam,lParam){ Detach(winform.static.hwnd); DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第三例: 等高线
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="第一个示例";left=0;top=440;right=119;bottom=470;db=1;dl=1;z=2}; static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ //调用CChart波形图动态库函数 var dll = raw.loadDll("\res\CChartu.dll","ccshare","cdecl"); Attach = dll.api("?Attach@Classless@@YAHPAUHWND__@@H@Z", "int(addr hwnd,int)"); Detach = dll.api("?Detach@Classless@@YA_NPAUHWND__@@@Z", "int(addr hwnd)"); CreateChart = dll.api("?CreateChart@Classless@@YAXXZ", "void(void)"); DestroyChart = dll.api("?DestroyChart@Classless@@YAXXZ", "void(void)"); ReDraw = dll.api("?ReDraw@Classless@@YAXXZ", "void(void)"); SetTitle = dll.api("?SetTitle@Classless@@YAXPB_W@Z", "void(ustring title)"); //静态回调函数 SetFieldFcn = dll.api("?SetFieldFcn@Classless@@YAXP6ANNN@Z@Z", "void(pointer fun)");//void __cdecl SetFieldFcn(double (__cdecl*)(double,double)) SetPlotRange = dll.api("?SetPlotRange@Classless@@YAXNNNN@Z", "void(double, double, double, double)");//(void __cdecl SetPlotRange(double,double,double,double)) SetContourPrecision = dll.api("?SetContourPrecision@Classless@@YAXH@Z", "void(int)"); SetContourLineNum = dll.api("?SetContourLineNum@Classless@@YAXH@Z", "void(int)"); CreateChart(); Attach(winform.static.hwnd,4);//kTypeContourLine=4 等高线图 //定义静态回调函数 func = function(x,y){ var ret = 1.0/((x-1.0)*(x-1.0)+y*y+1.0); return ret; } //dll中在别的线程中调用,所以这里用thread func_c = thread.tocdecl(func,"double(double,double)"); SetFieldFcn(func_c); SetPlotRange(-2.0, 2.0, -2.0, 2.0); SetTitle("Cchart等高线"); //设置等高线的精度,一般设置为5或者6就可以了。设置得越高,第一次绘制的时候延迟就越长 SetContourPrecision(8); //设置等高线高度的个数 SetContourLineNum(50); ReDraw(); winform.onClose = function(hwnd,message,wParam,lParam){ Detach(winform.static.hwnd); DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第四例: 折线图 的一些操作
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="第一个示例";left=0;top=440;right=119;bottom=470;db=1;dl=1;z=2}; static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ var dll = ..raw.loadDll("\res\CChartu.dll","ccshare","cdecl"); Attach = dll.api("?Attach@Classless@@YAHPAUHWND__@@H@Z", "int(addr hwnd,int)");//int __cdecl Attach(struct HWND__ *) CreateChart = dll.api("?CreateChart@Classless@@YAXXZ", "void(void)"); DestroyChart = dll.api("?DestroyChart@Classless@@YAXXZ", "void(void)"); Detach = dll.api("?Detach@Classless@@YA_NPAUHWND__@@@Z", "int(addr hwnd)"); SetType = dll.api("?SetType@Classless@@YA_NH@Z", "byte(int)");//bool __cdecl SetType(int) ReDraw = dll.api("?ReDraw@Classless@@YAXXZ", "void(void)");//void __cdecl ReDraw(void) SetTitle = dll.api("?SetTitle@Classless@@YAXPB_W@Z", "void(ustring title)");//void __cdecl SetTitle(wchar_t const *) AddCurve = dll.api("?AddCurve@Classless@@YAHPAN0HH@Z", "int(struct,struct,int,int)");//int __cdecl AddCurve(double* ,double*,int,int); AddAxis = dll.api("?AddAxis@Classless@@YAXHH@Z", "void(int, int)");//void __cdecl AddAxis(int,int) SetLegendShow = dll.api("?SetLegendShow@Classless@@YAX_NH@Z", "void(bool,int)"); SetDataTitle = dll.api("?SetDataTitle@Classless@@YAXPB_WHH@Z", "void(ustring,int,int)"); SetAxisTitle = dll.api("?SetAxisTitle@Classless@@YAXPB_WHH@Z", "void(ustring,int,int)"); SetGridLine = dll.api("?SetGridLine@Classless@@YAX_N000H@Z", "void(bool,bool,bool,bool,int)"); SetBkgndColor = dll.api("?SetBkgndColor@Classless@@YAXKH@Z", "void(INT,int)"); CreateChart(); Attach(winform.static.hwnd,0);//kTypeXY=0 折线图 var x = { double arr[200] = {0} }; var y = { double arr[200] = {0} }; for(i=1;200;1){ x.arr[i] = i ; y.arr[i] = 5.0*math.sin(i*2.0*3.14/360.0*3.0) ; } AddCurve(x,y,200,0); //显示图例 SetLegendShow(true,0) //设置图例名称 SetDataTitle("aardio王菲",0,0) //设置轴名,左坐标轴为0,下坐标轴为1,右坐标轴为2,上坐标轴为3 SetAxisTitle("左边轴名",0,0); SetAxisTitle("下边轴名",1,0); //设置显示网格 SetGridLine(true,true,true,true,0); //设置背景色 SetBkgndColor(0xFFE6C2,0); ReDraw(); winform.onClose = function(hwnd,message,wParam,lParam){ Detach(winform.static.hwnd); DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第五例: 饼图
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="第一个示例";left=0;top=440;right=119;bottom=470;db=1;dl=1;z=2}; static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ var dll = ..raw.loadDll("\res\CChartu.dll","ccshare","cdecl"); Attach = dll.api("?Attach@Classless@@YAHPAUHWND__@@H@Z", "int(addr hwnd,int)");//int __cdecl Attach(struct HWND__ *) CreateChart = dll.api("?CreateChart@Classless@@YAXXZ", "void(void)"); DestroyChart = dll.api("?DestroyChart@Classless@@YAXXZ", "void(void)"); Detach = dll.api("?Detach@Classless@@YA_NPAUHWND__@@@Z", "int(addr hwnd)"); SetType = dll.api("?SetType@Classless@@YA_NH@Z", "byte(int)");//bool __cdecl SetType(int) ReDraw = dll.api("?ReDraw@Classless@@YAXXZ", "void(void)");//void __cdecl ReDraw(void) SetTitle = dll.api("?SetTitle@Classless@@YAXPB_W@Z", "void(ustring title)");//void __cdecl SetTitle(wchar_t const *) AddPie = dll.api("?AddPie@Classless@@YAHNPA_W@Z", "int(double,ustring)"); CreateChart(); Attach(winform.static.hwnd,1);//kTypePie=1 饼图 AddPie(28,"VB"); AddPie(22,"C++"); AddPie(21,"无名氏"); AddPie(39,"aardio"); ReDraw(); winform.button.oncommand = function(id,event){ } winform.show(); win.loopMessage(); return winform;
第六例: 柱状图
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="第一个示例";left=0;top=440;right=119;bottom=470;db=1;dl=1;z=2}; static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ var dll = ..raw.loadDll("\res\CChartu.dll","ccshare","cdecl"); Attach = dll.api("?Attach@Classless@@YAHPAUHWND__@@H@Z", "int(addr hwnd,int)");//int __cdecl Attach(struct HWND__ *) CreateChart = dll.api("?CreateChart@Classless@@YAXXZ", "void(void)"); DestroyChart = dll.api("?DestroyChart@Classless@@YAXXZ", "void(void)"); Detach = dll.api("?Detach@Classless@@YA_NPAUHWND__@@@Z", "int(addr hwnd)"); SetType = dll.api("?SetType@Classless@@YA_NH@Z", "byte(int)");//bool __cdecl SetType(int) ReDraw = dll.api("?ReDraw@Classless@@YAXXZ", "void(void)");//void __cdecl ReDraw(void) SetTitle = dll.api("?SetTitle@Classless@@YAXPB_W@Z", "void(ustring title)");//void __cdecl SetTitle(wchar_t const *) SetDataTitle = dll.api("?SetDataTitle@Classless@@YAXPB_WHH@Z", "void(ustring,int,int)"); SetLegendShow = dll.api("?SetLegendShow@Classless@@YAX_NH@Z", "void(bool,int)"); AddStems = dll.api("?AddStems@Classless@@YAHPANH@Z", "int(struct,int)"); SetStemLabel = dll.api("?SetStemLabel@Classless@@YAXPB_WH@Z", "void(ustring,int)"); CreateChart(); Attach(winform.static.hwnd,2);//kTypeStem=2 柱图 var data = { double arr[4]={0}; }; data.arr[1]=28; data.arr[2]=22; data.arr[3]=21; data.arr[4]=39; AddStems(data,4); //显示图例 SetLegendShow(true,0) SetDataTitle("使用率1",0,0) SetStemLabel("VB",0); SetStemLabel("C++",1); SetStemLabel("无名氏",2); SetStemLabel("aardio",3); data.arr[1]=20; data.arr[2]=38; data.arr[3]=12; data.arr[4]=30; AddStems(data,4); SetLegendShow(true,1) SetDataTitle("使用率2",1,0) ReDraw(); winform.button.oncommand = function(id,event){ } winform.show(); win.loopMessage(); return winform;
第七例: 动态显示波形(实时波形)
此例子在第一个折线图例子上添加定时器得来
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="动起来";left=0;top=440;right=119;bottom=470;db=1;dl=1;z=2}; button2={cls="button";text="暂停";left=134;top=440;right=253;bottom=470;db=1;dl=1;z=3}; static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ var dll = ..raw.loadDll("\res\CChartu.dll","ccshare","cdecl"); Attach = dll.api("?Attach@Classless@@YAHPAUHWND__@@H@Z", "int(addr hwnd,int)");//int __cdecl Attach(struct HWND__ *) CreateChart = dll.api("?CreateChart@Classless@@YAXXZ", "void(void)"); DestroyChart = dll.api("?DestroyChart@Classless@@YAXXZ", "void(void)"); Detach = dll.api("?Detach@Classless@@YA_NPAUHWND__@@@Z", "int(addr hwnd)"); SetType = dll.api("?SetType@Classless@@YA_NH@Z", "byte(int)");//bool __cdecl SetType(int) ReDraw = dll.api("?ReDraw@Classless@@YAXXZ", "void(void)");//void __cdecl ReDraw(void) SetTitle = dll.api("?SetTitle@Classless@@YAXPB_W@Z", "void(ustring title)");//void __cdecl SetTitle(wchar_t const *) SetGridLine = dll.api("?SetGridLine@Classless@@YAX_N000H@Z", "void(bool,bool,bool,bool,int)"); SetBkgndColor = dll.api("?SetBkgndColor@Classless@@YAXKH@Z", "void(INT,int)"); // AddPoint2D = dll.api("?AddPoint2D@Classless@@YAHNNHH@Z", "int(double,double,int,int)"); CreateChart(); Attach(winform.static.hwnd,0);//kTypeXY=0 折线图 //设置显示网格 SetGridLine(true,true,true,true,0); //设置背景色 SetBkgndColor(0xFFE6C2,0); ReDraw(); var timeid; var index = 0; winform.button.oncommand = function(id,event){ //开定时器 timeid = winform.setInterval( 300,function(){ AddPoint2D(index, math.random(0,50) ,0,0); ReDraw(); index++; } ); } winform.button2.oncommand = function(id,event){ if(timeid){ //暂停定时器 winform.changeInterval(timeid,-1); } } //防止闪烁 winform.static.onEraseBkgnd = function(hwnd,message,wParam,lParam){ return 0;//禁止擦除背景 }; winform.onClose = function(hwnd,message,wParam,lParam){ Detach(winform.static.hwnd); DestroyChart(); } winform.show(); win.loopMessage(); return winform;
第八例: 三维线图个曲面图 (3dLine/surface)
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="第一个示例";left=0;top=440;right=119;bottom=470;db=1;dl=1;z=2}; static={cls="static";left=0;top=0;right=760;bottom=428;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ var dll = ..raw.loadDll("\res\CChartu.dll","ccshare","cdecl"); Attach = dll.api("?Attach@Classless@@YAHPAUHWND__@@H@Z", "int(addr hwnd,int)");//int __cdecl Attach(struct HWND__ *) CreateChart = dll.api("?CreateChart@Classless@@YAXXZ", "void(void)"); DestroyChart = dll.api("?DestroyChart@Classless@@YAXXZ", "void(void)"); Detach = dll.api("?Detach@Classless@@YA_NPAUHWND__@@@Z", "int(addr hwnd)"); SetType = dll.api("?SetType@Classless@@YA_NH@Z", "byte(int)");//bool __cdecl SetType(int) ReDraw = dll.api("?ReDraw@Classless@@YAXXZ", "void(void)");//void __cdecl ReDraw(void) SetTitle = dll.api("?SetTitle@Classless@@YAXPB_W@Z", "void(ustring title)");//void __cdecl SetTitle(wchar_t const *) AddCurve = dll.api("?AddCurve@Classless@@YAHPAN00H@Z", "int(struct,struct,struct,int)"); CreateChart(); Attach(winform.static.hwnd,12);//kType3DLine = 12 3维折线图 var x = { double arr[200] = {0} }; var y = { double arr[200] = {0} }; var z = { double arr[200] = {0} }; for(i=1;200;1){ x.arr[i] = 2.0*3.1415926536*i/200*5; ; y.arr[i] = math.cos(x.arr[i]); z.arr[i] = math.sin(x.arr[i]); } AddCurve(x,y,z,200); ReDraw(); winform.onClose = function(hwnd,message,wParam,lParam){ Detach(winform.static.hwnd); DestroyChart(); } winform.show(); win.loopMessage(); return winform;
同上的代码, 只需要将图表格式改为
Attach(winform.static.hwnd,13);//kType3DSurface=13 3维曲面图
第九例: 分裂图
import win.ui; /*DSG{{*/ var winform = win.form(text="aardio form";right=759;bottom=469) winform.add( button={cls="button";text="创建";left=0;top=420;right=160;bottom=470;db=1;dl=1;z=2}; button2={cls="button";text="画图";left=183;top=420;right=343;bottom=470;db=1;dl=1;z=3}; button3={cls="button";text="画图2";left=600;top=420;right=760;bottom=470;db=1;dl=1;z=4}; static={cls="static";text="Static";left=0;top=0;right=760;bottom=407;db=1;dl=1;dr=1;dt=1;notify=1;transparent=1;z=1} ) /*}}*/ var dll = ..raw.loadDll("\res\CChartu.dll","ccshare","cdecl"); Attach = dll.api("?Attach@Classless@@YAHPAUHWND__@@H@Z", "int(addr hwnd,int)");//int __cdecl Attach(struct HWND__ *) CreateChart = dll.api("?CreateChart@Classless@@YAXXZ", "void(void)"); DestroyChart = dll.api("?DestroyChart@Classless@@YAXXZ", "void(void)"); SetType = dll.api("?SetType@Classless@@YA_NH@Z", "byte(int)");//bool __cdecl SetType(int) //静态回调函数 SetFieldFcn = dll.api("?SetFieldFcn@Classless@@YAXP6ANNN@Z@Z", "void(pointer fun)");//void __cdecl SetFieldFcn(double (__cdecl*)(double,double)) SetPlotRange = dll.api("?SetPlotRange@Classless@@YAXNNNN@Z", "void(double, double, double, double)");//(void __cdecl SetPlotRange(double,double,double,double)) ReDraw = dll.api("?ReDraw@Classless@@YAXXZ", "void(void)");//void __cdecl ReDraw(void) SetTitle = dll.api("?SetTitle@Classless@@YAXPB_W@Z", "void(ustring title)");//void __cdecl SetTitle(wchar_t const *) SimpleMsgLoop = dll.api("?SimpleMsgLoop@NsCChart@@YAHXZ", "void(void)"); //ResizePlots = dll.api("?ResizePlots@Classless@@YAXH@Z", "void(int)");//void __cdecl ResizePlots(int) ResizePlots = dll.api("?ResizePlots@Classless@@YAXHHH@Z", "void(int,int,int)");//void __cdecl ResizePlots(int) AddCurve = dll.api("?AddCurve@Classless@@YAHPAN0HH@Z", "int(struct,struct,int,int)");//int __cdecl AddCurve(double* ,double*,int,int); AddAxis = dll.api("?AddAxis@Classless@@YAXHH@Z", "void(int, int)");//void __cdecl AddAxis(int,int) winform.static.onEraseBkgnd = function(hwnd,message,wParam,lParam){ return 0;//禁止擦除背景 }; CreateChart(); Attach(winform.static.hwnd,9);//kTypeSplit=9 分裂视图 ReDraw(); //ResizePlots第一个参数mode表示分裂的模式。查看Chart.h文件头部被注释掉的代码可知:mode=0表示不分裂;mode=1表示行列分裂;mode=2表示左一右二分裂;mode=3表示左二右一分裂;mode=3表示上一下二分裂;mode=4表示上二下一分裂 //第二个参数nRows表示分裂的行数,第三个参数nCols表示分裂的列数。这两个参数只有当mode=1时候才起作用,其它时候被忽略 ResizePlots(2,1,2); var x = { double arr[200] = {0} }; var y = { double arr[200] = {0} }; for(i=1;200;1){ x.arr[i] = i ; y.arr[i] = 5.0*math.sin(i*2.0*3.14/360.0*3.0) ; } AddCurve(x,y,200,0); AddAxis(0,0); for(i=1;200;1){ y.arr[i] = 2.0*math.sin(i*1.0*3.14/360.0*3.0) ; } AddCurve(x,y,200,1); AddAxis(0,1) for(i=1;200;1){ y.arr[i] = math.sin(i*6.0*3.14/360.0*3.0) ; } AddCurve(x,y,200,2); AddAxis(0,1) SetTitle("分裂图"); ReDraw(); winform.show(); win.loopMessage(); return winform;
回复#15 @周山下樵夫 :
你说的论坛的回复不成体系其实有所误解,你要知道我们毕竟不是 python 论坛,也要理解python是一个庞大复杂的开发环境,使用python的每个模块遇到的问题可能都不一样,例如有的模块引用失败是少复制了文件,引用了错误的位置,或者把64位当32位使用了,作为aardio的论坛,很难把使用python可能遇到的所有问题都包含进去,而且目前来说我遇到的询问 python 这类问题的,基本上分析了以后,大多数都发现问题出在 python 本身的使用上面,而不是 aardio 调用 python 这个环节。
aardio 中你使用任何一个扩展模块,只要一句import 调用就可以了,不需要任何复杂的操作,不存在版本碎片化的问题,也没有不同运行环境之间相互兼容的问题要处理,但 python 不是这样,python很复杂。例如pip,anaconda这些安装的模块,有时候你直接复制过去用不了,即使是python本身提供的运行环境都会出现相互不兼容的问题,并且非常麻烦,你用其他python打包工具也会遇到这些头疼的问题。
实际上 aardio 调用 python 的范例和文档是比较多的,
aardio 开发环境中就自带了几十个 aardio 调用 python的范例,
每一个范例我都写了详细的注释,从怎样引用 python 模块,到 python的基础语法都有介绍。也详细的介绍了 aardio 与 python 怎样交互。
实际上就以aardio论坛python版块的几个典型问题来说,
在 aardio 自带的范例、文档中都有非常详细的说明。这里我就复制几个关键的要点:
1、在aardio 中添加引用模块的目录其实非常简单,代码如下: py.appendPath("C:\Python34\Lib\site-packages\");
2、如果引用模块失败,那么你需要检查一下你引用的模块适不适合你运行的解释器版本,aardio 使用的是32位python,所以模块应当支持32位python解释器,aardio 中的 python 解释器实际上就是python官方提供的解释器环境,实际上你可以在 aardio 中调用 py.run(); 启动一个python.exe相似的环境,并且里面会显示python解释器的版本信息。
3、如果仍然引用模块失败,那么你可能需要联系该模块的作者,或者查看该模块的手册,是否需要安装其他的dll,或者其他的运行时等等,或者是否有任何特别的要求或限制。
这些知识 aardio 很难“形成一个体系”地提供给你,因为我们都不知道你遇到的具体问题是什么,发生在哪个环节,以论坛里的帖子来说 - 把 python 3.6的模块放到python 3.4 里都用不了 - 这真的不是 aardio 的锅啊。
登录后方可回帖
添加双Y轴曲线图:
所有支持的类型: