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

Last change on this file since 1337 was 1337, checked in by garnier, 14 years ago

tag geant4.9.4 beta 1 + modifs locales

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