从NI Labview里提取一个3d控件cw3dgrph.ocx画三维波形图的
By
admin
at 2021-09-17 • 0人收藏 • 1232人看过
简单调用实例
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/
var dataX = {};
var dataY = {};
var dataZ = {};
var color = {};
// Parametric curve
for (t = 0; 50; 0.001) {
var x = (1 + 0.25 * math.cos(75 * t)) * math.cos(t);
var y = (1 + 0.25 * math.cos(75 * t)) * math.sin(t);
var z = t + 2.0 * math.sin(75 * t);
table.push(dataX,x);
table.push(dataY,y);
table.push(dataZ,z);
table.push(color,t);
}
var d3d = winform.createEmbed("CW3DGraphLib.CWGraph3D.1")._object;
with d3d{
Caption = "demo"
Enabled = true;//图形使能
FastDraw = true;//快速绘制
//ImmediateUpdates = false;
Use3DHardwareAcceleration = true;
Windowless = true;
//ViewMode = 0;//视角:0=XYPlane,1=XZPlane,2=YZPlane,3=UserDefined
//GridXY = false;
//GridXZ = false;
//GridYZ = false;
AmbientLightColor = 0xcccccc;
BackColor = 0xcc5577;
GridSmoothing = true;
GridFrameColor = 0xccdd77;
GraphFrameVisible = false;//画框边框
GraphFrameColor = 0x33cc77;
//PlotAreaColor = 0x778899;
Plot3DCurve( dataX , dataY, dataZ,color );
//Plot3DMesh( dataX , dataY, dataZ,color );
//ClearData();
}
winform.show();
win.loopMessage();消除[试用版]提示的方法: 注册表中添加下面项即可.
import win.reg;
regLic = win.reg("HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Licenses\C6429907-9DBF-438C-B904-BC632CE9EA13");
if(! regLic.queryValue("") ) regLic.setSzValue("","pooglhnjlgcnabnoiegdmlpobiogoipdblpjklgmfabnnlgcikknbalipoblhffo");或者, 直接运行下面压缩包里的do.reg在注册表中注册.
详细示例看楼下三楼.





