$Id: History,v 1.42 2002/04/19 08:29:41 gcosmo Exp $
----------------------------------------------------------------------------

     =========================================================
     Geant4 - an Object-Oriented Toolkit for Simulation in HEP
     =========================================================

             History file for geometry/solids/BREPS
	     --------------------------------------
This file should be used by G4 developers and category coordinators
to briefly summarize all major modifications introduced in the code
and keep track of all category-tags.
It DOES NOT substitute the  CVS log-message one should put at every
committal in the CVS repository !

     ----------------------------------------------------------
     * Reverse chronological order (last date on top), please *
     ----------------------------------------------------------

19/04/2002 : R. Chytracek      breps-V04-00-05
- G4BREPSolidPCone.cc: added sanity check of delta phi section value and
  exception is thrown saying about this unsupported feature if delta phi
  is less than 2*PI.

26/02/2002 : G. Cosmo          breps-V04-00-04
- G4ConvexHull.hh: moved initialisation of 'next' to constructor's body.

14/02/2002 : R. Chytracek      breps-V04-00-03
- G4BREPSolidPolyhedra.cc: final commit after series of bug fixes and enhancements:
  o Added more preconditions checks
  o Added code forbidding "teeth" in polyhedra as it brings
    high complexity into its implementation
  o Fixing comments, removal of debug print-outs

13/02/2002 : R. Chytracek      breps-V04-00-02
- Bug fix #354, G4BREPSolidPolyhedra:
  o Added new private method for creation of planar surfaces gained
    after code refactoring in constructor.
  o Fixed bug for problem report #354 by adding the code handling the cases
    where user supplies for the same z-section different RMIN or RMAX values.
  o This is temporary commit as there is still the problem when user asks for
    polyhedra phi segment and z[a] > z[a+1]. This leads to a wrong surface.

12/02/2002 : R. Chytracek
- Bug fixes of G4BREPSolidPolyhedra:
  o Added enhancement allowing to define RMIN and RMAX to be zero with the
    exception of forbidden two consecutive zero RMAX values.
  o Refactoring in constructor gained two new private methods for creation of
    trapezoidal and triangular side planes of G4BREPSolidPolyhedra.
  o Rewritten code for delta phi >= 2*PI case with full classification of
    possible cases.
  o Fixed sense of end planes.
  o Fixed delta phi < 2*PI case where some old code remained after bug fix #266.

28/01/2002 : R. Chytracek	breps-V04-00-01
- G4BREPSolidPCone::Inside() method restored back due to the fixes
  in G4FPlane + fixes in constructor and ComputePlanarSurface helper
  method.
- Fixed first constructor of G4FPlane which now takes another argument
  for setting explicitly the sense of a surface if required.
- Fixed G4FPlane::Intersect() method which incorrectly ignored a special
  case of a hit on surface point with ray direction opposite to surface
  normal.

22/01/2002 : R. Chytracek
- Temporary fix of Inside() method in BREPSolidPCone.
- Updated BREPSolidPCone unit test.

16/01/2001 : R. Chytracek        breps-V04-00-00
- G4BREPSolidPCone: bugfix for problem report #320.
  o Fixed missing use-case in constructor when RMAX and RMIN have been
    changed for 2 consecutive equal z-values. Now it creates correctly
    2 planar surfaces as expected.
  o Along with that added private method ComputePlanarSurface() gained
    by refactoring of some part of the code in the constructor.
  o Added useful comments analysing problems with planar surfaces and
    showing possible use-cases + some cosmetics.

01/08/2001 : R. Chytracek        breps-V03-02-03
- G4BREPSolidPolyhedra.cc: fixed situation when phi1 = 0 dphi1 = 2*pi and
  all RMINs = 0.0. In this case the inner planes are not created.
  More than 2 z-planes and inner planes are not created whenever two
  consecutive RMINs are = 0.0.
  Fixes problem report #266.

