From 659949dafcb281cee9a318abf85f5d467b9d18c0 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 30 Jan 2018 12:12:05 +0000 Subject: [PATCH] EgtGeomKernel : - miglioria a Zmap per colore lavorazione. --- VolZmapGraphics.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/VolZmapGraphics.cpp b/VolZmapGraphics.cpp index 37d54a5..456d740 100644 --- a/VolZmapGraphics.cpp +++ b/VolZmapGraphics.cpp @@ -2715,6 +2715,43 @@ VolZmap::FlipEdgesII( TriHolder& TriHold) const bModified = true ; break ; } + else { + // In questo caso i due triangoli sono necessariamente su un piano, + // quindi hanno normali concordi. Per ognuno dei due cerco nei rispettivi + // ventagli un triangolo con normale concorde con colore definito. Assegno + // tale colore ai triangoli. + int nPrv1 = ( nTri1 != 0 ? nTri1 : int( TriHold[n1].vCompoTria[nCompo1].size())) - 1 ; + int nNxt1 = ( nTri1 != TriHold[n1].vCompoTria[nCompo1].size() - 1 ? nTri1 + 1 : 0) ; + int nPrv2 = ( nTri2 != 0 ? nTri2 : int( TriHold[n2].vCompoTria[nCompo2].size())) - 1 ; + int nNxt2 = ( nTri2 != TriHold[n2].vCompoTria[nCompo2].size() - 1 ? nTri2 + 1 : 0) ; + + double dDotP1 = TriHold[n1].vCompoTria[nCompo1][nTri1].GetN() * + TriHold[n1].vCompoTria[nCompo1][nPrv1].GetN() ; + double dDotN1 = TriHold[n1].vCompoTria[nCompo1][nTri1].GetN() * + TriHold[n1].vCompoTria[nCompo1][nNxt1].GetN() ; + int nAdjT1 = - 1 ; + if ( dDotP1 > 0.5 || dDotN1 > 0.5) + nAdjT1 = ( dDotP1 > dDotN1 ? nPrv1 : nNxt1) ; + + double dDotP2 = TriHold[n2].vCompoTria[nCompo2][nTri2].GetN() * + TriHold[n2].vCompoTria[nCompo2][nPrv2].GetN() ; + double dDotN2 = TriHold[n2].vCompoTria[nCompo2][nTri2].GetN() * + TriHold[n2].vCompoTria[nCompo2][nNxt2].GetN() ; + int nAdjT2 = - 1 ; + if ( dDotP2 > 0.5 || dDotN2 > 0.5) + nAdjT2 = ( dDotP2 > dDotN2 ? nPrv2 : nNxt2) ; + + if ( nAdjT1 != - 1) { + int nCol = TriHold[n1].vCompoTria[nCompo1][nAdjT1].GetGrade() ; + TriHold[n1].vCompoTria[nCompo1][nTri1].SetGrade( nCol) ; + TriHold[n2].vCompoTria[nCompo2][nTri2].SetGrade( nCol) ; + } + else if ( nAdjT2 != - 1) { + int nCol = TriHold[n2].vCompoTria[nCompo2][nAdjT2].GetGrade() ; + TriHold[n1].vCompoTria[nCompo1][nTri1].SetGrade( nCol) ; + TriHold[n2].vCompoTria[nCompo2][nTri2].SetGrade( nCol) ; + } + } } } }