📄 ogldraw.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 + -