20/07/2001 : G. Cosmo            breps-V03-02-02
- Still fixed for ambiguous use of casts for G4Point3D, G4ThreeVector
  and G4Vector3D types. Fixed compilation warnings detected with gcc-2.95-3.
  Modified files: G4Axis2Placement3D.icc, G4BREPSolid.cc, G4BREPSolidBox.cc,
                  G4BREPSolidPCone.cc, G4BREPSolidPolyhedra.cc

17/07/2001 : G. Cosmo            breps-V03-02-01
- Fix in G4BSplineCurve::Init() for initialisation of point vector. Replaced
  usage of 'reserve' with explicit initialisation of components in collection.

11/07/2001 : G. Cosmo            breps-V03-02-00
- Fixes for overloading ambiguity on SUN-CC with new CLHEP-1.7, files:
  G4BREPSolidPolyhedra.cc, G4BREPSolidPCone.cc, G4BREPSolidCylinder.cc
  and G4BREPSolidCone.cc.
- Synchronized with HEAD.

15/06/2001 : G. Cosmo            breps-V03-01-02
- Fixes to allow -ansi compilation on Linux-g++, gcc-2.95-2 compiler:
  o G4Ray.cc: changed usage of hypot(x,y) to sqrt(x*x+y*y).
  o G4Hyperbola[.icc.cc]: changed usage of atanh(x) to 0.5*log((1+x)/(1-x)).
- G4ProjectedSurface.cc: corrected initialisation of temporary G4Point3D
  objects, to use the correct CLHEP constructor.

27/04/2001 : G. Cosmo            breps-V03-01-01
- G4BSplineCurve.cc: fixed compilation warnings on HP-UX, concerning
  potential uninitialised vector elements.

20/04/2001 : G. Cosmo            breps-V03-01-00
- Migration to STL vector:
  o G4Assembly: migrated G4PlacedVector typedef.
  o G4PlacementVector: migrated G4PlacementVector typedef.
  o G4Point3DVector: migrated G4Point3DVector typedef.
  o G4CurveVector: migrated G4CurveVector typedef.
  o G4BSplineCurve: migrated G4doubleVector typedef and removed
    redefinition of G4Point3DVector.

05/01/2001 : G. Cosmo            breps-V03-00-00
- Removed useless inclusion of G4OrderedTable.hh from G4Assembly.hh and
  G4STEPEntity.hh.

20/11/2000 : G. Cosmo            breps-V02-00-03
- Fixes to remove warnings from "-Wall -ansi -pedantic" g++ compiler options:
  o commented out variables declared and not used.
  o fixed declaration of variables used before being initialised.
  o fixed order of initialisation of member data in constructors.
  o fixed usage of unsigned-int (size_t) for array indeces.

10/11/2000 : G. Cosmo            breps-V02-00-02
- Still minor QA fixes in G4Axis2Placement3D, G4BREPSolid, G4FConicalSurface.
- Fix in G4Ellipse::Project() for computation of u as function of atan2().
- Fix unit test STEPTest.cc.

09/11/2000 : G. Cosmo            breps-V02-00-01
- QA code revision and cleanup (+fixes from CodeWizard filtering):
  o Added (private) declarations of copy constructor and assignment operator
    where needed: all surfaces, BREP solids, G4CompositeCurve G4OsloMatrix,
    G4PlacedSolid, G4SurfaceList.
  o Defined/fixed copy contructor and assignment operator to curves/conics,
    G4Axis2Placement3D. Added equality check on operator= where needed.
  o Added "const" qualifier to accessor methods, wherever needed.
  o Made destructor "virtual" wherever missing and added empty destructor
    to all BREP solids.
  o Changed virtual functions to non-inline wherever's the case.
  o Moved "public" data members to protected or private and defined
    accessors methods for them: G4BREPSolid, G4BezierSurface, G4ConvexHull,
    G4OsloMatrix, G4Surface, G4SurfaceBoundary, G4SurfaceList, G4UVHit.
    Changed classes involved to invoke accessors.
  o Changed return value to be "const" pointer to functions:
    - G4BREPSolid::GetPlace()
    - G4BREPSolid::GetBBox()
  o G4Assembly: fix in destructor, added call to clearAndDestroy().
  o G4BREPSolid: changed method NumberOfFaces() to GetNumberOfFaces().
  o G4Curve: fixed obsolete workaround for XlC compiler.
  o G4OsloMatrix: changed internal class "Matrix" to "G4PointMatrix" and
    updated classes making use of it.
  o G4ThreeMat: removed unused overloaded operators =, +, -, +=, -=, *.
  o Added "inline" qualifier to methods' declarations where missing.
  o Added more description to BREP solid classes for the Software Reference
    Manual.

