-- ConfirmSurfChange.lua by Egalware s.r.l. 2026/04/22 require( 'EgtBase') _ENV = EgtProtectGlobal() EgtEnableDebug( false) -- Carico le costanti di Trimming EgtAddToPackagePath( EgtGetSourceDir() .. '?.lua') local GlobVar = require( 'TrimmingLib') -- Costante di Errore local ERROR_CONFIRM_SURF_CHANGE = 'Error in Confirm Surf Change : ' -- Recupero il Part e Layer di Trimming corrente ( o di riferimento) local nCurrPartId = EgtGetCurrPart() local nCurrLayerId = GlobVar.GetTrimmingLayerRefId( EgtGetCurrLayer()) if not GlobVar.IsTrimmingLayer( nCurrLayerId) then EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'Not a valid Trimming Layer', 'Error', 'ERROR', 'OK') return end -- Recupero le Info local dLinTol = EgtGetInfo( nCurrLayerId, KEY_LIN_TOL, 'd') -- verifico che esista il layer temporaneo con la nuova superficie e i nuovi bordi local nEditSurfLayer = GlobVar.GetCurrentEditSurfLayer( nCurrPartId, nCurrLayerId) if nEditSurfLayer == nil or nEditSurfLayer == GDB_ID.NULL then EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'No Temp Surface Regolarized to confirm', 'Error', 'ERROR', 'OK') return end -- cerco i nuovi bordi e la nuova superficie -- verifico ci sia la superficie local nNewSurf = GDB_ID.NULL local nId = EgtGetFirstInGroup(nEditSurfLayer) while nId do if EgtGetName(nId) == EDIT_SURF_NEWSURF_NAME then nNewSurf = nId end nId = EgtGetNext( nId) end if nNewSurf == GDB_ID.NULL then EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'No Temp Surface Regolarized to confirm', 'Error', 'ERROR', 'OK') return end -- cerco i nuovi bordi local vNewBorder = {} nId = EgtGetFirstInGroup(nEditSurfLayer) while nId do if EgtGetName(nId) == EDIT_SURF_NEWBORDER_NAME then table.insert(vNewBorder, nId) end nId = EgtGetNext( nId) end if #vNewBorder ~= 2 then EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'No New Borders to confirm', 'Error', 'ERROR', 'OK') return -- li ricavo dalla superficie end EgtDeselectAll() local vIdEdges = {} nId = EgtGetFirstInGroup( nCurrLayerId) while nId do -- verifico che sia una Curva e che sia di Bordo if EgtGetName( nId) == EDGES_NAME then table.insert( vIdEdges, nId) end nId = EgtGetNext( nId) end -- Se nel gruppo di trim ho due curve di bordo le cancello if #vIdEdges == 2 then EgtErase( vIdEdges) end -- verifico ci sia la superficie local nSurf = GDB_ID.NULL nId = EgtGetFirstInGroup(nCurrLayerId) while nId do if EgtGetType(nId) == GDB_TY.SRF_BEZ then nSurf = nId end nId = EgtGetNext( nId) end if nSurf ~= GDB_ID.NULL then EgtErase( nSurf) end -- Verifico che esista il Layer di Edit per le curve di Sincronizzazione local nLayerEditSyncId = GlobVar.GetCurrentEditSyncCurvesLayer( nCurrPartId, nCurrLayerId) if nLayerEditSyncId == nil or nLayerEditSyncId == GDB_ID.NULL then -- EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'Click Edit SyncLines before trying to reduce twist', 'Error', 'ERROR', 'OK') -- return end -- recupero le linee di Sync selezionate e le riporto al colore standard local vSyncSel = EgtGetInfo(nCurrLayerId, KEY_SYNC_LINES_REGOLARIZATION, "vs") -- verifico che siano selezionate due curve nel layer delle Sync Lines if #vSyncSel == 2 then for i,nId in pairs( vSyncSel) do if EgtGetName(nId) == SYNC_LINE_NAME then EgtSetColor(nId, SYNC_LINE_COLOR) end end end -- cancello l'info nel layer di trimming EgtRemoveInfo(nCurrLayerId, KEY_SYNC_LINES_REGOLARIZATION) -- sposto i nuovi bordi e superficie e cambio colori e nomi EgtRelocate(nNewSurf, nCurrLayerId) EgtRelocate(vNewBorder[1], nCurrLayerId) EgtRelocate(vNewBorder[2], nCurrLayerId) EgtSetColor( nNewSurf, RULED_BZ_COLOR) EgtSetColor(vNewBorder[1],EDGES_COLOR) EgtSetColor(vNewBorder[2],EDGES_COLOR) EgtSetName(nNewSurf, RULED_BZ_NAME) EgtSetName(vNewBorder[1],EDGES_NAME) EgtSetName(vNewBorder[2],EDGES_NAME) -- scorro le curve di edit e guardo a che parametro corrispondono -- richiedo a quel parametro l'isocurva sulla superficie nuova if nLayerEditSyncId ~= nil and nLayerEditSyncId ~= GDB_ID.NULL then nId = EgtGetFirstInGroup(nLayerEditSyncId) while nId do local ptStart = EgtSP(nId) local dU = EgtCurveParamAtPoint( vNewBorder[1], ptStart, dLinTol) dU = round (dU) -- arrotondo: le isocurve toccavano la curva in punti a parametri interi if dU == nil or dU < 0 then EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'Error creating the new sync lines', 'Error', 'ERROR', 'OK') return end ptStart = EgtSurfBezierGetPoint(nNewSurf, dU, 0.) local ptEnd = EgtSurfBezierGetPoint(nNewSurf, dU, 1.) local nNewIso = EgtLine( nEditSurfLayer, ptStart, ptEnd) EgtSetName(nNewIso, SYNC_LINE_NAME) nId = EgtGetNext(nId) end EgtEmptyGroup( nLayerEditSyncId) end -- sostituisco le vecchie con le nuove nId = EgtGetFirstInGroup(nEditSurfLayer) while nId do local nNext = EgtGetNext(nId) EgtRelocate(nId, nLayerEditSyncId) nId = nNext end EgtErase(nEditSurfLayer) EgtDraw()