DataWindow :

- correzioni preview 2d.
This commit is contained in:
SaraP
2025-07-23 10:12:48 +02:00
parent 08c732c571
commit 71eb7b36e9
2 changed files with 92 additions and 67 deletions
+8
View File
@@ -133,6 +133,14 @@ WIN_OPENING_TYPES = {
LIFTSLIDE_RIGHT = 12,
}
-- tipi di pezzo
WIN_PART_TYPE = 'PartType'
WIN_PART_TYPES = {
NULL = 0,
FILL = 1,
BOTTOMRAIL = 2,
}
WIN_AREAOUTLINE = 'BaseOutline'
WIN_OUTLINE = 'Outline'
WIN_BASESPLIT = 'BaseSplit'
+84 -67
View File
@@ -1505,9 +1505,6 @@ local function CalcFrameGeo( nPartId, nOutlineId, nOutlineCrvNbr, nOutlineLayerI
-- creo layer per ingombro
local nGeoLayerId = EgtGroup( nPartId)
EgtSetName( nGeoLayerId, WIN_GEO)
if s_bCalcPreview then
EgtSetStatus( nGeoLayerId, GDB_ST.OFF)
end
-- recupero outline precedenti e successivi ( solo nel caso di split possono essere più di uno)
local vPrevOutlineId, vNextOutlineId = GetPrevNextOutline( nProfileType, nOutlineId, nOutlineLayerId)
@@ -2554,79 +2551,69 @@ end
----------------------------------------------------------------------------------
--------------------------------- PREVIEW ----------------------------------------
----------------------------------------------------------------------------------
local function CalcBottomRailPreview( nPreviewGrp, nOutlineId, nProfileGrp)
local nBottomRail = EgtGetInfo( nOutlineId, WIN_BOTTOMRAIL, 'i') or 0
if nBottomRail == 0 then
return
end
local nGrp = EgtGroup( nPreviewGrp)
local function CalcBottomRailPreview( nPreviewGrp, nOutlineId, nBottomRail, nProfileGrp, nGeoGrp, color)
-- costruisco box complessivo degli zoccoli
local nProfileId = EgtGetFirstNameInGroup( nProfileGrp, WIN_PRF_MAIN)
local b3Profile = GetProfileLocalBox( nProfileId)
local nOutId = EgtCopyGlob( nOutlineId, nGrp)
EgtOffsetCurve( nOutId, b3Profile:getMin():getX())
local vCrvs = {}
-- la curva out corrisponde al geo in del pezzo bottom
local nPartGeoIn = EgtGetFirstNameInGroup( nGeoGrp, WIN_GEO_IN)
vCrvs[1] = EgtCopyGlob( nPartGeoIn, nPreviewGrp)
local vNextOutlines = EgtGetInfo( nOutlineId, WIN_NEXT_OUTLINES, 'vi')
local vEndProfiles = EgtGetNameInGroup( nProfileGrp, WIN_PRF_END)
local nRightId = EgtCopyGlob( vNextOutlines[1], nGrp)
local b3ProfileEnd = GetProfileLocalBox( vEndProfiles[1])
EgtOffsetCurve( nRightId, b3ProfileEnd:getMin():getX())
vCrvs[2] = EgtCopyGlob( vNextOutlines[1], nPreviewGrp)
EgtOffsetCurve( vCrvs[2], b3ProfileEnd:getMin():getX())
local nInId = EgtCopyGlob( nOutlineId, nGrp)
local dDelta1 = EgtGetInfo( nProfileId, WIN_RAILDELTA .. '1', 'd')
local dDelta2 = EgtGetInfo( nProfileId, WIN_RAILDELTA .. '2', 'd')
local dOffs = dDelta1 + ( nBottomRail - 1) * dDelta2
local nProfileLayer = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_PROFILE)
local nAreaLayer = EgtGetParent( EgtGetParent( nOutlineId))
local nAreaType = EgtGetInfo( nAreaLayer, WIN_AREATYPE, 'i')
local nFrameProfileLayer = EgtGetFirstNameInGroup( nProfileLayer, EgtIf( nAreaType == WIN_AREATYPES.FRAME, WIN_FRAME, WIN_SASH))
local nBottomRailProfile = EgtGetFirstNameInGroup( nFrameProfileLayer, WIN_FILL_RAIL)
local b3ProfileRail = GetProfileLocalBox( nBottomRailProfile)
EgtOffsetCurve( nInId, - dOffs + b3ProfileRail:getMin():getX())
-- la curva in corrisponde al geo in dell'ultimo bottomrail
local vBottomRails = EgtGetInfo( nOutlineId, WIN_REF_BOTTOMRAIL_PART, 'vi')
local nBottomRailPart = vBottomRails[#vBottomRails]
local nGeoLayer = EgtGetFirstNameInGroup( nBottomRailPart, WIN_GEO)
local nGeoIn = EgtGetFirstNameInGroup( nGeoLayer, WIN_GEO_IN)
vCrvs[3] = EgtCopyGlob( nGeoIn, nPreviewGrp)
local vPrevOutlines = EgtGetInfo( nOutlineId, WIN_PREV_OUTLINES, 'vi')
local vStartProfiles = EgtGetNameInGroup( nProfileGrp, WIN_PRF_START)
local nLeftId = EgtCopyGlob( vPrevOutlines[1], nGrp)
local b3ProfileStart = GetProfileLocalBox( vStartProfiles[1])
EgtOffsetCurve( nLeftId, b3ProfileStart:getMin():getX())
TrimAndOrientOrderedCurves( EgtGetAllInGroup( nGrp), true)
-- creo il bordo e la regione
local nAreaId = CreateGeoArea( nGrp, nPreviewGrp, true)
local nCrvId = EgtGetPrev( nAreaId or GDB_ID.NULL) or GDB_ID.NULL
vCrvs[4] = EgtCopyGlob( vPrevOutlines[1], nPreviewGrp)
EgtOffsetCurve( vCrvs[4], b3ProfileStart:getMin():getX())
-- creo il bordo
TrimAndOrientOrderedCurves( vCrvs, true)
local nCrvId = EgtCurveCompo( nPreviewGrp, vCrvs, false)
EgtSetColor( nCrvId, EgtStdColor( 'BLACK'))
EgtModifyCurveThickness( nCrvId, 0)
-- creo la regione
local nAreaId = EgtSurfFlatRegion( nPreviewGrp, {nCrvId})
EgtSetColor( nAreaId, color)
EgtRelocateGlob( nCrvId, nAreaId, GDB_IN.AFTER)
-- creo linee di divisione tra gli zoccoli
if nBottomRail > 1 then
local dLen = EgtCurveLength( nOutId)
local dLen = EgtCurveLength( vCrvs[1])
local dStep = 1 / nBottomRail
for i = 1, nBottomRail - 1 do
local pt = EgtUP( nLeftId, i * dStep)
local pt = EgtUP( vCrvs[4], i * dStep)
local nCrvId = EgtLinePVL( nPreviewGrp, pt, X_AX(), dLen)
EgtSetColor( nCrvId, EgtStdColor( 'BLACK'))
end
end
EgtErase( nGrp)
EgtErase( vCrvs)
end
----------------------------------------------------------------------------------
local function CalcPreview( nPartId, nOutlineId)
-- creo gruppo per la preview
local nPreviewGrp = EgtGroup( nPartId)
EgtSetName( nPreviewGrp, WIN_PREVIEW)
local nGrpTmp = EgtGroup( nPreviewGrp)
local function CalcPartPreview( nPartId, nPreviewGrp)
local nOutlineId = EgtGetInfo( nPartId, WIN_REF_OUTLINE, 'i')
local nGeoGrp = EgtGetFirstNameInGroup( nPartId, WIN_GEO)
local nProfileGrp = EgtGetFirstNameInGroup( nPartId, WIN_PROFILE)
-- curva out
-- è il geo out tranne nel caso di sash active/inactive per le quali considero l'outline per evitare sovrapposizioni
-- gruppo temporaneo per i conti
local nGrpTmp = EgtGroup( nPreviewGrp)
-- curva out è il geo out tranne nel caso di sash active/inactive per le quali considero l'outline per evitare sovrapposizioni
local nBaseOutlineId = EgtGetInfo( nOutlineId, WIN_COPY, 'i')
local bOnSplit = EgtGetInfo( nBaseOutlineId, WIN_CRV_ON_FRENCH_SPLIT, 'b')
if bOnSplit then
@@ -2688,26 +2675,58 @@ local function CalcPreview( nPartId, nOutlineId)
-- creo il bordo e la regione
local nAreaId = CreateGeoArea( nGrpTmp, nPreviewGrp, true)
local color = EgtGetColor( nPartId)
EgtSetColor( nAreaId, color)
local nCrvId = EgtGetPrev( nAreaId or GDB_ID.NULL) or GDB_ID.NULL
EgtRelocateGlob( nCrvId, nAreaId, GDB_IN.AFTER)
EgtSetColor( nCrvId, EgtStdColor( 'BLACK'))
EgtModifyCurveThickness( nCrvId, 0)
EgtErase( nGrpTmp)
-- se bottom aggiungo anche eventuale preview del bottomrail
if EgtGetName( nOutlineId) == WIN_BOTTOM then
CalcBottomRailPreview( nPreviewGrp, nOutlineId, nProfileGrp)
local nBottomRail = EgtGetInfo( nOutlineId, WIN_BOTTOMRAIL, 'i') or 0
if nBottomRail > 0 then
CalcBottomRailPreview( nPreviewGrp, nOutlineId, nBottomRail, nProfileGrp, nGeoGrp, color)
end
end
end
----------------------------------------------------------------------------------
local function CalcFillPreview( nPartId, nOutlineLayerId)
-- creo layer per preview
local nGrp = EgtGroup( nPartId)
EgtSetName( nGrp, WIN_PREVIEW)
-- creo compo di outline
local function CalcFillPreview( nPartId, nPreviewGrp)
-- creo bordo a partire dall'outline
local nAreaId = EgtGetInfo( nPartId, WIN_AREA, 'i')
local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_OUTLINE)
local vOutlineList = EgtGetAllInGroup( nOutlineLayerId)
local nCompoOutlineId = EgtCurveCompoByChain( nGrp, vOutlineList, EgtSP( vOutlineList[1]), false)
local nCompoOutlineId = EgtCurveCompoByChain( nPreviewGrp, vOutlineList, EgtSP( vOutlineList[1]), false)
-- creo area
local nSurfId = EgtSurfFlatRegion( nGrp, {nCompoOutlineId})
local nSurfId = EgtSurfFlatRegion( nPreviewGrp, {nCompoOutlineId})
EgtSetColor( nSurfId, EgtGetColor( nPartId))
EgtErase( nCompoOutlineId)
end
----------------------------------------------------------------------------------
local function CalcPreview( nFrameId)
-- creo gruppo per la preview
local nPreviewGrp = EgtGroup( GDB_ID.ROOT)
EgtSetName( nPreviewGrp, WIN_PREVIEW)
EgtSetLevel( nPreviewGrp, GDB_LV.SYSTEM)
EgtSetStatus( nPreviewGrp, GDB_ST.OFF)
-- scorro tutti i pezzi e ne realizzo la preview
local nPartId = EgtGetFirstPart()
while nPartId do
local nPartType = EgtGetInfo( nPartId, WIN_PART_TYPE, 'i') or WIN_PART_TYPES.NULL
if nPartType == WIN_PART_TYPES.FILL then
CalcFillPreview( nPartId, nPreviewGrp)
elseif nPartType == WIN_PART_TYPES.BOTTOMRAIL then
-- pezzo di bottomrail viene ignorato perchè già creato con il corrispondente pezzo bottom
else
CalcPartPreview( nPartId, nPreviewGrp)
end
nPartId = EgtGetNextPart( nPartId)
end
end
@@ -3664,6 +3683,7 @@ local function CreatePartFromOutline( nAreaLayerId, sName, nOutlineId, nOutlineC
local vBottomRailParts = EgtGetInfo( nOutlineId, WIN_REF_BOTTOMRAIL_PART, 'vi') or {}
table.insert( vBottomRailParts, nPartId)
EgtSetInfo( nOutlineId, WIN_REF_BOTTOMRAIL_PART, vBottomRailParts)
EgtSetInfo( nPartId, WIN_PART_TYPE, WIN_PART_TYPES.BOTTOMRAIL)
else
EgtSetInfo( nOutlineId, WIN_REF_PART, nPartId)
end
@@ -3695,10 +3715,6 @@ local function CreatePartFromOutline( nAreaLayerId, sName, nOutlineId, nOutlineC
CalcProfilingProcessings( nPartId, nOutlineId)
-- calcolo il georaw per automatismo lavorazioni
CalcGeoRaw( nPartId)
-- disegno preview 2D del pezzo
if s_bCalcPreview and not nBottomRail then
CalcPreview( nPartId, nOutlineId)
end
-- disegno solido
if s_bCalcSolid then
CalcSolid( nPartId, nOutlineId)
@@ -3708,7 +3724,7 @@ local function CreatePartFromOutline( nAreaLayerId, sName, nOutlineId, nOutlineC
elseif nAreaType == WIN_AREATYPES.FILL then
-- imposto nome del pezzo
EgtSetName( nPartId, sName .. '_' .. WIN_FILL)
EgtSetInfo( nPartId, WIN_PART_TYPE, WIN_PART_TYPES.FILL)
-- ricavo tipo
local nFillType = EgtGetInfo( nAreaLayerId, WIN_FILLTYPE, 'i')
@@ -3724,10 +3740,6 @@ local function CreatePartFromOutline( nAreaLayerId, sName, nOutlineId, nOutlineC
-- disegno ingombro
local nGeoLayerId = CalcFillGeo( nPartId, nOutlineLayerId)
-- disegno preview 2D
if s_bCalcPreview then
CalcFillPreview( nPartId, nOutlineLayerId)
end
-- disegno solido
if s_bCalcSolid then
CalcFillSolid( nPartId, nOutlineLayerId, nGeoLayerId)
@@ -5734,6 +5746,11 @@ function WinCalculate.CreatePartFromArea( nFrameId)
CalculateAreaParts( nFrameId)
-- calcolo le spine
CalculateAreaDowels( nFrameId)
-- calcolo preview 2d se richiesta
if s_bCalcPreview then
CalcPreview( nFrameId)
end
end
---------------------------------------------------------------------