28/08/2000 : G. Cosmo            breps-V02-00-00
- General reorganisation and code cleanup. No functional changes.
  Created .icc files and moved inline methods implementation therein.
- Added comments to headers for the Software Reference Manual.
- Fixes for virtual destructors, inline virtual functions and operators,
  const methods and arguments.
- Updated reference outputs for unit tests (tests run on DEC-cxx with
  ObjectSpace STL). Random generation changed since release 2.0.

13/05/2000 : G. Cosmo            breps-V01-01-00
- Added protection to arguments fed to atan2(x,y) in G4Ellipse::Project().

11/04/2000 : J. Allison
- Removed implementations of G4VisExtent GetExtent() in most sub-classes
  of G4VSolid (a default implementation exists in G4VSolid).
  Files changed: G4BREPSolid[.hh.cc].
- All implementations of DescribeYourselfTo (G4VGraphicsScene& scene) const
  now correctly written: scene.AddThis(*this).
  Files changed: G4BREPSolidOpenPCone.cc.

25/02/2000 : G. Cosmo		  breps-V01-00-02
 G4BSplineSurface[.hh.cc]
   - fixed dynamic memory allocation problem with creation of temporary
     hits and manipulation of knots.
   - rationalized dependencies over G4UVHit, G4ControlPoints and
     G4BoundingBox3D classes.
   - added initialization of pointers in constructor where missing.
 G4BSplineSurfaceWithKnots[.hh.cc]
   - created dummy classes.
 G4ConicalSurface.cc
   - Modified diagnostic message.
 G4PointRat.hh
   - Removed useless inclusion of G4UVHit.hh.
 G4UVHit.hh
   - Added missing initialization of data-members where needed.
   - Initialized 'next' pointer to zero in costructor.
 test/stepfiles
   - G4msgc_barrel_solid.stp was corrupted. Fixed.
   - Enhanced PERL script correct.pl to parse more complex STEP files.

14/02/2000 : G. Cosmo		  breps-V01-00-01
 G4BSplineSurface.cc - fixed warnings on HP-aCC
   - removed cast of G4Surface* to G4SurfaceList* (!) in function
     FinalIntersection().
   - replaced wherever needed explicit cast to G4PointRat from G4Point3D
     and viceversa, by using appropriate access functions instead.
 G4SurfaceList.cc
   - initialised 'next' and 'temp' pointers in default constructor.
 Changed 'char*' to 'const char*' as return-type for methods returning the
 concrete type name; removed temporary cast to char*. Updated files:
   - G4ThreeMat.hh, G4Surface.hh, G4SphericalSurface.hh, 
     G4RectangularTrimmedSurface.hh, G4FPlane.hh, G4FCylindricalSurface.hh,
     G4FConicalSurface.hh, G4CylindricalSurface.hh, G4ConicalSurface.hh,
     G4Curve.hh, G4BSplineSurface[.hh.cc].

