1 #include
#include        
2 #include "vg.h"
#include "vg.h"           
3 #include "pf.h"
#include "pf.h"           
4 #include "assert.h"
#include "assert.h"     
5
6
7 vgPicker    *picker    = NULL;
vgPicker    *picker    = NULL;
8 vgObserver  *mainObs   = NULL;
vgObserver  *mainObs   = NULL;
9 vgChannel   *mainChan  = NULL;
vgChannel   *mainChan  = NULL;
10 vgEnv       *mainEnv   = NULL;
vgEnv       *mainEnv   = NULL;
11 vgWindow    *mainWin   = NULL;
vgWindow    *mainWin   = NULL;
12 vgGfx       *mainGfx   = NULL;
vgGfx       *mainGfx   = NULL;
13 vgScene     *mainScn   = NULL;
vgScene     *mainScn   = NULL;
14
15
16 void  setSystemPointers();
void  setSystemPointers();
17 void  createPicker();
void  createPicker();
18 void  userUpdates();
void  userUpdates();
19 void  checkPickEvent();
void  checkPickEvent();
20
21 void setSystemPointers(){
void setSystemPointers(){
22 //  ####################################################
//  ####################################################
23 //  # 获取系统的主要指针,注意必须在vgConfigSys()之后调用
//  # 获取系统的主要指针,注意必须在vgConfigSys()之后调用      
24 //  #
//  #    
25 //  ####################################################
//  ####################################################
26
27 mainWin = vgGetWin( 0 );
    mainWin = vgGetWin( 0 );
28 assert(mainWin);
    assert(mainWin);
29
30 mainObs = vgGetObserv( 0 );
    mainObs = vgGetObserv( 0 );        
31 assert(mainObs  );
    assert(mainObs  );
32
33 mainChan = vgGetObservChan( mainObs, 0 );
    mainChan = vgGetObservChan( mainObs, 0 );
34 assert(mainChan);
    assert(mainChan);
35
36 mainGfx = vgGetObservGfx( mainObs );
    mainGfx = vgGetObservGfx( mainObs );   
37 assert(mainEnv);
    assert(mainEnv);
38
39 mainEnv = vgGetEnv( 0 );
    mainEnv = vgGetEnv( 0 );   
40 assert(mainEnv);
    assert(mainEnv);
41
42 mainScn = vgGetScene(0);
    mainScn = vgGetScene(0);
43 assert(mainScn);
    assert(mainScn);
44
45 }
} 
46
47
48 void createPicker(){
void createPicker(){
49 //  ########################################
//  ######################################## 
50 //  # 创建一个vgPicker
//  # 创建一个vgPicker     
51 //  #
//  #
52 //  ########################################
//  ######################################## 
53
54 picker = vgNewPicker();
    picker = vgNewPicker();
55 assert( picker );
    assert( picker );
56 vgName( picker, "example_picker" );
    vgName( picker, "example_picker" );
57
58 //
    // 
59 // 指定vgPicker起作用的场景和通道
    // 指定vgPicker起作用的场景和通道
60 //
    // 
61 vgPickerScene( picker,  mainScn );
    vgPickerScene( picker,  mainScn );
62 vgPickerChannel( picker,  mainChan  );
    vgPickerChannel( picker,  mainChan  );
63
64 //
    // 
65 // 设置vgPicker属性,选择物体红色显示
    // 设置vgPicker属性,选择物体红色显示
66 //
    // 
67 vgPickerHighLightColor( picker, 1.0f, 0.0f, 0.0f );
    vgPickerHighLightColor( picker, 1.0f, 0.0f, 0.0f ); 
68 vgProp( picker, VGPICK_TRANSFORM,     VGPICK_TRANSLATE   );
    vgProp( picker, VGPICK_TRANSFORM,     VGPICK_TRANSLATE   );
69 vgProp( picker, VGPICK_TRANSCOORDS,    VGPICK_OBJECT_AXES );
    vgProp( picker, VGPICK_TRANSCOORDS,    VGPICK_OBJECT_AXES );
70 vgProp( picker, VGPICK_HL_LEVEL,       VGPICK_OBJECT      );
    vgProp( picker, VGPICK_HL_LEVEL,       VGPICK_OBJECT      ); 
71 vgProp( picker, VGPICK_HL_STYLE,       VGPICK_HL_LINE     );
    vgProp( picker, VGPICK_HL_STYLE,       VGPICK_HL_LINE     );
72 vgProp( picker, VGPICK_TERRAIN_CLAMP,  VG_OFF             );
    vgProp( picker, VGPICK_TERRAIN_CLAMP,  VG_OFF             );
73 vgProp( picker, VGPICK_TRANSOVERRIDE,  VG_OFF             );
    vgProp( picker, VGPICK_TRANSOVERRIDE,  VG_OFF             );
74 vgProp( picker, VGPICK_DISPLAY_STDOUT, VG_OFF             );
    vgProp( picker, VGPICK_DISPLAY_STDOUT, VG_OFF             ); 
75 vgProp( picker, VGPICK_MULTIPLE_PICKS, VG_OFF             );
    vgProp( picker, VGPICK_MULTIPLE_PICKS, VG_OFF             );
76 vgProp( picker, VGPICK_AUTOTRANSFORM,  VG_OFF             );
    vgProp( picker, VGPICK_AUTOTRANSFORM,  VG_OFF             );
77 vgProp( picker, VGPICK_TRACKPLANE,     VGPICK_TRACK_XY    );
    vgProp( picker, VGPICK_TRACKPLANE,     VGPICK_TRACK_XY    );
78 vgProp( picker, VGPICK_AUTOTRACKPLANE, VG_OFF             );
    vgProp( picker, VGPICK_AUTOTRACKPLANE, VG_OFF             );
79 vgProp( picker, VGPICK_DRAG_FACTOR,    1.0f               );
    vgProp( picker, VGPICK_DRAG_FACTOR,    1.0f               );
80 vgProp( picker, VGPICK_RENDER_ISECT,   VG_OFF             );
    vgProp( picker, VGPICK_RENDER_ISECT,   VG_OFF             );
81
82 //
    // 
83 // 设置vgPicker的相交矢量
    // 设置vgPicker的相交矢量 
84 //
    // 
85 vgPickerClampIsector( picker, 0x10000000 );
    vgPickerClampIsector( picker, 0x10000000 ); 
86 vgPickerIsector( picker, 0x10000000 );
    vgPickerIsector( picker, 0x10000000 );
87
88 // 启用vgPicker
    // 启用vgPicker 
89 vgProp( picker, VGCOMMON_ENABLED,  VG_ON );
    vgProp( picker, VGCOMMON_ENABLED,  VG_ON );
90
91 }
} 
92
93 void checkPickEvent(){
void checkPickEvent(){ 
94 // ###################################################
// ################################################### 
95 // # 判断vgPicker当前的动作
// # 判断vgPicker当前的动作 
96 // #
// # 
97 // #
// # 
98 // ###################################################
// ################################################### 
99 static vgMouse mouse;
static vgMouse mouse; 
100 static  vgPosition *pos = NULL;
static  vgPosition *pos = NULL;
101 if( pos == NULL ){
    if( pos == NULL ){
102 pos = vgNewPos();
      pos = vgNewPos();
103 assert( pos );
       assert( pos );
104 }
        }
105 vgGetMouse( &mouse );
    vgGetMouse( &mouse );
106
107 // 鼠标左键:拾取或取消拾取物体
    // 鼠标左键:拾取或取消拾取物体
108 if( mouse.lb && !mouse.mb && !mouse.rb ) {
   if( mouse.lb && !mouse.mb && !mouse.rb ) {
109 vgGetPos( obs, pos );
        vgGetPos( obs, pos );
110 vgPerformPickProcessing( picker, pos) ;
        vgPerformPickProcessing( picker, pos) ;
111 }
        }
112 
    
113 // 拖拽鼠标右键:在指定的平面上移动选定的物体
    // 拖拽鼠标右键:在指定的平面上移动选定的物体  
114 if( !mouse.lb && !mouse.mb && mouse.rb ) {
    if( !mouse.lb && !mouse.mb && mouse.rb ) {
115 vgGetPos( obs, pos );
        vgGetPos( obs, pos );
116 vgPickerDoMouseTransform( picker, pos);
          vgPickerDoMouseTransform( picker, pos);
117 }
        }
118
119 }
} 
120
121 void userUpdates( ) {
void userUpdates( ) {
122 //  ############################################
//  ############################################ 
123 //  # 响应用户的键盘输入:
//  # 响应用户的键盘输入:
124 //  # 1——在XY平面上移动物体(默认情况)
//  # 1——在XY平面上移动物体(默认情况)
125 //  # 2——在XZ平面上移动物体
//  # 2——在XZ平面上移动物体
126 //  # 3——在YZ平面上移动物体
//  # 3——在YZ平面上移动物体   
127 //  ############################################
//  ############################################ 
128 int  key   = 0;
int  key   = 0;
129 
   
130 while( (key = vgGetWinKey( mainWin )) != 0 ) {
    while( (key = vgGetWinKey( mainWin )) != 0 ) {
131 
        
132 switch( key ) {
        switch( key ) {
133 
                                            
134 case '1':
           case '1':
135 vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XY );
                vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XY );
136 break;
                break;      
137 
  
138 case '2':
            case '2':
139 vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XZ );
                vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XZ );
140 break;
                break;      
141 
  
142 case '3':
            case '3':
143 vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_YZ );
                vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_YZ );
