diff --git a/EXE_GdbCreateSurf.cpp b/EXE_GdbCreateSurf.cpp index 6263180..7e8eaa9 100644 --- a/EXE_GdbCreateSurf.cpp +++ b/EXE_GdbCreateSurf.cpp @@ -2770,7 +2770,8 @@ ExeCreateSurfBzRuled( int nParentId, int nCrvId1, int nCrvId2, int nRuledType, b //------------------------------------------------------------------------------- int -ExeCreateSurfBzRuledGuided( int nParentId, int nCrvId1, int nCrvId2, int nLayGuides, bool bCapEnds, double dLinTol) +ExeCreateSurfBzRuledGuided( int nParentId, int nCrvId1, int nCrvId2, int nLayGuides, int nLayNewGuides, + const INTVECTOR& vShown, const INTINTVECTOR& vNewOrEdited, bool bCapEnds, double dLinTol) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL) @@ -2792,9 +2793,17 @@ ExeCreateSurfBzRuledGuided( int nParentId, int nCrvId1, int nCrvId2, int nLayGui vCrv.emplace_back( CrvLocGuide.Get()->Clone()) ; nId = pGeomDB->GetNext( nId) ; } + ICURVEPOVECTOR vNewCrv ; + nId = pGeomDB->GetFirstInGroup( nLayNewGuides) ; + while( nId != GDB_ID_NULL && bOk) { + CurveLocal CrvLocGuide( pGeomDB, nId, frLoc) ; + bOk = bOk && ( CrvLocGuide.Get() != nullptr) ; + vNewCrv.emplace_back( CrvLocGuide.Get()->Clone()) ; + nId = pGeomDB->GetNext( nId) ; + } // calcolo la superficie - PtrOwner pSbz( bOk ? GetSurfBezierRuledGuided( CrvLoc1, CrvLoc2, vCrv, dLinTol) : nullptr) ; + PtrOwner pSbz( bOk ? GetSurfBezierRuledGuided( CrvLoc1, CrvLoc2, vCrv, vNewCrv, vShown, vNewOrEdited, dLinTol) : nullptr) ; bOk = bOk && ! IsNull( pSbz) ; // verifiche per orientamento se con tappi bool bWithCaps = false ; diff --git a/LUA_GdbCreateSurf.cpp b/LUA_GdbCreateSurf.cpp index 8d6e21d..dce2796 100644 --- a/LUA_GdbCreateSurf.cpp +++ b/LUA_GdbCreateSurf.cpp @@ -1386,7 +1386,7 @@ LuaCreateSurfBzRuled( lua_State* L) static int LuaCreateSurfBzRuledGuided( lua_State* L) { - // 4 o 5 o 6 parametri : ParentId, CrvId1, CrvId2 nLayGuides [, bCapEnds] [, dTol] + // 4 o 5 o 6 parametri : ParentId, CrvId1, CrvId2, nLayGuides, nLayNewGuides, vShown, vNewOrEdited [, bCapEnds] [, dTol] int nParentId ; LuaCheckParam( L, 1, nParentId) int nCrvId1 ; @@ -1395,6 +1395,14 @@ LuaCreateSurfBzRuledGuided( lua_State* L) LuaCheckParam( L, 3, nCrvId2) int nLayGuides ; LuaCheckParam( L, 4, nLayGuides) + int nLayNewGuides ; + LuaCheckParam( L, 5, nLayNewGuides) + INTVECTOR vShown ; + LuaCheckParam( L, 6, vShown) + INTVECTOR vRespectiveOrigCrv ; + LuaCheckParam( L, 7, vRespectiveOrigCrv) + INTVECTOR vNewCrv ; + LuaCheckParam( L, 8, vNewCrv) bool bCapEnds = false ; int nPar = 5 ; if ( LuaGetParam( L, nPar, bCapEnds)) @@ -1402,8 +1410,14 @@ LuaCreateSurfBzRuledGuided( lua_State* L) double dLinTol = LIN_TOL_SRF ; LuaGetParam( L, nPar, dLinTol) ; LuaClearStack( L) ; + // compongo il vettore INTINTVECTOR + INTINTVECTOR vNewOrEdited ; + if( ssize(vRespectiveOrigCrv) != ssize( vNewCrv)) + return 1 ; + for( int i = 0 ; i < ssize(vRespectiveOrigCrv) ; ++i) + vNewOrEdited.emplace_back( vRespectiveOrigCrv[i], vNewCrv[i]) ; // creo una surf bezier come rigata tra le due curve passate, usando le isocurve nel layer nLayIso - int nId = ExeCreateSurfBzRuledGuided( nParentId, nCrvId1, nCrvId2, nLayGuides, bCapEnds, dLinTol) ; + int nId = ExeCreateSurfBzRuledGuided( nParentId, nCrvId1, nCrvId2, nLayGuides, nLayNewGuides, vShown, vNewOrEdited, bCapEnds, dLinTol) ; // restituisco il risultato if ( nId != GDB_ID_NULL) LuaSetParam( L, nId) ;