⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple.c

📁 本文件是ni公司的labwindows/cvi软件的部分例子和源程序
💻 C
字号:
//----------------------------------------------------------------------------// Simple 3D Plotting example using CVIOGL instrument driver//----------------------------------------------------------------------------#include <userint.h>#include <ansi_c.h>#include "simple.h"#include "cviogl.h"#define XPOINTS         21#define YPOINTS         21#define PI              3.1415926535897932384626433832795028841971#define RAD(x)          ((x)*PI/180.0)#define SINC(x)         ((x) != 0.0  ? sin(PI*(x))/(PI*(x)): 1.0)static int demoPanel;static int demoControl;static int SetControlAttributes(void);                   static int CreatePlot(void);static char msgBuf[256];//----------------------------------------------------------------------------// main//----------------------------------------------------------------------------int main (int argc, char *argv[]){    int error = 0;    if (InitCVIRTE (0, argv, 0) == 0)   /* Initialize CVI libraries */        return -1;  /* out of memory */            SetSleepPolicy (VAL_SLEEP_MORE);            if ((demoPanel = LoadPanel (0, "simple.uir", DEMOPANEL)) < 0)        return -1;            // Create OpenGL control on CVI panel        demoControl = OGLConvertCtrl(demoPanel,DEMOPANEL_PICTURE);    if (demoControl<0) {        OGLGetErrorString (demoControl, msgBuf, 255);        MessagePopup("OGLConvertCtrl Error", msgBuf);        goto Error;    }            // Setup CVIOGL control        SetControlAttributes();    CreatePlot();        DisplayPanel (demoPanel);    RunUserInterface ();        // Dicard CVIOGL control    OGLDiscardCtrl(demoPanel,demoControl);      Error :    return error;}//----------------------------------------------------------------------------// SetControlAttributes//----------------------------------------------------------------------------static int SetControlAttributes(void){    int error = 0;    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_LIGHTING_ENABLE, 1);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_LIGHT_SELECT, 1);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_LIGHT_ENABLE, 1);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_LIGHT_DISTANCE, 3.0);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_VIEW_DISTANCE,2.5);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_PROJECTION_TYPE,OGLVAL_PERSPECTIVE);        // Setup Axis Labels        OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_XNAME_VISIBLE,1);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_YNAME_VISIBLE,1);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_ZNAME_VISIBLE,1);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_XNAME,"x axis");    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_YNAME,"y axis");    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_ZNAME,"z axis");    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_XLABEL_VISIBLE,1);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_YLABEL_VISIBLE,1);    OGLSetCtrlAttribute(demoPanel,demoControl,OGLATTR_ZLABEL_VISIBLE,1);        Error :    return error;}//----------------------------------------------------------------------------// CreatePlot//----------------------------------------------------------------------------static int CreatePlot(void){    int error = 0;    int plotTypeIs3D = 1;    int numPlots;    double radxStep;    double radyStep;    int plot;    register int i,j;    double x,y;    double xStep,yStep;    void * pts;    double *pts3DPtr;    OGLVertexD *pts2DPtr;        /* Get the plottype of either 3D or 2D lines(no surface) */    GetCtrlVal(demoPanel, DEMOPANEL_PLOTTYPE, &plotTypeIs3D);        xStep = 360.0/(XPOINTS-1);    yStep = 360.0/(YPOINTS-1);                radxStep = RAD(xStep);    radyStep = RAD(yStep);        // Malloc data for plot    if (plotTypeIs3D)    {        pts =  malloc((XPOINTS)*(YPOINTS)*sizeof(double));        if (!pts)            return -1;        else            pts3DPtr = (double *)pts;    }        else     {        pts =  malloc((XPOINTS)*(YPOINTS)*sizeof(OGLVertexD));        if (!pts)            return -1;        else             pts2DPtr = (OGLVertexD *)pts;    }            // Generate plot data                for(j=0,y=-PI;j<YPOINTS;j++,y+=radyStep)    {        for(i=0,x=-PI;i<XPOINTS;i++,x+=radxStep)            if (plotTypeIs3D)             {                *pts3DPtr = exp(-(x+y)/(2*PI))*sin(x*x+y*y);                pts3DPtr++;            }                else                {                pts2DPtr->x = x;                pts2DPtr->y = y;                pts2DPtr->z = exp(-(x+y)/(2*PI))*sin(x*x+y*y);                pts2DPtr++;            }        }        // Setup control    OGLSetCtrlAttribute (demoPanel, demoControl,OGLATTR_PLOTAREA_ZSTART, 0.0);    OGLSetCtrlAttribute (demoPanel, demoControl,OGLATTR_PLOTAREA_ZSIZE, 0.6);    OGLSetCtrlAttribute (demoPanel, demoControl,OGLATTR_VIEW_AUTO_DISTANCE, 0);    OGLSetCtrlAttribute (demoPanel, demoControl,OGLATTR_VIEW_DISTANCE, 2.5);    OGLGetCtrlAttribute (demoPanel, demoControl,OGLATTR_NUM_PLOTHANDLES,&numPlots);           // Delete any existing plots    for (i=0;i<numPlots;i++)    {        OGLGetCtrlAttribute(demoPanel,demoControl, OGLATTR_FIRST_PLOTHANDLE, &plot);          OGLDeletePlot(demoPanel,demoControl,plot,0);    }        // Give plot data to control    if (plotTypeIs3D)     {        pts3DPtr = pts;        plot = OGLPlot3DUniform (demoPanel, demoControl, pts3DPtr, XPOINTS, YPOINTS,                                             OGLVAL_DOUBLE, 2*PI/(XPOINTS-1), -PI, 2*PI/(YPOINTS-1), -PI);                                                 // Setup plot attributes                                                 OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_SURFACE_STYLE,OGLVAL_SMOOTH);        OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_SURFACE_COLOR,OGLVAL_RED);        OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_SURFACE_SPECULAR_FACTOR,1.0);        OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_SURFACE_SHININESS,50);        OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_WIRE_STYLE,OGLVAL_SOLID);        OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_WIRE_COLOR,OGLVAL_RED);    }    else     {        for (i=0;i<XPOINTS;i++)        {            pts2DPtr = pts;            plot = OGLPlot3DScatter (demoPanel, demoControl, &pts2DPtr[i*(XPOINTS)], XPOINTS, 1, OGLVAL_DOUBLE);                                                     // Setup plot attributes                                                     OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_SURFACE_STYLE,OGLVAL_SMOOTH);            OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_SURFACE_COLOR,OGLVAL_RED);            OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_SURFACE_SPECULAR_FACTOR,1.0);            OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_SURFACE_SHININESS,50);            OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_WIRE_STYLE,OGLVAL_SOLID);            OGLSetPlotAttribute(demoPanel,demoControl,plot,OGLATTR_WIRE_COLOR,OGLVAL_RED);        }    }            // Display plot    OGLRefreshGraph(demoPanel, demoControl);        // free plot data memory because control copies it    free(pts);Error :    return error;}    //----------------------------------------------------------------------------// properties//----------------------------------------------------------------------------int CVICALLBACK properties (int panel, int control, int event,        void *callbackData, int eventData1, int eventData2){    switch (event) {        case EVENT_COMMIT:            OGLPropertiesPopup(demoPanel,demoControl);            break;    }    return 0;}//----------------------------------------------------------------------------// shutdown//----------------------------------------------------------------------------int CVICALLBACK shutdown (int panel, int control, int event,        void *callbackData, int eventData1, int eventData2){    switch (event) {        case EVENT_COMMIT:            QuitUserInterface (0);            break;    }    return 0;}//----------------------------------------------------------------------------// print//----------------------------------------------------------------------------int CVICALLBACK print (int panel, int control, int event,        void *callbackData, int eventData1, int eventData2){    int error = OGLNoError;    switch (event) {        case EVENT_COMMIT:            SetWaitCursor (1);            OGLCopyScaledCtrlBitmap (demoPanel, demoControl, 0, -1, -1, -1, -1);            PrintPanel (demoPanel, "", 1, VAL_FULL_PANEL, 1);            SetWaitCursor (0);            break;    }Error :    if (error != OGLNoError) {        char msgBuf[256];        OGLGetErrorString (error, msgBuf, 255);        MessagePopup ("OGL Error", msgBuf);    }        return error;}//----------------------------------------------------------------------------// DemoPanelCallback - Since CVI does not know about CVIOGL control, we must// manually resize the CVIOGL control whenever the picture control is resized.//----------------------------------------------------------------------------int CVICALLBACK DemoPanelCallback (int panel, int event, void *callbackData,        int eventData1, int eventData2){    int width, height, top, left;        switch (event)        {        case EVENT_PANEL_SIZE:            GetCtrlAttribute(demoPanel, DEMOPANEL_PICTURE, ATTR_TOP, &top);                    GetCtrlAttribute(demoPanel, DEMOPANEL_PICTURE, ATTR_LEFT, &left);                    GetCtrlAttribute(demoPanel, DEMOPANEL_PICTURE, ATTR_WIDTH, &width);                    GetCtrlAttribute(demoPanel, DEMOPANEL_PICTURE, ATTR_HEIGHT, &height);                                OGLSetCtrlAttribute (demoPanel, demoControl, OGLATTR_TOP, top);            OGLSetCtrlAttribute (demoPanel, demoControl, OGLATTR_LEFT, left);            OGLSetCtrlAttribute (demoPanel, demoControl, OGLATTR_WIDTH, width);            OGLSetCtrlAttribute (demoPanel, demoControl, OGLATTR_HEIGHT, height);                        OGLRefreshGraph(demoPanel,demoControl);        break;        }    return 0;}//----------------------------------------------------------------------------// ChangePlotType//----------------------------------------------------------------------------int CVICALLBACK ChangePlotType (int panel, int control, int event,        void *callbackData, int eventData1, int eventData2){    switch (event)        {        case EVENT_COMMIT:            CreatePlot();            break;        }    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -