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

📄 ogldraw.c

📁 CVI教程,用于信号采集系统的多任务开发软件.学习简单,功能实用.
💻 C
字号:
//----------------------------------------------------------------------------// Simple OpenGL drawing example using CVIOGL instrument driver as port//----------------------------------------------------------------------------//----------------------------------------------------------------------------// Includes//----------------------------------------------------------------------------#include <windows.h>#include <gl\gl.h>#include <gl\glu.h>#include <userint.h>#include <ansi_c.h>#include "ogldraw.h"#include "cviogl.h"//----------------------------------------------------------------------------// Variables//----------------------------------------------------------------------------static int demoPanel;static int demoControl;static char msgBuf[256];static int molecule_list=0;static int reload = 0;static int prevFastFlag = 0;//----------------------------------------------------------------------------// Prototypes//----------------------------------------------------------------------------static int SetControlAttributes(void);                   static void DrawObjects(int fastFlag);static void RenderObjects(int fastFlag);//----------------------------------------------------------------------------// 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, "ogldraw.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 for use as a OpenGL port        SetControlAttributes();        // Display plot    OGLRefreshGraph(demoPanel, demoControl);        DisplayPanel (demoPanel);    RunUserInterface ();        // Dicard CVIOGL control    OGLDiscardCtrl(demoPanel,demoControl);      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;}//----------------------------------------------------------------------------// SetControlAttributes//----------------------------------------------------------------------------static int SetControlAttributes(void){    // Setup Lighting for system    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);        // Disable 3D plotting feature - only use lighting and coordinate system    OGLSetCtrlAttribute (demoPanel, demoControl, OGLATTR_PLOTTING_ENABLE, 0);        return 0;}//----------------------------------------------------------------------------// DrawObjects//----------------------------------------------------------------------------static void DrawObjects(int fastFlag){        GLUquadricObj   *obj;        obj = gluNewQuadric();    if (fastFlag)        gluQuadricDrawStyle(obj,GLU_LINE );            glPushMatrix();        glColor3f(1.0f, 0.0f, 1.0f);    glTranslatef(0, 0, 0);    gluSphere(obj, 0.5, 10, 10);          glColor3f(0.0f, 1.0f, 0.0f);    glTranslatef(0.5, 0.5, 0.5);    gluSphere(obj, 0.25, 10, 10);          glPopMatrix();      gluDeleteQuadric(obj);    return;}//----------------------------------------------------------------------------// RenderObjects//----------------------------------------------------------------------------static void RenderObjects(int fastFlag){    GLfloat specularLight0[]    ={1.0f, 1.0f, 1.0f, 1.0f};    int fastMode;    glPushAttrib(GL_ALL_ATTRIB_BITS);    glMatrixMode(GL_PROJECTION);    glPushMatrix();        glMatrixMode(GL_MODELVIEW);        glPushMatrix();            glEnable(GL_DEPTH_TEST);            glShadeModel(GL_SMOOTH);                glEnable(GL_COLOR_MATERIAL);            glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);            glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specularLight0);            glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 128);               DrawObjects(fastFlag);            glPopMatrix();        glMatrixMode(GL_PROJECTION);    glPopMatrix();    glPopAttrib();        glFlush();}//----------------------------------------------------------------------------// PictureCallback needed for refresh events for repaint and rotation//----------------------------------------------------------------------------int CVICALLBACK PictureCallback (int panel, int control, int event,        void *callbackData, int eventData1, int eventData2){    switch (event) {        case OGLEVENT_REFRESH:            RenderObjects(eventData1);            break;    }    return 0;}//----------------------------------------------------------------------------// Panel Callback - 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;}

⌨️ 快捷键说明

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