Problem 927

Summary: BooleanProcessor::execute: Unknown faces! in simple situation!!!
Product: Geant4 Reporter: porosev
Component: graphics_repsAssignee: John.Allison
Status: RESOLVED INVALID    
Severity: normal    
Priority: P2    
Version: 8.1   
Hardware: Other   
OS: Windows   

Description porosev 2007-01-29 04:09:50 CET
Hello all!!
I got bug in geometry visualisation in the simplest situation!!! I just created
a hole in a box using another box and I try to create VRML2FILE... as a result
I catch the message BooleanProcessor::execute: Unknown faces! and I can see
only outer box!!!

Please fix it ASAP...
Viacheslav Porosev

Example of my code:

G4VPhysicalVolume* DetectorConstruction::ConstructVolumes()
{
  // Clean old geometry, if any
  //
  G4GeometryManager::GetInstance()->OpenGeometry();
  G4PhysicalVolumeStore::GetInstance()->Clean();
  G4LogicalVolumeStore::GetInstance()->Clean();
  G4SolidStore::GetInstance()->Clean();

//-----------------------------------------------------------------------------
  G4Box* sWorld = new G4Box("World", 100.*cm, 100.*cm, 100.*cm);  //its
dimensions

  lWorld = new G4LogicalVolume(sWorld,			//its shape
                               aDefaultMaterial,//its material
                               "World");		//its name

  lWorld->SetVisAttributes(G4VisAttributes::GetInvisible());

  pWorld = new G4PVPlacement(0,				//no rotation
  			               G4ThreeVector(),	//at (0,0,0)
                           "World",		    //its name
                           lWorld,			//its logical volume
                           NULL,			//its mother  volume
                           false,			//no boolean operation
                           0);				//copy number

//Create box ----------------------------------------------------------------
  G4Box* CaseBox  = new G4Box("Case_out",  25.0*cm, 2.5*cm, 5.5*cm);
  G4Box* CaseHole = new G4Box("Case_out",  24.0*cm, 1.5*cm, 4.5*cm);

  G4SubtractionSolid* CaseSolid = new G4SubtractionSolid("CaseBox-Hole",
CaseBox, CaseHole, 0, G4ThreeVector(0., 0., 0.));

  G4LogicalVolume*    Case_log = new G4LogicalVolume(CaseSolid,
                                                 aBoxMaterial,
                                                 "Case_log");


  G4VPhysicalVolume* DetectorBox_phys = new G4PVPlacement(0,
                                    G4ThreeVector( 0.0*cm, 5.0*cm, 0.0*cm),
                                    Case_log,
			                        "Case",
			                        lWorld,
			                        false,
			                        0);

  return pWorld;
}
Comment 1 John.Allison 2007-01-29 13:45:59 CET
Your subtracter is entirely within the subtracted solid.  This is not a proper use of Boolean solids.  To get
what you want, simply place the subtracter as a daughter.  By convention, a daughter "subtracts" from the
mother volume.  The daughter volume should have the material of the surrounding world volume.

Boolean solids only work if there is a genuine intersection of the surfaces of the shapes.  Perhaps we
should trap this situation more elegantly, but that's how it is at present.