source: trunk/source/visualization/FukuiRenderer/include/G4FRSceneFunc.icc@ 1351

Last change on this file since 1351 was 1347, checked in by garnier, 15 years ago

geant4 tag 9.4

File size: 40.5 KB
RevLine 
[834]1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
[1347]27// $Id: G4FRSceneFunc.icc,v 1.16 2010/11/11 01:13:42 akimura Exp $
28// GEANT4 tag $Name: geant4-09-04-ref-00 $
[834]29//
30
[1347]31#include "G4VisManager.hh"
[834]32#include "G4PhysicalVolumeModel.hh"
33#include "G4LogicalVolume.hh"
34
35//========== AddPrimitive() functions ==========//
36
37//----- Add polyline
38void G4FRSCENEHANDLER::AddPrimitive (const G4Polyline& polyline)
39{
40#if defined DEBUG_FR_SCENE
[1347]41 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
42 G4cout << "***** AddPrimitive\n";
[834]43#endif
44 //----- Initialize Fukui Renderer IF NECESSARY
45 FRBeginModeling();
46
47 //----- local working variables
48 G4int nPoints = polyline.size ();
49 G4int i ;
50 const G4VisAttributes* pVA =
51 fpViewer->GetApplicableVisAttributes ( polyline.GetVisAttributes() );
52
53 //----- skip drawing invisible primitive
54 if( pVA ){
55 if( !(pVA->IsVisible()) ) { return ; }
56 }
57
58 //----- Attributes
59 if(!SendVisAttributes( pVA ) ) {
60 SendStr( FR_COLOR_RGB_RED ); // color
61 }
62
63 //----- send coordinates to Fukui Renderer
64 SendTransformedCoordinates();
65
66 //----- send beginning of polyline
67 SendStr( FR_POLYLINE );
68
69 //----- vertices on polyline
70 for ( i = 0; i < nPoints; i++ ) {
71 SendStrDouble3( FR_PL_VERTEX , \
72 polyline[i].x(), \
73 polyline[i].y(), \
74 polyline[i].z() );
75 }
76
77 //----- send ending of polyline
78 SendStr( FR_END_POLYLINE );
79
80} // G4FRSCENEHANDLER::AddPrimitive (polyline)
81
82
83//----- Add nurbes
84void G4FRSCENEHANDLER::AddPrimitive (const G4NURBS&)
85{
86 //-----
87#if defined DEBUG_FR_SCENE
[1347]88 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
89 G4cout << "***** AddPrimitive( G4NURBS )\n";
[834]90#endif
91
92 //----- Initialize DAWN IF NECESSARY
93 FRBeginModeling();
94
95 ///////////////////////////////////////////////
96 // DAWN does not support NUBS visualizaition //
97 ///////////////////////////////////////////////
98}
99
100
101
102//----- Add text
103void G4FRSCENEHANDLER::AddPrimitive ( const G4Text& text )
104{
105 //-----
106#if defined DEBUG_FR_SCENE
[1347]107 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
108 G4cout << "***** AddPrimitive( G4Text )\n";
[834]109#endif
110 //----- Initialize DAWN IF NECESSARY
111 FRBeginModeling();
112
113 //----- send color
114 const G4Color& color = GetTextColor (text) ;
115 SendStrDouble3( FR_COLOR_RGB ,
116 color.GetRed (),
117 color.GetGreen(),
118 color.GetBlue () );
119
120 //----- send body coordinates
121 SendTransformedCoordinates();
122
123 //----- Calc size
124 MarkerSizeType size_type;
125 G4double fontsize = GetMarkerDiameter( text , size_type );
126
127 //----- Calc position
128 const G4Point3D& position = text.GetPosition () ;
129
130 //----- offset
131 G4double x_offset = text.GetXOffset();
132 G4double y_offset = text.GetYOffset();
133
134 //----- get string to be visualized and Calc its length
135 const char* vis_text = text.GetText();
136 const int STR_LENGTH = strlen ( vis_text );
137
138 //----- create buffer and copy the string there
139 int MAX_STR_LENGTH = COMMAND_BUF_SIZE - 100 ;
140 if ( MAX_STR_LENGTH <= 0 ) {
[1347]141 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) {
142 G4cout << "ERROR (FukuiRenderer) : Not enough buffer size for data transferring." << G4endl;
143 G4cout << " G4Text Visualization is aborted" << G4endl;
144 }
145 return ;
[834]146 }
147 char* buf = new char [ (MAX_STR_LENGTH + 1) ] ;
148 if ( MAX_STR_LENGTH >= STR_LENGTH ) {
149 strcpy ( buf, vis_text ) ;
150 } else {
151 strncpy ( buf, vis_text, MAX_STR_LENGTH ) ;
152 }
153
154 //----- select string command
155 char text_command[32];
156 switch (size_type) {
157 case world:
158 strcpy ( text_command, FR_MARK_TEXT_2D );
159 break;
160 case screen:
161 default:
162 strcpy ( text_command, FR_MARK_TEXT_2DS );
163 break;
164 }
165
166 //----- Send string command
167 SendStrDouble6Str( text_command, \
168 position.x() , position.y() , position.z(),
169 fontsize , x_offset , y_offset ,
170 buf );
171
172 //----- delete buffer
173 delete [] buf ;
174
175} // G4FRSCENEHANDLER::AddPrimitive ( text )
176
177
178//----- Add circle
179void G4FRSCENEHANDLER::AddPrimitive ( const G4Circle& mark_circle )
180{
181 //-----
182#if defined DEBUG_FR_SCENE
[1347]183 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
184 G4cout << "***** AddPrimitive( G4Circle )\n";
[834]185#endif
186 //----- Initialize Fukui Renderer IF NECESSARY
187 FRBeginModeling();
188
189 //----- send color
190 const G4Color& color = GetColor (mark_circle) ;
191 SendStrDouble3( FR_COLOR_RGB ,
192 color.GetRed (),
193 color.GetGreen(),
194 color.GetBlue () );
195
196 //----- send body coordinates
197 SendTransformedCoordinates();
198
199 //----- Calc position
200 const G4Point3D& position = mark_circle.GetPosition () ;
201
202 //----- Calc size
203 MarkerSizeType size_type;
204 G4double size = GetMarkerRadius( mark_circle , size_type );
205
206 //----- send mark
207 switch (size_type) {
208 case world:
209 SendStrDouble4( FR_MARK_CIRCLE_2D, \
210 position.x() , position.y() , position.z(), size );
211 break;
212 default:
213 case screen:
214 SendStrDouble4( FR_MARK_CIRCLE_2DS, \
215 position.x() , position.y() , position.z(), size );
216 break;
217 }
218
219} // G4FRSCENEHANDLER::AddPrimitive ( mark_circle )
220
221
222//----- Add square
223void G4FRSCENEHANDLER::AddPrimitive (const G4Square& mark_square )
224{
225 //-----
226#if defined DEBUG_FR_SCENE
[1347]227 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
228 G4cout << "***** AddPrimitive( G4Square )\n";
[834]229#endif
230 //----- Initialize Fukui Renderer IF NECESSARY
231 FRBeginModeling();
232
233 //----- send color
234 const G4Color& color = GetColor (mark_square) ;
235 SendStrDouble3( FR_COLOR_RGB ,
236 color.GetRed (),
237 color.GetGreen(),
238 color.GetBlue () );
239
240 //----- send body coordinates
241 SendTransformedCoordinates();
242
243 //----- Calc position
244 const G4Point3D& position = mark_square.GetPosition () ;
245
246 //----- Calc size
247 MarkerSizeType size_type;
248 G4double size = GetMarkerRadius( mark_square , size_type );
249
250 //----- send mark
251 switch (size_type) {
252 case world:
253 SendStrDouble4( FR_MARK_SQUARE_2D, \
254 position.x() , position.y() , position.z(), size );
255 break;
256 default:
257 case screen:
258 SendStrDouble4( FR_MARK_SQUARE_2DS, \
259 position.x() , position.y() , position.z(), size );
260 break;
261 }
262
263} // G4FRSCENEHANDLER::AddPrimitive ( mark_square )
264
265
266//----- Add polyhedron
267void G4FRSCENEHANDLER::AddPrimitive ( const G4Polyhedron& polyhedron )
268{
269 //-----
270#if defined DEBUG_FR_SCENE
[1347]271 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
272 G4cout << "***** AddPrimitive( G4Polyhedron )\n";
[834]273#endif
274
275 if (polyhedron.GetNoFacets() == 0) return;
276
277 //----- Initialize Fukui Renderer IF NECESSARY
278 FRBeginModeling();
279
280 //----- Attributes
281 if(!SendVisAttributes( fpViewer->GetApplicableVisAttributes
282 (polyhedron.GetVisAttributes() ) ) ) {
283 SendStr( FR_COLOR_RGB_RED ); // color
284 }
285
286 //----- Coordinates
287 SendTransformedCoordinates();
288
289 //----- Brep data
290
291 //---------- (1) Declare beginning of Brep data
292 SendStr(FR_POLYHEDRON);
293
294 //---------- (2) Vertex block
295 G4int i, j;
296 for (i = 1, j = polyhedron.GetNoVertices(); j; j--, i++){
297 G4Point3D point = polyhedron.GetVertex(i);
298 SendStrDouble3( FR_VERTEX, point.x (), point.y (), point.z ());
299 }
300
301 //---------- (3) Facet block
302 for (int f = polyhedron.GetNoFacets(); f; f--){
303 G4int notLastEdge;
304 G4int index = -1; // initialization
305 G4int edgeFlag = 1;
306 G4int preedgeFlag = 1;
307 G4int work[4], i = 0;
308 do {
309 preedgeFlag = edgeFlag;
310 notLastEdge = polyhedron.GetNextVertexIndex(index, edgeFlag);
311 work[i++] = index;
312 }while (notLastEdge);
313 switch (i){
314 case 3:
315 SendStrInt3(FR_FACET, work[0], work[1], work[2] );
316 break;
317 case 4:
318 SendStrInt4(FR_FACET, work[0], work[1], work[2], work[3] );
319 break;
320 default:
[1347]321 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
322 G4cout <<
323 "ERROR G4FRSCENEHANDLER::AddPrimitive(G4Polyhedron)\n";
324 G4PhysicalVolumeModel* pPVModel =
325 dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
326 if (pPVModel)
327 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) {
328 G4cout <<
329 "Volume " << pPVModel->GetCurrentPV()->GetName() <<
330 ", Solid " << pPVModel->GetCurrentLV()->GetSolid()->GetName() <<
331 " (" << pPVModel->GetCurrentLV()->GetSolid()->GetEntityType();
332 G4cout <<
333 "\nG4Polyhedron facet with " << i << " edges" << G4endl;
334 }
[834]335 }
336 }
337
338 //---------- (4) Declare ending of Brep data
339 SendStr(FR_END_POLYHEDRON);
340
341} // G4FRSCENEHANDLER::AddPrimitive (polyhedron)
342
343
344//-----
345void G4FRSCENEHANDLER::SendNdiv ( void )
346{
347//////////////////////////////////////////////////
348//#if defined DEBUG_FR_SCENE
[1347]349// G4cout << "***** SendNdiv() (/Ndiv)" << G4endl;
[834]350//#endif
351//////////////////////////////////////////////////
352
353 //----- local
354 G4int num_division = FR_DEFALUT_NDIV_VALUE ;
355
356 //----- number used for dividing a curved surface, Ndiv
357 // if ( GetModel() ) { ?? Why test for model. Can be zero. JA ??
358 const G4VisAttributes* pVisAttribs =
359 fpViewer -> GetApplicableVisAttributes (fpVisAttribs);
360 num_division = GetNoOfSides(pVisAttribs);
361 // } else {
362#if defined DEBUG_FR_SCENE
[1347]363 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) {
364 G4cout << "WARNING: GetNoOfSides() failed. " ;
365 G4cout << "The default value " << num_division ;
366 G4cout << " is assigned." << G4endl;
367 }
[834]368#endif
369 //}
370
371 //---------- Error recovery for too small Ndiv
372 num_division = ( num_division < 3 ? 3 : num_division );
373
374//////////////////////////////////////////////////
375//#if defined DEBUG_FR_SCENE
[1347]376// G4cout << "Ndiv = " << num_division << G4endl;
[834]377//#endif
378//////////////////////////////////////////////////
379
380 //----- Send resultant Ndiv
381 this->SendStrInt( FR_NDIV, num_division );
382
383
384}
385
386//-----
387void G4FRSCENEHANDLER::FREndModeling ()
388{
389 //-----
390#if defined DEBUG_FR_SCENE
[1347]391 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
392 G4cout << "***** FREndModeling (called)" << G4endl;
[834]393#endif
394 if( FRIsInModeling() ) {
395
396#if defined DEBUG_FR_SCENE
[1347]397 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) {
398 G4cout << "***** FREndModeling (started) " ;
399 G4cout << "(/EndModeling, /DrawAll, /CloseDevice)" << G4endl;
400 }
[834]401#endif
402
403 SendStr( "#--------------------" );
404
405 //----- !EndModeling
406 SendStr( FR_END_MODELING );
407
408 //----- !DrawAll
409 SendStr( FR_DRAW_ALL );
410
411 //----- !CloseDevice
412 SendStr( FR_CLOSE_DEVICE );
413
414 //----- End saving data to g4.prim
415 EndSavingG4Prim() ;
416
417 //------ Reset flag
418 FRflag_in_modeling = false ;
419 }
420}
421
422
423//-----
424void G4FRSCENEHANDLER::BeginPrimitives (const G4Transform3D& objectTransformation)
425{
426#if defined DEBUG_FR_SCENE
[1347]427 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
428 G4cout << "***** BeginPrimitives \n";
[834]429#endif
430
431 FRBeginModeling();
432
433 G4VSceneHandler::BeginPrimitives (objectTransformation);
434 fpObjectTransformation = &objectTransformation;
435
436}
437
438
439//-----
440void G4FRSCENEHANDLER::EndPrimitives ()
441{
442#if defined DEBUG_FR_SCENE
[1347]443 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
444 G4cout << "***** EndPrimitives \n";
[834]445#endif
446 G4VSceneHandler::EndPrimitives ();
447}
448
449
450//========== AddSolid() functions ==========//
451
452//----- Add box
453void G4FRSCENEHANDLER::AddSolid( const G4Box& box )
454{
455#if defined DEBUG_FR_SCENE
[1347]456 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
457 G4cout << "***** AddSolid ( box )\n";
[834]458#endif
459 //----- skip drawing invisible primitive
460 if( !IsVisible() ) { return ; }
461
462 //----- Initialize Fukui Renderer IF NECESSARY
463 FRBeginModeling();
464
465 //----- Send Name
466 SendPhysVolName();
467
468 //----- Send Ndiv
469 // SendNdiv();
470
471 //----- Attributes
472 if(!SendVisAttributes
473 ( fpViewer->GetApplicableVisAttributes( fpVisAttribs ) ) ) {
474 SendStr( FR_COLOR_RGB_GREEN ); // color
475 }
476
477 //----- parameters (half lengths of box)
478 G4double dx = box.GetXHalfLength ();
479 G4double dy = box.GetYHalfLength ();
480 G4double dz = box.GetZHalfLength ();
481
482 //----- send coordinates to Fukui Renderer
483 SendTransformedCoordinates();
484
485 //----- send box to Fukui Renderer
486 SendStrDouble3( FR_BOX, dx, dy, dz );
487
488} // void G4FRSCENEHANDLER::AddSolid( const G4Box& box )
489
490
491//----- Add tubes
492void
493G4FRSCENEHANDLER::AddSolid( const G4Tubs& tubes )
494{
495#if defined DEBUG_FR_SCENE
[1347]496 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
497 G4cout << "***** AddSolid ( tubes )\n";
[834]498#endif
499 //----- skip drawing invisible primitive
500 if( !IsVisible() ) { return ; }
501
502 //----- Initialize Fukui Renderer IF NECESSARY
503 FRBeginModeling();
504
505 //----- Send Name
506 SendPhysVolName();
507
508 //----- Send Ndiv
509 SendNdiv();
510
511 //----- Attributes
512 if(!SendVisAttributes
513 ( fpViewer->GetApplicableVisAttributes( fpVisAttribs ) ) ) {
514 SendStr( FR_COLOR_RGB_BLUE ); // color
515 }
516
517 //----- parameters
518 const G4double R = tubes.GetRMax() ; // outside radius
519 const G4double r = tubes.GetRMin() ; // inside radius
520 const G4double dz = tubes.GetDz () ; // half length in z
521 const G4double sphi = tubes.GetSPhi() ; // starting angle
522 const G4double dphi = tubes.GetDPhi() ; // angle width
523
524 //----- send coordinates to Fukui Renderer
525 SendTransformedCoordinates();
526
527 //----- send tubes to Fukui Renderer
528 SendStrDouble5( FR_TUBS, r, R, dz , sphi, dphi );
529
530} // void G4FRSCENEHANDLER::AddSolid( const G4Tubs& )
531
532
533
534//----- Add cons
535void
536G4FRSCENEHANDLER::AddSolid( const G4Cons& cons )
537{
538#if defined DEBUG_FR_SCENE
[1347]539 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
540 G4cout << "***** AddSolid ( cons )\n";
[834]541#endif
542 //----- skip drawing invisible primitive
543 if( !IsVisible() ) { return ; }
544
545 //----- Initialize Fukui Renderer IF NECESSARY
546 FRBeginModeling();
547
548 //----- Send Name
549 SendPhysVolName();
550
551 //----- Send Ndiv
552 SendNdiv();
553
554 //----- Attributes
555 if(!SendVisAttributes
556 ( fpViewer->GetApplicableVisAttributes( fpVisAttribs ) ) ) {
557 SendStr( FR_COLOR_RGB_CYAN ); // color
558 }
559
560 //----- parameters
561 const G4double r1 = cons.GetRmin1() ; // inside radius at -dz
562 const G4double R1 = cons.GetRmax1() ; // outside radius at -dz
563 const G4double r2 = cons.GetRmin2() ; // inside radius at +dz
564 const G4double R2 = cons.GetRmax2() ; // outside radius at +dz
565 const G4double dz = cons.GetDz () ; // half length in z
566 const G4double sphi = cons.GetSPhi() ; // starting angle
567 const G4double dphi = cons.GetDPhi() ; // angle width
568
569 //----- send coordinates to Fukui Renderer
570 SendTransformedCoordinates();
571
572 //----- send cons to Fukui Renderer
573 SendStrDouble7( FR_CONS, r1, R1, r2, R2, dz , sphi, dphi );
574
575}// G4FRSCENEHANDLER::AddSolid( cons )
576
577
578//----- Add trd
579void G4FRSCENEHANDLER::AddSolid ( const G4Trd& trd )
580{
581#if defined DEBUG_FR_SCENE
[1347]582 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
583 G4cout << "***** AddSolid ( trd )\n";
[834]584#endif
585
586 //----- skip drawing invisible primitive
587 if( !IsVisible() ) { return ; }
588
589 //----- Initialize Fukui Renderer IF NECESSARY
590 FRBeginModeling();
591
592 //----- Send Name
593 SendPhysVolName();
594
595 //----- Send Ndiv
596 // SendNdiv();
597
598 //----- Attributes
599 if(!SendVisAttributes
600 ( fpViewer->GetApplicableVisAttributes( fpVisAttribs ) ) ) {
601 SendStr( FR_COLOR_RGB_MAGENTA ); // color
602 }
603
604 //----- parameters
605 G4double dx1 = trd.GetXHalfLength1 ();
606 G4double dx2 = trd.GetXHalfLength2 ();
607 G4double dy1 = trd.GetYHalfLength1 ();
608 G4double dy2 = trd.GetYHalfLength2 ();
609 G4double dz = trd.GetZHalfLength ();
610
611 //----- send coordinates to Fukui Renderer
612 SendTransformedCoordinates();
613
614 //----- send trd to Fukui Renderer
615 SendStrDouble5( FR_TRD, dx1, dx2, dy1, dy2, dz );
616
617} // G4FRSCENEHANDLER::AddSolid ( trd )
618
619
620//----- Add sphere
621void G4FRSCENEHANDLER::AddSolid ( const G4Sphere& sphere )
622{
623#if defined DEBUG_FR_SCENE
[1347]624 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
625 G4cout << "***** AddSolid ( sphere )\n";
[834]626#endif
627 //----- skip drawing invisible primitive
628 if( !IsVisible() ) { return ; }
629
630 //----- Initialize Fukui Renderer IF NECESSARY
631 FRBeginModeling();
632
633 //----- Send Name
634 SendPhysVolName();
635
636 //----- Send Ndiv
637 SendNdiv();
638
639 //----- Attributes
640 if(!SendVisAttributes
641 ( fpViewer->GetApplicableVisAttributes( fpVisAttribs ) ) ) {
642 SendStr( FR_COLOR_RGB_YELLOW ); // color
643 }
644
645 //----- parameters
646// const G4double rmin = sphere.GetRmin();
647 const G4double rmax = sphere.GetRmax();
648// const G4double sphi = sphere.GetSPhi();
649 const G4double dphi = sphere.GetDPhi();
650// const G4double stheta = sphere.GetSTheta();
651 const G4double dtheta = sphere.GetDTheta();
652
653 //----- send coordinates to Fukui Renderer
654 SendTransformedCoordinates();
655
656 //----- send sphere to Fukui Renderer
657 const G4double PI_minus = 0.9999 * pi ;
658 const G4double PI2_minus = 1.9999 * pi ;
659 if( dphi > PI2_minus && dtheta > PI_minus ) {
660 //----- full sphere
661 SendStrDouble ( FR_SPHERE, rmax );
662 } else {
663
664 //----- call AddPrimitives( G4Polyhedron )
665 //...... For sphere "segment",
666 //...... G4Polyhedron is used for visualization.
667 //...... Visualization attributes and
668 //...... local coordinates are resent and overwritten.
669 G4VSceneHandler::AddSolid( sphere ) ;
670
671////////////////////////////////////////////////////////////////
672// //----- sphere segment
673// SendStrDouble6( FR_SPHERE_SEG, rmin, rmax, stheta, dtheta, sphi, dphi );
674////////////////////////////////////////////////////////////////
675
676 }
677
678} // G4FRSCENEHANDLER::AddSolid ( sphere )
679
680
681//----- Add para
682void G4FRSCENEHANDLER::AddSolid (const G4Para& para)
683{
684#if defined DEBUG_FR_SCENE
[1347]685 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
686 G4cout << "***** AddSolid ( para )\n";
[834]687#endif
688
689 //----- skip drawing invisible primitive
690 if( !IsVisible() ) { return ; }
691
692 //----- Initialize Fukui Renderer IF NECESSARY
693 FRBeginModeling();
694
695 //----- Send Name
696 SendPhysVolName();
697
698 //----- Send Ndiv
699 // SendNdiv();
700
701 //----- Attributes
702 if(!SendVisAttributes
703 ( fpViewer->GetApplicableVisAttributes( fpVisAttribs ) ) ) {
704 SendStr( FR_COLOR_RGB_RED ); // color
705 }
706
707 //----- local
708 const G4double epsilon = 1.0e-5 ;
709
710 //----- parameters preprocessing
711 G4double cosTheta = para.GetSymAxis().z() ;
712 if( cosTheta < epsilon ) {
[1347]713 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) {
714 G4cout << "WARNING from FukuiRenderer (DAWN) driver:" << G4endl;
715 G4cout << " Invalid parameter for parallelepiped." << G4endl;
716 G4cout << " Drawing is skipped." << G4endl;
717 }
718 return ;
[834]719 }
720 G4double tanTheta_cosPhi_cosTheta = para.GetSymAxis().x() ;
721 G4double tanTheta_sinPhi_cosTheta = para.GetSymAxis().y() ;
722
723 //----- parameters
724 G4double dx = para.GetXHalfLength ();
725 G4double dy = para.GetYHalfLength ();
726 G4double dz = para.GetZHalfLength ();
727 G4double tanAlpha = para.GetTanAlpha();
728 G4double tanTheta_cosPhi = tanTheta_cosPhi_cosTheta / cosTheta ;
729 G4double tanTheta_sinPhi = tanTheta_sinPhi_cosTheta / cosTheta ;
730
731 //----- send coordinates to Fukui Renderer
732 SendTransformedCoordinates();
733
734 //----- send data to Fukui Renderer
735 SendStrDouble6 ( FR_PARA, dx, dy, dz, tanAlpha, tanTheta_cosPhi, tanTheta_sinPhi );
736
737} // G4FRSCENEHANDLER::AddSolid ( para )
738
739
740//----- Add trap
741void G4FRSCENEHANDLER::AddSolid (const G4Trap& trap)
742{
743#if defined DEBUG_FR_SCENE
[1347]744 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
745 G4cout << "***** AddSolid ( trap )\n";
[834]746#endif
747
748 //----- skip drawing invisible primitive
749 if( !IsVisible() ) { return ; }
750
751 //----- Initialize Fukui Renderer IF NECESSARY
752 FRBeginModeling();
753
754 //----- Send Name
755 SendPhysVolName();
756
757 //----- Send Ndiv
758 // SendNdiv();
759
760 //----- Attributes
761 if(!SendVisAttributes
762 ( fpViewer->GetApplicableVisAttributes( fpVisAttribs ) ) ) {
763 SendStr( FR_COLOR_RGB_GREEN ); // color
764 }
765
766 //----- local
767 const G4double epsilon = 1.0e-5 ;
768
769 //----- parameters preprocessing
770 G4double cosTheta = trap.GetSymAxis().z() ;
771 if( cosTheta < epsilon ) {
[1347]772 if (G4VisManager::GetVerbosity() >= G4VisManager::errors) {
773 G4cout << "WARNING from FukuiRenderer (DAWN) driver:" << G4endl;
774 G4cout << " Invalid parameter for trap, 1" << G4endl;
775 G4cout << " Drawing is skipped." << G4endl;
776 }
777 return ;
[834]778 }
779
780 G4double nx = trap.GetSymAxis().x() ;
781 G4double ny = trap.GetSymAxis().y() ;
782
783 //----- parameters (half lengths of box)
784 G4double dz = trap.GetZHalfLength ();
785 G4double theta = std::acos( cosTheta ) ;
786 G4double phi;
787 if ( ny==0. && nx ==0.) {
788 phi = 0.; // std::atan2(0.,0.) gives undefined value of phi
789 } else {
790 phi = std::atan2( ny, nx ) ; if( phi < 0. ) { phi += twopi ; }
791 // -PI < std::atan() < PI
792 }
793/////////////////////////////////////////////////
794// G4double phi = std::atan2( ny, nx ) ;
795// if( phi < 0.0 ) { phi += twopi ; }
796// // -PI < std::atan() < PI
797/////////////////////////////////////////////////
798
799 G4double h1 = trap.GetYHalfLength1 ();
800 G4double bl1 = trap.GetXHalfLength1 ();
801 G4double tl1 = trap.GetXHalfLength2 ();
802 G4double alpha1 = std::atan( trap.GetTanAlpha1()) ;
803 G4double h2 = trap.GetYHalfLength2 ();
804 G4double bl2 = trap.GetXHalfLength3 ();
805 G4double tl2 = trap.GetXHalfLength4 ();
806 G4double alpha2 = std::atan( trap.GetTanAlpha2()) ;
807
808 //----- send coordinates to Fukui Renderer
809 SendTransformedCoordinates();
810
811 //----- Change sign of alpha for compatibility
812 // with the DAWN format
813 G4double alpha_sign = -1.0 ;
814 alpha1 *= alpha_sign ; alpha2 *= alpha_sign ;
815
816 //----- send box to Fukui Renderer
817 SendStrDouble11( FR_TRAP ,
818 dz ,
819 theta ,
820 phi ,
821 h1 ,
822 bl1 ,
823 tl1 ,
824 alpha1 ,
825 h2 ,
826 bl2 ,
827 tl2 ,
828 alpha2 );
829
830} // G4FRSCENEHANDLER::AddSolid (const G4Trap& trap)
831
832
833//----- Add torus
834void
835G4FRSCENEHANDLER::AddSolid( const G4Torus& torus )
836{
837#if defined DEBUG_FR_SCENE
[1347]838 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
839 G4cout << "***** AddSolid ( torus )\n";
[834]840#endif
841 //----- skip drawing invisible primitive
842 if( !IsVisible() ) { return ; }
843
844 //----- Initialize Fukui Renderer IF NECESSARY
845 FRBeginModeling();
846
847 //----- Send Name
848 SendPhysVolName();
849
850 //----- Send Ndiv
851 SendNdiv();
852
853 //----- Attributes
854 if(!SendVisAttributes
855 ( fpViewer->GetApplicableVisAttributes( fpVisAttribs ) ) ) {
856 SendStr( FR_COLOR_RGB_BLUE ); // color
857 }
858
859 //----- parameters
860 const G4double r = torus.GetRmin() ;
861 const G4double R = torus.GetRmax() ;
862 const G4double t = torus.GetRtor() ;
863 const G4double sphi = torus.GetSPhi() ;
864 const G4double dphi = torus.GetDPhi() ;
865
866 //----- send coordinates to Fukui Renderer
867 SendTransformedCoordinates();
868
869 //----- send torus to Fukui Renderer
870 SendStrDouble5( FR_TORUS, r, R, t , sphi, dphi );
871
872} // void G4FRSCENEHANDLER::AddSolid( const G4Torus& )
873
874
875
876//----- Add a shape which is not treated above
877void G4FRSCENEHANDLER::AddSolid ( const G4VSolid& solid )
878{
879 //----- skip drawing invisible primitive
880 if( !IsVisible() ) { return ; }
881
882 //----- Initialize Fukui Renderer IF NECESSARY
883 FRBeginModeling();
884
885 //----- Send Name
886 SendPhysVolName() ;
887
888 //----- Send Ndiv
889 // SendNdiv();
890
891 //----- Send a primitive
892 G4VSceneHandler::AddSolid( solid ) ;
893
894} //G4FRSCENEHANDLER::AddSolid ( const G4VSolid& )
895
896
897//-----
898G4bool
899G4FRSCENEHANDLER::SendVisAttributes ( const G4VisAttributes* pAV )
900{
901
902 // Have a look at G4VSceneHandler::GetDrawingStyle (const G4Visible&). (John)
903
904 G4bool status = true ; // initialization
905 const G4double ALPHA_MIN = 0.001 ; // min of alpha factor of color
906
907 if( pAV == NULL ) {
908 // No attribute is given.
909 // Do nothing. Status is "fail".
910 status = false ;
911
912 } else {
913 // Send attributes. Status is "success".
914 status = true ;
915 SendStrDouble3( FR_COLOR_RGB,
916 pAV->GetColor().GetRed (),
917 pAV->GetColor().GetGreen(),
918 pAV->GetColor().GetBlue () );
919 if ( pAV->GetColor().GetAlpha() < ALPHA_MIN ) {
920 SendStr( FR_FORCE_WIREFRAME_ON ) ;
921 }
922 else if ( pAV->IsForceDrawingStyle () &&
923 (pAV->GetForcedDrawingStyle () == G4VisAttributes::wireframe)) {
924 SendStr( FR_FORCE_WIREFRAME_ON ) ;
925 } else {
926 SendStr( FR_FORCE_WIREFRAME_OFF ) ;
927 }
928 }
929
930 return status ;
931
932} // G4FRSCENEHANDLER::SendVisAttributes ()
933
934
935//-----
936G4bool G4FRSCENEHANDLER::IsVisible()
937{
938 //-----
939 G4bool visibility = true ;
940
941 //-----
942 const G4VisAttributes* pVisAttribs =
943 fpViewer->GetApplicableVisAttributes( fpVisAttribs );
944
945 //-----
946 if( ( getenv( FR_ENV_CULL_INVISIBLE_OBJECTS ) != NULL ) && \
947 ( strcmp( getenv( FR_ENV_CULL_INVISIBLE_OBJECTS ),"0" ) ) && \
948 ( pVisAttribs ) )
949 {
950 visibility = pVisAttribs->IsVisible();
951 }
952
953 //-----
954 return visibility ;
955
956} // G4FRSCENEHANDLER::IsVisible()
957
958
959//-----
960void G4FRSCENEHANDLER::SendBoundingBox( void )
961{
962#if defined DEBUG_FR_SCENE
[1347]963 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
964 G4cout << "***** SendBoundingBox () (/BoundingBox)" << G4endl;
[834]965#endif
966
967 //----- (1A) CALC bounding box of the bounding sphere
968 const G4VisExtent& extent = GetScene()->GetExtent();
969 const G4Point3D& center = extent.GetExtentCenter();
970 const G4double radius = extent.GetExtentRadius();
971
972 G4double xmin = center.x() - radius ;
973 G4double ymin = center.y() - radius ;
974 G4double zmin = center.z() - radius ;
975
976 G4double xmax = center.x() + radius ;
977 G4double ymax = center.y() + radius ;
978 G4double zmax = center.z() + radius ;
979
980////////////////////////////////////////////
981// G4double xmin = extent.GetXmin ();
982// G4double ymin = extent.GetYmin ();
983// G4double zmin = extent.GetZmin ();
984// G4double xmax = extent.GetXmax ();
985// G4double ymax = extent.GetYmax ();
986// G4double zmax = extent.GetZmax ();
987////////////////////////////////////////////
988
989 //----- (1B) SEND bounding box
990 SendStrDouble6( FR_BOUNDING_BOX,
991 xmin, ymin, zmin,
992 xmax, ymax, zmax );
993
994} // G4FRSCENEHANDLER::SendBoundingBox()
995
996
997//-----
998void
999G4FRSCENEHANDLER::SendTransformedCoordinates()
1000{
1001 //----- coord info
1002 G4Point3D zero ( 0.0 , 0.0 , 0.0 );
1003 G4Point3D x1 ( 1.0 , 0.0 , 0.0 );
1004 G4Point3D y1 ( 0.0 , 1.0 , 0.0 );
1005 G4Vector3D x_unit_vec( 1.0 , 0.0 , 0.0 );
1006 G4Vector3D y_unit_vec( 0.0 , 1.0 , 0.0 );
1007
1008 //----- transformed origin
1009 zero.transform( *fpObjectTransformation );
1010
1011 //----- transformed base vectors
1012 x1.transform( *fpObjectTransformation );
1013 x_unit_vec = x1 - zero ;
1014 y1.transform( *fpObjectTransformation );
1015 y_unit_vec = y1 - zero ;
1016
1017 //----- send transformed origin
1018 SendStrDouble3( FR_ORIGIN , (zero.x()), (zero.y()), (zero.z()) ) ;
1019
1020 //----- send transformed base vectors
1021 SendStrDouble6( FR_BASE_VECTOR , \
1022 (x_unit_vec.x()), (x_unit_vec.y()), (x_unit_vec.z()) , \
1023 (y_unit_vec.x()), (y_unit_vec.y()), (y_unit_vec.z()) ) ;
1024
1025} // G4FRSCENEHANDLER::SendTransformedCoordinates()
1026
1027
1028//-----
1029void G4FRSCENEHANDLER::SendPhysVolName ( void )
1030{
1031 // Local
1032 G4int i ;
1033
1034 // Current Model
1035 const G4VModel* pv_model = GetModel();
1036 if (!pv_model) { return ; }
1037
1038 G4PhysicalVolumeModel* pPVModel =
1039 dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
1040 if (!pPVModel) { return ; }
1041
1042 // Current Physical volume name
1043 G4String pv_name = pPVModel->GetCurrentTag() ;
1044
1045 // Current depth of volume
1046 G4int cur_depth = pPVModel->GetCurrentDepth() ;
1047
1048 // Make a string to be sent
1049 // e.g. experimental_Hall.1, where "1" is the copy number
1050 G4String name_comment ( FR_PHYSICAL_VOLUME_NAME );
1051 name_comment += " " ;
1052
1053 for ( i = 0 ; i < cur_depth; i++) {
1054 // Make tree
1055 name_comment += " " ;
1056 }
1057 name_comment += pv_name ;
1058
1059 // Send physical volume name
1060 SendStr ( "#--------------------" );
1061 SendStr ( name_comment );
1062
1063} // G4FRSCENEHANDLER::SendPhysVolName ()
1064
1065
1066//-----
1067void G4FRSCENEHANDLER::SendStr( const char* char_string )
1068{
1069 fPrimDest.SendLine( char_string );
1070}
1071
1072
1073//-----
1074void G4FRSCENEHANDLER::SendStrInt( const char* char_string ,
1075 G4int ival )
1076{
1077 //----- make command char_string and send
1078 G4int num_char ;
1079 char* command = new char [ COMMAND_BUF_SIZE ];
1080
1081 num_char = sprintf( command, "%s %d", char_string , ival ) ;
1082 if( num_char < 0 ) {
[1347]1083 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1084 G4cout << "ERROR G4FRSCENEHANDLER::SendStrInt(), 1\n" ;
[834]1085 }
1086 SendStr( command );
1087 delete [] command ;
1088} // G4FRSCENEHANDLER::SendStrInt()
1089
1090
1091//-----
1092void
1093G4FRSCENEHANDLER::SendStrInt3( const char* char_string ,
1094 G4int ival1 ,
1095 G4int ival2 ,
1096 G4int ival3 )
1097{
1098 //----- make command char_string and send
1099 G4int num_char ;
1100 char* command = new char [ COMMAND_BUF_SIZE ];
1101
1102 num_char = \
1103 sprintf( command, "%s %d %d %d", char_string , ival1, ival2, ival3 ) ;
1104
1105 if( num_char < 0 ) {
[1347]1106 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1107 G4cout << "ERROR G4FRSCENEHANDLER::SendStrInt3(), 1\n" ;
[834]1108 }
1109 SendStr( command );
1110 delete [] command ;
1111
1112} // G4FRSCENEHANDLER::SendStrInt3()
1113
1114
1115//-----
1116void
1117G4FRSCENEHANDLER::SendStrInt4( const char* char_string ,
1118 G4int ival1 ,
1119 G4int ival2 ,
1120 G4int ival3 ,
1121 G4int ival4 )
1122{
1123 //----- make command char_string and send
1124 G4int num_char ;
1125 char* command = new char [ COMMAND_BUF_SIZE ];
1126
1127 num_char = \
1128 sprintf( command, "%s %d %d %d %d", char_string , ival1, ival2, ival3, ival4 ) ;
1129
1130 if( num_char < 0 ) {
[1347]1131 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1132 G4cout << "ERROR G4FRSCENEHANDLER::SendStrInt4(), 1\n" ;
[834]1133 }
1134 SendStr( command );
1135 delete [] command ;
1136
1137} // G4FRSCENEHANDLER::SendStrInt4()
1138
1139//-----
1140void G4FRSCENEHANDLER::SendStrDouble( const char* char_string ,
1141 G4double dval )
1142{
1143 //----- make command char_string and send
1144 G4int num_char ;
1145 char* command = new char [ COMMAND_BUF_SIZE ];
1146
1147 num_char = sprintf( command, "%s %*.*g", \
1148 char_string , \
1149 fPrec2, fPrec, dval ) ;
1150 if( num_char < 0 ) {
[1347]1151 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1152 G4cout << "ERROR G4FRSCENEHANDLER::SendStrDouble(), 1\n" ;
[834]1153 }
1154 SendStr( command );
1155 delete [] command ;
1156
1157} // G4FRSCENEHANDLER::SendStrDouble()
1158
1159
1160//-----
1161void
1162G4FRSCENEHANDLER::SendStrDouble2( const char* char_string ,
1163 G4double dval1 ,
1164 G4double dval2 )
1165{
1166 //----- make command char_string and send
1167 G4int num_char ;
1168 char* command = new char [ COMMAND_BUF_SIZE ];
1169
1170 num_char = sprintf( command, "%s %*.*g %*.*g", char_string , \
1171 fPrec2, fPrec, dval1, \
1172 fPrec2, fPrec, dval2 ) ;
1173 if( num_char < 0 ) {
[1347]1174 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1175 G4cout << "ERROR G4FRSCENEHANDLER::SendStrDouble2(), 1\n" ;
[834]1176 }
1177 SendStr( command );
1178 delete [] command ;
1179
1180} // G4FRSCENEHANDLER::SendStrDouble2()
1181
1182
1183//-----
1184void
1185G4FRSCENEHANDLER::SendStrDouble3( const char* char_string ,
1186 G4double dval1 ,
1187 G4double dval2 ,
1188 G4double dval3 )
1189{
1190 //----- make command char_string and send
1191 G4int num_char ;
1192 char* command = new char [ COMMAND_BUF_SIZE ];
1193
1194 num_char = sprintf( command, "%s %*.*g %*.*g %*.*g", \
1195 char_string , \
1196 fPrec2, fPrec, dval1, \
1197 fPrec2, fPrec, dval2, \
1198 fPrec2, fPrec, dval3 ) ;
1199 if( num_char < 0 ) {
[1347]1200 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1201 G4cout << "ERROR G4FRSCENEHANDLER::SendStrDouble3(), 1\n" ;
[834]1202 }
1203 SendStr( command );
1204 delete [] command ;
1205
1206} // G4FRSCENEHANDLER::SendStrDouble3()
1207
1208
1209//-----
1210void
1211G4FRSCENEHANDLER::SendStrDouble4( const char* char_string ,
1212 G4double dval1 ,
1213 G4double dval2 ,
1214 G4double dval3 ,
1215 G4double dval4 )
1216{
1217 //----- make command char_string and send
1218 G4int num_char ;
1219 char* command = new char [ COMMAND_BUF_SIZE ];
1220
1221 num_char = sprintf( command, "%s %*.*g %*.*g %*.*g %*.*g", \
1222 char_string , \
1223 fPrec2, fPrec, dval1, \
1224 fPrec2, fPrec, dval2, \
1225 fPrec2, fPrec, dval3, \
1226 fPrec2, fPrec, dval4) ;
1227 if( num_char < 0 ) {
[1347]1228 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1229 G4cout << "ERROR G4FRSCENEHANDLER::SendStrDouble4(), 1\n" ;
[834]1230 }
1231 SendStr( command );
1232 delete [] command ;
1233
1234} // G4FRSCENEHANDLER::SendStrDouble4()
1235
1236
1237//-----
1238void
1239G4FRSCENEHANDLER::SendStrDouble5( const char* char_string ,
1240 G4double dval1 ,
1241 G4double dval2 ,
1242 G4double dval3 ,
1243 G4double dval4 ,
1244 G4double dval5 )
1245{
1246 //----- make command char_string and send
1247 G4int num_char ;
1248 char* command = new char [ COMMAND_BUF_SIZE ];
1249
1250 num_char = sprintf( command, "%s %*.*g %*.*g %*.*g %*.*g %*.*g", \
1251 char_string , \
1252 fPrec2, fPrec, dval1, \
1253 fPrec2, fPrec, dval2, \
1254 fPrec2, fPrec, dval3, \
1255 fPrec2, fPrec, dval4, \
1256 fPrec2, fPrec, dval5 ) ;
1257 if( num_char < 0 ) {
[1347]1258 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1259 G4cout << "ERROR G4FRSCENEHANDLER::SendStrDouble5(), 1\n" ;
[834]1260 }
1261 SendStr( command );
1262 delete [] command ;
1263
1264} // G4FRSCENEHANDLER::SendStrDouble5()
1265
1266
1267//-----
1268void
1269G4FRSCENEHANDLER::SendStrDouble6( const char* char_string ,
1270 G4double dval1 ,
1271 G4double dval2 ,
1272 G4double dval3 ,
1273 G4double dval4 ,
1274 G4double dval5 ,
1275 G4double dval6 )
1276{
1277 //----- make command char_string and send
1278 G4int num_char ;
1279 char* command = new char [ COMMAND_BUF_SIZE ];
1280
1281 num_char = sprintf( command, "%s %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g", \
1282 char_string , \
1283 fPrec2, fPrec, dval1, \
1284 fPrec2, fPrec, dval2, \
1285 fPrec2, fPrec, dval3, \
1286 fPrec2, fPrec, dval4, \
1287 fPrec2, fPrec, dval5, \
1288 fPrec2, fPrec, dval6 ) ;
1289 if( num_char < 0 ) {
[1347]1290 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1291 G4cout << "ERROR G4FRSCENEHANDLER::SendStrDouble6(), 1\n" ;
[834]1292 }
1293 SendStr( command );
1294 delete [] command ;
1295
1296} // G4FRSCENEHANDLER::SendStrDouble6()
1297
1298
1299//-----
1300void
1301G4FRSCENEHANDLER::SendStrDouble7( const char* char_string ,
1302 G4double dval1 ,
1303 G4double dval2 ,
1304 G4double dval3 ,
1305 G4double dval4 ,
1306 G4double dval5 ,
1307 G4double dval6 ,
1308 G4double dval7 )
1309{
1310 //----- make command char_string and send
1311 G4int num_char ;
1312 char* command = new char [ COMMAND_BUF_SIZE ];
1313
1314 num_char = sprintf( command, "%s %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g", \
1315 char_string , \
1316 fPrec2, fPrec, dval1,\
1317 fPrec2, fPrec, dval2,\
1318 fPrec2, fPrec, dval3,\
1319 fPrec2, fPrec, dval4,\
1320 fPrec2, fPrec, dval5,\
1321 fPrec2, fPrec, dval6,\
1322 fPrec2, fPrec, dval7 ) ;
1323 if( num_char < 0 ) {
[1347]1324 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1325 G4cout << "ERROR G4FRSCENEHANDLER::SendStrDouble7(), 1\n" ;
[834]1326 }
1327 SendStr( command );
1328 delete [] command ;
1329
1330} // G4FRSCENEHANDLER::SendStrDouble7()
1331
1332
1333//-----
1334void
1335G4FRSCENEHANDLER::SendStrDouble11( const char* char_string ,
1336 G4double dval1 ,
1337 G4double dval2 ,
1338 G4double dval3 ,
1339 G4double dval4 ,
1340 G4double dval5 ,
1341 G4double dval6 ,
1342 G4double dval7 ,
1343 G4double dval8 ,
1344 G4double dval9 ,
1345 G4double dval10 ,
1346 G4double dval11 )
1347{
1348 //----- make command char_string and send
1349 G4int num_char ;
1350 char* command = new char [ COMMAND_BUF_SIZE ];
1351
1352 num_char = sprintf( command, "%s %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g", \
1353 char_string ,\
1354 fPrec2, fPrec, dval1, \
1355 fPrec2, fPrec, dval2, \
1356 fPrec2, fPrec, dval3, \
1357 fPrec2, fPrec, dval4, \
1358 fPrec2, fPrec, dval5, \
1359 fPrec2, fPrec, dval6, \
1360 fPrec2, fPrec, dval7, \
1361 fPrec2, fPrec, dval8, \
1362 fPrec2, fPrec, dval9, \
1363 fPrec2, fPrec, dval10,\
1364 fPrec2, fPrec, dval11 ) ;
1365 if( num_char < 0 ) {
[1347]1366 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1367 G4cout << "ERROR G4FRSCENEHANDLER::SendStrDouble11(), 1\n" ;
[834]1368 }
1369 SendStr( command );
1370 delete [] command ;
1371
1372} // G4FRSCENEHANDLER::SendStrDouble11()
1373
1374
1375//-----
1376void
1377G4FRSCENEHANDLER::SendIntDouble3( G4int ival ,
1378 G4double dval1 ,
1379 G4double dval2 ,
1380 G4double dval3 )
1381{
1382 //----- make command char_string and send
1383 G4int num_char ;
1384 char* command = new char [ COMMAND_BUF_SIZE ];
1385
1386 num_char = sprintf( command, "%d %*.*g %*.*g %*.*g", \
1387 ival , \
1388 fPrec2, fPrec, dval1, \
1389 fPrec2, fPrec, dval2, \
1390 fPrec2, fPrec, dval3 ) ;
1391 if( num_char < 0 ) {
[1347]1392 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1393 G4cout << "ERROR G4FRSCENEHANDLER::SendIntDouble3(),1\n" ;
[834]1394 }
1395 SendStr( command );
1396 delete [] command ;
1397}
1398
1399//-----
1400void
1401G4FRSCENEHANDLER::SendInt3Str( G4int ival1 ,
1402 G4int ival2 ,
1403 G4int ival3 ,
1404 const char* char_string )
1405{
1406 //----- make command char_string and send
1407 G4int num_char ;
1408 char* command = new char [ COMMAND_BUF_SIZE ];
1409
1410 num_char = sprintf( command, "%d %d %d %s", \
1411 ival1, ival2, ival3, char_string ) ;
1412 if( num_char < 0 ) {
[1347]1413 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1414 G4cout << "ERROR G4FRSCENEHANDLER::SendInt3Str(),1\n" ;
[834]1415 }
1416 SendStr( command );
1417 delete [] command ;
1418}
1419
1420//-----
1421void
1422G4FRSCENEHANDLER::SendInt4Str( G4int ival1 ,
1423 G4int ival2 ,
1424 G4int ival3 ,
1425 G4int ival4 ,
1426 const char* char_string )
1427{
1428 //----- make command char_string and send
1429 G4int num_char ;
1430 char* command = new char [ COMMAND_BUF_SIZE ];
1431
1432 num_char = sprintf( command, "%d %d %d %d %s", \
1433 ival1, ival2, ival3, ival4, char_string ) ;
1434 if( num_char < 0 ) {
[1347]1435 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1436 G4cout << "ERROR G4FRSCENEHANDLER::SendInt4Str(),1\n" ;
[834]1437 }
1438 SendStr( command );
1439 delete [] command ;
1440}
1441
1442//-----
1443void
1444G4FRSCENEHANDLER::SendStrDouble6Str( const char* char_string1 ,
1445 G4double dval1 ,
1446 G4double dval2 ,
1447 G4double dval3 ,
1448 G4double dval4 ,
1449 G4double dval5 ,
1450 G4double dval6 ,
1451 const char* char_string2 )
1452{
1453 //----- make command char_string and send
1454 G4int num_char ;
1455 char* command = new char [ COMMAND_BUF_SIZE ];
1456
1457 num_char = sprintf( command, "%s %*.*g %*.*g %*.*g %*.*g %*.*g %*.*g %s", \
1458 char_string1,\
1459 fPrec2, fPrec, dval1 , \
1460 fPrec2, fPrec, dval2 , \
1461 fPrec2, fPrec, dval3 , \
1462 fPrec2, fPrec, dval4 , \
1463 fPrec2, fPrec, dval5 , \
1464 fPrec2, fPrec, dval6, \
1465 char_string2 );
1466 if( num_char < 0 ) {
[1347]1467 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1468 G4cout << "ERROR G4FRSCENEHANDLER::SendStrDouble6Str(), 1\n" ;
[834]1469 }
1470 SendStr( command );
1471 delete [] command ;
1472
1473}
1474
1475
1476//-----
1477void G4FRSCENEHANDLER::SendInt( G4int val )
1478{
1479 //----- make command char_string and send
1480 G4int num_char ;
1481 char* command = new char [ COMMAND_BUF_SIZE ];
1482
1483 num_char = sprintf( command, "%d", val ) ;
1484 if( num_char < 0 ) {
[1347]1485 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1486 G4cout << "ERROR G4FRSCENEHANDLER::SendStrInt(), 1\n" ;
[834]1487 }
1488 SendStr( command );
1489 delete [] command ;
1490} // G4FRSCENEHANDLER::SendStrInt()
1491
1492
1493//-----
1494void G4FRSCENEHANDLER::SendDouble( G4double val )
1495{
1496 //----- make command char_string and send
1497 G4int num_char ;
1498 char* command = new char [ COMMAND_BUF_SIZE ];
1499
1500 num_char = sprintf( command, "%*.*g", fPrec2, fPrec, val ) ;
1501 if( num_char < 0 ) {
[1347]1502 if (G4VisManager::GetVerbosity() >= G4VisManager::errors)
1503 G4cout << "ERROR G4FRSCENEHANDLER::SendStrInt(), 1\n" ;
[834]1504 }
1505 SendStr( command );
1506 delete [] command ;
1507} // G4FRSCENEHANDLER::SendStrInt()
1508
1509//-----
1510void G4FRSCENEHANDLER::ClearTransientStore()
1511{
1512 G4VSceneHandler::ClearTransientStore ();
1513 // This is typically called after an update and before drawing hits
1514 // of the next event. To simulate the clearing of "transients"
1515 // (hits, etc.) the detector is redrawn...
1516 if (fpViewer) {
1517 fpViewer -> SetView ();
1518 fpViewer -> ClearView ();
1519 fpViewer -> DrawView ();
1520 }
1521}
1522
Note: See TracBrowser for help on using the repository browser.