3 个回复 | 最后更新于 2021-09-19
移植的示例:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=784;bottom=641)
winform.add(
AUTOSCALE={cls="checkbox";text="Autoscale";left=608;top=62;right=710;bottom=76;z=4};
AXIS={cls="combobox";left=595;top=13;right=731;bottom=33;edge=1;items={"XAxis";"YAxis";"ZAxis"};mode="dropdown";z=3};
AutoscaleNow={cls="button";text="Autoscale Now";left=581;top=81;right=750;bottom=111;z=5};
AutoscalePlot={cls="checkbox";text="Autoscale Plot";left=445;top=528;right=555;bottom=546;z=31};
CAPTION={cls="edit";left=621;top=265;right=719;bottom=287;edge=1;z=15};
CWGRAPH3D1={cls="picturebox";left=0;top=0;right=559;bottom=512;bgcolor=12639424;db=1;dl=1;dr=1;dt=1;z=2};
ColorMapStyle={cls="combobox";left=677;top=582;right=772;bottom=602;edge=1;items={"cwNone";"cwShaded";"cwColorSpectrum";"cwGrayScale";"cwCustom"};mode="dropdown";z=36};
GRID_MAJOR={cls="checkbox";text="Major";left=582;top=527;right=665;bottom=545;z=29};
GRID_MINOR={cls="checkbox";text="Minor";left=682;top=527;right=765;bottom=545;z=30};
GenetatePlot={cls="button";text="Genetate Plot";left=13;top=518;right=142;bottom=552;z=32};
INVERTED={cls="checkbox";text="Inverted";left=582;top=211;right=665;bottom=229;z=12};
LABELS_NORMAL={cls="checkbox";text="Normal";left=582;top=356;right=665;bottom=374;z=19};
LABELS_OPPOSITE={cls="checkbox";text="Opposite";left=682;top=356;right=765;bottom=374;z=20};
LOG={cls="checkbox";text="Log";left=682;top=211;right=765;bottom=229;z=13};
MAXIMUM={cls="edit";text="10";left=652;top=145;right=750;bottom=167;edge=1;z=9};
MINIMUM={cls="edit";text="0";left=651;top=119;right=749;bottom=141;edge=1;z=7};
NORMAL={cls="checkbox";text="Normal";left=581;top=297;right=664;bottom=315;z=16};
Opposite={cls="checkbox";text="Opposite";left=681;top=297;right=764;bottom=315;z=17};
RemovePlot={cls="button";text="Remove Plot";left=178;top=517;right=303;bottom=551;z=33};
SetMax={cls="button";text="Set max";left=680;top=173;right=762;bottom=201;z=11};
SetMin={cls="button";text="Set min";left=580;top=173;right=662;bottom=201;z=10};
TICKS_INSIDE={cls="checkbox";text="Inside";left=583;top=438;right=666;bottom=456;z=24};
TICKS_MAJOR={cls="checkbox";text="Major";left=583;top=465;right=666;bottom=483;z=26};
TICKS_MINOR={cls="checkbox";text="Minor";left=681;top=465;right=766;bottom=484;z=27};
TICKS_NORMAL={cls="checkbox";text="Normal";left=582;top=413;right=665;bottom=431;z=22};
TICKS_OPPOSITE={cls="checkbox";text="Opposite";left=680;top=413;right=765;bottom=432;z=23};
TICKS_OUTSIDE={cls="checkbox";text="Outside";left=681;top=438;right=766;bottom=457;z=25};
button={cls="button";text="Genetate Plot3";left=15;top=599;right=142;bottom=642;z=39};
button2={cls="button";text="Genetate Plot2";left=15;top=553;right=142;bottom=596;z=34};
button3={cls="button";text="标记";left=431;top=567;right=554;bottom=601;z=38};
groupbox={cls="groupbox";text="scaling";left=563;top=44;right=778;bottom=240;edge=1;z=1};
groupbox2={cls="groupbox";text="caption";left=564;top=252;right=779;bottom=324;edge=1;z=14};
groupbox3={cls="groupbox";text="Labels";left=565;top=332;right=780;bottom=384;edge=1;z=18};
groupbox4={cls="groupbox";text="Ticks";left=565;top=389;right=780;bottom=495;edge=1;z=21};
groupbox5={cls="groupbox";text="Grid";left=565;top=503;right=780;bottom=555;edge=1;z=28};
groupbox6={cls="groupbox";text="style";left=565;top=560;right=780;bottom=612;edge=1;z=37};
plotstyle={cls="combobox";left=574;top=582;right=669;bottom=602;edge=1;items={"cwLine";"cwPoint";"cwLinePoint";"cwHiddenLine";"cwSurface";"cwSurfaceLine";"cwSurfaceNormal";"cwContourLine";"cwSurfaceContour"};mode="dropdown";z=35};
static={cls="static";text="Minimum";left=582;top=115;right=644;bottom=139;center=1;transparent=1;z=6};
static2={cls="static";text="Maximum";left=583;top=141;right=645;bottom=165;center=1;transparent=1;z=8}
)
/*}}*/
import console
console.open()
winform.AXIS.selIndex = 1;
var m_graph = winform.CWGRAPH3D1.createEmbed("CW3DGraphLib.CWGraph3D.1")._object;
var m_Axis3D = m_graph.Axes.Item(1);
var RefreshControls = function(){
if(m_graph.Plots.getCount() > 0)
winform.AutoscalePlot.checked = m_graph.Plots.Item(1).getAutoScale();
winform.AUTOSCALE.checked = m_Axis3D.getAutoScale();
winform.MINIMUM.text = m_Axis3D.getMinimum();
winform.MAXIMUM.text = m_Axis3D.getMaximum();
winform.INVERTED.checked = m_Axis3D.getInverted();
winform.LOG.checked = m_Axis3D.getLog();
winform.CAPTION.text = m_Axis3D.getCaption();
winform.NORMAL.checked = m_Axis3D.getCaptionNormal();
winform.Opposite.checked = m_Axis3D.getCaptionOpposite();
winform.LABELS_NORMAL.checked = m_Axis3D.Labels.getNormal();
winform.LABELS_OPPOSITE.checked = m_Axis3D.Labels.getOpposite();
winform.TICKS_NORMAL.checked = m_Axis3D.Ticks.getNormal();
winform.TICKS_OPPOSITE.checked = m_Axis3D.Ticks.getOpposite();
winform.TICKS_INSIDE.checked = m_Axis3D.Ticks.getInside();
winform.TICKS_OUTSIDE.checked = m_Axis3D.Ticks.getOutside();
winform.TICKS_MAJOR.checked = m_Axis3D.Ticks.getMajorTicks();
winform.TICKS_MINOR.checked = m_Axis3D.Ticks.getMinorTicks();
winform.GRID_MAJOR.checked = m_Axis3D.Ticks.getMajorGrid();
winform.GRID_MINOR.checked = m_Axis3D.Ticks.getMinorGrid();
}
RefreshControls();
winform.GenetatePlot.oncommand = function(id,event){
// Generate data
var t={};
var xData=table.array( 41/*行*/,41/*列*/,0 );
var yData=table.array( 41/*行*/,41/*列*/,0 );
var zData=table.array( 41/*行*/,41/*列*/,0 );
for (i = 1; 41; 1){
t[i] = (i - 20)/20 * 3.14;
}
//console.dump(t)
for (i = 1; 41; 1){
for (j = 1; 41; 1)
{
xData[j][i] = (math.cos(t[j]) + 3) * math.cos(t[i]);
yData[j][i] = (math.cos(t[j]) + 3) * math.sin(t[i]);
zData[j][i] = math.sin(t[j]);
}
}
//console.dump(xData)
// Plot the data
m_graph.Plot3DParametricSurface(xData, yData, zData,zData);
RefreshControls();
}
winform.RemovePlot.oncommand = function(id,event){
// Remove all the plots
m_graph.Plots.RemoveAll();
RefreshControls();
}
winform.SetMax.oncommand = function(id,event){
var maximum = tonumber(winform.MAXIMUM.text);
m_Axis3D.setMaximum(maximum);
RefreshControls();
}
winform.SetMin.oncommand = function(id,event){
var minimum = tonumber(winform.MINIMUM.text);
m_Axis3D.setMinimum(minimum);
RefreshControls();
}
winform.AutoscaleNow.oncommand = function(id,event){
m_Axis3D.setAutoScale(winform.AUTOSCALE.checked ? true : false);
RefreshControls();
}
winform.AutoscalePlot.oncommand = function(id,event){
m_graph.Plots.Item(1).setAutoScale(winform.AutoscalePlot.checked ? true : false);
RefreshControls();
}
winform.NORMAL.oncommand = function(id,event){
m_Axis3D.setCaptionNormal(winform.NORMAL.checked ? true : false);
}
winform.Opposite.oncommand = function(id,event){
m_Axis3D.setCaptionOpposite(winform.Opposite.checked ? true : false);
}
winform.TICKS_MAJOR.oncommand = function(id,event){
m_Axis3D.Ticks.setMajorGrid(winform.TICKS_MAJOR.checked ? true : false);
}
winform.TICKS_MINOR.oncommand = function(id,event){
m_Axis3D.Ticks.setMinorGrid(winform.TICKS_MINOR.checked ? true : false);
}
winform.INVERTED.oncommand = function(id,event){
m_Axis3D.setInverted(winform.INVERTED.checked ? true : false);
}
winform.LABELS_NORMAL.oncommand = function(id,event){
m_Axis3D.Labels.setNormal(winform.LABELS_NORMAL.checked ? true : false);
}
winform.LABELS_OPPOSITE.oncommand = function(id,event){
m_Axis3D.Labels.setOpposite(winform.LABELS_OPPOSITE.checked ? true : false);
}
winform.LOG.oncommand = function(id,event){
m_Axis3D.setLog(winform.LOG.checked ? true : false);
RefreshControls();
}
winform.TICKS_INSIDE.oncommand = function(id,event){
m_Axis3D.Ticks.setInside(winform.TICKS_INSIDE.checked ? true : false);
}
winform.TICKS_OUTSIDE.oncommand = function(id,event){
m_Axis3D.Ticks.setOutside(winform.TICKS_OUTSIDE.checked ? true : false);
}
winform.TICKS_NORMAL.oncommand = function(id,event){
m_Axis3D.Ticks.setNormal(winform.TICKS_NORMAL.checked ? true : false);
}
winform.TICKS_OPPOSITE.oncommand = function(id,event){
m_Axis3D.Ticks.setOpposite(winform.TICKS_OPPOSITE.checked ? true : false);
}
winform.AXIS.onListChange= function(){
select(winform.AXIS.find(winform.AXIS.selText)) {
case 3 {
m_Axis3D = m_graph.Axes.Item(3);
}
case 1 {
m_Axis3D = m_graph.Axes.Item(1);
}
case 2 {
m_Axis3D = m_graph.Axes.Item(2);
}
}
RefreshControls();
}
winform.CAPTION.onChange = function(){
m_Axis3D.setCaption(winform.CAPTION.text);
}
winform.button2.oncommand = function(id,event){
// Generate data
var xData={};
var yData={};
var zData=table.array( 41/*行*/,41/*列*/,0 );
//console.dump(t)
for (i = 1; 41; 1){
xData[i] = ((i - 20.0) / 20.0) * 3.14;
yData[i] = ((i - 20.0) / 20.0) * 3.14;
}
for(i=1;41;1){
for(j=1;41;1){
zData[j][i] = math.sin(xData[i]) * math.cos(yData[j]) + 2.0;
}
}
// Plot the data
m_graph.Plot3DSurface(xData, yData, zData,zData);
RefreshControls();
}
winform.plotstyle.selIndex = 5;
winform.plotstyle.onOk= function(){
var plot = m_graph.Plots.Item(1);
plot.Style = winform.plotstyle.selIndex;
}
winform.ColorMapStyle.onOk = function(){
var plot = m_graph.Plots.Item(1);
plot.ColorMapStyle = winform.ColorMapStyle.selIndex-1;
if(winform.ColorMapStyle.selIndex==5){
var axis = plot.ZAxis;
var interval = (axis.Maximum - axis.Minimum) / 5;
var mapValues={};
for ( i = 1; 5; 1)
mapValues[i] = axis.Minimum + (i * interval);
var mapColors={};
mapColors[5] = 0x0000E6;
mapColors[4] = 0xE6E600;
mapColors[3] = 0x00E6E6;
mapColors[2] = 0x76A112;
mapColors[1] = 0xE6E6E6;
plot.setColorMapValues(mapValues);
plot.setColorMapColors(mapColors);
}
}
winform.button3.oncommand = function(id,event){
var m_Cursor = m_graph.Cursors.Add();
m_Cursor.Name ="Cursor 1";
m_Cursor.Enabled = true;
m_Cursor.Visible = true;
m_Cursor.NameVisible = true;
m_Cursor.TextColor = 0x000000;
m_Cursor.XPosition = 5.0;
m_Cursor.YPosition = 5.0;
m_Cursor.ZPosition = 5.0;
m_Cursor.PositionVisible = true;
m_Cursor.SnapMode = 1;
m_Cursor.PointSize = 10.0;
m_Cursor.PointColor = 0x0000ff;
m_Cursor.PointStyle = 6;
m_Cursor.LineWidth = 1.0;
m_Cursor.LineColor = 0xff0000;
m_Cursor.LineStyle = 1;
m_Cursor.Transparency = 75;
m_Cursor.PlaneColor = 0x00ff00;
m_Cursor.XYPlaneVisible = false;
m_Cursor.XZPlaneVisible = false;
m_Cursor.YZPlaneVisible = false;
}
winform.button.oncommand = function(id,event){
var zData=table.array( 81/*行*/,81/*列*/,0 );
//console.dump(t)
for (i = 1; 81; 1){
for(j=1;81;1){
zData[j][i] = math.sin(i / 4.0) * math.cos(j / 4.0) * math.sin(j / 13.0) * math.cos(i / 9.0);
}
}
// Plot the data
m_graph.Plot3DSimpleSurface(zData,zData);
}
winform.show();
win.loopMessage();vc2008的原版示例包:
MStudio 2009 3DGraph CPP Examples.zip
登录后方可回帖
好像echarts也能画,而且模型库更全面。
echarts是纯js生成的,aardio可以直接通过js调用,我记得好像之前有人写过的
https://echarts.apache.org/examples/zh/editor.html?c=scatter3d-scatter&gl=1