144 break;
                break;      
145 
  
146 
                       
147 default: break;
            default: break;                 
148
149 }
            } 
150 }
        }  
151
152 }
} 
153
154 int main(int argc, char* argv[]) {
int main(int argc, char* argv[]) {
155
156
157 
    
158 if( argc \n", argv[0] );
    if( argc \n", argv[0] ); 
159 exit ( -1 );
       exit ( -1 ); 
160 }
       }
161 
     
162 vgInitSys();
    vgInitSys();
163 vgDefineSys( argv[1] );
    vgDefineSys( argv[1] );
164 vgConfigSys();
    vgConfigSys(); 
165
166 setSystemPointers();
    setSystemPointers();
167 createPicker();
    createPicker();
168
169 //
    //
170 //设置物体mask掩码与vgPicker相一致,使得所有的物体都可以被选中
    //设置物体mask掩码与vgPicker相一致,使得所有的物体都可以被选中 
171 //
    // 
172 for( int  i= 0; i < vgGetNumObj(), i++ ){
    for( int  i= 0; i < vgGetNumObj(), i++ ){
173
174 vgObject *obj     = vgGetObj(i);
        vgObject *obj     = vgGetObj(i);
175 unsigned int mask = vgGetObjClass( obj );
        unsigned int mask = vgGetObjClass( obj );
176 mask |= vgGetPickerIsector( picker );
        mask |= vgGetPickerIsector( picker );
177 vgObjClass( obj, mask );
        vgObjClass( obj, mask );
178 }
        }
179
180 while( true ) {
    while( true ) {
181
182 vgSyncFrame();
        vgSyncFrame();
183 vgFrame();
        vgFrame();
184 userUpdates();
        userUpdates();
185 checkPickEvent();
        checkPickEvent();
186 }
        }
187
188
189 return 0;
return 0;
190 }
}
 #include