21/01/2000 : G. Cosmo		  breps-V01-00-00
 Decoupling from NIST STEP reader completed:
   - G4RectangularTrimmedSurface.cc: removed inclusion of
     SdaiCONFIG_CONTROL_DESIGN.h
   - G4PointRat[.hh.cc]: removed unused function
     CopyRationalValue(const RealNode&).
   - G4Conic[.hh.cc]: removed constructor G4Conic(STEPentity&).
   - G4BREPSolid[.hh.cc]: removed unused function CreateSTEPData() and
     any references to STEP/instmgr.h.
   - G4Parabola.hh: removed declared and NOT defined constructors
     G4Parabola(STEPentity&) and G4Parabola(STEPentity&, InstMgr&).
   - G4Hyperbola.hh: removed declared and NOT defined constructors
     G4Hyperbola(STEPentity&) and G4Hyperbola(STEPentity&, InstMgr&).
   - G4Ellipse.hh: removed declared and NOT defined constructors
     G4Ellipse(STEPentity&) and G4Ellipse(STEPentity&, InstMgr&).
   - G4ControlPoints.hh: removed declared and NOT defined constructor
     G4ControlPoints(STEaggregate&, const int).
 Temporary fixes for porting on SUN-CC 5.0 compiler. Casts to char*:
   - G4ThreeMat.hh, G4Surface.hh, G4SphericalSurface.hh, 
     G4RectangularTrimmedSurface.hh, G4FPlane.hh, G4FCylindricalSurface.hh,
     G4FConicalSurface.hh, G4CylindricalSurface.hh, G4ConicalSurface.hh.

08/11/1999 : G. Cosmo             breps-V00-01-00
 First step for decoupling BREPS from NIST STEP reader:
   - Moved G4NISTStepReader[.hh.cc] and G4StepFileReader[.hh] to
     STEPinterface.
   - Removed unused references to STEP in G4KnotVector and G4PointRat.
   >> Still remaining: reference to STEPaggregate in G4PointRat;
                       reference to instMgr in G4BREPSolid.cc.

10/06/1999 : J. Apostolakis       breps-01-00-04

G4FPlane.cc:  
  Rays and planes are now considered parallel if dot product with plane's 
  normal less than perMillion rather than perThousand (in the Intersect method).

28/05/1999 : J. Apostolakis       breps-01-00-03a
 Tagged.


28/05/1999 : S. Giani 
 G4BREPSolidPolyhedra.cc  
   DistanceToOut: Introduced treatment for ray leaving from a boundary. 


27/05/1999 : J. Apostolakis       breps-01-00-03
 Cosmetic change to G4FCylindricalSurface.cc


25/05/1999 : S. Giani
 G4BREPSolidPolyhedra.cc(1.8) 
	Modified comparison of square distance to use the squared tolerance 
        (rather than the tolerance).          And used <=, instead of <.
 G4FPlane.cc(1.5): 
        Corrected the use of the tolerance in the intersect function
 G4SurfaceBoundary.cc(1.4): Return 1 by convention if on surface.


25/05/1999 : S. Magni
 G4BREPSolidPCone.cc v1.12: 
	New version of Inside function, 
      	     that uses first intersection & dot prod with normal 
             (instead of counting the number of distinct intersections)


21/05/1999 : J. Apostolakis       breps-01-00-02
 Tagged.


21/05/1999 : S. Magni
 G4BREPSolidPCone: Further minor corrections several methods
        - protecting HowNear with fabs when cheching against tolearance ..


21/05/1999 : J. Apostolakis
 G4BSplineSurface.hh,
 G4PointRat.hh,
 G4BREPSolid.cc,
 G4ProjectedSurface.cc
 G4Surface.cc
 G4BREPSolid.cc
        - changed INFINITY to kInfinity


20/05/1999 : S. Giani
 G4Line.cc:
        - A preliminary fix to avoid 0-lenght segments has been introduced.


19/05/1999 : S. Magni
 G4BREPSolidPCone: Corrected several methods 
        - constructor          to take into account the changed G4FPlane 

	- Inside
	- SurfaceNormal
	- DistanceToIn( p, v)
	- DistanceToOut( p, v) 
            for 
                corrected behaviour of HowNear, which is for finite surfaces.
		...
 G4FCylindricalSurface, 
 G4FConicalSurface.cc: 
        Corrected the following methods:
	- Intersect
	- HowNear


