📄 ogldemo.c
字号:
//----------------------------------------------------------------------------// Complex Demo of 3D Plotting CVIOGL instrument driver//----------------------------------------------------------------------------#include <windows.h>//----------------------------------------------------------------------------// Includes//----------------------------------------------------------------------------#include <GL\gl.h>#include <GL\glu.h>#include <cvirte.h> /* Initialize CVI libraries */#include <utility.h>#include <userint.h>#include "toolbox.h"#include "cviogl.h"#include "ogldemo.h"//----------------------------------------------------------------------------// Defines//----------------------------------------------------------------------------#define SINHXCOSY 1#define SINCX2Y2 2#define SINX2Y2 3#define EXPXY 4#define LISTSPHERE 1#define LISTCYLINDER 2#define LISTTORUS 3#define LISTCONE 4#define AUTO_XY_LONGITUDE -90.0#define AUTO_XY_LATITUDE 0.0#define AUTO_YZ_LONGITUDE 0.0#define AUTO_YZ_LATITUDE 90.0#define AUTO_XZ_LONGITUDE -90.0#define AUTO_XZ_LATITUDE 90.0#define DEFAULT_ANGLE 40.0#define RedComponent(color) (((color) >> 16) & 0xff)#define GreenComponent(color) (((color) >> 8) & 0xff)#define BlueComponent(color) (((color)) & 0xff)#define RAD(x) ((x)*PI/180.0)#define SINC(x) ((x) != 0.0 ? sin(PI*(x))/(PI*(x)): 1.0)//----------------------------------------------------------------------------// Typedefs//----------------------------------------------------------------------------typedef struct _minMaxStep{ double min; double max; int steps;} minMaxStep;struct { int panel; double radius; minMaxStep longitude; minMaxStep latitude;} sphereConfig;struct { int panel; double radius; minMaxStep longitude; minMaxStep height;} cylinderConfig;struct { int panel; double majorrad,minorrad; minMaxStep longitude; minMaxStep latitude;} torusConfig;struct { int panel; double bottomrad,toprad; minMaxStep longitude; minMaxStep height;} coneConfig;struct{ int panel; minMaxStep x; minMaxStep y;} uniformConfig;//----------------------------------------------------------------------------// Variables//----------------------------------------------------------------------------static int demoPanel;static int demoControl;static int molecule = 0;static double latitude,longitude,distance;static OGLVertexD center;static double mollatitude,mollongitude,moldistance;static OGLVertexD molcenter;static char *benzene[] = {"C 0.0998334 0.995004 0","H 0.159733 1.59201 0","C 0.911616 0.411044 0","H 1.45859 0.65767 0","C 0.811782 -0.58396 0","H 1.29885 -0.934337 0","C -0.0998334 -0.995004 0","H -0.159733 -1.59201 0","C -0.911616 -0.411044 0","H -1.45858 -0.65767 0","C -0.811782 0.583961 0","H -1.29885 0.934337 0",NULL};static char *buckmisterfullerine[] = {"C 1.22650000 0.00000000 3.31450000","C 0.37900000 1.16640000 3.31450000","C -0.99220000 0.72090000 3.31450000","C -0.99220000 -0.72090000 3.31450000","C 0.37900000 -1.16640000 3.31450000","C 3.40840000 0.72090000 0.59480000","C 2.79510000 1.16640000 1.82130000","C 2.41610000 0.00000000 2.57930000","C 2.79510000 -1.16640000 1.82130000","C 3.40840000 -0.72090000 0.59480000","C 0.36760000 3.46430000 0.59480000","C -0.24560000 3.01880000 1.82130000","C 0.74660000 2.29790000 2.57930000","C 1.97310000 2.29790000 1.82130000","C 1.73890000 3.01880000 0.59480000","C -3.18120000 1.42020000 0.59480000","C -2.94690000 0.69930000 1.82130000","C -1.95470000 1.42020000 2.57930000","C -1.57570000 2.58660000 1.82130000","C -2.33370000 2.58660000 0.59480000","C -2.33370000 -2.58660000 0.59480000","C -1.57570000 -2.58660000 1.82130000","C -1.95470000 -1.42020000 2.57930000","C -2.94690000 -0.69930000 1.82130000","C -3.18120000 -1.42020000 0.59480000","C 1.73890000 -3.01880000 0.59480000","C 1.97310000 -2.29790000 1.82130000","C 0.74660000 -2.29790000 2.57930000","C -0.24560000 -3.01880000 1.82130000","C 0.36760000 -3.46430000 0.59480000","C 0.99220000 0.72090000 -3.31450000","C -0.37900000 1.16640000 -3.31450000","C -1.22650000 0.00000000 -3.31450000","C -0.37900000 -1.16640000 -3.31450000","C 0.99220000 -0.72090000 -3.31450000","C 2.33370000 2.58660000 -0.59480000","C 1.57570000 2.58660000 -1.82130000","C 1.95470000 1.42020000 -2.57930000","C 2.94690000 0.69930000 -1.82130000","C 3.18120000 1.42020000 -0.59480000","C -1.73890000 3.01880000 -0.59480000","C -1.97310000 2.29790000 -1.82130000","C -0.74660000 2.29790000 -2.57930000","C 0.24560000 3.01880000 -1.82130000","C -0.36760000 3.46430000 -0.59480000","C -3.40840000 -0.72090000 -0.59480000","C -2.79510000 -1.16640000 -1.82130000","C -2.41610000 0.00000000 -2.57930000","C -2.79510000 1.16640000 -1.82130000","C -3.40840000 0.72090000 -0.59480000","C -0.36760000 -3.46430000 -0.59480000","C 0.24560000 -3.01880000 -1.82130000","C -0.74660000 -2.29790000 -2.57930000","C -1.97310000 -2.29790000 -1.82130000","C -1.73890000 -3.01880000 -0.59480000","C 3.18120000 -1.42020000 -0.59480000","C 2.94690000 -0.69930000 -1.82130000","C 1.95470000 -1.42020000 -2.57930000","C 1.57570000 -2.58660000 -1.82130000","C 2.33370000 -2.58660000 -0.59480000",NULL};static char *cyclohexane[] = {"H 0.139767 1.39301 -0.12","C 0.0998334 0.995004 -0.2","H 0.911616 0.411044 1.2","H 1.27626 0.575461 0.12","C 0.911616 0.411044 0.2","H 0.811782 -0.58396 -1.2","H 1.1365 -0.817544 -0.12","C 0.811782 -0.58396 -0.2","H -0.0998334 -0.995004 1.2","H -0.139767 -1.39301 0.12","C -0.0998334 -0.995004 0.2","H -0.911616 -0.411044 -1.2","H -1.27626 -0.575461 -0.12","C -0.911616 -0.411044 -0.2","H -0.811782 0.583961 1.2","H -1.13649 0.817545 0.12","C -0.811782 0.583961 0.2",NULL};static char *ethane[] = {"H 0.0998334 0.995004 -0.6","H 0.911616 0.411044 1.6","H 0.811782 -0.58396 -0.6","H -0.0998334 -0.995004 1.6","H -0.911616 -0.411044 -0.6","H -0.811782 0.583961 1.6","C 0 0 0","C 0 0 1",NULL};static char *water[] = {"O 0 0 0","H -1 1 0","H 1 1 0",NULL};static char **molecules[] = {benzene,buckmisterfullerine,cyclohexane,ethane,water};//----------------------------------------------------------------------------// Prototypes//----------------------------------------------------------------------------static int initConfiguration(void);static int setControlAttributes(void); void RenderMolecule(int fastFlag);int LoadMolecule(void);int LoadMoleculeFromArray(char **molecule);//----------------------------------------------------------------------------// main//----------------------------------------------------------------------------int main (int argc, char *argv[]){ int color; 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, "ogldemo.uir", DEMOPANEL)) < 0) return -1; if (initConfiguration() < 0) return -1; errChk( demoControl = OGLConvertCtrl(demoPanel,DEMOPANEL_PICTURE) ); errChk( setControlAttributes() ); errChk( UPlot(demoPanel,0,EVENT_COMMIT,0,0,0) ); DisplayPanel (demoPanel); RunUserInterface (); HidePanel (demoPanel); OGLDiscardCtrl(demoPanel,demoControl); DiscardPanel (demoPanel); Error : return error;}//----------------------------------------------------------------------------// initConfiguration//----------------------------------------------------------------------------static int initConfiguration(void){ int error = 0; errChk( sphereConfig.panel = LoadPanel(0, "ogldemo.uir", SPHERE) ); errChk( GetCtrlVal(sphereConfig.panel,SPHERE_RADIUS,&sphereConfig.radius) ); errChk( GetCtrlVal(sphereConfig.panel,SPHERE_LONG_MAX,&sphereConfig.longitude.max) ); errChk( GetCtrlVal(sphereConfig.panel,SPHERE_LONG_MIN,&sphereConfig.longitude.min) ); errChk( GetCtrlVal(sphereConfig.panel,SPHERE_LONG_STEP,&sphereConfig.longitude.steps) ); errChk( GetCtrlVal(sphereConfig.panel,SPHERE_LAT_MIN,&sphereConfig.latitude.min) ); errChk( GetCtrlVal(sphereConfig.panel,SPHERE_LAT_MAX,&sphereConfig.latitude.max) ); errChk( GetCtrlVal(sphereConfig.panel,SPHERE_LAT_STEP,&sphereConfig.latitude.steps) ); errChk( cylinderConfig.panel = LoadPanel(0, "ogldemo.uir", CYLINDER) ); errChk( GetCtrlVal(cylinderConfig.panel,CYLINDER_RADIUS,&cylinderConfig.radius) ); errChk( GetCtrlVal(cylinderConfig.panel,CYLINDER_LONG_MIN,&cylinderConfig.longitude.min) ); errChk( GetCtrlVal(cylinderConfig.panel,CYLINDER_LONG_STEP,&cylinderConfig.longitude.steps) ); errChk( GetCtrlVal(cylinderConfig.panel,CYLINDER_LONG_MAX,&cylinderConfig.longitude.max) ); errChk( GetCtrlVal(cylinderConfig.panel,CYLINDER_BOTTOMPOS,&cylinderConfig.height.min) ); errChk( GetCtrlVal(cylinderConfig.panel,CYLINDER_HEIGHT,&cylinderConfig.height.max) ); errChk( GetCtrlVal(cylinderConfig.panel,CYLINDER_HT_STEP,&cylinderConfig.height.steps) ); errChk( torusConfig.panel = LoadPanel(0, "ogldemo.uir", TORUS) ); errChk( GetCtrlVal(torusConfig.panel,TORUS_MAJORRADIUS,&torusConfig.majorrad) ); errChk( GetCtrlVal(torusConfig.panel,TORUS_MINORRADIUS,&torusConfig.minorrad) ); errChk( GetCtrlVal(torusConfig.panel,TORUS_LONG_MIN,&torusConfig.longitude.min) ); errChk( GetCtrlVal(torusConfig.panel,TORUS_LONG_MAX,&torusConfig.longitude.max) ); errChk( GetCtrlVal(torusConfig.panel,TORUS_LONG_STEP,&torusConfig.longitude.steps) ); errChk( GetCtrlVal(torusConfig.panel,TORUS_LAT_MIN,&torusConfig.latitude.min) ); errChk( GetCtrlVal(torusConfig.panel,TORUS_LAT_MAX,&torusConfig.latitude.max) ); errChk( GetCtrlVal(torusConfig.panel,TORUS_LAT_STEP,&torusConfig.latitude.steps) ); errChk( coneConfig.panel = LoadPanel(0, "ogldemo.uir", CONE) ); errChk( GetCtrlVal(coneConfig.panel,CONE_BOTTOMRADIUS,&coneConfig.bottomrad) ); errChk( GetCtrlVal(coneConfig.panel,CONE_TOPRADIUS,&coneConfig.toprad) ); errChk( GetCtrlVal(coneConfig.panel,CONE_LONG_MIN,&coneConfig.longitude.min) ); errChk( GetCtrlVal(coneConfig.panel,CONE_LONG_STEP,&coneConfig.longitude.steps) ); errChk( GetCtrlVal(coneConfig.panel,CONE_LONG_MAX,&coneConfig.longitude.max) ); errChk( GetCtrlVal(coneConfig.panel,CONE_BOTTOMPOS,&coneConfig.height.min) ); errChk( GetCtrlVal(coneConfig.panel,CONE_HEIGHT,&coneConfig.height.max) ); errChk( GetCtrlVal(coneConfig.panel,CONE_HT_STEP,&coneConfig.height.steps) ); errChk( uniformConfig.panel = LoadPanel(0, "ogldemo.uir", UPLOT) ); errChk( GetCtrlVal(uniformConfig.panel,UPLOT_X_MIN,&uniformConfig.x.min) );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -