From 78ec13da8ca4893f08996e71b89250190a1206a9 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 10 Sep 2015 21:44:04 +0000 Subject: [PATCH] EgtGeomKernel 1.6i5 : - migliorie e ampliamenti di BBox3d - correzioni a ToGlob/ToLoc/LocToLoc di SurfFlatRegion. --- BBox3d.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++-- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes SurfFlatRegion.cpp | 9 ++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/BBox3d.cpp b/BBox3d.cpp index 1869c49..9736110 100644 --- a/BBox3d.cpp +++ b/BBox3d.cpp @@ -58,6 +58,44 @@ BBox3d::IsValid( void) const m_ptMin.z < ( m_ptMax.z + EPS_SMALL)) ; } +//---------------------------------------------------------------------------- +bool +BBox3d::IsSmall( void) const +{ + return ( ! IsValid() || + m_ptMax.x - m_ptMin.x < EPS_SMALL || + m_ptMax.y - m_ptMin.y < EPS_SMALL || + m_ptMax.z - m_ptMin.z < EPS_SMALL) ; +} + +//---------------------------------------------------------------------------- +bool +BBox3d::IsSmallXY( void) const +{ + return ( ! IsValid() || + m_ptMax.x - m_ptMin.x < EPS_SMALL || + m_ptMax.y - m_ptMin.y < EPS_SMALL) ; +} + +//---------------------------------------------------------------------------- +bool +BBox3d::IsEpsilon( double dToler) const +{ + return ( ! IsValid() || + m_ptMax.x - m_ptMin.x < dToler || + m_ptMax.y - m_ptMin.y < dToler || + m_ptMax.z - m_ptMin.z < dToler) ; +} + +//---------------------------------------------------------------------------- +bool +BBox3d::IsEpsilonXY( double dToler) const +{ + return ( ! IsValid() || + m_ptMax.x - m_ptMin.x < dToler || + m_ptMax.y - m_ptMin.y < dToler) ; +} + //---------------------------------------------------------------------------- void BBox3d::Add( const Point3d& ptP) @@ -349,6 +387,20 @@ BBox3d::EnclosesXY( const Point3d& ptP) const ptP.y > m_ptMin.y - EPS_SMALL && ptP.y < m_ptMax.y + EPS_SMALL) ; } +//---------------------------------------------------------------------------- +bool +BBox3d::Encloses( const BBox3d& b3Box) const +{ + return ( Encloses( b3Box.GetMin()) && Encloses( b3Box.GetMax())) ; +} + +//---------------------------------------------------------------------------- +bool +BBox3d::EnclosesXY( const BBox3d& b3Box) const +{ + return ( EnclosesXY( b3Box.GetMin()) && EnclosesXY( b3Box.GetMax())) ; +} + //---------------------------------------------------------------------------- bool BBox3d::Overlaps( const BBox3d& b3B) const @@ -410,10 +462,10 @@ BBox3d::FindIntersectionXY( const BBox3d& b3B, BBox3d& b3Int) const // calcolo il box intersezione b3Int.m_ptMin.x = (( m_ptMin.x >= b3B.m_ptMin.x) ? m_ptMin.x : b3B.m_ptMin.x) ; b3Int.m_ptMin.y = (( m_ptMin.y >= b3B.m_ptMin.y) ? m_ptMin.y : b3B.m_ptMin.y) ; - b3Int.m_ptMin.z = (( m_ptMin.z >= b3B.m_ptMin.z) ? m_ptMin.z : b3B.m_ptMin.z) ; + b3Int.m_ptMin.z = 0.5 * ( m_ptMin.z + b3B.m_ptMin.z) ; b3Int.m_ptMax.x = (( m_ptMax.x <= b3B.m_ptMax.x) ? m_ptMax.x : b3B.m_ptMax.x) ; b3Int.m_ptMax.y = (( m_ptMax.y <= b3B.m_ptMax.y) ? m_ptMax.y : b3B.m_ptMax.y) ; - b3Int.m_ptMax.z = (( m_ptMax.z <= b3B.m_ptMax.z) ? m_ptMax.z : b3B.m_ptMax.z) ; + b3Int.m_ptMax.z = 0.5 * ( m_ptMax.z + b3B.m_ptMax.z) ; return true ; } diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 9c416bb98341d7da7f7be1f4f7c6087f9376611e..40fed1596a25527e3bf83ea5fbc87d5bcc39ffec 100644 GIT binary patch delta 118 zcmdlNy)SyhH#SyF1|0^&&A-{?nVB;g3@0mc>u&bq>S2M3-{!MM7I$OZ+#~G9j8n2h Q8ZL=uq6g#VEaea`0ANlYDgXcg delta 118 zcmdlNy)SyhH#Sxa1|0^|&A-{?nVB;fOeZUH>u&bq>S2M3-{!MM7I$OZ+#~G9j8n2h Q8ZL=uq6g#VEaea`0A>IlLI3~& diff --git a/SurfFlatRegion.cpp b/SurfFlatRegion.cpp index cc1a91d..6ae6b4f 100644 --- a/SurfFlatRegion.cpp +++ b/SurfFlatRegion.cpp @@ -673,6 +673,9 @@ SurfFlatRegion::ToGlob( const Frame3d& frRef) // verifico lo stato if ( m_nStatus != OK) return false ; + // imposto ricalcolo della grafica + ResetAuxSurf() ; + m_OGrMgr.Reset() ; // trasformo il riferimento return m_frF.ToGlob( frRef) ; ; } @@ -684,6 +687,9 @@ SurfFlatRegion::ToLoc( const Frame3d& frRef) // verifico lo stato if ( m_nStatus != OK) return false ; + // imposto ricalcolo della grafica + ResetAuxSurf() ; + m_OGrMgr.Reset() ; // trasformo il riferimento return m_frF.ToLoc( frRef) ; ; } @@ -695,6 +701,9 @@ SurfFlatRegion::LocToLoc( const Frame3d& frOri, const Frame3d& frDest) // verifico lo stato if ( m_nStatus != OK) return false ; + // imposto ricalcolo della grafica + ResetAuxSurf() ; + m_OGrMgr.Reset() ; // trasformo il riferimento return m_frF.LocToLoc( frOri, frDest) ; ; }