12/05/1999 : S.Giani  
 G4BREPSolidPolyhedra Corrections by S.Giani:
        - Xaxis now corresponds to phi=0
        - partial angle = phiTotal / Nsides
        - end planes exact boundary calculation for phiTotal < 2pi 
           (also including case with RMIN=RMAX) 
        - Xaxis now properly rotated to compute correct scope of vertixes
        - corrected surface orientation for outer faces parallel to Z
        - completed explicit setting of the orientation for all faces
        - some comparison between doubles avoided by using tolerances. 

  G4FPlane corrections 
	- The constructor using iVec now properly stores both the internal
	  and external boundaries in the bounds vector.
	- Proper initialization of sameSense in both the constructors. 
	- Addition of third argument (sense) in the second constructor 
	  to ensure consistent setting of the normal in all the client code.



27/01/1999 : L. Broglia ( new tag : breps-01-00-01 )
 - functions Inside, DistanceToIn and DistanceToOut
   are re-written to satisfy requirements

 - these functions are identical into G4BREPSolid
   and into G4BREPSolidPCone & Polyhedra because
   there are general (see ToDo.txt)

 - corrections of G4BREPSolid::CalculExtent by
   Stefano Magni 



14/01/1999 : L. Broglia
 - modification of the IntersectRay2D function

     before : void IntersectRay2D(const G4Ray& ray,  
                                  G4CurveRayIntersection& is)

     now :  G4int IntersectRay2D(const G4Ray& ray)

  return the number of intersections into the curve boundaries,

------------------------------------------------------

December, 1998 : L. Broglia

 - bugs fixed in order to run correctly test05 
   for the first product version 

------------------------------------------------------

November 11, 1998 : L. Broglia

 - correct Inside function for G4SphericalSurface
 - create (but now is empty) Inside function for
   G4CylindricalSurface
 - new implementation into G4CylindricalSurface::Intersect


November 04, 1998  L. Broglia    geometry-00-03-04

- Cleaned up trivial errors on DEC (undefined loop variables).
- Removed old CurveTest, now separate in G4BREPSolidxxxTest files
- Changing the name of the output files. All the tests run correctly with
  Linux, Sun, HP and DEC compilers

------------------------------------------------------------------------------

date: 1998/10/30 22:20:16;  author: japost;  state: Exp;  lines: +11 -5
Changed

<           HitDistance = closest_point.distance2(RayStart);

to
>           HitDistance = closest_point.distance2((G4Point3D &)RayStart);

   because
              distance2( HepPoint3D &p )
   in CLHEP/Point3D
   should be
              distance2( const HepPoint3D &p )
   as it is const!


October 29, 1998  L. Broglia

 - Changed all the occurences of G4Placement into G4Axis2Placement3D.
 - Modified G4FPlane - new implementation, inheriting from G4Axis2Placement3D
 - Create in G4PointRat INFINITY which is a double and PINFINITY which is a 
   HepVector3D
 - Corrected a bug into G4BREPSolidCylinder
 - Created  a test for the curves
 - Created tests for all BREP solids.
   For the moment, only test for the sphere and test for the torus 
   run correctly
 - Created a test which read a STEP file and created the BREP solid




October 20, 1998  L. Broglia    Breps-lionel-tag1-point3D

- Changed all the occurences of G4Point3d, G4Point2d into G4Point3D, which 
  is a HepPoint3D.
- Modified G4PointRat - new implementation, inheriting from G4Point3D.
- Changed ThreeVec into Vector3D or Point3D, depending on its use.

------------------------------------------------------------------------------

October 13, 1998  J. Apostolakis  geometry-00-03-01

- Tag created.

October 12, 1998  J. Apostolakis  geometry-00-03-01

- Small (cosmetic) changes to aid in compilation on Sun, HP.  
   Renamed local variables, whose name was the same as a class variable or method.

July   9, 1998: J. Apostolakis  breps-00-01-02

- Fixes to G4Assembly, to aid STEPinterface.  (Jari).
- Fix to G4Placement equality operator.   (J.A.)
  Compiles on AIX.


