From 98ece977ba257679bdd847778dedc2ca6af7b710 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 29 Mar 2017 18:19:17 +0000 Subject: [PATCH] EgtExecutor 1.8c7 : - correzioni per gestione superfici portate in locale ad altre in modifica. --- EXE_GdbModifySurf.cpp | 96 +++++++++--------------------------------- EgtExecutor.rc | Bin 15088 -> 15088 bytes 2 files changed, 21 insertions(+), 75 deletions(-) diff --git a/EXE_GdbModifySurf.cpp b/EXE_GdbModifySurf.cpp index f6a5be4..36cb9d0 100644 --- a/EXE_GdbModifySurf.cpp +++ b/EXE_GdbModifySurf.cpp @@ -22,6 +22,7 @@ #include "/EgtDev/Include/EgkCurveComposite.h" #include "/EgtDev/Include/EgkSurfFlatRegion.h" #include "/EgtDev/Include/EgkSurfTriMesh.h" +#include "/EgtDev/Include/EgkSurfLocal.h" #include "/EgtDev/Include/EgkCDSimpleSurfFrMove.h" #include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EgtPointerOwner.h" @@ -176,21 +177,10 @@ ExeSurfFrAdd( int nId1, int nId2) // recupero il riferimento della superficie Frame3d frSurf1 ; bOk = bOk && pGeomDB->GetGlobFrame( nId1, frSurf1) ; - // recupero la seconda superficie FlatRegion - const ISurfFlatRegion* pSfr2 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId2)) ; - bOk = bOk && ( pSfr2 != nullptr) ; - // recupero il riferimento della superficie - Frame3d frSurf2 ; - bOk = bOk && pGeomDB->GetGlobFrame( nId2, frSurf2) ; - // se riferimenti diversi, porto una copia della seconda nel riferimento della prima - const ISurfFlatRegion* pSfr2L = pSfr2 ; - PtrOwnerpTmp ; - if ( ! AreSameFrame( frSurf1, frSurf2)) { - pTmp.Set( pSfr2->Clone()) ; - bOk = bOk && ! IsNull( pTmp) ; - bOk = bOk && pTmp->LocToLoc( frSurf2, frSurf1) ; - pSfr2L = pTmp ; - } + // recupero la seconda superficie FlatRegion in locale alla prima + SurfLocal Surf2Loc( pGeomDB, nId2, frSurf1) ; + const ISurfFlatRegion* pSfr2L = GetSurfFlatRegion( Surf2Loc) ; + bOk = bOk && ( pSfr2L != nullptr) ; // eseguo l'unione tra le due superfici bOk = bOk && pSfr1->Add( *pSfr2L) ; ExeSetModified() ; @@ -216,21 +206,10 @@ ExeSurfFrSubtract( int nId1, int nId2) // recupero il riferimento della superficie Frame3d frSurf1 ; bOk = bOk && pGeomDB->GetGlobFrame( nId1, frSurf1) ; - // recupero la seconda superficie FlatRegion - const ISurfFlatRegion* pSfr2 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId2)) ; - bOk = bOk && ( pSfr2 != nullptr) ; - // recupero il riferimento della superficie - Frame3d frSurf2 ; - bOk = bOk && pGeomDB->GetGlobFrame( nId2, frSurf2) ; - // se riferimenti diversi, porto una copia della seconda nel riferimento della prima - const ISurfFlatRegion* pSfr2L = pSfr2 ; - PtrOwnerpTmp ; - if ( ! AreSameFrame( frSurf1, frSurf2)) { - pTmp.Set( pSfr2->Clone()) ; - bOk = bOk && ! IsNull( pTmp) ; - bOk = bOk && pTmp->LocToLoc( frSurf2, frSurf1) ; - pSfr2L = pTmp ; - } + // recupero la seconda superficie FlatRegion in locale alla prima + SurfLocal Surf2Loc( pGeomDB, nId2, frSurf1) ; + const ISurfFlatRegion* pSfr2L = GetSurfFlatRegion( Surf2Loc) ; + bOk = bOk && ( pSfr2L != nullptr) ; // eseguo la sottrazione della seconda superficie dalla prima bOk = bOk && pSfr1->Subtract( *pSfr2L) ; // se il risultato è vuoto, cancello la FlatRegion @@ -259,21 +238,10 @@ ExeSurfFrIntersect( int nId1, int nId2) // recupero il riferimento della superficie Frame3d frSurf1 ; bOk = bOk && pGeomDB->GetGlobFrame( nId1, frSurf1) ; - // recupero la seconda superficie FlatRegion - const ISurfFlatRegion* pSfr2 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId2)) ; - bOk = bOk && ( pSfr2 != nullptr) ; - // recupero il riferimento della superficie - Frame3d frSurf2 ; - bOk = bOk && pGeomDB->GetGlobFrame( nId2, frSurf2) ; - // se riferimenti diversi, porto una copia della seconda nel riferimento della prima - const ISurfFlatRegion* pSfr2L = pSfr2 ; - PtrOwnerpTmp ; - if ( ! AreSameFrame( frSurf1, frSurf2)) { - pTmp.Set( pSfr2->Clone()) ; - bOk = bOk && ! IsNull( pTmp) ; - bOk = bOk && pTmp->LocToLoc( frSurf2, frSurf1) ; - pSfr2L = pTmp ; - } + // recupero la seconda superficie FlatRegion in locale alla prima + SurfLocal Surf2Loc( pGeomDB, nId2, frSurf1) ; + const ISurfFlatRegion* pSfr2L = GetSurfFlatRegion( Surf2Loc) ; + bOk = bOk && ( pSfr2L != nullptr) ; // eseguo l'intersezione tra le due superfici bOk = bOk && pSfr1->Intersect( *pSfr2L) ; // se il risultato è vuoto, cancello la FlatRegion @@ -380,21 +348,10 @@ ExeSurfFrMoveSimpleNoCollision( int nId1, int nId2, const Vector3d& vtDir, doubl // recupero il riferimento della superficie Frame3d frSurf1 ; bOk = bOk && pGeomDB->GetGlobFrame( nId1, frSurf1) ; - // recupero la seconda superficie FlatRegion - const ISurfFlatRegion* pSfr2 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId2)) ; - bOk = bOk && ( pSfr2 != nullptr) ; - // recupero il riferimento della superficie - Frame3d frSurf2 ; - bOk = bOk && pGeomDB->GetGlobFrame( nId2, frSurf2) ; - // se riferimenti diversi, porto una copia della seconda nel riferimento della prima - const ISurfFlatRegion* pSfr2L = pSfr2 ; - PtrOwnerpTmp ; - if ( ! AreSameFrame( frSurf1, frSurf2)) { - pTmp.Set( pSfr2->Clone()) ; - bOk = bOk && ! IsNull( pTmp) ; - bOk = bOk && pTmp->LocToLoc( frSurf2, frSurf1) ; - pSfr2L = pTmp ; - } + // recupero la seconda superficie FlatRegion in locale alla prima + SurfLocal Surf2Loc( pGeomDB, nId2, frSurf1) ; + const ISurfFlatRegion* pSfr2L = GetSurfFlatRegion( Surf2Loc) ; + bOk = bOk && ( pSfr2L != nullptr) ; // porto in locale alla prima superficie il versore di movimento Vector3d vtDirL = GetVectorLocal( pGeomDB, vtDir, nRefType, frSurf1) ; // calcolo massima lunghezza di traslazione della prima regione senza semplice collisione con la seconda @@ -413,21 +370,10 @@ ExeSurfFrRotateSimpleNoCollision( int nId1, int nId2, const Point3d& ptCen, doub // recupero il riferimento della superficie Frame3d frSurf1 ; bOk = bOk && pGeomDB->GetGlobFrame( nId1, frSurf1) ; - // recupero la seconda superficie FlatRegion - const ISurfFlatRegion* pSfr2 = GetSurfFlatRegion( pGeomDB->GetGeoObj( nId2)) ; - bOk = bOk && ( pSfr2 != nullptr) ; - // recupero il riferimento della superficie - Frame3d frSurf2 ; - bOk = bOk && pGeomDB->GetGlobFrame( nId2, frSurf2) ; - // se riferimenti diversi, porto una copia della seconda nel riferimento della prima - const ISurfFlatRegion* pSfr2L = pSfr2 ; - PtrOwnerpTmp ; - if ( ! AreSameFrame( frSurf1, frSurf2)) { - pTmp.Set( pSfr2->Clone()) ; - bOk = bOk && ! IsNull( pTmp) ; - bOk = bOk && pTmp->LocToLoc( frSurf2, frSurf1) ; - pSfr2L = pTmp ; - } + // recupero la seconda superficie FlatRegion in locale alla prima + SurfLocal Surf2Loc( pGeomDB, nId2, frSurf1) ; + const ISurfFlatRegion* pSfr2L = GetSurfFlatRegion( Surf2Loc) ; + bOk = bOk && ( pSfr2L != nullptr) ; // porto in locale alla prima superficie il versore di movimento Point3d ptCenL = GetPointLocal( pGeomDB, ptCen, nRefType, frSurf1) ; // calcolo massimo angolo di rotazione della prima regione senza semplice collisione con la seconda diff --git a/EgtExecutor.rc b/EgtExecutor.rc index 863a5ea47c155eaa14961146f6d934392101bf8f..d5e6d470db64e04980f24ec2af96be91a133918e 100644 GIT binary patch delta 79 zcmexR`k{2gFE&Q=&A-`PnSqoe*K!sx?>N)s4T4pS=93+{k~jAW*?>e(i-FY$N+HxV MD8kglDNT|90HC=WtpET3 delta 79 zcmexR`k{2gFE&QA&A-`PnSqoe*K!sx?>N)s4T4pSW|JMck~jAW*?>e(i-FY$N+HxV MD8kglDNT|90H19er2qf`