Asportazioni avanzate volumi virtual milling
This commit is contained in:
+43
-43
@@ -495,7 +495,7 @@ SurfTriMesh::GeneralizedCut( const ICurve& cvCurve, bool bSaveOnEq)
|
||||
vPL.emplace_back( plInLoop) ;
|
||||
PNTVECTOR vPt ;
|
||||
INTVECTOR vTr ;
|
||||
if ( Triangulate().Make( vPL, vPt, vTr, TrgType::TRG_DEL_QUALITY)) {
|
||||
if ( Triangulate().Make( vPL, vPt, vTr, TrgType::TRG_STANDARD)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
for ( int n = 0 ; n < int( vTr.size()) - 2 ; n += 3) {
|
||||
int nNewTriaVertId[3] = { vTr[n], vTr[n + 1], vTr[n + 2] } ;
|
||||
@@ -711,7 +711,7 @@ SurfTriMesh::GeneralizedCut( const ICurve& cvCurve, bool bSaveOnEq)
|
||||
Triangulate CreateTriangulation ;
|
||||
PNTVECTOR vPt ;
|
||||
INTVECTOR vTr ;
|
||||
if ( Triangulate().Make( vplPolyVec[nLoop], vPt, vTr, TrgType::TRG_DEL_QUALITY)) {
|
||||
if ( Triangulate().Make( vplPolyVec[nLoop], vPt, vTr, TrgType::TRG_STANDARD)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
for ( int n = 0 ; n < int( vTr.size()) - 2 ; n += 3) {
|
||||
int nNewTriaVertId[3] = { vTr[n], vTr[n + 1], vTr[n + 2] } ;
|
||||
@@ -1350,7 +1350,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT
|
||||
// Eseguo triangolazione
|
||||
PNTVECTOR vPt ;
|
||||
INTVECTOR vTr ;
|
||||
if ( Triangulate().Make( vplPolyVec[nLoop], vPt, vTr, TrgType::TRG_DEL_QUALITY)) {
|
||||
if ( Triangulate().Make( vplPolyVec[nLoop], vPt, vTr, TrgType::TRG_STANDARD)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
for ( int n = 0 ; n < int( vTr.size()) - 2 ; n += 3) {
|
||||
int nNewTriaVertId[3] = { vTr[n], vTr[n + 1], vTr[n + 2] } ;
|
||||
@@ -1446,7 +1446,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT
|
||||
|
||||
PNTVECTOR vPt ;
|
||||
INTVECTOR vTr ;
|
||||
if ( Triangulate().Make( vPolygons, vPt, vTr, TrgType::TRG_DEL_QUALITY)) {
|
||||
if ( Triangulate().Make( vPolygons, vPt, vTr, TrgType::TRG_STANDARD)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
for ( int n = 0 ; n < int( vTr.size()) - 2 ; n += 3) {
|
||||
int nNewTriaVertId[3] = { vTr[n], vTr[n + 1], vTr[n + 2]} ;
|
||||
@@ -1582,7 +1582,7 @@ SurfTriMesh::RetriangulationForBooleanOperation( CHAINMAP& LoopLines, TRIA3DVECT
|
||||
}
|
||||
for ( int nL = 1 ; nL < int( vPolygons.size()) ; ++ nL) {
|
||||
vPolygons[nL].Invert() ;
|
||||
if ( Triangulate().Make( vPolygons[nL], vPt, vTr, TrgType::TRG_DEL_QUALITY)) {
|
||||
if ( Triangulate().Make( vPolygons[nL], vPt, vTr, TrgType::TRG_STANDARD)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
for (int n = 0 ; n < int( vTr.size()) - 2 ; n += 3) {
|
||||
int nNewTriaVertId[3] = { vTr[n], vTr[n + 1], vTr[n + 2]} ;
|
||||
@@ -1949,6 +1949,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other)
|
||||
if ( nTriaNum >= 0) {
|
||||
Triangle3d trTriaB ;
|
||||
SurfB.GetTriangle( nTriaNum, trTriaB) ;
|
||||
trTriaB.Validate();
|
||||
if ( ( ptFirstV - trTriaB.GetP(0)) * trTriaB.GetN() < - EPS_SMALL)
|
||||
nInOutNum = 1 ;
|
||||
else if ( ( ptFirstV - trTriaB.GetP(0)) * trTriaB.GetN() > EPS_SMALL)
|
||||
@@ -1985,6 +1986,7 @@ SurfTriMesh::IntersectTriMeshTriangle( SurfTriMesh& Other)
|
||||
if ( nTriaNum >= 0) {
|
||||
Triangle3d trTriaA ;
|
||||
GetTriangle( nTriaNum, trTriaA) ;
|
||||
trTriaA.Validate();
|
||||
if ( ( ptFirstV - trTriaA.GetP( 0)) * trTriaA.GetN() < - EPS_SMALL) {
|
||||
nInOutNum = 1 ;
|
||||
}
|
||||
@@ -2997,7 +2999,7 @@ TrimLineWithExtPolygon( const CurveLine& cvLine, const POLYLINEVECTOR& vContourV
|
||||
// Definisco le parti di linea dentro il poligono esteso.
|
||||
bool bStateInside = true ;
|
||||
for ( int nC = 0 ; nC < int( vMyContourVec.size()) ; ++ nC) {
|
||||
bStateInside = bStateInside && IsPointInsidePolyLine( cvMyLine.GetStart(), vMyContourVec[nC]) ;
|
||||
bStateInside = bStateInside && vMyContourVec[nC].IsPointInsidePolyLine( cvMyLine.GetStart()) ;
|
||||
}
|
||||
if ( bStateInside)
|
||||
vLinePart.emplace_back( 0, -1, LCP_ERROR) ;
|
||||
@@ -3082,7 +3084,7 @@ DistPointFacet( const Point3d& ptP, /*const*/ POLYLINEVECTOR& vPolyVec, double&
|
||||
dPointPlaneSignedDist = ( ptP - ptPlaneP) * vtPlaneN ;
|
||||
ptProjP = ptP + dPointPlaneSignedDist * vtPlaneN ;
|
||||
}
|
||||
if ( ! IsPointInsidePolyLine( ptProjP, vPolyVec[nLoop]))
|
||||
if ( ! vPolyVec[nLoop].IsPointInsidePolyLine( ptProjP))
|
||||
bPointIsInside = false ;
|
||||
}
|
||||
// Se la proiezione del punto sul piano della faccia � interno, ho finito.
|
||||
@@ -3096,7 +3098,7 @@ DistPointFacet( const Point3d& ptP, /*const*/ POLYLINEVECTOR& vPolyVec, double&
|
||||
dPointFacetDist = DBL_MAX ;
|
||||
for ( int nLoop = 0 ; nLoop < int( vPolyVec.size()) ; ++ nLoop) {
|
||||
double dDist ;
|
||||
if ( DistPointPolyLine( ptP, vPolyVec[nLoop], dDist) && dDist < dPointFacetDist)
|
||||
if ( vPolyVec[nLoop].DistPointPolyLine( ptP, dDist) && dDist < dPointFacetDist)
|
||||
dPointFacetDist = dDist ;
|
||||
}
|
||||
return true ;
|
||||
@@ -3212,14 +3214,14 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
for ( int nLoop = 0 ; nLoop < int( vNewPieces[nPart].vPieceLoop.size()) && int( vLoopIndexes.size()) < 2 ; ++ nLoop) {
|
||||
int nSegNum ;
|
||||
double dParOnSeg ;
|
||||
if ( PointPositionOnPolyLine( cvOpenChain[nLastChainNum][0].ptSt, vNewPieces[nPart].vPieceLoop[nLoop], nSegNum, dParOnSeg, 9 * EPS_SMALL)) {
|
||||
if ( vNewPieces[nPart].vPieceLoop[nLoop].PointPositionOnPolyLine( cvOpenChain[nLastChainNum][0].ptSt, nSegNum, dParOnSeg, 9 * EPS_SMALL)) {
|
||||
vLoopIndexes.emplace_back( nLoop) ;
|
||||
if ( vLoopIndexes.size() > 1) {
|
||||
swap( vLoopIndexes[0], vLoopIndexes[1]) ;
|
||||
}
|
||||
}
|
||||
if ( PointPositionOnPolyLine( cvOpenChain[nLastChainNum][cvOpenChain[nLastChainNum].size() - 1].ptEn,
|
||||
vNewPieces[nPart].vPieceLoop[nLoop], nSegNum, dParOnSeg, 9 * EPS_SMALL)) {
|
||||
if ( vNewPieces[nPart].vPieceLoop[nLoop].PointPositionOnPolyLine( cvOpenChain[nLastChainNum][cvOpenChain[nLastChainNum].size() - 1].ptEn,
|
||||
nSegNum, dParOnSeg, 9 * EPS_SMALL)) {
|
||||
vLoopIndexes.emplace_back( nLoop) ;
|
||||
}
|
||||
}
|
||||
@@ -3229,7 +3231,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
// La catena finisce sul loop ove inizia. Divido la nuova parte.
|
||||
if ( vLoopIndexes[0] == vLoopIndexes[1]) {
|
||||
// Cambio inizio al loop iniziale.
|
||||
ChangePolyLineStart( cvOpenChain[nLastChainNum].back().ptEn, vNewPieces[nPart].vPieceLoop[vLoopIndexes[0]], 9 * EPS_SMALL) ;
|
||||
vNewPieces[nPart].vPieceLoop[vLoopIndexes[0]].ChangePolyLineStart( cvOpenChain[nLastChainNum].back().ptEn, 9 * EPS_SMALL) ;
|
||||
// Divido il loop della parte
|
||||
// Loop1
|
||||
PolyLine NewLoop1 ;
|
||||
@@ -3241,14 +3243,13 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
}
|
||||
// Spezzo il loop successivo alla catena nel punto in cui comincia la catena successiva.
|
||||
PolyLine SplitLoop1, SplitLoop2 ;
|
||||
SplitPolyLineAtPoint( cvOpenChain[nLastChainNum][0].ptSt,
|
||||
vNewPieces[nPart].vPieceLoop[vLoopIndexes[0]],
|
||||
SplitLoop1, SplitLoop2, 9 * EPS_SMALL) ;
|
||||
vNewPieces[nPart].vPieceLoop[vLoopIndexes[0]].SplitPolyLineAtPoint( cvOpenChain[nLastChainNum][0].ptSt,
|
||||
SplitLoop1, SplitLoop2, 9 * EPS_SMALL) ;
|
||||
// Aggiungo i punti precedenti il punto di frattura nella in NewLoop1.
|
||||
AddPolyLineToPolyLine( NewLoop1, SplitLoop1, 10 * EPS_SMALL) ;
|
||||
NewLoop1.AddPolyLineToPolyLine( SplitLoop1, 10 * EPS_SMALL) ;
|
||||
// Loop2
|
||||
PolyLine NewLoop2 ;
|
||||
AddPolyLineToPolyLine( NewLoop2, SplitLoop2, 10 * EPS_SMALL) ;
|
||||
NewLoop2.AddPolyLineToPolyLine( SplitLoop2, 10 * EPS_SMALL) ;
|
||||
// Inserisco i punti della catena nella PolyLine del nuovo loop.
|
||||
for ( int m = int( cvOpenChain[nLastChainNum].size()) - 1 ; m >= 0 ; -- m) {
|
||||
NewLoop2.AddUPoint( 0., cvOpenChain[nLastChainNum][m].ptEn) ;
|
||||
@@ -3270,7 +3271,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
Point3d ptPointInnerLoop ;
|
||||
vNewPieces[nPart].vPieceLoop[nIL].GetFirstPoint( ptPointInnerLoop) ;
|
||||
if ( PieceInn.vPieceLoop[0].GetPointNbr() < PieceOut.vPieceLoop[0].GetPointNbr()) {
|
||||
if ( IsPointInsidePolyLine( ptPointInnerLoop, PieceInn.vPieceLoop[0])) {
|
||||
if ( PieceInn.vPieceLoop[0].IsPointInsidePolyLine( ptPointInnerLoop)) {
|
||||
PieceInn.vPieceLoop.emplace_back( vNewPieces[nPart].vPieceLoop[nIL]) ;
|
||||
}
|
||||
else {
|
||||
@@ -3278,7 +3279,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( IsPointInsidePolyLine( ptPointInnerLoop, PieceOut.vPieceLoop[0])) {
|
||||
if ( PieceOut.vPieceLoop[0].IsPointInsidePolyLine( ptPointInnerLoop)) {
|
||||
PieceOut.vPieceLoop.emplace_back( vNewPieces[nPart].vPieceLoop[nIL]) ;
|
||||
}
|
||||
else {
|
||||
@@ -3320,7 +3321,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
continue ;
|
||||
Point3d ptPointInnerLoop ;
|
||||
vNewPieces[nPart].vPieceLoop[nIL].GetFirstPoint( ptPointInnerLoop) ;
|
||||
if ( IsPointInsidePolyLine( ptPointInnerLoop, DetachedPiece.vPieceLoop[0])) {
|
||||
if ( DetachedPiece.vPieceLoop[0].IsPointInsidePolyLine( ptPointInnerLoop)) {
|
||||
DetachedPiece.vPieceLoop.emplace_back( vNewPieces[nPart].vPieceLoop[nIL]) ;
|
||||
vNewPieces[nPart].vPieceLoop.erase( vNewPieces[nPart].vPieceLoop.begin() + nIL) ;
|
||||
// Cambio il numero dei loop talgiati
|
||||
@@ -3350,14 +3351,14 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
int nIter = 0 ;
|
||||
while ( vLoopIndexes.back() != vLoopIndexes[0] && nIter == 0) {
|
||||
// Cambio inizio del loop corrente in modo che il punto di inizio sia il punto finale dell'ultima catena trovata.
|
||||
ChangePolyLineStart( cvOpenChain[vChainIndex.back()].back().ptEn, vNewPieces[nPart].vPieceLoop[vLoopIndexes.back()], 9 * EPS_SMALL) ;
|
||||
vNewPieces[nPart].vPieceLoop[vLoopIndexes.back()].ChangePolyLineStart( cvOpenChain[vChainIndex.back()].back().ptEn, 9 * EPS_SMALL) ;
|
||||
// Cerco catene che iniziano sul loop coorente
|
||||
vector<PositionOnPolyLine> vChainStartingOnLoop ;
|
||||
for ( int nCh = 0 ; nCh < nLastChainNum ; ++ nCh) {
|
||||
int nSegNum ;
|
||||
double dParOnSeg ;
|
||||
if ( PointPositionOnPolyLine( cvOpenChain[nCh][0].ptSt, vNewPieces[nPart].vPieceLoop[vLoopIndexes.back()], nSegNum, dParOnSeg, 9 * EPS_SMALL)) {
|
||||
vChainStartingOnLoop.emplace_back( PositionOnPolyLine(nCh, nSegNum, dParOnSeg)) ;
|
||||
if ( vNewPieces[nPart].vPieceLoop[vLoopIndexes.back()].PointPositionOnPolyLine( cvOpenChain[nCh][0].ptSt, nSegNum, dParOnSeg, 9 * EPS_SMALL)) {
|
||||
vChainStartingOnLoop.emplace_back( PositionOnPolyLine(nCh, nSegNum, dParOnSeg)) ;
|
||||
}
|
||||
}
|
||||
// Ordino le catene secondo la vicinanza lungo il loop del loro punto d'inizio al punto d'inizio del loop stesso.
|
||||
@@ -3386,7 +3387,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
double dParOnSeg ;
|
||||
// La catena termina su questo loop diverso da quello corrente.
|
||||
if ( nLoop != vLoopIndexes.back() &&
|
||||
PointPositionOnPolyLine( cvOpenChain[nCh][nLastLineIndex].ptEn, vNewPieces[nPart].vPieceLoop[nLoop], nSegNum, dParOnSeg, 9 * EPS_SMALL)) {
|
||||
vNewPieces[nPart].vPieceLoop[nLoop].PointPositionOnPolyLine( cvOpenChain[nCh][nLastLineIndex].ptEn, nSegNum, dParOnSeg, 9 * EPS_SMALL)) {
|
||||
nIter = 0 ;
|
||||
// Salvo l'indice della catena e quello del loop.
|
||||
vChainIndex.emplace_back( nCh) ;
|
||||
@@ -3400,7 +3401,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
}
|
||||
}
|
||||
// Cambio inizio al loop iniziale.
|
||||
ChangePolyLineStart( cvOpenChain[vChainIndex.back()].back().ptEn, vNewPieces[nPart].vPieceLoop[vLoopIndexes[0]], 9 * EPS_SMALL) ;
|
||||
vNewPieces[nPart].vPieceLoop[vLoopIndexes[0]].ChangePolyLineStart( cvOpenChain[vChainIndex.back()].back().ptEn, 9 * EPS_SMALL) ;
|
||||
// Divido i loop della parte.
|
||||
POLYLINEVECTOR vPolySecondPartVec ;
|
||||
PolyLine NewLoop1 ;
|
||||
@@ -3413,18 +3414,17 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
}
|
||||
// Spezzo il loop successivo alla catena nel punto in cui comincia la catena successiva.
|
||||
PolyLine SplitLoop1, SplitLoop2 ;
|
||||
SplitPolyLineAtPoint( cvOpenChain[vChainIndex[( n + 1) % int( vChainIndex.size())]][0].ptSt,
|
||||
vNewPieces[nPart].vPieceLoop[vLoopIndexes[n + 1]],
|
||||
SplitLoop1, SplitLoop2, 9 * EPS_SMALL) ;
|
||||
vNewPieces[nPart].vPieceLoop[vLoopIndexes[n + 1]].SplitPolyLineAtPoint( cvOpenChain[vChainIndex[( n + 1) % int( vChainIndex.size())]][0].ptSt,
|
||||
SplitLoop1, SplitLoop2, 9 * EPS_SMALL) ;
|
||||
// Aggiungo i punti precedenti il punto di frattura in NewLoop1.
|
||||
AddPolyLineToPolyLine( NewLoop1, SplitLoop1, 10 * EPS_SMALL) ;
|
||||
NewLoop1.AddPolyLineToPolyLine( SplitLoop1, 10 * EPS_SMALL) ;
|
||||
// Salvo la parte dopo il punto di frattura in un apposito vettore.
|
||||
vPolySecondPartVec.emplace_back( SplitLoop2) ;
|
||||
}
|
||||
PolyLine NewLoop2 ;
|
||||
for ( int n = int( vChainIndex.size()) - 1 ; n >= 0 ; -- n) {
|
||||
// Aggiungo i punti successivi il punto di frattura in NewLoop2.
|
||||
AddPolyLineToPolyLine( NewLoop2, vPolySecondPartVec[n], 10 * EPS_SMALL) ;
|
||||
NewLoop2.AddPolyLineToPolyLine( vPolySecondPartVec[n], 10 * EPS_SMALL) ;
|
||||
// Inserisco i punti della catena nella PolyLine del nuovo loop.
|
||||
for ( int m = int( cvOpenChain[vChainIndex[n]].size()) - 1 ; m >= 0 ; -- m) {
|
||||
NewLoop2.AddUPoint( 0., cvOpenChain[vChainIndex[n]][m].ptEn) ;
|
||||
@@ -3460,7 +3460,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
Point3d ptPointInnerLoop ;
|
||||
vNewPieces[nPart].vPieceLoop[nIL].GetFirstPoint( ptPointInnerLoop) ;
|
||||
if ( PieceInn.vPieceLoop[0].GetPointNbr() < PieceOut.vPieceLoop[0].GetPointNbr()) {
|
||||
if ( IsPointInsidePolyLine( ptPointInnerLoop, PieceInn.vPieceLoop[0])) {
|
||||
if ( PieceInn.vPieceLoop[0].IsPointInsidePolyLine( ptPointInnerLoop)) {
|
||||
PieceInn.vPieceLoop.emplace_back( vNewPieces[nPart].vPieceLoop[nIL]) ;
|
||||
}
|
||||
else {
|
||||
@@ -3468,7 +3468,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( IsPointInsidePolyLine( ptPointInnerLoop, PieceOut.vPieceLoop[0])) {
|
||||
if ( PieceOut.vPieceLoop[0].IsPointInsidePolyLine( ptPointInnerLoop)) {
|
||||
PieceOut.vPieceLoop.emplace_back( vNewPieces[nPart].vPieceLoop[nIL]) ;
|
||||
}
|
||||
else {
|
||||
@@ -3545,7 +3545,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
continue ;
|
||||
Point3d ptPointInnerLoop ;
|
||||
vNewPieces[nPart].vPieceLoop[nIL].GetFirstPoint( ptPointInnerLoop) ;
|
||||
if ( IsPointInsidePolyLine( ptPointInnerLoop, DetachedPiece.vPieceLoop[0])) {
|
||||
if ( DetachedPiece.vPieceLoop[0].IsPointInsidePolyLine( ptPointInnerLoop)) {
|
||||
DetachedPiece.vPieceLoop.emplace_back( vNewPieces[nPart].vPieceLoop[nIL]) ;
|
||||
vNewPieces[nPart].vPieceLoop.erase( vNewPieces[nPart].vPieceLoop.begin() + nIL) ;
|
||||
// Cambio il numero dei loop talgiati
|
||||
@@ -3604,8 +3604,8 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
++ itInnNext ;
|
||||
if ( itInnNext != LoopList.end())
|
||||
ptInnNextP = itInnNext->first ;
|
||||
if ( IsPointInsidePolyLine( ptInnP, vNewPieces[nPieceN].vPieceLoop[0]) || ( itInnNext != LoopList.end() &&
|
||||
IsPointInsidePolyLine( 0.5 * ( ptInnP + ptInnNextP), vNewPieces[nPieceN].vPieceLoop[0]))) {
|
||||
if ( vNewPieces[nPieceN].vPieceLoop[0].IsPointInsidePolyLine( ptInnP) || ( itInnNext != LoopList.end() &&
|
||||
vNewPieces[nPieceN].vPieceLoop[0].IsPointInsidePolyLine( 0.5 * ( ptInnP + ptInnNextP)))) {
|
||||
double dPieceArea ;
|
||||
vNewPieces[nPieceN].vPieceLoop[0].IsClosedAndFlat( Plane3d(), dPieceArea) ;
|
||||
if ( vNewPieces[nPieceN].vPieceLoop[0].IsClosedAndFlat( Plane3d(), dPieceArea) && dPieceArea < dIncluderPieceArea) {
|
||||
@@ -3634,7 +3634,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
PNTULIST& SecLevLoopList = vNewPieces[nIncluderPiece].vPieceLoop[nSI].GetUPointList() ;
|
||||
for ( auto itSL = SecLevLoopList.begin() ; itSL != SecLevLoopList.end() ; ++ itSL) {
|
||||
Point3d ptPntSL = itSL->first ;
|
||||
if ( IsPointInsidePolyLine( ptPntSL, vNewPieces.back().vPieceLoop.back())) {
|
||||
if ( vNewPieces.back().vPieceLoop.back().IsPointInsidePolyLine( ptPntSL)) {
|
||||
vSecondLevel.emplace_back( nSI) ;
|
||||
break ;
|
||||
}
|
||||
@@ -3661,7 +3661,7 @@ SurfTriMesh::SplitFacet( const INTERSCHAINMAP& IntersLineMap, PieceMap& NewFacet
|
||||
PNTULIST& SecLevLoopList = vNewPieces[nIncluderPiece].vPieceLoop[nSI].GetUPointList() ;
|
||||
for ( auto itSL = SecLevLoopList.begin() ; itSL != SecLevLoopList.end() ; ++ itSL) {
|
||||
Point3d ptPntSL = itSL->first ;
|
||||
if ( IsPointInsidePolyLine( ptPntSL, vNewPieces.back().vPieceLoop.back())) {
|
||||
if ( vNewPieces.back().vPieceLoop.back().IsPointInsidePolyLine( ptPntSL)) {
|
||||
vSecondLevel.emplace_back( nSI) ;
|
||||
break ;
|
||||
}
|
||||
@@ -4208,8 +4208,8 @@ SplitPolyLineContour( const POLYLINEVECTOR& vContourVec, POLYLINEVECTOR& vContou
|
||||
AuxPoly.AddUPoint( 0, vPointsVec[nP]) ;
|
||||
// Cambio origine al contorno e lo divido.
|
||||
vContourVec1.emplace_back() ; vContourVec2.emplace_back() ;
|
||||
if ( ChangePolyLineStart( vPointsVec[nSplitI], AuxPoly, 9 * EPS_SMALL) &&
|
||||
SplitPolyLineAtPoint( vPointsVec[nSplitJ], AuxPoly, vContourVec1[0], vContourVec2[0], 9 * EPS_SMALL)) {
|
||||
if ( AuxPoly.ChangePolyLineStart( vPointsVec[nSplitI], 9 * EPS_SMALL) &&
|
||||
AuxPoly.SplitPolyLineAtPoint( vPointsVec[nSplitJ], vContourVec1[0], vContourVec2[0], 9 * EPS_SMALL)) {
|
||||
// Chiudo i contorni.
|
||||
vContourVec1[0].AddUPoint( 0, vPointsVec[nSplitI]) ;
|
||||
vContourVec2[0].AddUPoint( 0, vPointsVec[nSplitJ]) ;
|
||||
@@ -4218,7 +4218,7 @@ SplitPolyLineContour( const POLYLINEVECTOR& vContourVec, POLYLINEVECTOR& vContou
|
||||
const PNTULIST& InnContourList = MyPolyVecRef[nC].GetUPointList() ;
|
||||
for ( auto it = InnContourList.begin() ; it != InnContourList.end() ; ++ it) {
|
||||
if ( vContourVec1[0].GetPointNbr() < vContourVec2[0].GetPointNbr()) {
|
||||
if ( IsPointInsidePolyLine( it->first, vContourVec1[0])) {
|
||||
if ( vContourVec1[0].IsPointInsidePolyLine( it->first)) {
|
||||
vContourVec1.emplace_back( vContourVec[nC]) ;
|
||||
break ;
|
||||
}
|
||||
@@ -4228,7 +4228,7 @@ SplitPolyLineContour( const POLYLINEVECTOR& vContourVec, POLYLINEVECTOR& vContou
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( IsPointInsidePolyLine( it->first, vContourVec2[0])) {
|
||||
if ( vContourVec2[0].IsPointInsidePolyLine( it->first)) {
|
||||
vContourVec2.emplace_back( vContourVec[nC]) ;
|
||||
break ;
|
||||
}
|
||||
@@ -4270,7 +4270,7 @@ SurfTriMesh::RetriangulateFacetPieces( const PieceMap& NewFacet,
|
||||
for ( int nPart = 0 ; nPart < nPartNum ; ++ nPart) {
|
||||
PNTVECTOR vPt ;
|
||||
INTVECTOR vTr ;
|
||||
if ( Triangulate().Make( PiecesVector[nPart].vPieceLoop, vPt, vTr, TrgType::TRG_DEL_QUALITY)) {
|
||||
if ( Triangulate().Make( PiecesVector[nPart].vPieceLoop, vPt, vTr, TrgType::TRG_STANDARD)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
for ( int n = 0 ; n < int( vTr.size()) - 2 ; n += 3) {
|
||||
int nNewTriaVertId[3] = { vTr[n], vTr[n + 1], vTr[n + 2]} ;
|
||||
@@ -4362,7 +4362,7 @@ SurfTriMesh::RetriangulateFacetPieces( const PieceMap& NewFacet,
|
||||
bool bContinue = SplitPolyLineContour( PiecesVector[nPart].vPieceLoop, vSubPieceLoop[0], vSubPieceLoop[1]) ;
|
||||
while ( bContinue) {
|
||||
for ( int nSub = 0 ; nSub < int( vSubPieceLoop.size()) ; ++ nSub) {
|
||||
if (Triangulate().Make(vSubPieceLoop[nSub], vPt, vTr, TrgType::TRG_DEL_QUALITY)) {
|
||||
if (Triangulate().Make(vSubPieceLoop[nSub], vPt, vTr, TrgType::TRG_STANDARD)) {
|
||||
// Inserisco i nuovi triangoli
|
||||
for (int n = 0; n < int(vTr.size()) - 2; n += 3) {
|
||||
int nNewTriaVertId[3] = { vTr[n], vTr[n + 1], vTr[n + 2] };
|
||||
|
||||
Reference in New Issue
Block a user