July   8, 1998: J. Apostolakis  breps-00-01-01

- Tagged. 


July   5, 1998: P. Urban

  - Fixes to compile on AIX-AFS.


July   2, 1998: J. Apostolakis (for P. Urban)

- All of Peter Urban's development of Curves is added from 
  the head of the alpha repository.


July   1, 1998: J. Apostolakis (pre-beta01-01)

- Geant4beta created from alpha07 tag (which was on a branch).


-----------------------------------------------------------------
These fixes were added to alpha07 - which was on a branch from
  the head

June  12, 1998: J. Apostolakis (for J. Sulkimo) 

- Correction to constructor of BREPSolidPCone. 
   (An out-of-date version was mistakenly included in fix to
    Conical Surface). 

June  10, 1998: J. Apostolakis (for J. Sulkimo) 

- Bug fixes to Conical Surface (FConical and Conical) to get
 PCone to work.  

------------------------------------------------------------------

June   8, 1998: J. Apostolakis breps-00-06-01

- Tagged what seems to be the last version before the merge 
of Peter Urban's code. Found this by using day before merge,
May 27th. 

April 28, 1998: G. Cosmo, breps-00-05-07

- Cleaned up trivial warnings on DEC (Extraneous semicolons).
- Removed -cfront option from GNUmakefile for DEC. -cfront
  overrides ANSI standard rules in cxx-6.0.

April 24, 1998: J. Sulkimo, breps-00-05-06

- fixed scope bugs in for loops

April 24, 1998: J. Sulkimo, breps-00-05-05-assembly

- G4Assembly.cc bug fixes in STEP file interaction & placed solids
  creation. Heavy changes in method G4Assembly::CopySTEPData

April 24, 1998: J. Sulkimo, breps-00-05-05-point3d

- rerenamed G4Point3d.hh to G4Point3d.h to avoid file name conflict on
  NT

April 23, 1998: G. Cosmo
- Added missing canonical implementation of operator== in G4PlacedSolid.hh


April 22, 1998: J. Sulkimo, breps-00-05-03-assembly (recorded by J.Apostolakis)

- Bug Fixes to G4Assembly, requiring changes to the files:

  include/G4Assembly.hh
  include/G4PlacedSolid.hh
  include/G4StepFileReader.hh
  src/G4Assembly.cc
  src/G4BREPSolid.cc
  src/G4CurveBoundary.cc
  src/G4PlacedSolid.cc
  src/G4Surface.cc


March 18, 1998: P. Urban, breps-00-05-02

- Names of lots of member functions changed:

  BoxOrNo to IsBox
  ConvexOrConcave to IsConvex
  + removing _ and capitalization.

  Cleanup of the code will continue later.


March 18, 1998: P. Urban, breps-00-05-01d

- Some member functions were removed. Renamed G4B_SplineCurve.

March 18, 1998: P. Urban, breps-00-05-01c

- the following classes have been renamed:

  from to

  G4B_SplineCurve G4BSplineCurve
  G4B_SplineCurve_With_Knots G4BSplineCurveWithKnots
  G4B_SplineSurface G4BSplineSurface
  G4Conic G4ConicalSurface
  G4Cylinder G4CylindricalSurface
  G4EllipticCurve G4Ellipse
  G4FConic G4FConicalSurface
  G4FCylinder G4FCylindricalSurface
  G4HyperbolicCurve G4Hyperbola
  G4ParabolicCurve G4Parabola
  G4PlaneSurface G4FPlane
  G4Rational_B_SplineCurve G4RationalBSplineCurve
  G4SpheShell G4SphericalSurface
  plane G4Plane
  uv_hit G4UVHit

March 18, 1998: P. Urban, breps-00-05-01b

- some class names will be changed; renaming the files (but not the classes!)
  was done.

March 18, 1998: P. Urban, breps-00-05-01a

- *.h files renamed to *.hh.

March 18, 1998: P. Urban, breps-00-05-01

- Modifications made before alpha05 which are not part of alpha05
  for some reason.











