From ac6d3d7d4df86d1450cb28a271822fda6232e384 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 13 Jul 2020 13:25:44 +0000 Subject: [PATCH] EgtGeomKernel 2.2g1 : - corrette booleane di trimesh per facce che si intersecano solo su edge di triangoli - a VolZmap aggiunta funzione GetPartMinDistFromPoint. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes SurfTriMeshBooleans.cpp | 2 +- VolZmap.cpp | 55 ++++++++++++++++++++++++++++++++++++++++ VolZmap.h | 1 + 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 4a54f395730013ac526e3a7e7fb0294cdc15649b..d706f06c8ac3563f1f4ee6bd3d1a78bf918ca2eb 100644 GIT binary patch delta 118 zcmdlNy)SyhH#Syt1|0^&&A-{?nVHiW3@0mc>u&bq>S2M3-{!MM7I$OZ+#~G9j8n2h Q8ZL=uq6g#VEaea`09-;I8UO$Q delta 118 zcmdlNy)SyhH#Sx?1|0_T&A-{?nVHiV%qJ^y>u&bq>S2M3-{!MM7I$OZ+#~G9j8n2h Q8ZL=uq6g#VEaea`0A( this)->CheckMapConnection() ; + // Se non vi sono componenti, abbiamo finito + if ( m_nConnectedCompoCount == 0) + return - 1 ; + // Porto il punto nel riferimento intrinseco + Point3d ptPL = ptP ; + ptPL.ToLoc( m_MapFrame) ; + // Trovo la componente connessa di minima distanza dal punto + double dMinDist = DBL_MAX ; + int nMinDistPart = - 1 ; + for ( int nMap = 0 ; nMap < m_nMapNum ; ++ nMap) { + for ( int nDex = 0 ; nDex < m_nDim[nMap] ; ++ nDex) { + double dX = ( ( nDex % m_nNx[nMap]) + 0.5) * m_dStep ; + double dY = ( ( nDex / m_nNx[nMap]) + 0.5) * m_dStep ; + int nIntervalNum = int( m_Values[nMap][nDex].size()) ; + for ( int nInt = 0 ; nInt < nIntervalNum ; ++ nInt) { + Point3d ptSt( dX, dY, m_Values[nMap][nDex][nInt].dMin) ; + Point3d ptEn( dX, dY, m_Values[nMap][nDex][nInt].dMax) ; + // Riporto le coordinate cicliche delle normali nell'ordine di partenza (da griglia a sistema intrinseco) + if ( nMap == 1) { + swap( ptSt.x, ptSt.z) ; + swap( ptSt.y, ptSt.z) ; + swap( ptEn.x, ptEn.z) ; + swap( ptEn.y, ptEn.z) ; + } + else if ( nMap == 2) { + swap( ptSt.y, ptSt.z) ; + swap( ptSt.x, ptSt.z) ; + swap( ptEn.y, ptEn.z) ; + swap( ptEn.x, ptEn.z) ; + } + // Calcolo la distanza del punto dal segmento corrente. Se è minore della minima distanza aggiorno quest'ultima + // e la corrispondente componente connessa di minima distanza con la distanza e la componente connessa correnti. + double dDist ; + DistPointLine DistCalc( ptPL, ptSt, ptEn) ; + if ( DistCalc.GetDist( dDist) && dDist < dMinDist) { + dMinDist = dDist ; + nMinDistPart = m_Values[nMap][nDex][nInt].nCompo ; + } + } + } + } + return nMinDistPart ; +} + //---------------------------------------------------------------------------- bool VolZmap::SetToModifyDexelBlocks( int nGrid, int nDex, int nInt) diff --git a/VolZmap.h b/VolZmap.h index 850dcab..8472de1 100644 --- a/VolZmap.h +++ b/VolZmap.h @@ -104,6 +104,7 @@ class VolZmap : public IVolZmap, public IGeoObjRW bool GetPartBBox( int nPart, const Frame3d& frRef, BBox3d& b3Ref, int nFlag = BBF_STANDARD) const override ; VolZmap* ClonePart( int nPart) const override ; bool RemovePart( int nPart) override ; + int GetPartMinDistFromPoint( const Point3d& ptP) const override ; public : // IGeoObjRW int GetNgeId( void) const override ;