#include        2
 #include "vg.h"
#include "vg.h"           3
 #include "pf.h"
#include "pf.h"           4
 #include "assert.h"
#include "assert.h"     5

6

7
 vgPicker    *picker    = NULL;
vgPicker    *picker    = NULL;8
 vgObserver  *mainObs   = NULL;
vgObserver  *mainObs   = NULL;9
 vgChannel   *mainChan  = NULL;
vgChannel   *mainChan  = NULL;10
 vgEnv       *mainEnv   = NULL;
vgEnv       *mainEnv   = NULL;11
 vgWindow    *mainWin   = NULL;
vgWindow    *mainWin   = NULL;12
 vgGfx       *mainGfx   = NULL;
vgGfx       *mainGfx   = NULL;13
 vgScene     *mainScn   = NULL;
vgScene     *mainScn   = NULL;14

15

16
 void  setSystemPointers();
void  setSystemPointers();17
 void  createPicker();
void  createPicker();18
 void  userUpdates();
void  userUpdates();19
 void  checkPickEvent();
void  checkPickEvent();20

21
 void setSystemPointers(){
void setSystemPointers(){22
 //  ####################################################
//  ####################################################23
 //  # 获取系统的主要指针,注意必须在vgConfigSys()之后调用
//  # 获取系统的主要指针,注意必须在vgConfigSys()之后调用      24
 //  #
//  #    25
 //  ####################################################
//  ####################################################26

27
 mainWin = vgGetWin( 0 );
    mainWin = vgGetWin( 0 );28
 assert(mainWin);
    assert(mainWin);29

30
 mainObs = vgGetObserv( 0 );
    mainObs = vgGetObserv( 0 );        31
 assert(mainObs  );
    assert(mainObs  );32

33
 mainChan = vgGetObservChan( mainObs, 0 );
    mainChan = vgGetObservChan( mainObs, 0 );34
 assert(mainChan);
    assert(mainChan);35

36
 mainGfx = vgGetObservGfx( mainObs );
    mainGfx = vgGetObservGfx( mainObs );   37
 assert(mainEnv);
    assert(mainEnv);38

39
 mainEnv = vgGetEnv( 0 );
    mainEnv = vgGetEnv( 0 );   40
 assert(mainEnv);
    assert(mainEnv);41

42
 mainScn = vgGetScene(0);
    mainScn = vgGetScene(0);43
 assert(mainScn);
    assert(mainScn);44

45
 }
} 46

