EgtMachKernel :
- in pocketingNT aggiunta memorizzazione SelId al gruppo PathId corrente.
This commit is contained in:
+49
-15
@@ -1796,11 +1796,6 @@ PocketingNT::ResetCurveAllTempProp( ICurve* pCurve)
|
||||
bool
|
||||
PocketingNT::Chain( int nGrpDestId)
|
||||
{
|
||||
// vettore puntatori alle curve
|
||||
ICURVEPOVECTOR vpCrvs ;
|
||||
vpCrvs.reserve( m_vId.size()) ;
|
||||
// vettore selettori delle curve originali
|
||||
SELVECTOR vInds ;
|
||||
// flag per imposizione lati chiusi
|
||||
m_bAllClose = GetForcedClosed() ;
|
||||
|
||||
@@ -1814,8 +1809,21 @@ PocketingNT::Chain( int nGrpDestId)
|
||||
// recupero la superficie di Trim in globale [nullptr se non presente]
|
||||
PtrOwner<ISurfTriMesh> pStmTrim( GetStmTrim()) ;
|
||||
|
||||
// struct per informazioni da salvare sul gruppo Aux come su chiave KEY_IDS
|
||||
struct InfoCrvSel {
|
||||
Point3d ptOnCrv ; // per determinare a quale curva si riferisce nella regione piana
|
||||
bool bFound ; // per ottimizzare la ricerca
|
||||
SELVECTOR vIds ; // SELVECTOR originario
|
||||
InfoCrvSel( const Point3d& ptOC, const SELVECTOR& vI)
|
||||
: ptOnCrv( ptOC), bFound( false), vIds( vI) {} ;
|
||||
} ;
|
||||
vector<InfoCrvSel> vInfoCrvSel ;
|
||||
|
||||
// vettore puntatori e selettori alle curve
|
||||
ICURVEPOVECTOR vpCrvs ; vpCrvs.reserve( m_vId.size()) ;
|
||||
SELVECTOR vInds ; vInds.reserve( m_vId.size()) ;
|
||||
// recupero tutte le curve e le porto in globale
|
||||
for ( const auto& Id : m_vId) {
|
||||
for ( const SelData& Id : m_vId) {
|
||||
// prendo le curve
|
||||
ICURVEPLIST lstPC ;
|
||||
if ( ! GetCurves( Id, pStmRaw, pStmTrim, lstPC)) {
|
||||
@@ -1830,10 +1838,10 @@ PocketingNT::Chain( int nGrpDestId)
|
||||
// preparo i dati per il concatenamento
|
||||
bool bFirst = true ;
|
||||
Point3d ptNear = ORIG ;
|
||||
double dToler = 10 * EPS_SMALL ;
|
||||
double dToler = 10. * EPS_SMALL ;
|
||||
ChainCurves chainC ;
|
||||
chainC.Init( true, dToler, int( vpCrvs.size())) ;
|
||||
for ( size_t i = 0 ; i < vpCrvs.size() ; ++ i) {
|
||||
chainC.Init( true, dToler, ssize( vpCrvs)) ;
|
||||
for ( int i = 0 ; i < ssize( vpCrvs) ; ++ i) {
|
||||
// recupero la curva e il suo riferimento
|
||||
ICurve* pCrv = vpCrvs[i] ;
|
||||
if ( pCrv == nullptr)
|
||||
@@ -1844,11 +1852,11 @@ PocketingNT::Chain( int nGrpDestId)
|
||||
if ( ! pCrv->GetStartPoint( ptStart) || ! pCrv->GetStartDir( vtStart) ||
|
||||
! pCrv->GetEndPoint( ptEnd) || ! pCrv->GetEndDir( vtEnd))
|
||||
return false ;
|
||||
if ( ! chainC.AddCurve( int( i + 1), ptStart, vtStart, ptEnd, vtEnd))
|
||||
if ( ! chainC.AddCurve( i + 1, ptStart, vtStart, ptEnd, vtEnd))
|
||||
return false ;
|
||||
// se prima curva, assegno inizio della ricerca
|
||||
if ( bFirst) {
|
||||
ptNear = ptStart + 10 * EPS_SMALL * vtStart ;
|
||||
ptNear = ptStart + 10. * EPS_SMALL * vtStart ;
|
||||
bFirst = false ;
|
||||
}
|
||||
}
|
||||
@@ -1867,7 +1875,7 @@ PocketingNT::Chain( int nGrpDestId)
|
||||
SELVECTOR vId2 ;
|
||||
vId2.reserve( vnId2.size()) ;
|
||||
// recupero le curve semplici e le inserisco nella curva composita
|
||||
for ( size_t i = 0 ; i < vnId2.size() ; ++ i) {
|
||||
for ( int i = 0 ; i < ssize( vnId2) ; ++ i) {
|
||||
int nId = abs( vnId2[i]) - 1 ;
|
||||
bool bInvert = ( vnId2[i] < 0) ;
|
||||
vId2.emplace_back( vInds[nId]) ;
|
||||
@@ -1927,11 +1935,14 @@ PocketingNT::Chain( int nGrpDestId)
|
||||
vCrvCompo.back()->SetExtrusion( vtExtr) ;
|
||||
// salvo la thickness come seconda temp prop ( la Sfr rimuove la thick delle curve)
|
||||
vCrvCompo.back()->SetTempParam( dThick, 1) ;
|
||||
// salvo le Info della curva corrente
|
||||
Point3d ptStart ; vCrvCompo.back()->GetStartPoint( ptStart) ;
|
||||
vInfoCrvSel.emplace_back( ptStart, vId2) ;
|
||||
}
|
||||
|
||||
// ordino le curve creando una regione piana
|
||||
SurfFlatRegionByContours SfrByC ;
|
||||
for ( int i = 0 ; i < int( vCrvCompo.size()) ; ++ i) {
|
||||
for ( int i = 0 ; i < ssize( vCrvCompo) ; ++ i) {
|
||||
// memorizzo la Thickness nei TempParams
|
||||
vCrvCompo[i]->SetTempParam( vCrvCompo[i]->GetTempParam( 1), 1) ;
|
||||
SfrByC.AddCurve( Release( vCrvCompo[i])) ;
|
||||
@@ -1948,17 +1959,40 @@ PocketingNT::Chain( int nGrpDestId)
|
||||
if ( nPathId == GDB_ID_NULL)
|
||||
return false ;
|
||||
m_pGeomDB->SetName( nPathId, MCH_PATH + ToString( ++ nGroupName)) ;
|
||||
m_pGeomDB->SetInfo( nPathId, KEY_IDS, ToString( nGroupName)) ;
|
||||
// recupero il Chunk corrente
|
||||
PtrOwner<ISurfFlatRegion> pSfrChunk( pSfrCurr->CloneChunk( nC)) ;
|
||||
if ( IsNull( pSfrChunk) || ! pSfrChunk->IsValid())
|
||||
return false ;
|
||||
// recupero la ThickNess e l'Estrusione dal Loop esterno
|
||||
// recupero la Thickness e l'Estrusione dal Loop esterno
|
||||
PtrOwner<ICurveComposite> pCrvInfo( ConvertCurveToComposite( pSfrChunk->GetLoop( 0, 0))) ;
|
||||
if ( IsNull( pCrvInfo) || ! pCrvInfo->IsValid())
|
||||
return false ;
|
||||
double dThick = pCrvInfo->GetTempParam( 1) ;
|
||||
Vector3d vtExtr ; pCrvInfo->GetExtrusion( vtExtr) ;
|
||||
// assegno come proprietà del gruppo le Info di selezione delle entità selezionate originarie
|
||||
string sInfo ;
|
||||
for ( int nInfo = 0 ; nInfo < ssize( vInfoCrvSel) ; ++ nInfo) {
|
||||
if ( ! vInfoCrvSel[nInfo].bFound) {
|
||||
if ( pCrvInfo->IsPointOn( vInfoCrvSel[nInfo].ptOnCrv, 5. * EPS_SMALL)) {
|
||||
sInfo += ToString( vInfoCrvSel[nInfo].vIds) ;
|
||||
vInfoCrvSel[nInfo].bFound = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
for ( int nL = 1 ; nL < pSfrChunk->GetLoopCount( 0) ; ++ nL) {
|
||||
PtrOwner<ICurve> pCrvLoop( pSfrChunk->GetLoop( 0, nL)) ;
|
||||
if ( IsNull( pCrvLoop) || ! pCrvLoop->IsValid())
|
||||
continue ;
|
||||
for ( int nInfo = 0 ; nInfo < ssize( vInfoCrvSel) ; ++ nInfo) {
|
||||
if ( ! vInfoCrvSel[nInfo].bFound) {
|
||||
if ( pCrvLoop->IsPointOn( vInfoCrvSel[nInfo].ptOnCrv, 5. * EPS_SMALL)) {
|
||||
sInfo += ToString( vInfoCrvSel[nInfo].vIds) ;
|
||||
vInfoCrvSel[nInfo].bFound = true ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
m_pGeomDB->SetInfo( nPathId, KEY_IDS, sInfo) ;
|
||||
// -------------- Verifico quale part del Grezzo bisogna considerare ----------------
|
||||
if ( ! ChooseRawPart( pSfrChunk, ( pStmTrim == nullptr ? pStmRaw : pStmTrim))) {
|
||||
m_pMchMgr->SetLastError( 2436, "Error in PocketingNT : not valid Raw") ;
|
||||
|
||||
Reference in New Issue
Block a user