Changeset 744 for trunk/geant4/visualization/OpenGL
- Timestamp:
- Mar 6, 2008, 3:18:56 PM (17 years ago)
- Location:
- trunk/geant4/visualization/OpenGL
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/geant4/visualization/OpenGL/include/G4OpenGLQtMovieDialog.hh
r740 r744 61 61 /** Destroys G4OpenGLQtMovieDialog */ 62 62 ~G4OpenGLQtMovieDialog(); 63 void setStatus(QString); 63 void setRecordingStatus(QString); 64 void setRecordingInfos(QString); 64 65 void setEncodeButtonEnabled(bool); 65 66 … … 72 73 QLabel *fTempFolderStatus; 73 74 QLabel *fSaveFileStatus; 74 QLabel *fGlobalStatus; 75 QLabel *fRecordingStatus; 76 QLabel *fRecordingInfos; 75 77 QPushButton *fButtonEncode; 76 78 -
trunk/geant4/visualization/OpenGL/include/G4OpenGLQtViewer.hh
r742 r744 78 78 QString setSaveFileName(QString path); 79 79 QString getSaveFileName(); 80 bool getRecordFrames(); 80 enum RECORDING_STEP {WAIT=0,START,PAUSE,CONTINUE,STOP,ENCODE}; 81 RECORDING_STEP getRecordingStep(); 82 bool encodeVideo(); 81 83 82 84 protected: … … 108 110 void savePPMToTemp(); 109 111 bool generateMpegEncoderParameters(); 110 bool fRecordFrames;111 112 int fRecordFrameNumber; 112 113 … … 122 123 QString createTempFolder(); 123 124 QString removeTempFolder(); 124 bool saveVideo(); 125 void startPauseVideo(); 126 void stopVideo(); 127 void setRecordingStatus(RECORDING_STEP); 128 void setRecordingInfos(QString); 129 125 130 126 131 #if QT_VERSION < 0x040000 … … 130 135 #endif 131 136 enum mouseActions {STYLE1,STYLE2,STYLE3,STYLE4}; 137 132 138 mouseActions fMouseAction; // 1: rotate 2:move 3:pick 4:shortcuts 133 139 QPoint fLastPos; … … 168 174 QAction *fDrawingLineSurfaceRemoval; 169 175 G4OpenGLQtMovieDialog* fMovieParametersDialog; 176 RECORDING_STEP fRecordingStep; 170 177 171 178 private slots : -
trunk/geant4/visualization/OpenGL/src/G4OpenGLQtMovieDialog.cc
r742 r744 200 200 QGroupBox *statusGroupBox = new QGroupBox(tr("Status")); 201 201 QVBoxLayout *statusVGroupBoxLayout = new QVBoxLayout(statusGroupBox); 202 fGlobalStatus = new QLabel(statusGroupBox); 203 setStatus(""); 202 203 fRecordingStatus = new QLabel(statusGroupBox); 204 setRecordingStatus(""); 205 QPalette palette( fRecordingStatus->palette() ); 206 palette.setColor( QPalette::Text, Qt::green); 207 fRecordingStatus->setPalette(palette); 208 209 fRecordingInfos = new QLabel(statusGroupBox); 210 setRecordingInfos(""); 204 211 205 212 #if QT_VERSION < 0x040000 206 statusVGroupBoxLayout->add(fGlobalStatus); 213 statusVGroupBoxLayout->add(fRecordingStatus); 214 statusVGroupBoxLayout->add(fRecordingInfos); 207 215 208 216 globalVLayout->add(infoLabel); 209 217 globalVLayout->add(statusGroupBox); 210 218 #else 211 statusVGroupBoxLayout->addWidget(fGlobalStatus); 219 statusVGroupBoxLayout->addWidget(fRecordingStatus); 220 statusVGroupBoxLayout->addWidget(fRecordingInfos); 212 221 213 222 statusGroupBox->setLayout(statusVGroupBoxLayout); … … 231 240 232 241 fButtonEncode = new QPushButton( tr( "&Encode" ),buttonBox ); 233 fButtonEncode->setEnabled(fParentViewer->getRecordFrames()); 242 if (fParentViewer->getRecordingStep() == G4OpenGLQtViewer::ENCODE) { 243 fButtonEncode->setEnabled(true); 244 } else { 245 fButtonEncode->setEnabled(false); 246 } 234 247 fButtonEncode->setAutoDefault( TRUE ); 235 248 buttonBoxLayout->addWidget(fButtonEncode); … … 256 269 257 270 if (fParentViewer->getEncoderPath() == "") { 258 set Status("mpeg_encode is needed to encode in video format.\nIt is available here: \nhttp://bmrc.berkeley.edu/frame/research/mpeg/");271 setRecordingInfos("mpeg_encode is needed to encode in video format.\nIt is available here: \nhttp://bmrc.berkeley.edu/frame/research/mpeg/"); 259 272 } 260 273 … … 301 314 302 315 void G4OpenGLQtMovieDialog::encode() { 316 fParentViewer->encodeVideo(); 303 317 } 304 318 … … 326 340 327 341 QString temp = fParentViewer->setEncoderPath(param); 328 set Status("");342 setRecordingInfos(""); 329 343 fEncoderStatus->setText(temp); 330 344 if (temp != "") { 331 345 palette.setColor( QPalette::Base, Qt::red); 332 set Status("If no valid encode defined, screen \ncapture files will be saved in the\ntemp folder in ppm format.");346 setRecordingInfos("If no valid encode defined, screen \ncapture files will be saved in the\ntemp folder in ppm format."); 333 347 } else { 334 348 palette.setColor( QPalette::Base, Qt::white); 335 349 fEncoderPath->setText(fParentViewer->getEncoderPath()); 336 350 if (fParentViewer->getEncoderPath() == "") { 337 set Status("mpeg_encode is needed to encode in video format.\nIt is available here: \nhttp://bmrc.berkeley.edu/frame/research/mpeg/");351 setRecordingInfos("mpeg_encode is needed to encode in video format.\nIt is available here: \nhttp://bmrc.berkeley.edu/frame/research/mpeg/"); 338 352 } 339 353 } … … 382 396 383 397 384 void G4OpenGLQtMovieDialog::setStatus(QString txt) { 385 fGlobalStatus->setText(txt); 398 void G4OpenGLQtMovieDialog::setRecordingStatus(QString txt) { 399 fRecordingStatus->setText(txt); 400 } 401 402 void G4OpenGLQtMovieDialog::setRecordingInfos(QString txt) { 403 fRecordingInfos->setText(txt); 386 404 } 387 405 -
trunk/geant4/visualization/OpenGL/src/G4OpenGLQtViewer.cc
r743 r744 289 289 ,G4OpenGLViewer (scene) 290 290 ,fWindow(0) 291 ,fRecordFrames(false)292 291 ,fRecordFrameNumber(0) 293 292 ,fContextMenu(0) … … 308 307 ,fParameterFileName("mpeg_encode_parameter_file.par") 309 308 ,fMovieParametersDialog(NULL) 309 ,fRecordingStep(WAIT) 310 310 311 { 311 312 … … 1305 1306 return; 1306 1307 } 1307 QString nomFich =fMovieTempFolderPath+"Test"+QString::number(fRecordFrameNumber); 1308 QString fileName ="Test"+QString::number(fRecordFrameNumber)+".ppm"; 1309 QString filePath =fMovieTempFolderPath+fileName; 1308 1310 1309 1311 QImage image; … … 1311 1313 bool res = false; 1312 1314 1313 nomFich += "."+QString("ppm"); 1314 #if QT_VERSION < 0x040000 1315 res = image.save(nomFich,"ppm"); 1316 #else 1317 res = image.save(nomFich,0); 1318 #endif 1319 if (res == false) { 1320 fRecordFrames = false; 1321 if (fMovieParametersDialog) { 1322 fMovieParametersDialog->setStatus("Can't save tmp file "+nomFich); 1323 } else { 1324 #if QT_VERSION < 0x040000 1325 G4cout << "Can't save tmp file "<<nomFich.ascii()<<"\n" << G4endl; 1326 #else 1327 G4cout << "Can't save tmp file "<<nomFich.toStdString().c_str()<<"\n" << G4endl; 1328 #endif 1329 } 1315 #if QT_VERSION < 0x040000 1316 res = image.save(filePath,"ppm"); 1317 #else 1318 res = image.save(filePath,0); 1319 #endif 1320 if (res == false) { 1321 setRecordingStatus(WAIT); 1322 setRecordingInfos("Can't save tmp file "+filePath); 1330 1323 return; 1331 1324 } 1332 1325 1333 if (fMovieParametersDialog) { 1334 fMovieParametersDialog->setStatus("File "+nomFich+" saved"); 1335 } else { 1336 #if QT_VERSION < 0x040000 1337 G4cout << "File "<<nomFich.ascii()<<" saved\n" << G4endl; 1338 #else 1339 G4cout << "File "<<nomFich.toStdString().c_str()<<" saved\n" << G4endl; 1340 #endif 1341 } 1326 setRecordingInfos("File "+fileName+" saved"); 1342 1327 fRecordFrameNumber++; 1343 1328 #ifdef GEANT4_QT_DEBUG … … 2103 2088 2104 2089 if ((event->key() == Qt::Key_Return) || (event->key() == Qt::Key_Enter)){ // end of video 2105 // if encoder parameter is wrong, display parameters dialog and return 2106 if (!fMovieParametersDialog) { 2107 showMovieParametersDialog(); 2108 } 2109 fMovieParametersDialog->setStatus("Stop Recording\n"); 2110 2090 stopVideo(); 2091 } 2092 if (event->key() == Qt::Key_Space){ // start/pause of video 2093 startPauseVideo(); 2094 } 2095 2096 // with no modifiers 2097 #if QT_VERSION < 0x040000 2098 if (event->state() == Qt::NoButton) { 2099 #else 2100 if (event->modifiers() == Qt::NoModifier) { 2101 #endif 2102 if (event->key() == Qt::Key_Down) { // go down 2103 moveScene(0,1,0,false); 2104 } 2105 else if (event->key() == Qt::Key_Up) { // go up 2106 moveScene(0,-1,0,false); 2107 } 2108 if (event->key() == Qt::Key_Left) { // go left 2109 moveScene(-1,0,0,false); 2110 } 2111 else if (event->key() == Qt::Key_Right) { // go right 2112 moveScene(1,0,0,false); 2113 } 2114 } 2115 fHoldKeyEvent = false; 2116 } 2117 2118 2119 /** Stop the video. Check all parameters and enable encoder button if all is ok. 2120 */ 2121 void G4OpenGLQtViewer::stopVideo() { 2122 2123 // if encoder parameter is wrong, display parameters dialog and return 2124 if (!fMovieParametersDialog) { 2125 showMovieParametersDialog(); 2126 } 2127 setRecordingStatus(STOP); 2128 2129 if (fRecordFrameNumber >0) { 2111 2130 // check parameters if they were modified (Re APPLY them...) 2112 2131 fMovieParametersDialog->checkAllParameters(); 2113 if (getEncoderPath() != "") { 2114 if (getSaveFileName() != "") { 2115 if (generateMpegEncoderParameters()) { 2116 fMovieParametersDialog->setEncodeButtonEnabled(true); 2117 fMovieParametersDialog->setStatus("Parameter file "+fParameterFileName+" generated in "+fMovieTempFolderPath); 2118 } else { // try to encode without dialog 2119 fMovieParametersDialog->setStatus("Generation of parameter file failed"); 2132 if ((getEncoderPath() != "") && (getSaveFileName() != "")) { 2133 if (generateMpegEncoderParameters()) { 2134 fMovieParametersDialog->setEncodeButtonEnabled(true); 2135 setRecordingInfos("Parameter file "+fParameterFileName+" generated in "+fMovieTempFolderPath); 2136 } else { // try to encode without dialog 2137 setRecordingInfos("Generation of parameter file failed"); 2138 } 2139 } 2140 } else { 2141 setRecordingStatus(WAIT); 2142 setRecordingInfos("No frame to encode."); 2143 } 2144 } 2145 2146 2147 /** Start/Pause the video.. 2148 */ 2149 void G4OpenGLQtViewer::startPauseVideo() { 2150 2151 // first time, if temp parameter is wrong, display parameters dialog and return 2152 if ( fRecordingStep == WAIT) { 2153 if ( fRecordFrameNumber == 0) { 2154 if (getTempFolderPath() == "") { 2155 showMovieParametersDialog(); 2156 setRecordingInfos("You should specified the temp folder in order to make movie"); 2157 return; 2158 } else { 2159 // remove temp folder if it was create 2160 QString tmp = removeTempFolder(); 2161 if (tmp !="") { 2162 setRecordingInfos(tmp); 2163 return; 2164 } 2165 tmp = createTempFolder(); 2166 if (tmp != "") { 2167 setRecordingInfos("Can't create temp folder. \n"+tmp); 2168 return; 2120 2169 } 2121 2170 } 2122 2171 } 2123 fRecordFrames = false; 2124 } 2125 if (event->key() == Qt::Key_Space){ // start/pause of video 2126 // first time, if temp parameter is wrong, display parameters dialog and return 2127 if (fRecordFrames == false) { 2128 if ( fRecordFrameNumber == 0) { 2129 if (getTempFolderPath() == "") { 2130 showMovieParametersDialog(); 2131 fMovieParametersDialog->setStatus("You should specified the temp folder in order to make movie"); 2132 fHoldKeyEvent = false; 2133 return; 2134 } else { 2135 // remove temp folder if it was create 2136 QString tmp = removeTempFolder(); 2137 if (tmp !="") { 2138 fMovieParametersDialog->setStatus(tmp); 2139 fHoldKeyEvent = false; 2140 return; 2141 } 2142 tmp = createTempFolder(); 2143 if (tmp != "") { 2144 fMovieParametersDialog->setStatus("Can't create temp folder. \n"+tmp); 2145 fHoldKeyEvent = false; 2146 return; 2147 } 2148 } 2149 } 2150 } 2151 fRecordFrames = !fRecordFrames; 2152 if (fRecordFrames) { 2153 2154 if (fMovieParametersDialog) { 2155 fMovieParametersDialog->setStatus("Start Recording\n"); 2156 } else { 2157 G4cout << " Start Recording \n" << G4endl; 2158 } 2159 } else { 2160 if (fMovieParametersDialog) { 2161 fMovieParametersDialog->setStatus("Pause Recording\n"); 2162 } else { 2163 G4cout << "Pause Recording \n" << G4endl; 2164 } 2165 } 2166 } 2167 2168 // with no modifiers 2169 #if QT_VERSION < 0x040000 2170 if (event->state() == Qt::NoButton) { 2171 #else 2172 if (event->modifiers() == Qt::NoModifier) { 2173 #endif 2174 if (event->key() == Qt::Key_Down) { // go down 2175 moveScene(0,1,0,false); 2176 } 2177 else if (event->key() == Qt::Key_Up) { // go up 2178 moveScene(0,-1,0,false); 2179 } 2180 if (event->key() == Qt::Key_Left) { // go left 2181 moveScene(-1,0,0,false); 2182 } 2183 else if (event->key() == Qt::Key_Right) { // go right 2184 moveScene(1,0,0,false); 2185 } 2186 } 2187 fHoldKeyEvent = false; 2188 } 2189 2172 } 2173 if (fRecordingStep == WAIT) { 2174 fRecordingStep = START; 2175 } else if (fRecordingStep == START) { 2176 fRecordingStep = PAUSE; 2177 } else if (fRecordingStep == PAUSE) { 2178 fRecordingStep = CONTINUE; 2179 } else if (fRecordingStep == CONTINUE) { 2180 fRecordingStep = PAUSE; 2181 } 2182 } 2183 2184 2185 void G4OpenGLQtViewer::setRecordingStatus(RECORDING_STEP step) { 2186 2187 QString txt = ""; 2188 if (step == WAIT) { 2189 txt = "Waiting to start..."; 2190 fRecordFrameNumber = 0; // reset the frame number 2191 } else if (step == START) { 2192 txt = "Start Recording..."; 2193 } else if (step == PAUSE) { 2194 txt = "Pause Recording..."; 2195 } else if (step == CONTINUE) { 2196 txt = "Continue Recording..."; 2197 } else if (step == STOP) { 2198 txt = "Stop Recording..."; 2199 } else if (step == ENCODE) { 2200 txt = "Encoding..."; 2201 } else { 2202 } 2203 2204 if (fMovieParametersDialog) { 2205 setRecordingInfos(txt); 2206 } else { 2207 #if QT_VERSION < 0x040000 2208 G4cout << txt.ascii() << G4endl; 2209 #else 2210 G4cout << txt.toStdString().c_str() << G4endl; 2211 #endif 2212 } 2213 setRecordingInfos(""); 2214 } 2215 2216 void G4OpenGLQtViewer::setRecordingInfos(QString txt) { 2217 if (fMovieParametersDialog) { 2218 setRecordingInfos(txt); 2219 } else { 2220 #if QT_VERSION < 0x040000 2221 G4cout << txt.ascii() << G4endl; 2222 #else 2223 G4cout << txt.toStdString().c_str() << G4endl; 2224 #endif 2225 } 2226 } 2190 2227 2191 2228 /** Init the movie parameters. Temp dir and encoder path … … 2240 2277 } 2241 2278 2242 bool G4OpenGLQtViewer::getRecordFrames(){2243 return fRecord Frames;2279 G4OpenGLQtViewer::RECORDING_STEP G4OpenGLQtViewer::getRecordingStep(){ 2280 return fRecordingStep; 2244 2281 } 2245 2282 … … 2337 2374 return tmp; 2338 2375 } 2339 QString path = Q Dir::separator()+"QtMovie_"+QDateTime::currentDateTime ().toString("dd-MM-yyyy_hh-mm-ss")+QDir::separator();2376 QString path = QString(QDir::separator())+"QtMovie_"+QDateTime::currentDateTime ().toString("dd-MM-yyyy_hh-mm-ss")+QString(QDir::separator()); 2340 2377 QDir *d = new QDir(QDir::cleanPath(fTempFolderPath)); 2341 2378 // check if it is already present … … 2584 2621 fclose (fp); 2585 2622 2586 fMovieParametersDialog->setStatus("Parameter file generated : "+fMovieTempFolderPath+fParameterFileName);2587 2623 return true; 2588 2624 } 2589 2625 2590 bool G4OpenGLQtViewer:: saveVideo()2626 bool G4OpenGLQtViewer::encodeVideo() 2591 2627 { 2628 setRecordingStatus(ENCODE); 2592 2629 QProcess::execute (fEncoderPath, QStringList(fMovieTempFolderPath+fParameterFileName)); 2593 fMovieParametersDialog->setStatus(removeTempFolder()); 2594 2595 // reset2596 fRecordFrameNumber = 0; 2630 2631 setRecordingStatus(WAIT); 2632 setRecordingInfos(removeTempFolder()); 2633 2597 2634 return true; 2598 2635 } -
trunk/geant4/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc
r739 r744 199 199 } 200 200 201 if ( fRecordFrames) {201 if ((getRecordingStep() == START) || (getRecordingStep() == PAUSE) || (getRecordingStep() == CONTINUE)) { 202 202 savePPMToTemp(); 203 203 fRecordFrameNumber++;
Note: See TracChangeset
for help on using the changeset viewer.