47

48
 void createPicker(){
void createPicker(){49
 //  ########################################
//  ######################################## 50
 //  # 创建一个vgPicker
//  # 创建一个vgPicker     51
 //  #
//  #52
 //  ########################################
//  ######################################## 53

54
 picker = vgNewPicker();
    picker = vgNewPicker();55
 assert( picker );
    assert( picker );56
 vgName( picker, "example_picker" );
    vgName( picker, "example_picker" );57

58
 //
    // 59
 // 指定vgPicker起作用的场景和通道
    // 指定vgPicker起作用的场景和通道60
 //
    // 61
 vgPickerScene( picker,  mainScn );
    vgPickerScene( picker,  mainScn );62
 vgPickerChannel( picker,  mainChan  );
    vgPickerChannel( picker,  mainChan  );63

64
 //
    // 65
 // 设置vgPicker属性,选择物体红色显示
    // 设置vgPicker属性,选择物体红色显示66
 //
    // 67
 vgPickerHighLightColor( picker, 1.0f, 0.0f, 0.0f );
    vgPickerHighLightColor( picker, 1.0f, 0.0f, 0.0f ); 68
 vgProp( picker, VGPICK_TRANSFORM,     VGPICK_TRANSLATE   );
    vgProp( picker, VGPICK_TRANSFORM,     VGPICK_TRANSLATE   );69
 vgProp( picker, VGPICK_TRANSCOORDS,    VGPICK_OBJECT_AXES );
    vgProp( picker, VGPICK_TRANSCOORDS,    VGPICK_OBJECT_AXES );70
 vgProp( picker, VGPICK_HL_LEVEL,       VGPICK_OBJECT      );
    vgProp( picker, VGPICK_HL_LEVEL,       VGPICK_OBJECT      ); 71
 vgProp( picker, VGPICK_HL_STYLE,       VGPICK_HL_LINE     );
    vgProp( picker, VGPICK_HL_STYLE,       VGPICK_HL_LINE     );72
 vgProp( picker, VGPICK_TERRAIN_CLAMP,  VG_OFF             );
    vgProp( picker, VGPICK_TERRAIN_CLAMP,  VG_OFF             );73
 vgProp( picker, VGPICK_TRANSOVERRIDE,  VG_OFF             );
    vgProp( picker, VGPICK_TRANSOVERRIDE,  VG_OFF             );74
 vgProp( picker, VGPICK_DISPLAY_STDOUT, VG_OFF             );
    vgProp( picker, VGPICK_DISPLAY_STDOUT, VG_OFF             ); 75
 vgProp( picker, VGPICK_MULTIPLE_PICKS, VG_OFF             );
    vgProp( picker, VGPICK_MULTIPLE_PICKS, VG_OFF             );76
 vgProp( picker, VGPICK_AUTOTRANSFORM,  VG_OFF             );
    vgProp( picker, VGPICK_AUTOTRANSFORM,  VG_OFF             );77
 vgProp( picker, VGPICK_TRACKPLANE,     VGPICK_TRACK_XY    );
    vgProp( picker, VGPICK_TRACKPLANE,     VGPICK_TRACK_XY    );78
 vgProp( picker, VGPICK_AUTOTRACKPLANE, VG_OFF             );
    vgProp( picker, VGPICK_AUTOTRACKPLANE, VG_OFF             );79
 vgProp( picker, VGPICK_DRAG_FACTOR,    1.0f               );
    vgProp( picker, VGPICK_DRAG_FACTOR,    1.0f               );80
 vgProp( picker, VGPICK_RENDER_ISECT,   VG_OFF             );
    vgProp( picker, VGPICK_RENDER_ISECT,   VG_OFF             );81

82
 //
    // 83
 // 设置vgPicker的相交矢量
    // 设置vgPicker的相交矢量 84
 //
    // 85
 vgPickerClampIsector( picker, 0x10000000 );
    vgPickerClampIsector( picker, 0x10000000 ); 86
 vgPickerIsector( picker, 0x10000000 );
    vgPickerIsector( picker, 0x10000000 );87

88
 // 启用vgPicker
    // 启用vgPicker 89
 vgProp( picker, VGCOMMON_ENABLED,  VG_ON );
    vgProp( picker, VGCOMMON_ENABLED,  VG_ON );90

91
 }
} 92

