- Timestamp:
- May 19, 2010, 5:11:38 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/visualization/OpenGL/src/G4OpenGLSceneHandler.cc
r1242 r1253 25 25 // 26 26 // 27 // $Id: G4OpenGLSceneHandler.cc,v 1.5 6 2009/10/21 15:18:43 allisonExp $27 // $Id: G4OpenGLSceneHandler.cc,v 1.57 2010/04/30 13:18:32 lgarnier Exp $ 28 28 // GEANT4 tag $Name: $ 29 29 // … … 198 198 void G4OpenGLSceneHandler::AddPrimitive (const G4Polymarker& polymarker) 199 199 { 200 #ifdef G4DEBUG_VIS_OGL201 // printf("G4OpenGLSceneHandler::AddPrimitive polymarker");202 #endif203 200 G4int nPoints = polymarker.size (); 204 201 if (nPoints <= 0) return; … … 217 214 case G4Polymarker::dots: 218 215 { 219 #ifdef G4DEBUG_VIS_OGL220 // printf(" dots ");221 #endif222 216 for (size_t iPoint = 0; iPoint < polymarker.size (); iPoint++) { 223 217 G4Circle dot (polymarker); … … 231 225 case G4Polymarker::circles: 232 226 { 233 #ifdef G4DEBUG_VIS_OGL234 // printf(" circle ");235 #endif236 #ifdef G4VIS_BUILD_OPTIMISE_3237 227 std::vector <G4VMarker> circleV; 238 // FIXME, must check attribute before doing a list239 #endif240 228 for (size_t iPoint = 0; iPoint < polymarker.size (); iPoint++) { 241 229 G4Circle circle (polymarker); 242 230 // If not already drawn 243 231 circle.SetPosition (polymarker[iPoint]); 244 #ifdef G4VIS_BUILD_OPTIMISE_3245 232 circleV.push_back(circle); 246 #endif 247 } 248 #ifdef G4VIS_BUILD_OPTIMISE_3 233 // G4OpenGLSceneHandler::AddPrimitive (circle); 234 } 249 235 G4OpenGLSceneHandler::AddPrimitives (circleV); 250 #endif251 236 } 252 237 break; 253 238 case G4Polymarker::squares: 254 239 { 255 #ifdef G4DEBUG_VIS_OGL256 // printf(" square ");257 #endif258 #ifdef G4VIS_BUILD_OPTIMISE_3259 240 std::vector <G4VMarker> squareV; 260 // FIXME, must check attribute before doing a list261 #endif262 241 for (size_t iPoint = 0; iPoint < polymarker.size (); iPoint++) { 263 242 G4Square square (polymarker); 264 243 square.SetPosition (polymarker[iPoint]); 265 #ifdef G4VIS_BUILD_OPTIMISE_3266 244 squareV.push_back(square); 267 #endif 268 } 269 #ifdef G4VIS_BUILD_OPTIMISE_3 245 // G4OpenGLSceneHandler::AddPrimitive (square); 246 } 270 247 G4OpenGLSceneHandler::AddPrimitives (squareV); 271 #endif272 248 } 273 249 break; 274 250 } 275 251 276 #ifdef G4DEBUG_VIS_OGL277 // printf(" \n");278 #endif279 252 fProcessingPolymarker = false; 280 253 } … … 340 313 void G4OpenGLSceneHandler::AddPrimitives (std::vector <G4VMarker> square) { 341 314 glDisable (GL_POINT_SMOOTH); 342 AddCircleSquare s(square, G4OpenGLBitMapStore::square);315 AddCircleSquareVector (square, G4OpenGLBitMapStore::square); 343 316 } 344 317 … … 347 320 G4OpenGLBitMapStore::Shape shape) { 348 321 349 if (!fProcessingPolymarker) { // Polymarker has already loaded atts. 350 // Loads G4Atts for picking... 351 if (fpViewer->GetViewParameters().IsPicking()) { 352 G4AttHolder* holder = new G4AttHolder; 353 LoadAtts(marker, holder); 354 fPickMap[fPickName] = holder; 355 } 356 } 357 358 // Note: colour treated in sub-class. 359 360 if (fpViewer -> GetViewParameters ().IsMarkerNotHidden ()) { 361 #ifdef G4DEBUG_VIS_OGL 362 // printf("+"); 363 #endif 364 glDisable (GL_DEPTH_TEST); 365 } else { 366 #ifdef G4DEBUG_VIS_OGL 367 // printf("-"); 368 #endif 369 glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LESS);} 370 371 glDisable (GL_LIGHTING); 372 373 // Get vis attributes - pick up defaults if none. 374 const G4VisAttributes* pVA = 375 fpViewer -> GetApplicableVisAttributes (marker.GetVisAttributes ()); 376 377 G4double lineWidth = GetLineWidth(pVA); 378 glLineWidth(lineWidth); 379 380 G4VMarker::FillStyle style = marker.GetFillStyle(); 381 382 G4bool filled = false; 383 static G4bool hashedWarned = false; 384 385 switch (style) { 386 case G4VMarker::noFill: 387 glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); 388 filled = false; 389 break; 390 391 case G4VMarker::hashed: 392 if (!hashedWarned) { 393 G4cout << "Hashed fill style in G4OpenGLSceneHandler." 394 << "\n Not implemented. Using G4VMarker::filled." 395 << G4endl; 396 hashedWarned = true; 397 } 398 // Maybe use 399 //glPolygonStipple (fStippleMaskHashed); 400 // Drop through to filled... 401 402 case G4VMarker::filled: 403 glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); 404 filled = true; 405 break; 406 407 } 408 409 // A few useful quantities... 410 G4Point3D centre = marker.GetPosition(); 411 MarkerSizeType sizeType; 412 G4double size = GetMarkerSize(marker, sizeType); 413 414 415 // Draw... 416 if (sizeType == world) { // Size specified in world coordinates. 417 418 DrawXYPolygon (shape, size, centre, pVA); 419 420 } else { // Size specified in screen (window) coordinates. 421 glPointSize (size); 422 glBegin (GL_POINTS); 423 glVertex3f(centre.x(),centre.y(),centre.z()); 424 glEnd(); 425 //Antialiasing 426 glEnable (GL_POINT_SMOOTH); 427 //Transparency 428 glEnable(GL_BLEND); 429 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 430 431 // L. GARNIER 1 March 2009 432 // Old method, we draw a bitmap instead of a GL_POINT. 433 // I remove it because it cost in term of computing performances 434 // and gl2ps can't draw bitmaps 435 436 // glRasterPos3d(centre.x(),centre.y(),centre.z()); 437 // const GLubyte* marker = 438 // G4OpenGLBitMapStore::GetBitMap(shape, size, filled); 439 // glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 440 // glBitmap(GLsizei(size), GLsizei(size), size/2., size/2., 0., 0., marker); 441 } 442 } 443 444 void G4OpenGLSceneHandler::AddCircleSquares 322 std::vector <G4VMarker> circleVector; 323 circleVector.push_back(marker); 324 AddCircleSquareVector(circleVector,shape); 325 } 326 327 void G4OpenGLSceneHandler::AddCircleSquareVector 445 328 (std::vector <G4VMarker> marker, 446 329 G4OpenGLBitMapStore::Shape shape) { … … 462 345 463 346 if (fpViewer -> GetViewParameters ().IsMarkerNotHidden ()) { 464 #ifdef G4DEBUG_VIS_OGL465 // printf("+");466 #endif467 347 glDisable (GL_DEPTH_TEST); 468 348 } else { 469 #ifdef G4DEBUG_VIS_OGL 470 // printf("-"); 471 #endif 472 glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LESS);} 349 glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LESS); 350 } 473 351 474 352 glDisable (GL_LIGHTING);
Note: See TracChangeset
for help on using the changeset viewer.