diff --git a/EXE_GdbGetSurf.cpp b/EXE_GdbGetSurf.cpp index d31a8cf..7fff7bf 100644 --- a/EXE_GdbGetSurf.cpp +++ b/EXE_GdbGetSurf.cpp @@ -1462,25 +1462,26 @@ ExeExtractSurfBezierLoops( int nId, int nDestGrpId, int* pnCount) // richiedo i contorni della superficie e li inserisco nel DB int nFirstId = GDB_ID_NULL ; int nCount = 0 ; - int nL = 0 ; - PtrOwner pCrv( bOk ? pSbz->GetLoop( nL) : nullptr) ; - while ( ! IsNull( pCrv)) { - // porto la curva nel riferimento destinazione - bOk = bOk && pCrv->LocToLoc( frSurf, frDest) ; - // la inserisco nel DB geometrico - int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( pCrv)) : GDB_ID_NULL) ; + ICRVCOMPOPOVECTOR vCC ; + pSbz->GetLoops( vCC , true) ; + for ( int i = 0 ; i < int( vCC.size()) ; ++i) { + if ( IsNull( vCC[i]) || ! vCC[i]->IsValid()) + continue ; + // porto la curva nel riferimento destinazione + bOk = bOk && vCC[i]->LocToLoc(frSurf, frDest) ; + // la inserisco nel DB geometrico + int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nDestGrpId, Release( vCC[i])) : GDB_ID_NULL) ; bOk = bOk && ( nNewId != GDB_ID_NULL) ; - // copio il materiale - if ( ! pGeomDB->CopyMaterial( nId, nNewId)) + // copio il materiale + if ( ! pGeomDB->CopyMaterial( nId, nNewId)) return GDB_ID_NULL ; - // aggiorno contatori + // aggiorno contatori if ( bOk && nFirstId == GDB_ID_NULL) nFirstId = nNewId ; if ( bOk) ++ nCount ; - // passo alla prossima curva - pCrv.Set( bOk ? pSbz->GetLoop( ++nL) : nullptr) ; } + ExeSetModified() ; // se richiesto, salvo il comando Lua equivalente if ( IsCmdLog()) { @@ -1493,4 +1494,4 @@ ExeExtractSurfBezierLoops( int nId, int nDestGrpId, int* pnCount) if ( pnCount != nullptr) *pnCount = nCount ; return nFirstId ; -} +} \ No newline at end of file