93
 void checkPickEvent(){
void checkPickEvent(){ 94
 // ###################################################
// ################################################### 95
 // # 判断vgPicker当前的动作
// # 判断vgPicker当前的动作 96
 // #
// # 97
 // #
// # 98
 // ###################################################
// ################################################### 99
 static vgMouse mouse;
static vgMouse mouse; 100
 static  vgPosition *pos = NULL;
static  vgPosition *pos = NULL;101
 if( pos == NULL ){
    if( pos == NULL ){102
 pos = vgNewPos();
      pos = vgNewPos();103
 assert( pos );
       assert( pos );104
 }
        }105
 vgGetMouse( &mouse );
    vgGetMouse( &mouse );106

107
 // 鼠标左键:拾取或取消拾取物体
    // 鼠标左键:拾取或取消拾取物体108
 if( mouse.lb && !mouse.mb && !mouse.rb ) {
   if( mouse.lb && !mouse.mb && !mouse.rb ) {109
 vgGetPos( obs, pos );
        vgGetPos( obs, pos );110
 vgPerformPickProcessing( picker, pos) ;
        vgPerformPickProcessing( picker, pos) ;111
 }
        }112
 
    113
 // 拖拽鼠标右键:在指定的平面上移动选定的物体
    // 拖拽鼠标右键:在指定的平面上移动选定的物体  114
 if( !mouse.lb && !mouse.mb && mouse.rb ) {
    if( !mouse.lb && !mouse.mb && mouse.rb ) {115
 vgGetPos( obs, pos );
        vgGetPos( obs, pos );116
 vgPickerDoMouseTransform( picker, pos);
          vgPickerDoMouseTransform( picker, pos);117
 }
        }118

119
 }
} 120

121
 void userUpdates( ) {
void userUpdates( ) {122
 //  ############################################
//  ############################################ 123
 //  # 响应用户的键盘输入:
//  # 响应用户的键盘输入:124
 //  # 1——在XY平面上移动物体(默认情况)
//  # 1——在XY平面上移动物体(默认情况)125
 //  # 2——在XZ平面上移动物体
//  # 2——在XZ平面上移动物体126
 //  # 3——在YZ平面上移动物体
//  # 3——在YZ平面上移动物体   127
 //  ############################################
//  ############################################ 128
 int  key   = 0;
int  key   = 0;129
 
   130
 while( (key = vgGetWinKey( mainWin )) != 0 ) {
    while( (key = vgGetWinKey( mainWin )) != 0 ) {131
 
        132
 switch( key ) {
        switch( key ) {133
 
                                            134
 case '1':
           case '1':135
 vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XY );
                vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XY );136
 break;
                break;      137
 
  138
 case '2':
            case '2':139
 vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XZ );
                vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_XZ );140
 break;
                break;      141
 
  142
 case '3':
            case '3':143
 vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_YZ );
                vgProp( picker, VGPICK_TRACKPLANE, VGPICK_TRACK_YZ );144
 break;
                break;      145
 
  146
 
                       147
 default: break;
            default: break;                 148

149
 }
            } 150
 }
        }  151

152
 }
} 153

154
 int main(int argc, char* argv[]) {
int main(int argc, char* argv[]) {155

156

157
 
    158
 if( argc \n", argv[0] );
    if( argc \n", argv[0] ); 159
 exit ( -1 );
       exit ( -1 ); 160
 }
       }161
 
     162
 vgInitSys();
    vgInitSys();163
 vgDefineSys( argv[1] );
    vgDefineSys( argv[1] );164
 vgConfigSys();
    vgConfigSys(); 165

166
 setSystemPointers();
    setSystemPointers();167
 createPicker();
    createPicker();168

169
 //
    //170
 //设置物体mask掩码与vgPicker相一致,使得所有的物体都可以被选中
    //设置物体mask掩码与vgPicker相一致,使得所有的物体都可以被选中 171
 //
    // 172
 for( int  i= 0; i < vgGetNumObj(), i++ ){
    for( int  i= 0; i < vgGetNumObj(), i++ ){173

174
 vgObject *obj     = vgGetObj(i);
        vgObject *obj     = vgGetObj(i);175
 unsigned int mask = vgGetObjClass( obj );
        unsigned int mask = vgGetObjClass( obj );176
 mask |= vgGetPickerIsector( picker );
        mask |= vgGetPickerIsector( picker );177
 vgObjClass( obj, mask );
        vgObjClass( obj, mask );178
 }
        }179

180
 while( true ) {
    while( true ) {181

182
 vgSyncFrame();
        vgSyncFrame();183
 vgFrame();
        vgFrame();184
 userUpdates();
        userUpdates();185
 checkPickEvent();
        checkPickEvent();186
 }
        }187

188

189
 return 0;
return 0;190
 }
} 
                    
                

 
     
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号