From c807df355ca104897d0b4d49279435670600aa5a Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Tue, 18 Jun 2024 15:48:59 +0200 Subject: [PATCH] - modifica creazione aree di selezione - aggiunte info per gestione split multipli - resettate variabili globali su chiamate da programma --- .vscode/settings.json | 7 ++++- Profiles/WinConst.lua | 3 ++ Profiles/WinLib/WinCalculate.lua | 49 +++++++++++++++++++++----------- Profiles/WinLib/WinCreate.lua | 20 ++++++++++--- Profiles/WinProject.lua | 12 +++++++- 5 files changed, 68 insertions(+), 23 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index a4b88aa..9ed05cd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -108,7 +108,12 @@ "EgtFrame", "EgtReplaceString", "EgtCircle", - "EgtArc2PV" + "EgtArc2PV", + "EgtSurfTmSubtract", + "EgtSurfTmIntersect", + "GDB_IN", + "GEO", + "dist" ], "Lua.diagnostics.disable": [ "empty-block" diff --git a/Profiles/WinConst.lua b/Profiles/WinConst.lua index 6a76ddd..867badf 100644 --- a/Profiles/WinConst.lua +++ b/Profiles/WinConst.lua @@ -99,6 +99,7 @@ WIN_FRAME = 'Frame' WIN_AREAOUTLINE = 'BaseOutline' WIN_OUTLINE = 'Outline' WIN_SELECTION = 'Selection' +WIN_SPLITSELECTION = 'SplitSelection' WIN_ORIGOUTLINE = 'OrigOutline' WIN_GEO = 'Geo' WIN_SOLID = 'Solid' @@ -238,6 +239,8 @@ WIN_DWL_BOTTOMHORIZONTALSPLITPARAEND = 'BottomHorizontalSplitParaEnd' WIN_DWL_HORIZONTALSPLITPERPSTART = 'HorizontalSplitPerpStart' WIN_DWL_HORIZONTALSPLITPERPEND = 'HorizontalSplitPerpEnd' +WIN_PRJ_ORIGSPLIT = 'OrigSplit' + WIN_HARDWARE = 'Hardware' WIN_HDW_FAVOURITE = 'HdwFavourite' WIN_HDW_FRAME = 'HdwFrame' diff --git a/Profiles/WinLib/WinCalculate.lua b/Profiles/WinLib/WinCalculate.lua index 34cdea1..054b315 100644 --- a/Profiles/WinLib/WinCalculate.lua +++ b/Profiles/WinLib/WinCalculate.lua @@ -597,18 +597,7 @@ local function CalculateOutlineFromAreaOutline( nAreaId) -- accorcio gli offset TrimAndOrientOrderedCurveLayer( nOutlineLayerId) end - - -- disegno area di selezione per programma - local nSelectionLayerId = EgtGroup( nAreaId) - EgtSetName( nSelectionLayerId, WIN_SELECTION) - EgtSetStatus( nSelectionLayerId, GDB_ST.OFF) - local vOutlineList = EgtGetAllInGroup( nOutlineLayerId) - local nCompoId = EgtCurveCompo( nSelectionLayerId, vOutlineList, false) - local nSelectionArea = EgtSurfFlatRegion( nSelectionLayerId, nCompoId) - EgtSetColor( nSelectionArea, 'YELLOW') - EgtSetAlpha( nSelectionArea, 10) - EgtMove( nSelectionArea, 10 * Z_AX()) - EgtErase( nCompoId) + end --------------------------------------------------------------------- @@ -1668,6 +1657,7 @@ local function CreatePartFromOutline( nAreaLayerId, nOutlineId, bBottomRail) CalcFillSolid(nPartId, nOutlineLayerId, nGeoLayerId) end end + return nPartId end @@ -1778,13 +1768,13 @@ local function CreateStripFromOutline( nAreaId, nOutlineId) -- recupero guida Main local nGuideId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_MAINGUIDE) -- recupero strip piu' vicino a prev outline - local nMainStripId = GetStripNearestToOutline( nMainProfileId, nPrevOutlineId, WIN_STRIP) + local nMainStripId = GetStripNearestToOutline( nMainProfileId, nPrevOutlineId) -- estrudo MainStrip local nMainStripExtrusionId = EgtSurfTmSwept( nSolidLayerId, nMainStripId, nGuideId, false, WIN_SURF_APPROX) -- b) taglio con start -- recupero strip dello start piu' vicino ad outline - local nStartStripId = GetStripNearestToOutline( nStartProfileId, nOutlineId, WIN_STRIP) + local nStartStripId = GetStripNearestToOutline( nStartProfileId, nOutlineId) -- disegno guida start per lo strip trovando le intersezioni degli outline minimi e massimi tra MainStrip e StartStrip local nMainStripMinOffsetId, nMainStripMaxOffsetId = CreateStripGuideLines( nOutlineId, nMainStripId, nMainProfileId, nSolidLayerId) @@ -1811,7 +1801,7 @@ local function CreateStripFromOutline( nAreaId, nOutlineId) -- c) taglio con end -- recupero strip piu' vicino ad outline - local nEndStripId = GetStripNearestToOutline( nEndProfileId, nOutlineId, WIN_STRIP) + local nEndStripId = GetStripNearestToOutline( nEndProfileId, nOutlineId) -- disegno guida end per lo strip trovando le intersezioni degli outline minimi e massimi tra MainStrip ed EndStrip local nEndStripMinOffsetId, nEndStripMaxOffsetId = CreateStripGuideLines( nNextOutlineId, nEndStripId, nEndProfileId, nSolidLayerId) @@ -1874,7 +1864,19 @@ local function CalculateAreaParts( nAreaId) local nSplitId = EgtGetFirstInGroup( nSplitLayerId) if nSplitId then -- creo pezzo split - CreatePartFromOutline( nAreaId, nSplitId) + local nSplitPartId = CreatePartFromOutline( nAreaId, nSplitId) + -- disegno area di selezione per programma + local nSelectionLayerId = EgtGroup( nAreaId) + EgtSetName( nSelectionLayerId, WIN_SPLITSELECTION) + EgtSetStatus( nSelectionLayerId, GDB_ST.OFF) + local nSplitPartGeoId = EgtGetFirstNameInGroup( nSplitPartId, WIN_GEO) + local vOutlineList = EgtGetAllInGroup( nSplitPartGeoId) + local nCompoId = EgtCurveCompo( nSelectionLayerId, vOutlineList, false) + local nSelectionArea = EgtSurfFlatRegion( nSelectionLayerId, nCompoId) + EgtSetColor( nSelectionArea, 'YELLOW') + EgtSetAlpha( nSelectionArea, 10) + EgtMove( nSelectionArea, 10 * Z_AX()) + EgtErase( nCompoId) end end elseif nAreaType ~= WIN_AREATYPES.FILL then @@ -1894,6 +1896,19 @@ local function CalculateAreaParts( nAreaId) end end + -- disegno area di selezione per programma + local nSelectionLayerId = EgtGroup( nAreaId) + EgtSetName( nSelectionLayerId, WIN_SELECTION) + EgtSetStatus( nSelectionLayerId, GDB_ST.OFF) + local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_OUTLINE) + local vOutlineList = EgtGetAllInGroup( nOutlineLayerId) + local nCompoId = EgtCurveCompo( nSelectionLayerId, vOutlineList, false) + local nSelectionArea = EgtSurfFlatRegion( nSelectionLayerId, nCompoId) + EgtSetColor( nSelectionArea, 'YELLOW') + EgtSetAlpha( nSelectionArea, 10) + EgtMove( nSelectionArea, 10 * Z_AX()) + EgtErase( nCompoId) + -- calcolo i pezzi delle sottoaree local nChildAreaId = EgtGetFirstNameInGroup( nAreaId, WIN_AREA .. '*') while nChildAreaId do @@ -2322,7 +2337,7 @@ function WinCalculate.AddHardware( nFrameId) local nHoleId = EgtCircle( nPartHdwLayerId, ptCenter, dRadius) -- per lavorazione EgtModifyCurveExtrusion( nHoleId, Z_AX()) - local dDepth = 25.0 + local dDepth = tonumber(25) if #vMacro == 3 then dDepth = tonumber( vMacro[3]) end diff --git a/Profiles/WinLib/WinCreate.lua b/Profiles/WinLib/WinCreate.lua index 5c83c49..94785d7 100644 --- a/Profiles/WinLib/WinCreate.lua +++ b/Profiles/WinLib/WinCreate.lua @@ -225,13 +225,16 @@ function WinCreate.AddSplit( nAreaLayerId, SplitType, MeasureType, nPosition, n end -- funzione che crea tagli split multipli -function WinCreate.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList, nProportion) +function WinCreate.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList, nProportion, nSplitType) local AreaList = {} if MeasureType == WIN_MEASURE.ABSOLUT then local nResArea1 local nResArea2 = nAreaLayerId for nIndex = 1, #PositionList do - nResArea1, nResArea2 = WinCreate.AddSplit( nResArea2, SplitType, MeasureType, PositionList[nIndex], nProportion) + if nIndex > 1 then + EgtSetInfo( nResArea2, WIN_PRJ_ORIGSPLIT, nAreaLayerId) + end + nResArea1, nResArea2 = WinCreate.AddSplit( nResArea2, SplitType, MeasureType, PositionList[nIndex], nProportion, nSplitType) table.insert( AreaList, nResArea1) if nIndex == #PositionList then table.insert( AreaList, nResArea2) @@ -242,7 +245,10 @@ function WinCreate.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList local nResArea2 = nAreaLayerId local dAddPosition = 0 for nIndex = 1, #PositionList do - nResArea1, nResArea2 = WinCreate.AddSplit( nResArea2, SplitType, MeasureType, PositionList[nIndex], nProportion - dAddPosition) + if nIndex > 1 then + EgtSetInfo( nResArea2, WIN_PRJ_ORIGSPLIT, nAreaLayerId) + end + nResArea1, nResArea2 = WinCreate.AddSplit( nResArea2, SplitType, MeasureType, PositionList[nIndex], nProportion - dAddPosition, nSplitType) table.insert( AreaList, nResArea1) if nIndex == #PositionList then table.insert( AreaList, nResArea2) @@ -253,14 +259,20 @@ function WinCreate.AddSplits( nAreaLayerId, SplitType, MeasureType, PositionList local nResArea1 local nResArea2 = nAreaLayerId local dAddPosition = 0 + local sChildAreas = '' for nIndex = 1, #PositionList do - nResArea1, nResArea2 = WinCreate.AddSplit( nResArea2, SplitType, MeasureType, EgtIf( nIndex == 1, PositionList[nIndex], PositionList[nIndex] / ( 1 - dAddPosition)), nProportion) + if nIndex > 1 then + EgtSetInfo( nResArea2, WIN_PRJ_ORIGSPLIT, nAreaLayerId) + sChildAreas = sChildAreas .. nResArea2 .. EgtIf( nIndex < #PositionList, ',', '') + end + nResArea1, nResArea2 = WinCreate.AddSplit( nResArea2, SplitType, MeasureType, EgtIf( nIndex == 1, PositionList[nIndex], PositionList[nIndex] / ( 1 - dAddPosition)), nProportion, nSplitType) table.insert( AreaList, nResArea1) if nIndex == #PositionList then table.insert( AreaList, nResArea2) end dAddPosition = dAddPosition + PositionList[nIndex] end + EgtSetInfo( nAreaLayerId, 'ChildSplit', sChildAreas) end return AreaList end diff --git a/Profiles/WinProject.lua b/Profiles/WinProject.lua index a79f6b6..f8d1cea 100644 --- a/Profiles/WinProject.lua +++ b/Profiles/WinProject.lua @@ -63,16 +63,26 @@ end _G.WinCreate_AddBottomRail = WinCreate_AddBottomRail local function WinCreate_AddSplits() + local AreaIndex = 1 + while WDG['AREAID' .. AreaIndex] do + WDG['AREAID' .. AreaIndex] = nil + AreaIndex = AreaIndex + 1 + end local PositionList = {} local PositionIndex = 1 while WDG['POSITION' .. PositionIndex] do table.insert( PositionList, WDG['POSITION' .. PositionIndex]) PositionIndex = PositionIndex + 1 end - local AreaList = WinCreate.AddSplits(WDG.AREAID, WDG.SPLITTYPE, WDG.MEASURETYPE, PositionList, WDG.PROPORTION) + local AreaList = WinCreate.AddSplits(WDG.AREAID, WDG.SPLITORIENTATION, WDG.MEASURETYPE, PositionList, WDG.PROPORTION, WDG.SPLITTYPE) for AreaIndex = 1, #AreaList do WDG['AREAID' .. AreaIndex] = AreaList[ AreaIndex] end + PositionIndex = 1 + while WDG['POSITION' .. PositionIndex] do + WDG['POSITION' .. PositionIndex] = nil + PositionIndex = PositionIndex + 1 + end end _G.WinCreate_AddSplits = WinCreate_AddSplits