Trimming 3.1d1 :
- aggiunte le funzioni per la regolarizzazione locale della superficie.
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
-- 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)
|
||||
if dU == nil or dU < 0 then
|
||||
EgtOutBox( ERROR_CONFIRM_SURF_CHANGE .. 'Error creating the new sync lines', 'Error', 'ERROR', 'OK')
|
||||
return
|
||||
end
|
||||
local 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()
|
||||
Reference in New Issue
Block a user