From 60a258353cb7df7aba4bbeaca117143cb56934af Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 7 Jun 2024 11:41:43 +0200 Subject: [PATCH 1/5] Aggiunto "Profilo78 - Offset - Copy (44)" con info profili per automatismo --- Profiles/Profilo78 - Offset - Copy (44).nge | Bin 0 -> 23218 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Profiles/Profilo78 - Offset - Copy (44).nge diff --git a/Profiles/Profilo78 - Offset - Copy (44).nge b/Profiles/Profilo78 - Offset - Copy (44).nge new file mode 100644 index 0000000000000000000000000000000000000000..d107993aa012de1115aea2565cdaeb6427aa391a GIT binary patch literal 23218 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 pgzDxtc)pVm`sJl3QPX Date: Mon, 10 Jun 2024 09:13:18 +0200 Subject: [PATCH 2/5] - aggiunte lavorazioni - gestione della ferramenta anche senza il calcolo del solido. --- Profiles/WinConst.lua | 18 +++ Profiles/WinLib/WinCalculate.lua | 202 ++++++++++++++++++++++--------- 2 files changed, 160 insertions(+), 60 deletions(-) diff --git a/Profiles/WinConst.lua b/Profiles/WinConst.lua index 6a76ddd..4d59ec7 100644 --- a/Profiles/WinConst.lua +++ b/Profiles/WinConst.lua @@ -148,6 +148,7 @@ WIN_STRIP = 'Strip' WIN_ALU = 'Alu' WIN_CTRIN = 'CtrIn' WIN_OUT = 'Out' +WIN_IN = 'In' WIN_OUTOFST = 'OfstOut' WIN_CTRINOFST = 'OfstCtrIn' WIN_OFST = 'Ofst' @@ -159,6 +160,7 @@ WIN_STARTCPDELTA = 'StartCPDelta' WIN_ENDCPDELTA = 'EndCPDelta' WIN_GEOWIDTH = 'GeoWidth' WIN_GLASSTHICKNESS = 'GlassThickness' +WIN_SEMI_PROFILE = 'SemiProfileId' WIN_GEOOUTLINEBOTTOM = 'GeoOutlineBottom' @@ -200,6 +202,13 @@ WIN_GAPDELTAZ = 'GapDeltaZ' WIN_GAPDELTAIN = 'GapDeltaIn' WIN_GAPDELTAOUT = 'GapDeltaOut' +WIN_PRC_PHASE = 'PHASE' +WIN_PRC_PROFILE_TYPE = 'PROFILE_TYPE' +WIN_PRC_NTOOLS = 'NTOOLS' +WIN_PRC_TOOL_NAME = 'TOOL_NAME' +WIN_PRC_OFFL = 'OFFL' +WIN_PRC_OFFR = 'OFFR' + WIN_MAINGUIDE = 'MainGuide' WIN_STARTGUIDE = 'StartGuide' WIN_ENDGUIDE = 'EndGuide' @@ -210,6 +219,15 @@ WIN_SRF_END = 'EndSurface' WIN_BOTTOMRAIL = 'BottomRail' +WIN_PRC = 'Processings' +WIN_PRC_FEATURE_TYPE = 'FEATURE_TYPE' +WIN_PRC_TYPE = { + HOLE = 'Hole', + PROFILING = 'Profiling', + POCKET = 'Pocket', + CUT = 'Cut' +} + WIN_DOWEL = 'Dowel' WIN_DWL_TOPPERPSTART = 'TopPerpStart' WIN_DWL_TOPPERPEND = 'TopPerpEnd' diff --git a/Profiles/WinLib/WinCalculate.lua b/Profiles/WinLib/WinCalculate.lua index 34cdea1..039a3cf 100644 --- a/Profiles/WinLib/WinCalculate.lua +++ b/Profiles/WinLib/WinCalculate.lua @@ -28,6 +28,13 @@ function WinCalculate.SetCalcSolid( bValue) bCalcSolid = bValue end +--------------------------------------------------------------------- +-- funzione che copia la info di chiave sInfo da nSou a nDest +local function CopyInfo( nDest, nSou, sInfo) + local sVal = EgtGetInfo( nSou, sInfo) + EgtSetInfo( nDest, sInfo, sVal) +end + --------------------------------------------------------------------- -- funzione che dato un gruppo contenente curve ordinate che creano una curva chiusa, -- ne estende/taglia i contorni per ottenere una curva chiusa continua @@ -777,15 +784,12 @@ local function GetProfileCtrIn( nProfileType, nPrevOutlineId, nOutlineId, nPrevP end --------------------------------------------------------------------- -local function GetDeltaProfile( nProfileType, nPrevOutlineId, nOutlineId) - -- recupero il profilo dell'outline precedente - local nPrevProfileId = GetOutlineProfileId( nPrevOutlineId, nProfileType == WIN_PRF.SPLIT) - local sCtrIn = GetProfileCtrIn( nProfileType, nPrevOutlineId, nOutlineId, nPrevProfileId) +local function GetDeltaProfile( nProfileId, sCtrIn) local dCPDelta = 0 - local nSectionFrId = EgtGetFirstNameInGroup( nPrevProfileId, WIN_SECTIONFRAME) + local nSectionFrId = EgtGetFirstNameInGroup( nProfileId, WIN_SECTIONFRAME) local frSectionFrame = EgtFR( nSectionFrId) - local nCPId = EgtGetFirstNameInGroup( nPrevProfileId, sCtrIn) + local nCPId = EgtGetFirstNameInGroup( nProfileId, sCtrIn) local b3CP = EgtGetBBoxRef( nCPId, GDB_BB.STANDARD, frSectionFrame) if sCtrIn == WIN_CTRIN .. 1 then dCPDelta = abs( b3CP:getMin():getX()) @@ -812,15 +816,20 @@ local function CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStar local nCurrCurveId = EgtCopy( nOutlineId, nGeoLayerId) EgtOffsetCurve( nCurrCurveId, dCurrOffset) EgtSetName( nCurrCurveId, WIN_GEO_OUT) + local nSemiProfileOut = EgtGetFirstNameInGroup( nCurrProfileId, WIN_OUT) or EgtGetFirstNameInGroup( nCurrProfileId, WIN_IN .. '1') + EgtSetInfo( nCurrCurveId, WIN_SEMI_PROFILE, nSemiProfileOut) -- cruva in local nCurrOffsetId = EgtCopy( nOutlineId, nGeoLayerId) EgtOffsetCurve( nCurrOffsetId, dCurrOffset - b3CurrProfileFrame:getDimX()) EgtInvertCurve( nCurrOffsetId) EgtSetName( nCurrOffsetId, WIN_GEO_IN) + local nSemiProfileIn = EgtGetFirstNameInGroup( nCurrProfileId, WIN_IN) or EgtGetFirstNameInGroup( nCurrProfileId, WIN_IN .. '2') + EgtSetInfo( nCurrOffsetId, WIN_SEMI_PROFILE, nSemiProfileIn) -- curva left local nPrevCurveId + local nPrevSemiProfile if nStartPartJointType == WIN_PART_JNT.ANGLED then -- calcolo la bisettrice local vtMedia = ( ( EgtSV( nOutlineId) - EgtEV( nPrevOutlineId)) / 2) @@ -832,16 +841,24 @@ local function CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStar EgtInvertCurve( nPrevCurveId) else nPrevCurveId = EgtCopy( nPrevOutlineId, nGeoLayerId) + local nPrevProfileId = GetOutlineProfileId( nPrevOutlineId, nProfileType == WIN_PRF.SPLIT) if nStartPartJointType == WIN_PART_JNT.SHORT then - local dPrevCPDelta = GetDeltaProfile( nProfileType, nPrevOutlineId, nOutlineId) + local sCtrIn = GetProfileCtrIn( nProfileType, nPrevOutlineId, nOutlineId, nPrevProfileId) + local dPrevCPDelta = GetDeltaProfile( nPrevProfileId, sCtrIn) EgtOffsetCurve( nPrevCurveId, - dPrevCPDelta) EgtSetInfo( nGeoLayerId, WIN_STARTCPDELTA, dPrevCPDelta) + -- ricavo il semiprofilo associato + nPrevSemiProfile = EgtGetFirstNameInGroup( nPrevProfileId, sCtrIn) + else + nPrevSemiProfile = EgtGetFirstNameInGroup( nPrevProfileId, WIN_OUT) end end EgtSetName( nPrevCurveId, WIN_GEO_LEFT) + EgtSetInfo( nPrevCurveId, WIN_SEMI_PROFILE, nPrevSemiProfile) -- curva right local nNextCurveId + local nNextSemiProfile if nEndPartJointType == WIN_PART_JNT.ANGLED then -- calcolo la bisettrice local vtMedia = ( ( EgtSV( nNextOutlineId) - EgtEV( nOutlineId)) / 2) @@ -852,13 +869,20 @@ local function CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStar nNextCurveId = EgtLinePVL( nGeoLayerId, EgtEP( nOutlineId), vtMedia, 3 * b3CurrProfileFrame:getDimX()) else nNextCurveId = EgtCopy( nNextOutlineId, nGeoLayerId) + local nNextProfileId = GetOutlineProfileId( nNextOutlineId, nProfileType == WIN_PRF.SPLIT) if nEndPartJointType == WIN_PART_JNT.SHORT then - local dNextCPDelta = GetDeltaProfile( nProfileType, nNextOutlineId, nOutlineId) + local sCtrIn = GetProfileCtrIn( nProfileType, nNextOutlineId, nOutlineId, nNextProfileId) + local dNextCPDelta = GetDeltaProfile( nNextProfileId, sCtrIn) EgtOffsetCurve( nNextCurveId, - dNextCPDelta) EgtSetInfo( nGeoLayerId, WIN_ENDCPDELTA, dNextCPDelta) + -- ricavo il semiprofilo associato + nNextSemiProfile = EgtGetFirstNameInGroup( nNextProfileId, sCtrIn) + else + nNextSemiProfile = EgtGetFirstNameInGroup( nNextProfileId, WIN_OUT) end end EgtSetName( nNextCurveId, WIN_GEO_RIGHT) + EgtSetInfo( nNextCurveId, WIN_SEMI_PROFILE, nNextSemiProfile) -- riordino le curve per eseguire correttamente il trim EgtRelocateGlob( nNextCurveId, nCurrCurveId, GDB_IN.AFTER) @@ -875,6 +899,42 @@ local function CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStar return nCurrCurveId end +--------------------------------------------------------------------- +-- funzione che calcola le lavorazioni di profiling +local function CalcProfilingProcessings( nPartId, nGeoLayerId) + + -- creo gruppo delle lavorazioni + local nProcGrp = EgtGroup( nPartId) + EgtSetName( nProcGrp, WIN_PRC) + + -- recupero tutte le curve del geo + local vGeoCrvs = EgtGetAllInGroup( nGeoLayerId) + for i = 1, #vGeoCrvs do + -- copio curva + local nCrv = EgtCopyGlob( vGeoCrvs[i], nProcGrp) + + -- recupero il semiprofilo associato + local nSemiProfile = EgtGetInfo( nCrv, WIN_SEMI_PROFILE, 'i') + if nSemiProfile then + -- setto info di lavorazione + EgtSetInfo( nCrv, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.PROFILING) + -- recupero le info di lavorazione dal semiprofilo + CopyInfo( nCrv, nSemiProfile, WIN_PRC_PHASE) + CopyInfo( nCrv, nSemiProfile, WIN_PRC_PROFILE_TYPE) + local nTools = EgtGetInfo( nSemiProfile, WIN_PRC_NTOOLS , 'i') or 0 + EgtSetInfo( nCrv, WIN_PRC_NTOOLS, nTools) + for j = 1, nTools do + CopyInfo( nCrv, nSemiProfile, WIN_PRC_TOOL_NAME .. '_' .. tostring(j)) + CopyInfo( nCrv, nSemiProfile, WIN_PRC_OFFL .. '_' .. tostring(j)) + CopyInfo( nCrv, nSemiProfile, WIN_PRC_OFFR .. '_' .. tostring(j)) + end + else + -- se non ha semiprofilo associato è un taglio + EgtSetInfo( nCrv, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.CUT) + end + end +end + --------------------------------------------------------------------- -- funzione che calcola l'ingombro dei pezzi del telaio local function CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, bBottomRail) @@ -927,6 +987,9 @@ local function CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, bBottomRail) -- creo lati dell'outline local nGeoOutId = CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStartPartJointType, nEndPartJointType, nProfileType, nGeoLayerId, bBottomRail) + + -- calcolo le lavorazioni associate ai profili + CalcProfilingProcessings( nPartId, nGeoLayerId) return nGeoOutId end @@ -1014,6 +1077,8 @@ local function AddStartDowels( nOutlineId, nPrevOutlineId, StartJointType, nMain EgtMove( nDowelId, dStart * vtRef) EgtModifyCurveExtrusion( nDowelId, vtRef) EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) -- creo solido di estrusione local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, vtRef * ( dEnd - dStart + 1)) EgtMove( nDowelExtrusionId, - vtRef) @@ -1079,6 +1144,8 @@ local function AddStartDowels( nOutlineId, nPrevOutlineId, StartJointType, nMain EgtMove( nDowelId, vtRef * dStart) EgtModifyCurveExtrusion( nDowelId, vtRef) EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) -- creo solido di estrusione local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, vtRef * ( dEnd - dStart + 1)) EgtMove( nDowelExtrusionId, - vtRef) @@ -1136,6 +1203,8 @@ local function AddEndDowels( nOutlineId, nEndOutlineId, EndJointType, nMainProfi EgtMove( nDowelId, - vtRef * dStart) EgtModifyCurveExtrusion( nDowelId, - vtRef) EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) -- creo solido di estrusione local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, - vtRef * ( dEnd - dStart + 1)) EgtMove( nDowelExtrusionId, vtRef) @@ -1200,6 +1269,8 @@ local function AddEndDowels( nOutlineId, nEndOutlineId, EndJointType, nMainProfi EgtMove( nDowelId, - vtRef * dStart) EgtModifyCurveExtrusion( nDowelId, - vtRef) EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) -- creo solido di estrusione local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, - vtRef * ( dEnd - dStart + 1)) EgtMove( nDowelExtrusionId, vtRef) @@ -1448,7 +1519,7 @@ local function CalSplitDowel( nSplitLayerId, nOutlineId, nProfileType, nPartId) local nMainExtrusionId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_SRF_MAIN) -- creo fori per spine su Split - local nDowelLayerId = EgtGetFirstNameInGroup( nPartId, WIN_DOWEL) + local nProcLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) -- recupero profondita' d'inizio e fine local sStart = WIN_DWL_TOPPERPSTART @@ -1488,13 +1559,16 @@ local function CalSplitDowel( nSplitLayerId, nOutlineId, nProfileType, nPartId) if not dEnd then dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPEND, 'd') end - local nDowelId = EgtCopyGlob( nOrigDowelId, nDowelLayerId) + local nDowelId = EgtCopyGlob( nOrigDowelId, nProcLayerId) EgtSetColor( nDowelId, Color3d( 128, 128, 128)) -- posiziono il dowel e gli assegno estrusione e spessore EgtMove( nDowelId, vtDowelDir * dStart) EgtModifyCurveExtrusion( nDowelId, vtDowelDir) EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) + -- creo solido di estrusione local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, vtDowelDir * ( dEnd - dStart + 1)) EgtMove( nDowelExtrusionId, - vtDowelDir) @@ -1552,13 +1626,13 @@ end -- funzione che crea il solido del pezzo del telaio local function CalcFrameSolid( nPartId, nOutlineId, nGeoId, nOutlineLayerId, bBottomRail) - -- creo layer per solido, per profili di estrusione e per i fori per spine + -- creo layer per solido e per profili di estrusione local nSolidLayerId = EgtGroup( nPartId) EgtSetName( nSolidLayerId, WIN_SOLID) local nFrameProfileLayerId = EgtGroup( nPartId) EgtSetName( nFrameProfileLayerId, WIN_PROFILE) - local nDowelLayerId = EgtGroup( nPartId) - EgtSetName( nDowelLayerId, WIN_DOWEL) + -- recupero layer delle lavorazioni per i dowels + local nProcLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) -- ricavo tipo di profilo local nProfileType = GetOutlineProfileType( nOutlineId, bBottomRail) @@ -1587,7 +1661,7 @@ local function CalcFrameSolid( nPartId, nOutlineId, nGeoId, nOutlineLayerId, bBo EgtSetName( nEndProfileId, WIN_PRF_END) -- creo solido dai profili - MakeSolidByExtrusion( nGeoId, nOutlineId, nMainProfileId, nStartProfileId, nEndProfileId, nProfileType, nSolidLayerId, nDowelLayerId) + MakeSolidByExtrusion( nGeoId, nOutlineId, nMainProfileId, nStartProfileId, nEndProfileId, nProfileType, nSolidLayerId, nProcLayerId) -- aggiungo dowels degli split AddSplitDowels( nOutlineId, nOutlineLayerId, nPartId, nProfileType) @@ -1655,14 +1729,14 @@ local function CreatePartFromOutline( nAreaLayerId, nOutlineId, bBottomRail) if nAreaType == WIN_AREATYPES.FRAME or nAreaType == WIN_AREATYPES.SASH or nAreaType == WIN_AREATYPES.SPLIT then -- disegno ingombro - local nGeoId = CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, bBottomRail) + local nGeoId = CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, bBottomRail) -- disegno solido if bCalcSolid then - CalcFrameSolid( nPartId, nOutlineId, nGeoId, nOutlineLayerId, bBottomRail) + CalcFrameSolid( nPartId, nOutlineId, nGeoId, nOutlineLayerId, bBottomRail) end elseif nAreaType == WIN_AREATYPES.FILL then -- disegno ingombro - local nGeoLayerId = CalcFillGeo( nPartId, nOutlineLayerId) + local nGeoLayerId = CalcFillGeo( nPartId, nOutlineLayerId) -- disegno solido if bCalcSolid then CalcFillSolid(nPartId, nOutlineLayerId, nGeoLayerId) @@ -2068,7 +2142,7 @@ local function SearchSash( nAreaId, SashList) local dFrameGapDeltaZ = EgtGetInfo( nFrameProfileTypeId, WIN_GAPDELTAZ, 'd') local nOutlineOutId = EgtCopy( nSouId, nOutlineOffsetLayerId) EgtSetName( nOutlineOutId, 'Frame') - EgtOffsetCurve( nOutlineOutId, - dGapDeltaOut) + EgtOffsetCurve( nOutlineOutId, - dGapDeltaOut) -- prendo la proiezione _, ptOrig = EgtPointCurveDist( ptOrig, nOutlineOutId) -- recupero DeltaZ2 @@ -2087,7 +2161,7 @@ local function SearchSash( nAreaId, SashList) local dGapDeltaZ2 = b3SashProfileType:getDimY() local nFT3Id = EgtFrame( nFrameFrameLayerId, Frame3d( ptOrig - dGapDeltaZ2 * Z_AX(), - vtDir, vtDir ^ -Z_AX() , -Z_AX())) EgtSetName( nFT3Id, sOrigName .. '.FT3') - table.insert( tFrame, nFT3Id) + table.insert( tFrame, nFT3Id) end end tSash.Frame = tFrame @@ -2230,7 +2304,7 @@ function WinCalculate.AddHardware( nFrameId) local nSashId = SashList[nSashIndex].nAreaId local nOutlineLayerId = EgtGetFirstNameInGroup( nSashId, WIN_OUTLINE) local vOutlineIds = EgtGetAllInGroup( nOutlineLayerId) - local nA = string.byte('A') + local nA = string.byte('A') local nSashPart = string.byte(sSashPart) local nOutlineIndex = #vOutlineIds - (nSashPart - nA) local nOutlineId = vOutlineIds[nOutlineIndex] @@ -2258,12 +2332,10 @@ function WinCalculate.AddHardware( nFrameId) frHdwFrame = EgtFR( nHdwFrameId) end local vMacro = EgtSplitString( sMacro, '_') - local nPartHdwLayerId = EgtGetFirstNameInGroup( nPartId, WIN_HARDWARE) - if not nPartHdwLayerId then - nPartHdwLayerId = EgtGroup( nPartId) - EgtSetName( nPartHdwLayerId, WIN_HARDWARE) - end - local nSolidLayerId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) + local nProcLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) + + -- recupero solido ( se non calcolato non vengono utilizzate) + local nSolidLayerId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) or GDB_ID.NULL local nMainExtrusionId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_SRF_MAIN) local nOrigMainId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_SRF_ORIGMAIN) @@ -2273,31 +2345,37 @@ function WinCalculate.AddHardware( nFrameId) local dLength = tonumber( vMacro[2]) local dWidth = tonumber( vMacro[3]) local dHeight = tonumber( vMacro[4]) - local dExtra = 1 -- per non avere geometrie a filo nelle operazioni booleane - local nRSideId = EgtLine( nPartHdwLayerId, ptCenter - dLength / 2 * X_AX() - dExtra * Y_AX(), ptCenter + dLength / 2 * X_AX() - dExtra * Y_AX()) - local nTSideId = EgtLine( nPartHdwLayerId, EgtEP( nRSideId), EgtEP( nRSideId) + dExtra * Y_AX()) - local vtEnd = EgtEV( nRSideId) - vtEnd:rotate( Z_AX(), 90) - local nTChamferId = EgtArc2PV( nPartHdwLayerId, EgtEP( nTSideId), EgtEP( nTSideId) - dWidth * X_AX() + dWidth * Y_AX() , vtEnd) - local nLSideId = EgtLine( nPartHdwLayerId, EgtEP( nTChamferId), EgtEP( nTChamferId) - ( dLength - 2 * dWidth) * X_AX()) - vtEnd = EgtEV( nLSideId) - local nBChamferId = EgtArc2PV( nPartHdwLayerId, EgtEP( nLSideId), EgtEP( nLSideId) - dWidth * X_AX() - dWidth * Y_AX(), vtEnd) - local nBSideId = EgtLine( nPartHdwLayerId, EgtEP( nBChamferId), EgtSP( nRSideId)) - -- per lavorazione - local nMachPocketId = EgtCurveCompo( nPartHdwLayerId, { nTChamferId, nLSideId, nBChamferId}, false) - EgtModifyCurveExtrusion( nMachPocketId, Z_AX()) - EgtModifyCurveThickness( nMachPocketId, - dHeight) - EgtTransform( nMachPocketId, frHdwFrame) + local ptP1 = ptCenter + ( dLength / 2 - dWidth) * X_AX() + dWidth * Y_AX() + local ptP2 = ptCenter - ( dLength / 2 - dWidth) * X_AX() + dWidth * Y_AX() + local nSolidPocketOutlineId = EgtCurveCompoFromPoints( nProcLayerId, { ptP1, ptP2}) + EgtAddCurveCompoArcTg( nSolidPocketOutlineId, ptCenter - dLength / 2 * X_AX()) + EgtAddCurveCompoArcTg( nSolidPocketOutlineId, ptCenter + dLength / 2 * X_AX(), false) -- per solido - local nSolidPocketOutlineId = EgtCurveCompo( nPartHdwLayerId, { nRSideId, nTSideId, nTChamferId, nLSideId, nBChamferId, nBSideId}) - EgtMove( nSolidPocketOutlineId, dExtra * Z_AX()) - local nSolidPocketId = EgtSurfTmByRegionExtrusion( nPartHdwLayerId, nSolidPocketOutlineId, - ( dHeight + dExtra) * Z_AX()) + local nSolidPocketId + if bCalcSolid then + -- costruisco asola come volume chiuso per eseguire operazioni booleane con il solido e la creo più grande per non avere geometrie a filo + local dExtra = 1 + EgtAddCurveCompoLineTg( nSolidPocketOutlineId, dExtra) + EgtAddCurveCompoLineTg( nSolidPocketOutlineId, dExtra, false) + EgtCloseCurveCompo( nSolidPocketOutlineId) + EgtMove( nSolidPocketOutlineId, dExtra * Z_AX()) + nSolidPocketId = EgtSurfTmByRegionExtrusion( nProcLayerId, nSolidPocketOutlineId, - ( dHeight + dExtra) * Z_AX()) + EgtTransform( nSolidPocketId, frHdwFrame) + EgtSurfTmSubtract( nMainExtrusionId, nSolidPocketId) + EgtInvertSurf( nSolidPocketId) + EgtSurfTmCut( nSolidPocketId, nOrigMainId, true, false) + else + -- costruisco asola esatta + EgtTransform( nSolidPocketOutlineId, frHdwFrame) + local nStmLat = EgtSurfTmByExtrusion( nProcLayerId, nSolidPocketOutlineId, - dHeight * Z_AX()) + EgtCloseCurveCompo( nSolidPocketOutlineId) + local nStmBase = EgtSurfTmByFlatContour( nProcLayerId, nSolidPocketOutlineId) + EgtMove( nStmBase, - dHeight * Z_AX()) + nSolidPocketId = EgtSurfTmBySewing( nProcLayerId, { nStmBase, nStmLat}) + end EgtErase( nSolidPocketOutlineId) - EgtTransform( nSolidPocketId, frHdwFrame) - EgtSurfTmSubtract( nMainExtrusionId, nSolidPocketId) - EgtInvertSurf( nSolidPocketId) - EgtSurfTmCut( nSolidPocketId, nOrigMainId, true, false) - EgtSetStatus( nSolidPocketId, GDB_ST.OFF) + EgtSetColor( nSolidPocketId, EgtStdColor( 'GRAY')) + EgtSetInfo( nSolidPocketId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.POCKET) elseif vMacro[1] == 'TASCA' then elseif vMacro[1] == 'VITE' then @@ -2311,30 +2389,34 @@ function WinCalculate.AddHardware( nFrameId) dDepth = 4 end local ptCenter = Point3d( dPosX, dPosY, dPosZ) - local nHoleId = EgtCircle( nPartHdwLayerId, ptCenter, dRadius) + local nHoleId = EgtCircle( nProcLayerId, ptCenter, dRadius) EgtModifyCurveExtrusion( nHoleId, Z_AX()) - EgtModifyCurveThickness( nHoleId, -dDepth) + EgtModifyCurveThickness( nHoleId, - dDepth) EgtTransform( nHoleId, frHdwFrame) + EgtSetInfo( nHoleId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) + elseif vMacro[1] == 'FORO' then local ptCenter = Point3d( dPosX, dPosY, dPosZ) local sDiameter = EgtReplaceString( vMacro[2], 'D', '') - local dRadius = tonumber(sDiameter) / 2 - local nHoleId = EgtCircle( nPartHdwLayerId, ptCenter, dRadius) + local dRadius = tonumber( sDiameter) / 2 + local nHoleId = EgtCircle( nProcLayerId, ptCenter, dRadius) -- per lavorazione EgtModifyCurveExtrusion( nHoleId, Z_AX()) local dDepth = 25.0 if #vMacro == 3 then dDepth = tonumber( vMacro[3]) end - EgtModifyCurveThickness( nHoleId, -dDepth) + EgtModifyCurveThickness( nHoleId, - dDepth) EgtTransform( nHoleId, frHdwFrame) + EgtSetColor( nHoleId, EgtStdColor( 'GRAY')) + EgtSetInfo( nHoleId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) -- per solido - local nSolidHoleOutlineId = EgtCircle( nPartHdwLayerId, ptCenter + 0.01 * Z_AX(), dRadius) - local nSolidHoleId = EgtSurfTmByRegionExtrusion( nPartHdwLayerId, nSolidHoleOutlineId, -( dDepth + 0.01) * Z_AX()) - EgtErase( nSolidHoleOutlineId) - EgtTransform( nSolidHoleId, frHdwFrame) - EgtSurfTmSubtract( nMainExtrusionId, nSolidHoleId) - EgtSetStatus( nSolidHoleId, GDB_ST.OFF) + if bCalcSolid then + local nSolidHoleId = EgtSurfTmByRegionExtrusion( nProcLayerId, nHoleId, - ( dDepth + 1) * Z_AX()) + EgtMove( nSolidHoleId, Z_AX()) + EgtSurfTmSubtract( nMainExtrusionId, nSolidHoleId) + EgtErase( nSolidHoleId) + end end end From d2cb941412723efd49e860417327c88e887f0853 Mon Sep 17 00:00:00 2001 From: SaraP Date: Mon, 10 Jun 2024 11:24:11 +0200 Subject: [PATCH 3/5] - aggiornato file dei profili con info automatismo di "Profilo78 - Offset - Copy (44)" - sistemato profilo Fixed_Top e info dowels corrispondenti. --- Profiles/Profilo78 - Offset - Copy (45).nge | Bin 0 -> 224417 bytes Profiles/Profilo78 - Offset.nge | Bin 224417 -> 226562 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Profiles/Profilo78 - Offset - Copy (45).nge diff --git a/Profiles/Profilo78 - Offset - Copy (45).nge b/Profiles/Profilo78 - Offset - Copy (45).nge new file mode 100644 index 0000000000000000000000000000000000000000..2b1ad0636cb42763f6e8be33c33d76e764acab5e GIT binary patch literal 224417 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 Iqk7r@0pW*yf&c&j literal 0 HcmV?d00001 diff --git a/Profiles/Profilo78 - Offset.nge b/Profiles/Profilo78 - Offset.nge index 2b1ad0636cb42763f6e8be33c33d76e764acab5e..bceecb3635a93d9798ccef059a1ce57751d8d585 100644 GIT binary patch delta 3706 zcmcInZBSHI7~XS`WnmXs16x3p1vLyz;qvL|g2;!h;jVm*W-9C`CJnH3)G^uswjyZ#rX7xj*W^`)G5t6JN4VfBkXw=T#FV9_?CvKI1DnE`;i}Rq8FiOb~H&)_@rCc zMPD34iyzWq^*jb*;sly^q~f#9CT}2xR1wzN7i7~MtiC*Pq+oN6X0x%%L8g;;R~3{@ zQTd#;qp(I^Sje${w4le&u ziHk7Y`6zf}}_d`_`-A@MeF| zZBBwaMN+s*gmo}|mPVA%BRTxKS#Oynhsf(PxKEUze|I*i{|EbltX&0NHEE^XGkiz;c#c=7q zADnM%Bx@ERDHI$kfv9hSpnGdA8H}Zgvg(RST|Zq^HPn&zsaOHItyE_98k7iI>X#r6 zF0@R5)Rr_-c8??08GcusJXD-}pvcTTh#n8Xw zMpVsL17UrAotbg3emYn+Ja~p;v;9qhqFHDEEg=RuO0tHxbfW#ks1jm#HYvWfq=rs? zFnH#W;_GSf#m@0$cmkS2$_^o^WtSzgdF}b5N3LH!a|(B+-yQpxE8eM@?z-I1h1j^ZI^&n=R$6$e9aiAE5OA31Ru`@*Wdf0DKUTxmVM zuS=lF=9?a=7ki}}KQ^yq+aUO+%6fQz+*nfj8h&naN)Roa`r$%@$xviAn9Le3@X?dp z>XjOfBiq98GFW=#+~~K+;PlaJA&Kd3F_Sqk9A6FNJ{kF)@tDVVR>Sd&t8A7pXi~8J zM8;5`crW47C*oAL*$n+y2&gi@28>_{K5e=15J9&0Mgusl}i&0z`lpjJ&Vcb zH_-1R4D})sd=s4|=l?(+$Cr-%BA$Mcr*(LmCvmtg4$gYT1DL2`d%+u%@I2K*Rv0Wj ztj0uLqSNn9K;+9I97=9C<3Lg#jcZAJ84e=4LaZbYqw#Fg+d_Y8V{pE3V;~8wSjI=? zI-Bb@>)8;@?xk2yaJiElOG9F=IA*w@~O z5#LGOYqN_zvJC&?18WrHpj{nAhIZjF2QOMSi?`Zc6Xuk^r$iBa&TgDFN?sll7Ym8+ z{LGyf?_9XU5`sA)vw`ir_v$IaMN48~v*jQxkpw}1R|vo5KRkKu|L=7U^8f$< delta 1349 zcmZvce@s(X6vy9rrLQf0^v8-8N1?4wZ3G1=3XDq8EKIVwc39MHI*KO5{lH;ln;52@ z6ph7DbZl?{TL>OqNtaake4;|)7&xhYAMOk(7Bv(c$Sb%{T20!#AU}}vGE8bCJWlc5l z_(4TeRk&h~9xt7ep=E0(nx0|M<@e&~8w_o#!jtTDbnaK+L%)?cvuFkjsvPJ}VX^+bm)*)%%(n@rnmkJxjWVA@=$n=Rzk&!O;PwlJ5t8H0i zA`WI?P-Vr63k)&`T`e!rGAun=c6pW%M~;NS{uUkP@3J+qj6e)~vq`!e3bBHn zhWUCG>b&u!Vie@jA)EYkJlEj;AtpROq8^}C*x;4oFMD$30(RveU)b|Vr-s&p2TNHq zx_zydF{Q8av+MochWSOy{?z{79d3}KJmKhhEkC*r8=M=}=-r(l%=~+c*^rSK40hOU z6URg4sC>H1Dw(P)U26i~3aapV!nnPh=vvc3CH;m=Jsgm2~9mf$z%;qbyJBsae~5F_50 zOwQ$>r^RF|qW0J~;kfbmO$;sCf`%>yUg#W(?l+M*0STC6`x&jz6G;nbPPC z$vJ~?AeBR)CLsgFlQ-9ao?n>+Yoy|ZB<^d%gOT-uYj7s4lZsWeYy)-VJdC?&9pBXsn-pT5Sc&7^O1|PK$nu0Pd}Q!h z*g(qfz#8(^Ex1g^Y_OPg{{|DJ_YT}7T?KHFueu9%2&Y6y-Tbd1s97HVjqu-P)A{-- z7~BoCod3W{M;Lg4;gwmF7JloL7GALE9}!RI|7oU|Ml9`LPHiddd)%Vpulz_)GyR{2 Ve|79h-QD~27R4mZd5I)@^S{!%@&^C_ From 2209ad241528f76bd5822a58c2c69526977ecc18 Mon Sep 17 00:00:00 2001 From: SaraP Date: Mon, 17 Jun 2024 09:50:41 +0200 Subject: [PATCH 4/5] - reso il calcolo dei dowels indipendente dal calcolo del solido. --- Profiles/WinLib/WinCalculate.lua | 1128 ++++++++++++++++-------------- 1 file changed, 586 insertions(+), 542 deletions(-) diff --git a/Profiles/WinLib/WinCalculate.lua b/Profiles/WinLib/WinCalculate.lua index 039a3cf..e63a958 100644 --- a/Profiles/WinLib/WinCalculate.lua +++ b/Profiles/WinLib/WinCalculate.lua @@ -719,30 +719,6 @@ local function GetPrevNextOutline( nProfileType, nOutlineId, nOutlineLayerId) return nPrevOutlineId, nNextOutlineId end ---------------------------------------------------------------------- --- funzione che dato il tipo di pezzo e di giunzione, restituisce se e' corto, lungo o angolato -local function CalcPartJointType( nProfileType, JointType) - - if JointType == WIN_JNT.ANGLED then - return WIN_PART_JNT.ANGLED - end - if nProfileType == WIN_PRF.BOTTOMRAIL or nProfileType == WIN_PRF.SPLIT then - return WIN_PART_JNT.SHORT - elseif nProfileType == WIN_PRF.BOTTOM or nProfileType == WIN_PRF.TOP then - if JointType == WIN_JNT.FULL_H then - return WIN_PART_JNT.FULL - elseif JointType == WIN_JNT.FULL_V then - return WIN_PART_JNT.SHORT - end - elseif nProfileType == WIN_PRF.LEFT or nProfileType == WIN_PRF.RIGHT then - if JointType == WIN_JNT.FULL_V then - return WIN_PART_JNT.FULL - elseif JointType == WIN_JNT.FULL_H then - return WIN_PART_JNT.SHORT - end - end -end - --------------------------------------------------------------------- -- funzione che restituisce il tipo di controprofilo dell'outline adiacente local function GetProfileCtrIn( nProfileType, nPrevOutlineId, nOutlineId, nPrevProfileId) @@ -783,6 +759,64 @@ local function GetProfileCtrIn( nProfileType, nPrevOutlineId, nOutlineId, nPrevP return sPrevCtrIn end + +--------------------------------------------------------------------- +--------------------------- GEO ----------------------------------- +--------------------------------------------------------------------- +-- funzione che dato il tipo di pezzo e di giunzione, restituisce se e' corto, lungo o angolato +local function CalcPartJointType( nProfileType, JointType) + + if JointType == WIN_JNT.ANGLED then + return WIN_PART_JNT.ANGLED + end + if nProfileType == WIN_PRF.BOTTOMRAIL or nProfileType == WIN_PRF.SPLIT then + return WIN_PART_JNT.SHORT + elseif nProfileType == WIN_PRF.BOTTOM or nProfileType == WIN_PRF.TOP then + if JointType == WIN_JNT.FULL_H then + return WIN_PART_JNT.FULL + elseif JointType == WIN_JNT.FULL_V then + return WIN_PART_JNT.SHORT + end + elseif nProfileType == WIN_PRF.LEFT or nProfileType == WIN_PRF.RIGHT then + if JointType == WIN_JNT.FULL_V then + return WIN_PART_JNT.FULL + elseif JointType == WIN_JNT.FULL_H then + return WIN_PART_JNT.SHORT + end + end +end + +--------------------------------------------------------------------- +-- funzione che crea il gruppo con i profili di un pezzo +local function CalcFrameProfiles( nPartId, nOutlineId, nPrevOutlineId, nNextOutlineId, nProfileType) + + -- creo gruppo per i profili + local nProfileLayerId = EgtGroup( nPartId) + EgtSetName( nProfileLayerId, WIN_PROFILE) + + -- recupero profili e controprofili + local nOrigMainProfileId = GetOutlineProfileId( nOutlineId, nProfileType == WIN_PRF.BOTTOMRAIL) + -- se il tipo corrente è split il pezzo va tagliato con il bottomrail, altrimenti con il bottom + local nOrigStartProfileId = GetOutlineProfileId( nPrevOutlineId, nProfileType == WIN_PRF.SPLIT) + local nOrigEndProfileId = GetOutlineProfileId( nNextOutlineId, nProfileType == WIN_PRF.SPLIT) + + -- creo copie di profilo e controprofili + local nMainProfileId = EgtCopy( nOrigMainProfileId, nProfileLayerId) + local sMainProfileType = EgtGetName( nMainProfileId) + EgtSetInfo( nMainProfileId, WIN_PRF_TYPE, sMainProfileType) + EgtSetName( nMainProfileId, WIN_PRF_MAIN) + local nStartProfileId = EgtCopy( nOrigStartProfileId, nProfileLayerId) + local sStartProfileType = EgtGetName( nStartProfileId) + EgtSetInfo( nStartProfileId, WIN_PRF_TYPE, sStartProfileType) + EgtSetName( nStartProfileId, WIN_PRF_START) + local nEndProfileId = EgtCopy( nOrigEndProfileId, nProfileLayerId) + local sEndProfileType = EgtGetName( nEndProfileId) + EgtSetInfo( nEndProfileId, WIN_PRF_TYPE, sEndProfileType) + EgtSetName( nEndProfileId, WIN_PRF_END) + + return nProfileLayerId +end + --------------------------------------------------------------------- local function GetDeltaProfile( nProfileId, sCtrIn) @@ -801,9 +835,9 @@ end --------------------------------------------------------------------- -- funzione che crea le curve del geo -local function CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStartPartJointType, nEndPartJointType, nProfileType, nGeoLayerId, bBottomRail) +local function CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStartPartJointType, nEndPartJointType, nProfileType, nGeoLayerId, nProfileLayerId) - local nCurrProfileId = GetOutlineProfileId( nOutlineId, bBottomRail) + local nCurrProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) local nCurrProfileRefId = EgtGetFirstNameInGroup( nCurrProfileId, WIN_REF) -- calcolo spostamento della curva iniziale dovuto a posizione riferimento local nProfileFrameId = EgtGetFirstNameInGroup( nCurrProfileId, WIN_SECTIONFRAME) @@ -841,7 +875,7 @@ local function CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStar EgtInvertCurve( nPrevCurveId) else nPrevCurveId = EgtCopy( nPrevOutlineId, nGeoLayerId) - local nPrevProfileId = GetOutlineProfileId( nPrevOutlineId, nProfileType == WIN_PRF.SPLIT) + local nPrevProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_START) if nStartPartJointType == WIN_PART_JNT.SHORT then local sCtrIn = GetProfileCtrIn( nProfileType, nPrevOutlineId, nOutlineId, nPrevProfileId) local dPrevCPDelta = GetDeltaProfile( nPrevProfileId, sCtrIn) @@ -869,7 +903,7 @@ local function CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStar nNextCurveId = EgtLinePVL( nGeoLayerId, EgtEP( nOutlineId), vtMedia, 3 * b3CurrProfileFrame:getDimX()) else nNextCurveId = EgtCopy( nNextOutlineId, nGeoLayerId) - local nNextProfileId = GetOutlineProfileId( nNextOutlineId, nProfileType == WIN_PRF.SPLIT) + local nNextProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_END) if nEndPartJointType == WIN_PART_JNT.SHORT then local sCtrIn = GetProfileCtrIn( nProfileType, nNextOutlineId, nOutlineId, nNextProfileId) local dNextCPDelta = GetDeltaProfile( nNextProfileId, sCtrIn) @@ -937,14 +971,11 @@ end --------------------------------------------------------------------- -- funzione che calcola l'ingombro dei pezzi del telaio -local function CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, bBottomRail) +local function CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, nProfileType) -- creo layer per ingombro local nGeoLayerId = EgtGroup( nPartId) EgtSetName( nGeoLayerId, WIN_GEO) - - -- ricavo tipo di profilo - local nProfileType = GetOutlineProfileType( nOutlineId, bBottomRail) -- recupero outline precedente e successivo local nPrevOutlineId, nNextOutlineId = GetPrevNextOutline( nProfileType, nOutlineId, nOutlineLayerId) @@ -981,12 +1012,15 @@ local function CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, bBottomRail) local nStartPartJointType = CalcPartJointType( nProfileType, nStartJointType) local nEndPartJointType = CalcPartJointType( nProfileType, nEndJointType) - -- salvo i valori joint su outline per disegno solido + -- salvo i valori joint su outline per disegno solido e calcolo dowels EgtSetInfo( nOutlineId, WIN_STARTJOINT, nStartPartJointType) EgtSetInfo( nOutlineId, WIN_ENDJOINT, nEndPartJointType) + -- creo il gruppo con i profili del pezzo + local nProfileLayerId = CalcFrameProfiles( nPartId, nOutlineId, nPrevOutlineId, nNextOutlineId, nProfileType) + -- creo lati dell'outline - local nGeoOutId = CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStartPartJointType, nEndPartJointType, nProfileType, nGeoLayerId, bBottomRail) + local nGeoOutId = CreateFrameGeo( nOutlineId, nPrevOutlineId, nNextOutlineId, nStartPartJointType, nEndPartJointType, nProfileType, nGeoLayerId, nProfileLayerId) -- calcolo le lavorazioni associate ai profili CalcProfilingProcessings( nPartId, nGeoLayerId) @@ -994,7 +1028,470 @@ local function CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, bBottomRail) return nGeoOutId end + +--------------------------------------------------------------------------------- +---------------------------------- DOWELS ---------------------------------------- +---------------------------------------------------------------------------------- +local function AddStartDowels( nOutlineId, nPrevOutlineId, nProfileLayerId, nDowelLayerId, nGeoLayerId, nMainExtrusionId) + + local sOutlineName = EgtGetName( nOutlineId) + local sPrevOutlineName = EgtGetName( nPrevOutlineId) + + local nGeoInId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_IN) + local nGeoLeftId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_LEFT) + + local nMainProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) + local nStartProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_START) + + local nStartJointType = EgtGetInfo( nOutlineId, WIN_STARTJOINT, 'i') + if nStartJointType == WIN_PART_JNT.ANGLED then + + elseif nStartJointType == WIN_PART_JNT.FULL then + -- recupero profondita' d'inizio e fine + local sStart = EgtIf( sOutlineName == WIN_BOTTOM, WIN_DWL_BOTTOMPERPSTART, WIN_DWL_TOPPERPSTART) + local sEnd = EgtIf( sOutlineName == WIN_BOTTOM, WIN_DWL_BOTTOMPERPEND, WIN_DWL_TOPPERPEND) + + -- calcolo il riferimento del profilo + local nFrameProfile = EgtGetFirstNameInGroup( nStartProfileId, WIN_SECTIONFRAME) + local frOrig = EgtFR( nFrameProfile, GDB_ID.ROOT) + frOrig:invert() + -- calcolo il riferimento su cui posizionare i dowel + local ptInt = EgtSP( nGeoLeftId) + local vtRef = EgtSV( nGeoLeftId) + local frDest = Frame3d( ptInt, - vtRef) + + -- ciclo sui fori trovati + local nOrigDowelId = EgtGetFirstNameInGroup( nStartProfileId, WIN_DOWEL .. '*') + while nOrigDowelId do + local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') + if not dStart then + dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPSTART, 'd') or 0 + end + local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') + if not dEnd then + dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPEND, 'd') or 0 + end + + local nDowelId = EgtCopyGlob( nOrigDowelId, nDowelLayerId) + EgtSetColor( nDowelId, Color3d( 128, 128, 128)) + -- posiziono il dowel grazie ai riferimenti e assegno estrusione e spessore + EgtTransform( nDowelId, frOrig, GDB_RT.GLOB) + EgtTransform( nDowelId, frDest, GDB_RT.GLOB) + EgtMove( nDowelId, dStart * vtRef) + EgtModifyCurveExtrusion( nDowelId, vtRef) + EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) + + if bCalcSolid then + -- creo solido di estrusione + local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nDowelLayerId, nDowelId, vtRef * ( dEnd - dStart + 1)) + EgtMove( nDowelExtrusionId, - vtRef) + -- sottraggo il dowel al solido + EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) + EgtErase( nDowelExtrusionId) + end + + nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') + end + + elseif nStartJointType == WIN_PART_JNT.SHORT then + -- recupero info di profondita' d'inizio e fine in base al profilo dello start + local sStart = WIN_DWL_TOPPARASTART + local sEnd = WIN_DWL_TOPPARAEND + if sPrevOutlineName == WIN_BOTTOM then + sStart = WIN_DWL_BOTTOMPARASTART + sEnd = WIN_DWL_BOTTOMPARAEND + end + if sOutlineName == WIN_SPLIT then + local sStartProfileType = EgtGetInfo( nStartProfileId, WIN_PRF_TYPE) + if sStartProfileType == WIN_RAIL_BOTTOM then + sStart = WIN_DWL_RAILBOTTOMPARASTART + sEnd = WIN_DWL_RAILBOTTOMPARAEND + elseif sStartProfileType == WIN_SASH_HORIZONTAL then + sStart = WIN_DWL_HORIZONTALSPLITPARASTART + sEnd = WIN_DWL_HORIZONTALSPLITPARAEND + elseif sStartProfileType == WIN_SASH_VERTICAL then + sStart = WIN_DWL_VERTICALSPLITPARASTART + sEnd = WIN_DWL_VERTICALSPLITPARAEND + elseif sStartProfileType == WIN_FRAME_SPLIT or sStartProfileType == WIN_SASH_SPLIT then + sStart = WIN_DWL_SPLITPARASTART + sEnd = WIN_DWL_SPLITPARAEND + end + end + + -- calcolo il riferimento del profilo + local nFrameProfile = EgtGetFirstNameInGroup( nMainProfileId, WIN_SECTIONFRAME) + local frOrig = EgtFR( nFrameProfile, GDB_ID.ROOT) + frOrig:invert() + -- calcolo il riferimento su cui posizionare i dowel + local nLeftCopy = EgtCopyGlob( nGeoLeftId, nDowelLayerId) + EgtExtendCurveStartByLen( nLeftCopy, 200) + EgtExtendCurveEndByLen( nLeftCopy, 200) + local ptInt = EgtIP( nOutlineId, nLeftCopy, ORIG()) + EgtErase( nLeftCopy) + local dParRef = EgtCurveParamAtPoint( nOutlineId, ptInt) + local vtRef = EgtUV( nOutlineId, dParRef, -1) + local frDest = Frame3d( ptInt, - vtRef) + + -- ciclo sui fori trovati + local nOrigDowelId = EgtGetFirstNameInGroup( nMainProfileId, WIN_DOWEL .. '*') + while nOrigDowelId do + local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') + if not dStart then + dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPARASTART, 'd') or 0 + end + local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') + if not dEnd then + dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPARAEND, 'd') or 0 + end + + local nDowelId = EgtCopyGlob( nOrigDowelId, nDowelLayerId) + EgtSetColor( nDowelId, Color3d( 128, 128, 128)) + -- posiziono il dowel grazie ai riferimenti e assegno estrusione e spessore + EgtTransform( nDowelId, frOrig) + EgtTransform( nDowelId, frDest) + EgtMove( nDowelId, vtRef * dStart) + EgtModifyCurveExtrusion( nDowelId, vtRef) + EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) + + if bCalcSolid then + -- creo solido di estrusione + local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nDowelLayerId, nDowelId, vtRef * ( dEnd - dStart + 1)) + EgtMove( nDowelExtrusionId, - vtRef) + -- sottraggo il dowel al solido + EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) + EgtErase( nDowelExtrusionId) + end + + nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') + end + end +end + --------------------------------------------------------------------- +local function AddEndDowels( nOutlineId, nEndOutlineId, nProfileLayerId, nDowelLayerId, nGeoLayerId, nMainExtrusionId) + + local sOutlineName = EgtGetName( nOutlineId) + local sEndOutlineName = EgtGetName( nEndOutlineId) + + local nGeoInId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_IN) + local nGeoRightId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_RIGHT) + + local nMainProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) + local nEndProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_END) + + local nEndJointType = EgtGetInfo( nOutlineId, WIN_ENDJOINT, 'i') + if nEndJointType == WIN_PART_JNT.ANGLED then + + elseif nEndJointType == WIN_PART_JNT.FULL then + -- recupero profondita' d'inizio e fine + local sStart = EgtIf( sOutlineName == WIN_BOTTOM, WIN_DWL_BOTTOMPERPSTART, WIN_DWL_TOPPERPSTART) + local sEnd = EgtIf( sOutlineName == WIN_BOTTOM, WIN_DWL_BOTTOMPERPEND, WIN_DWL_TOPPERPEND) + + -- calcolo il riferimento del profilo + local nFrameProfile = EgtGetFirstNameInGroup( nEndProfileId, WIN_SECTIONFRAME) + local frOrig = EgtFR( nFrameProfile, GDB_ID.ROOT) + frOrig:invert() + -- calcolo il riferimento su cui posizionare i dowel + local ptInt = EgtEP( nGeoRightId) + local vtRef = EgtEV( nGeoRightId) + local frDest = Frame3d( ptInt, - vtRef) + + -- ciclo sui fori trovati + local nOrigDowelId = EgtGetFirstNameInGroup( nEndProfileId, WIN_DOWEL .. '*') + while nOrigDowelId do + local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') + if not dStart then + dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPSTART, 'd') or 0 + end + local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') + if not dEnd then + dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPEND, 'd') or 0 + end + + local nDowelId = EgtCopyGlob( nOrigDowelId, nDowelLayerId) + EgtSetColor( nDowelId, Color3d( 128, 128, 128)) + -- posiziono i fori grazie ai riferimenti e assegno estrusione e spessore + EgtTransform( nDowelId, frOrig) + EgtTransform( nDowelId, frDest) + EgtMove( nDowelId, - vtRef * dStart) + EgtModifyCurveExtrusion( nDowelId, - vtRef) + EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) + + if bCalcSolid then + -- creo solido di estrusione + local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nDowelLayerId, nDowelId, - vtRef * ( dEnd - dStart + 1)) + EgtMove( nDowelExtrusionId, vtRef) + -- sottraggo il dowel al solido + EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) + EgtErase( nDowelExtrusionId) + end + + nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') + end + + elseif nEndJointType == WIN_PART_JNT.SHORT then + -- recupero profondita' d'inizio e fine + local sStart = WIN_DWL_TOPPARASTART + local sEnd = WIN_DWL_TOPPARAEND + if sEndOutlineName == WIN_BOTTOM then + sStart = WIN_DWL_BOTTOMPARASTART + sEnd = WIN_DWL_BOTTOMPARAEND + end + if sOutlineName == WIN_SPLIT then + local sEndProfileType = EgtGetInfo( nEndProfileId, WIN_PRF_TYPE) + if sEndProfileType == WIN_RAIL_BOTTOM then + sStart = WIN_DWL_RAILBOTTOMPARASTART + sEnd = WIN_DWL_RAILBOTTOMPARAEND + elseif sEndProfileType == WIN_SASH_HORIZONTAL then + -- non faccio nulla perche' e' uguale al top + elseif sEndProfileType == WIN_SASH_VERTICAL then + sStart = WIN_DWL_VERTICALSPLITPARASTART + sEnd = WIN_DWL_VERTICALSPLITPARAEND + elseif sEndProfileType == WIN_FRAME_SPLIT or sEndProfileType == WIN_SASH_SPLIT then + sStart = WIN_DWL_SPLITPARASTART + sEnd = WIN_DWL_SPLITPARAEND + end + end + + -- calcolo il riferimento del profilo + local nFrameProfile = EgtGetFirstNameInGroup( nMainProfileId, WIN_SECTIONFRAME) + local frOrig = EgtFR( nFrameProfile, GDB_ID.ROOT) + frOrig:invert() + -- calcolo il riferimento su cui posizionare i dowel + local nRightCopy = EgtCopyGlob( nGeoRightId, nDowelLayerId) + EgtExtendCurveStartByLen( nRightCopy, 200) + EgtExtendCurveEndByLen( nRightCopy, 200) + local ptInt = EgtIP( nOutlineId, nRightCopy, ORIG()) + EgtErase( nRightCopy) + local dParRef = EgtCurveParamAtPoint( nOutlineId, ptInt) + local vtRef = EgtUV( nOutlineId, dParRef, -1) + local frDest = Frame3d( ptInt, - vtRef) + + -- ciclo sui fori trovati + local nOrigDowelId = EgtGetFirstNameInGroup( nMainProfileId, WIN_DOWEL .. '*') + while nOrigDowelId do + local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') + if not dStart then + dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPARASTART, 'd') or 0 + end + local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') + if not dEnd then + dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPARAEND, 'd') or 0 + end + + local nDowelId = EgtCopyGlob( nOrigDowelId, nDowelLayerId) + EgtSetColor( nDowelId, Color3d( 128, 128, 128)) + -- posiziono i fori grazie ai riferimenti e assegno estrusione e spessore + EgtTransform( nDowelId, frOrig, GDB_RT.GLOB) + EgtTransform( nDowelId, frDest, GDB_RT.GLOB) + EgtMove( nDowelId, - vtRef * dStart) + EgtModifyCurveExtrusion( nDowelId, - vtRef) + EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) + + if bCalcSolid then + -- creo solido di estrusione + local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nDowelLayerId, nDowelId, - vtRef * ( dEnd - dStart + 1)) + EgtMove( nDowelExtrusionId, vtRef) + -- sottraggo il dowel al solido + EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) + EgtErase( nDowelExtrusionId) + end + + nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') + end + end +end + +--------------------------------------------------------------------- +-- funzione che calcola intersezione, geometrie e superfici dei dowel degli split +local function CalSplitDowel( nSplitLayerId, nOutlineId, nProfileType, nPartId) + + -- verifico se interseca l'outline che sto analizzando + local nSplitId = EgtGetFirstInGroup( nSplitLayerId) + local ptInt = EgtIP( nOutlineId, nSplitId, EgtSP( nSplitId)) + if not ptInt then + return + end + + -- se interseca, recupero il profilo dello split + local nOrigSplitProfileId = GetOutlineProfileId( nSplitId, false) + + -- creo copia del profilo + local nFrameProfileLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PROFILE) + local nSplitProfileId = EgtCopy( nOrigSplitProfileId, nFrameProfileLayerId) + local sSplitProfileType = EgtGetName( nOrigSplitProfileId) + EgtSetInfo( nSplitProfileId, WIN_PRF_TYPE, sSplitProfileType) + EgtSetName( nSplitProfileId, WIN_PRF_SPLIT) + + -- recupero intersezione con lato In o Out del geo + local nGeoLayerId = EgtGetFirstNameInGroup( nPartId, WIN_GEO) + local nGeoCrvId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_IN) + local ptInters = EgtIP( nGeoCrvId, nSplitId, EgtSP( nSplitId)) + if not ptInters and nProfileType == WIN_PRF.SPLIT then + nGeoCrvId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_OUT) + ptInters = EgtIP( nGeoCrvId, nSplitId, EgtSP( nSplitId)) + end + + -- recupero frame del profilo e lo applico a tutte le sue geometrie + local nSplitProfileFrameId = EgtGetFirstNameInGroup( nSplitProfileId, WIN_SECTIONFRAME) + local frInvertSplitProfile = EgtFR( nSplitProfileFrameId) + frInvertSplitProfile:invert() + EgtTransform( EgtGetAllInGroup( nSplitProfileId), frInvertSplitProfile) + -- assegno come riferimento del profilo il punto di intersezione e la direzione dello split + local vtDir = - EgtSV( nSplitId) -- se non fosse lineare potrebbe essere end vector ? + EgtChangeGroupFrame( nSplitProfileId, Frame3d( ptInters, vtDir)) + + -- calcolo la direzione del dowel sempre verso l'interno del pezzo + local vtDowelDir = Vector3d( vtDir) + local _, _, nSide = EgtPointCurveDistSide( ptInters + vtDowelDir, nGeoCrvId, Z_AX()) + if nSide == 1 then + -- se a destra della curva significa che la direzione è uscente dal pezzo e va invertita + vtDowelDir = - vtDowelDir + end + + -- recupero solido del pezzo ( se non esiste è nil) + local nSolidLayerId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) or GDB_ID.NULL + local nMainExtrusionId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_SRF_MAIN) + + -- creo fori per spine su Split + local nProcLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) + + -- recupero profondita' d'inizio e fine + local sStart = WIN_DWL_TOPPERPSTART + local sEnd = WIN_DWL_TOPPERPEND + if nProfileType == WIN_PRF.BOTTOM then + sStart = WIN_DWL_BOTTOMPERPSTART + sEnd = WIN_DWL_BOTTOMPERPEND + elseif nProfileType == WIN_PRF.BOTTOMRAIL then + sStart = WIN_DWL_RAILBOTTOMPERPSTART + sEnd = WIN_DWL_RAILBOTTOMPERPEND + elseif nProfileType == WIN_PRF.SPLIT then + local sProfileType = EgtGetInfo( nOutlineId, WIN_PROFILETYPE) + if sProfileType == WIN_SASH_HORIZONTAL then + -- se poggia sul controprofilo CntrIn2 leggo le info dello split orizzontale, altrimenti vanno bene quelle del top + -- ( cfr AddStartDowels e AddEndDowels) + if AreSamePointApprox( ptInt, EgtSP( nSplitId)) then + sStart = WIN_DWL_HORIZONTALSPLITPERPSTART + sEnd = WIN_DWL_HORIZONTALSPLITPERPEND + end + elseif sProfileType == WIN_SASH_VERTICAL then + sStart = WIN_DWL_VERTICALSPLITPERPSTART + sEnd = WIN_DWL_VERTICALSPLITPERPEND + else -- sProfileType == WIN_FRAME_SPLIT + sStart = WIN_DWL_SPLITPERPSTART + sEnd = WIN_DWL_SPLITPERPEND + end + end + + -- ciclo sui fori trovati + local nOrigDowelId = EgtGetFirstNameInGroup( nSplitProfileId, WIN_DOWEL .. '*') + while nOrigDowelId do + local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') + if not dStart then + dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPSTART, 'd') + end + local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') + if not dEnd then + dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPEND, 'd') + end + local nDowelId = EgtCopyGlob( nOrigDowelId, nProcLayerId) + EgtSetColor( nDowelId, Color3d( 128, 128, 128)) + + -- posiziono il dowel e gli assegno estrusione e spessore + EgtMove( nDowelId, vtDowelDir * dStart) + EgtModifyCurveExtrusion( nDowelId, vtDowelDir) + EgtModifyCurveThickness( nDowelId, dEnd - dStart) + -- setto info di lavorazione + EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) + + if bCalcSolid then + -- creo solido di estrusione + local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, vtDowelDir * ( dEnd - dStart + 1)) + EgtMove( nDowelExtrusionId, - vtDowelDir) + -- sottraggo il dowel al solido + EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) + EgtErase( nDowelExtrusionId) + end + + nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') + end +end + +---------------------------------------------------------------------------------- +-- funzione che cicla ricorsivamente sulle aree e sottoaree relative al pezzo per aggiungere gli split dowels +local function AddAreaSplitDowels( nOutlineId, nPartId, nProfileType, nAreaLayerId) + + -- verifico la presenza di eventuali split nell'area corrente + local nSplitLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_SPLIT) + if nSplitLayerId then + local nSplitType = EgtGetInfo( nSplitLayerId, WIN_SPLITTYPE, 'i') or WIN_SPLITTYPES.NULL + if nSplitType ~= WIN_SPLITTYPES.FRENCH then + CalSplitDowel( nSplitLayerId, nOutlineId, nProfileType, nPartId) + end + end + + -- verifico la presenza di split nelle sottoaree + local nChildAreaId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_AREA .. '*') + while nChildAreaId do + local nAreaType = EgtGetInfo( nChildAreaId, WIN_AREATYPE, 'i') + if nAreaType == WIN_AREATYPES.SPLIT then + AddAreaSplitDowels( nOutlineId, nPartId, nProfileType, nChildAreaId) + end + nChildAreaId = EgtGetNextName( nChildAreaId, WIN_AREA .. '*') + end +end + +---------------------------------------------------------------------------------- +-- funzione che aggiunge al solido i dowels degli split che lo intersecano +local function AddSplitDowels( nOutlineId, nOutlineLayerId, nPartId, nProfileType) + + -- se profilo bottom con BottomRail esco ( gli split dowels saranno aggiuti sul BottomRail associato) + if nProfileType == WIN_PRF.BOTTOM then + local bBottomRail = EgtGetInfo( nOutlineLayerId, WIN_BOTTOMRAIL, 'b') or false + if bBottomRail then + return + end + end + + -- recupero area del pezzo + local nAreaLayerId = EgtGetParent( nOutlineLayerId) + -- aggiungo gli split dowels a partire dall'area corrente + AddAreaSplitDowels( nOutlineId, nPartId, nProfileType, nAreaLayerId) +end + +--------------------------------------------------------------------- +-- funzione che crea i fori per le spine +local function CalcFrameDowels( nPartId, nOutlineId, nOutlineLayerId, nProfileType) + + -- creo fori per spine su Start ed End + local nPrevOutlineId, nNextOutlineId = GetPrevNextOutline( nProfileType, nOutlineId, nOutlineLayerId) + local nProfileLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PROFILE) + local nProcLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) + local nGeoLayerId = EgtGetFirstNameInGroup( nPartId, WIN_GEO) + local nMainExtrusionId + if bCalcSolid then + local nSolidLayerId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) + nMainExtrusionId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_SRF_MAIN) + end + AddStartDowels( nOutlineId, nPrevOutlineId, nProfileLayerId, nProcLayerId, nGeoLayerId, nMainExtrusionId) + AddEndDowels( nOutlineId, nNextOutlineId, nProfileLayerId, nProcLayerId, nGeoLayerId, nMainExtrusionId) + + -- split dowels + AddSplitDowels( nOutlineId, nOutlineLayerId, nPartId, nProfileType) +end + + +---------------------------------------------------------------------------------- +---------------------------------- SOLIDO ---------------------------------------- +---------------------------------------------------------------------------------- -- funzione che recupera tipo di inizio e fine pezzo local function CalcStartEndProfileType( nProfileType, nOutlineId, nStartProfileId, nEndProfileId) @@ -1029,279 +1526,35 @@ local function CalcStartEndProfileType( nProfileType, nOutlineId, nStartProfileI sEndProfileType = WIN_OFST .. sEndProfileType end - return sStartProfileType, sEndProfileType, StartJointType, EndJointType + return sStartProfileType, sEndProfileType end --------------------------------------------------------------------- -local function AddStartDowels( nOutlineId, nPrevOutlineId, StartJointType, nMainProfileId, nStartProfileId, nDowelLayerId, nGeoInId, nSolidLayerId, nMainExtrusionId) +-- funzione che crea il solido del pezzo del telaio +local function CalcFrameSolid( nPartId, nOutlineId, nGeoId, nProfileType) - local sOutlineName = EgtGetName( nOutlineId) - local sPrevOutlineName = EgtGetName( nPrevOutlineId) + -- creo layer per solido + local nSolidLayerId = EgtGroup( nPartId) + EgtSetName( nSolidLayerId, WIN_SOLID) + + -- recupero layer delle lavorazioni per i dowels + local nProcLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) + + -- recupero profili e controprofili + local nProfileLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PROFILE) + local nMainProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_MAIN) + local nStartProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_START) + local nEndProfileId = EgtGetFirstNameInGroup( nProfileLayerId, WIN_PRF_END) - local nStartGuideId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_STARTGUIDE) - - if StartJointType == WIN_PART_JNT.ANGLED then - - elseif StartJointType == WIN_PART_JNT.FULL then - -- recupero profondita' d'inizio e fine - local sStart = EgtIf( sOutlineName == WIN_BOTTOM, WIN_DWL_BOTTOMPERPSTART, WIN_DWL_TOPPERPSTART) - local sEnd = EgtIf( sOutlineName == WIN_BOTTOM, WIN_DWL_BOTTOMPERPEND, WIN_DWL_TOPPERPEND) - - -- calcolo il riferimento del profilo - local nFrameProfile = EgtGetFirstNameInGroup( nStartProfileId, WIN_SECTIONFRAME) - local frOrig = EgtFR( nFrameProfile, GDB_ID.ROOT) - frOrig:invert() - -- calcolo il riferimento su cui posizionare i dowel - local ptInt = EgtIP( nGeoInId, nStartGuideId, ORIG(), GDB_ID.ROOT) - local dParRef = EgtCurveParamAtPoint( nStartGuideId, ptInt) - local vtRef = EgtUV( nStartGuideId, dParRef, -1, GDB_ID.ROOT) - local frDest = Frame3d( ptInt, - vtRef) - - -- ciclo sui fori trovati - local nOrigDowelId = EgtGetFirstNameInGroup( nStartProfileId, WIN_DOWEL .. '*') - while nOrigDowelId do - local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') - if not dStart then - dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPSTART, 'd') or 0 - end - local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') - if not dEnd then - dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPEND, 'd') or 0 - end - - local nDowelId = EgtCopyGlob( nOrigDowelId, nDowelLayerId) - EgtSetColor( nDowelId, Color3d( 128, 128, 128)) - -- posiziono il dowel grazie ai riferimenti e assegno estrusione e spessore - EgtTransform( nDowelId, frOrig, GDB_RT.GLOB) - EgtTransform( nDowelId, frDest, GDB_RT.GLOB) - EgtMove( nDowelId, dStart * vtRef) - EgtModifyCurveExtrusion( nDowelId, vtRef) - EgtModifyCurveThickness( nDowelId, dEnd - dStart) - -- setto info di lavorazione - EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) - -- creo solido di estrusione - local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, vtRef * ( dEnd - dStart + 1)) - EgtMove( nDowelExtrusionId, - vtRef) - -- sottraggo il dowel al solido - EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) - EgtErase( nDowelExtrusionId) - - nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') - end - - elseif StartJointType == WIN_PART_JNT.SHORT then - -- recupero info di profondita' d'inizio e fine in base al profilo dello start - local sStart = WIN_DWL_TOPPARASTART - local sEnd = WIN_DWL_TOPPARAEND - if sPrevOutlineName == WIN_BOTTOM then - sStart = WIN_DWL_BOTTOMPARASTART - sEnd = WIN_DWL_BOTTOMPARAEND - end - if sOutlineName == WIN_SPLIT then - local sStartProfileType = EgtGetInfo( nStartProfileId, WIN_PRF_TYPE) - if sStartProfileType == WIN_RAIL_BOTTOM then - sStart = WIN_DWL_RAILBOTTOMPARASTART - sEnd = WIN_DWL_RAILBOTTOMPARAEND - elseif sStartProfileType == WIN_SASH_HORIZONTAL then - sStart = WIN_DWL_HORIZONTALSPLITPARASTART - sEnd = WIN_DWL_HORIZONTALSPLITPARAEND - elseif sStartProfileType == WIN_SASH_VERTICAL then - sStart = WIN_DWL_VERTICALSPLITPARASTART - sEnd = WIN_DWL_VERTICALSPLITPARAEND - elseif sStartProfileType == WIN_FRAME_SPLIT or sStartProfileType == WIN_SASH_SPLIT then - sStart = WIN_DWL_SPLITPARASTART - sEnd = WIN_DWL_SPLITPARAEND - end - end - - -- calcolo il riferimento del profilo - local nFrameProfile = EgtGetFirstNameInGroup( nMainProfileId, WIN_SECTIONFRAME) - local frOrig = EgtFR( nFrameProfile, GDB_ID.ROOT) - frOrig:invert() - -- calcolo il riferimento su cui posizionare i dowel - local ptInt = EgtIP( nOutlineId, nStartGuideId, ORIG(), GDB_ID.ROOT) - local dParRef = EgtCurveParamAtPoint( nOutlineId, ptInt) - local vtRef = EgtUV( nOutlineId, dParRef, -1, GDB_ID.ROOT) - local frDest = Frame3d( ptInt, - vtRef) - - -- ciclo sui fori trovati - local nOrigDowelId = EgtGetFirstNameInGroup( nMainProfileId, WIN_DOWEL .. '*') - while nOrigDowelId do - local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') - if not dStart then - dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPARASTART, 'd') or 0 - end - local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') - if not dEnd then - dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPARAEND, 'd') or 0 - end - - local nDowelId = EgtCopyGlob( nOrigDowelId, nDowelLayerId) - EgtSetColor( nDowelId, Color3d( 128, 128, 128)) - -- posiziono il dowel grazie ai riferimenti e assegno estrusione e spessore - EgtTransform( nDowelId, frOrig) - EgtTransform( nDowelId, frDest) - EgtMove( nDowelId, vtRef * dStart) - EgtModifyCurveExtrusion( nDowelId, vtRef) - EgtModifyCurveThickness( nDowelId, dEnd - dStart) - -- setto info di lavorazione - EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) - -- creo solido di estrusione - local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, vtRef * ( dEnd - dStart + 1)) - EgtMove( nDowelExtrusionId, - vtRef) - -- sottraggo il dowel al solido - EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) - EgtErase( nDowelExtrusionId) - - nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') - end - end -end - ---------------------------------------------------------------------- -local function AddEndDowels( nOutlineId, nEndOutlineId, EndJointType, nMainProfileId, nEndProfileId, nDowelLayerId, nGeoInId, nSolidLayerId, nMainExtrusionId) - - local sOutlineName = EgtGetName( nOutlineId) - local sEndOutlineName = EgtGetName( nEndOutlineId) - - local nEndGuideId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_ENDGUIDE) - - if EndJointType == WIN_PART_JNT.ANGLED then - - elseif EndJointType == WIN_PART_JNT.FULL then - -- recupero profondita' d'inizio e fine - local sStart = EgtIf( sOutlineName == WIN_BOTTOM, WIN_DWL_BOTTOMPERPSTART, WIN_DWL_TOPPERPSTART) - local sEnd = EgtIf( sOutlineName == WIN_BOTTOM, WIN_DWL_BOTTOMPERPEND, WIN_DWL_TOPPERPEND) - - -- calcolo il riferimento del profilo - local nFrameProfile = EgtGetFirstNameInGroup( nEndProfileId, WIN_SECTIONFRAME) - local frOrig = EgtFR( nFrameProfile, GDB_ID.ROOT) - frOrig:invert() - -- calcolo il riferimento su cui posizionare i dowel - local ptInt = EgtIP( nGeoInId, nEndGuideId, ORIG(), GDB_ID.ROOT) - local dParRef = EgtCurveParamAtPoint( nEndGuideId, ptInt) - local vtRef = EgtUV( nEndGuideId, dParRef, -1, GDB_ID.ROOT) - local frDest = Frame3d( ptInt, - vtRef) - - -- ciclo sui fori trovati - local nOrigDowelId = EgtGetFirstNameInGroup( nEndProfileId, WIN_DOWEL .. '*') - while nOrigDowelId do - local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') - if not dStart then - dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPSTART, 'd') or 0 - end - local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') - if not dEnd then - dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPEND, 'd') or 0 - end - - local nDowelId = EgtCopyGlob( nOrigDowelId, nDowelLayerId) - EgtSetColor( nDowelId, Color3d( 128, 128, 128)) - -- posiziono i fori grazie ai riferimenti e assegno estrusione e spessore - EgtTransform( nDowelId, frOrig) - EgtTransform( nDowelId, frDest) - EgtMove( nDowelId, - vtRef * dStart) - EgtModifyCurveExtrusion( nDowelId, - vtRef) - EgtModifyCurveThickness( nDowelId, dEnd - dStart) - -- setto info di lavorazione - EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) - -- creo solido di estrusione - local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, - vtRef * ( dEnd - dStart + 1)) - EgtMove( nDowelExtrusionId, vtRef) - -- sottraggo il dowel al solido - EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) - EgtErase( nDowelExtrusionId) - - nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') - end - - elseif EndJointType == WIN_PART_JNT.SHORT then - -- recupero profondita' d'inizio e fine - local sStart = WIN_DWL_TOPPARASTART - local sEnd = WIN_DWL_TOPPARAEND - if sEndOutlineName == WIN_BOTTOM then - sStart = WIN_DWL_BOTTOMPARASTART - sEnd = WIN_DWL_BOTTOMPARAEND - end - if sOutlineName == WIN_SPLIT then - local sEndProfileType = EgtGetInfo( nEndProfileId, WIN_PRF_TYPE) - if sEndProfileType == WIN_RAIL_BOTTOM then - sStart = WIN_DWL_RAILBOTTOMPARASTART - sEnd = WIN_DWL_RAILBOTTOMPARAEND - elseif sEndProfileType == WIN_SASH_HORIZONTAL then - -- non faccio nulla perche' e' uguale al top - elseif sEndProfileType == WIN_SASH_VERTICAL then - sStart = WIN_DWL_VERTICALSPLITPARASTART - sEnd = WIN_DWL_VERTICALSPLITPARAEND - elseif sEndProfileType == WIN_FRAME_SPLIT or sEndProfileType == WIN_SASH_SPLIT then - sStart = WIN_DWL_SPLITPARASTART - sEnd = WIN_DWL_SPLITPARAEND - end - end - - -- calcolo il riferimento del profilo - local nFrameProfile = EgtGetFirstNameInGroup( nMainProfileId, WIN_SECTIONFRAME) - local frOrig = EgtFR( nFrameProfile, GDB_ID.ROOT) - frOrig:invert() - -- calcolo il riferimento su cui posizionare i dowel - local ptInt = EgtIP( nOutlineId, nEndGuideId, ORIG(), GDB_ID.ROOT) - local dParRef = EgtCurveParamAtPoint( nOutlineId, ptInt) - local vtRef = EgtUV( nOutlineId, dParRef, -1, GDB_ID.ROOT) - local frDest = Frame3d( ptInt, - vtRef) - - -- ciclo sui fori trovati - local nOrigDowelId = EgtGetFirstNameInGroup( nMainProfileId, WIN_DOWEL .. '*') - while nOrigDowelId do - local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') - if not dStart then - dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPARASTART, 'd') or 0 - end - local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') - if not dEnd then - dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPARAEND, 'd') or 0 - end - - local nDowelId = EgtCopyGlob( nOrigDowelId, nDowelLayerId) - EgtSetColor( nDowelId, Color3d( 128, 128, 128)) - -- posiziono i fori grazie ai riferimenti e assegno estrusione e spessore - EgtTransform( nDowelId, frOrig, GDB_RT.GLOB) - EgtTransform( nDowelId, frDest, GDB_RT.GLOB) - EgtMove( nDowelId, - vtRef * dStart) - EgtModifyCurveExtrusion( nDowelId, - vtRef) - EgtModifyCurveThickness( nDowelId, dEnd - dStart) - -- setto info di lavorazione - EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) - -- creo solido di estrusione - local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, - vtRef * ( dEnd - dStart + 1)) - EgtMove( nDowelExtrusionId, vtRef) - -- sottraggo il dowel al solido - EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) - EgtErase( nDowelExtrusionId) - - nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') - end - end -end - ---------------------------------------------------------------------- --- funzione che posiziona i profili, li estrude e crea il solido -local function MakeSolidByExtrusion( nGeoId, nOutlineId, nMainProfileId, nStartProfileId, nEndProfileId, nProfileType, nSolidLayerId, nDowelLayerId) - -- recupero outline - local nPartId = EgtGetParent( nSolidLayerId) - local nGeoLayerId = EgtGetParent( nGeoId) - local nOutlineLayerId = EgtGetParent( nOutlineId) -- recupero geo + local nGeoLayerId = EgtGetParent( nGeoId) local nPrevGeoId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_LEFT) local nNextGeoId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_RIGHT) - local nGeoInId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_IN) -- recupero BBox e larghezza del geo local dGeoWidth = EgtGetInfo( nGeoId, WIN_GEOWIDTH, 'd') - -- recupero tipo di giunzioni e i controprofili - local sStartProfileType, sEndProfileType, StartJointType, EndJointType = CalcStartEndProfileType( nProfileType, nOutlineId, nStartProfileId, nEndProfileId) - - -- recupero outline precedente e successivo - local nPrevOutlineId, nEndOutlineId = GetPrevNextOutline( nProfileType, nOutlineId, nOutlineLayerId) + -- recupero i controprofili in base al tipo di giunzioni + local sStartProfileType, sEndProfileType = CalcStartEndProfileType( nProfileType, nOutlineId, nStartProfileId, nEndProfileId) -- a) MAIN EXTRUSION -- creo guida Main @@ -1326,7 +1579,7 @@ local function MakeSolidByExtrusion( nGeoId, nOutlineId, nMainProfileId, nStartP EgtSetName( nOrigMainExtrusionId, WIN_SRF_ORIGMAIN) EgtSetStatus( nOrigMainExtrusionId, GDB_ST.OFF) - + -- b) START PROFILE -- posiziono il profilo Start local nRefStartProfileId = EgtGetFirstNameInGroup( nStartProfileId, WIN_REF) @@ -1382,7 +1635,7 @@ local function MakeSolidByExtrusion( nGeoId, nOutlineId, nMainProfileId, nStartP end end end - + -- recupero outline del profilo Start e lo estrudo local nOutStartProfileId if sStartProfileType == WIN_MINIZINKEN then @@ -1391,13 +1644,13 @@ local function MakeSolidByExtrusion( nGeoId, nOutlineId, nMainProfileId, nStartP else nOutStartProfileId = EgtGetFirstNameInGroup( nStartProfileId, sStartProfileType) end - local nStartExtrusionId = EgtSurfTmSwept( nSolidLayerId, nOutStartProfileId, nStartGuideId, false, WIN_SURF_APPROX) -- eseguo intersezione per ottenere un solido unico -- ( tagliare le due superfici con EgtSurfTmCut e poi unirle potrebbe creare piccoli buchi legati alle diverse approssimazioni) EgtSurfTmIntersect( nMainExtrusionId, nStartExtrusionId) EgtErase( nStartExtrusionId) + -- c) END PROFILE -- posiziono il profilo End local nRefEndProfileId = EgtGetFirstNameInGroup( nEndProfileId, WIN_REF) @@ -1445,6 +1698,7 @@ local function MakeSolidByExtrusion( nGeoId, nOutlineId, nMainProfileId, nStartP end end end + -- recupero outline del profilo End e lo estrudo local nOutEndProfileId if sEndProfileType == WIN_MINIZINKEN then @@ -1458,240 +1712,32 @@ local function MakeSolidByExtrusion( nGeoId, nOutlineId, nMainProfileId, nStartP EgtSurfTmIntersect( nMainExtrusionId, nEndExtrusionId) EgtErase( nEndExtrusionId) - -- creo fori per spine su Start - AddStartDowels( nOutlineId, nPrevOutlineId, StartJointType, nMainProfileId, nStartProfileId, nDowelLayerId, nGeoInId, nSolidLayerId, nMainExtrusionId) - -- creo fori per spine su End - AddEndDowels( nOutlineId, nEndOutlineId, EndJointType, nMainProfileId, nEndProfileId, nDowelLayerId, nGeoInId, nSolidLayerId, nMainExtrusionId) - end ----------------------------------------------------------------------------------- -------------------------------- SPLIT DOWELS ------------------------------------- ----------------------------------------------------------------------------------- --- funzione che calcola intersezione, geometrie e superfici dei dowel degli split -local function CalSplitDowel( nSplitLayerId, nOutlineId, nProfileType, nPartId) - - -- verifico se interseca l'outline che sto analizzando - local nSplitId = EgtGetFirstInGroup( nSplitLayerId) - local ptInt = EgtIP( nOutlineId, nSplitId, EgtSP( nSplitId)) - if not ptInt then - return - end - - -- se interseca, recupero il profilo dello split - local nOrigSplitProfileId = GetOutlineProfileId( nSplitId, false) - - -- creo copia del profilo - local nFrameProfileLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PROFILE) - local nSplitProfileId = EgtCopy( nOrigSplitProfileId, nFrameProfileLayerId) - local sSplitProfileType = EgtGetName( nOrigSplitProfileId) - EgtSetInfo( nSplitProfileId, WIN_PRF_TYPE, sSplitProfileType) - EgtSetName( nSplitProfileId, WIN_PRF_SPLIT) - - -- recupero intersezione con lato In o Out del geo - local nGeoLayerId = EgtGetFirstNameInGroup( nPartId, WIN_GEO) - local nGeoCrvId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_IN) - local ptInters = EgtIP( nGeoCrvId, nSplitId, EgtSP( nSplitId)) - if not ptInters and nProfileType == WIN_PRF.SPLIT then - nGeoCrvId = EgtGetFirstNameInGroup( nGeoLayerId, WIN_GEO_OUT) - ptInters = EgtIP( nGeoCrvId, nSplitId, EgtSP( nSplitId)) - end - - -- recupero frame del profilo e lo applico a tutte le sue geometrie - local nSplitProfileFrameId = EgtGetFirstNameInGroup( nSplitProfileId, WIN_SECTIONFRAME) - local frInvertSplitProfile = EgtFR( nSplitProfileFrameId) - frInvertSplitProfile:invert() - EgtTransform( EgtGetAllInGroup( nSplitProfileId), frInvertSplitProfile) - -- assegno come riferimento del profilo il punto di intersezione e la direzione dello split - local vtDir = - EgtSV( nSplitId) -- se non fosse lineare potrebbe essere end vector ? - EgtChangeGroupFrame( nSplitProfileId, Frame3d( ptInters, vtDir)) - - -- calcolo la direzione del dowel sempre verso l'interno del pezzo - local vtDowelDir = Vector3d( vtDir) - local _, _, nSide = EgtPointCurveDistSide( ptInters + vtDowelDir, nGeoCrvId, Z_AX()) - if nSide == 1 then - -- se a destra della curva significa che la direzione è uscente dal pezzo e va invertita - vtDowelDir = - vtDowelDir - end - - -- recupero solido del pezzo - local nSolidLayerId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) - local nMainExtrusionId = EgtGetFirstNameInGroup( nSolidLayerId, WIN_SRF_MAIN) - - -- creo fori per spine su Split - local nProcLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) - - -- recupero profondita' d'inizio e fine - local sStart = WIN_DWL_TOPPERPSTART - local sEnd = WIN_DWL_TOPPERPEND - if nProfileType == WIN_PRF.BOTTOM then - sStart = WIN_DWL_BOTTOMPERPSTART - sEnd = WIN_DWL_BOTTOMPERPEND - elseif nProfileType == WIN_PRF.BOTTOMRAIL then - sStart = WIN_DWL_RAILBOTTOMPERPSTART - sEnd = WIN_DWL_RAILBOTTOMPERPEND - elseif nProfileType == WIN_PRF.SPLIT then - local sProfileType = EgtGetInfo( nOutlineId, WIN_PROFILETYPE) - if sProfileType == WIN_SASH_HORIZONTAL then - -- se poggia sul controprofilo CntrIn2 leggo le info dello split orizzontale, altrimenti vanno bene quelle del top - -- ( cfr AddStartDowels e AddEndDowels) - if AreSamePointApprox( ptInt, EgtSP( nSplitId)) then - sStart = WIN_DWL_HORIZONTALSPLITPERPSTART - sEnd = WIN_DWL_HORIZONTALSPLITPERPEND - end - elseif sProfileType == WIN_SASH_VERTICAL then - sStart = WIN_DWL_VERTICALSPLITPERPSTART - sEnd = WIN_DWL_VERTICALSPLITPERPEND - else -- sProfileType == WIN_FRAME_SPLIT - sStart = WIN_DWL_SPLITPERPSTART - sEnd = WIN_DWL_SPLITPERPEND - end - end - - -- ciclo sui fori trovati - local nOrigDowelId = EgtGetFirstNameInGroup( nSplitProfileId, WIN_DOWEL .. '*') - while nOrigDowelId do - local dStart = EgtGetInfo( nOrigDowelId, sStart, 'd') - if not dStart then - dStart = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPSTART, 'd') - end - local dEnd = EgtGetInfo( nOrigDowelId, sEnd, 'd') - if not dEnd then - dEnd = EgtGetInfo( nOrigDowelId, WIN_DWL_TOPPERPEND, 'd') - end - local nDowelId = EgtCopyGlob( nOrigDowelId, nProcLayerId) - EgtSetColor( nDowelId, Color3d( 128, 128, 128)) - - -- posiziono il dowel e gli assegno estrusione e spessore - EgtMove( nDowelId, vtDowelDir * dStart) - EgtModifyCurveExtrusion( nDowelId, vtDowelDir) - EgtModifyCurveThickness( nDowelId, dEnd - dStart) - -- setto info di lavorazione - EgtSetInfo( nDowelId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE) - - -- creo solido di estrusione - local nDowelExtrusionId = EgtSurfTmByRegionExtrusion( nSolidLayerId, nDowelId, vtDowelDir * ( dEnd - dStart + 1)) - EgtMove( nDowelExtrusionId, - vtDowelDir) - -- sottraggo il dowel al solido - EgtSurfTmSubtract( nMainExtrusionId, nDowelExtrusionId) - EgtErase( nDowelExtrusionId) - - nOrigDowelId = EgtGetNextName( nOrigDowelId, WIN_DOWEL .. '*') - end -end - ----------------------------------------------------------------------------------- --- funzione che cicla ricorsivamente sulle aree e sottoaree relative al pezzo per aggiungere gli split dowels -local function AddAreaSplitDowels( nOutlineId, nPartId, nProfileType, nAreaLayerId) - - -- verifico la presenza di eventuali split nell'area corrente - local nSplitLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_SPLIT) - if nSplitLayerId then - local nSplitType = EgtGetInfo( nSplitLayerId, WIN_SPLITTYPE, 'i') or WIN_SPLITTYPES.NULL - if nSplitType ~= WIN_SPLITTYPES.FRENCH then - CalSplitDowel( nSplitLayerId, nOutlineId, nProfileType, nPartId) - end - end - - -- verifico la presenza di split nelle sottoaree - local nChildAreaId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_AREA .. '*') - while nChildAreaId do - local nAreaType = EgtGetInfo( nChildAreaId, WIN_AREATYPE, 'i') - if nAreaType == WIN_AREATYPES.SPLIT then - AddAreaSplitDowels( nOutlineId, nPartId, nProfileType, nChildAreaId) - end - nChildAreaId = EgtGetNextName( nChildAreaId, WIN_AREA .. '*') - end -end - ----------------------------------------------------------------------------------- --- funzione che aggiunge al solido i dowels degli split che lo intersecano -local function AddSplitDowels( nOutlineId, nOutlineLayerId, nPartId, nProfileType) - - -- se profilo bottom con BottomRail esco ( gli split dowels saranno aggiuti sul BottomRail associato) - if nProfileType == WIN_PRF.BOTTOM then - local bBottomRail = EgtGetInfo( nOutlineLayerId, WIN_BOTTOMRAIL, 'b') or false - if bBottomRail then - return - end - end - - -- recupero area del pezzo - local nAreaLayerId = EgtGetParent( nOutlineLayerId) - -- aggiungo gli split dowels a partire dall'area corrente - AddAreaSplitDowels( nOutlineId, nPartId, nProfileType, nAreaLayerId) -end - ---------------------------------------------------------------------- --- funzione che crea il solido del pezzo del telaio -local function CalcFrameSolid( nPartId, nOutlineId, nGeoId, nOutlineLayerId, bBottomRail) - - -- creo layer per solido e per profili di estrusione - local nSolidLayerId = EgtGroup( nPartId) - EgtSetName( nSolidLayerId, WIN_SOLID) - local nFrameProfileLayerId = EgtGroup( nPartId) - EgtSetName( nFrameProfileLayerId, WIN_PROFILE) - -- recupero layer delle lavorazioni per i dowels - local nProcLayerId = EgtGetFirstNameInGroup( nPartId, WIN_PRC) - - -- ricavo tipo di profilo - local nProfileType = GetOutlineProfileType( nOutlineId, bBottomRail) - - -- recupero outline precedente e successivo - local nPrevOutlineId, nNextOutlineId = GetPrevNextOutline( nProfileType, nOutlineId, nOutlineLayerId) - - -- recupero profili e controprofili - local nOrigMainProfileId = GetOutlineProfileId( nOutlineId, bBottomRail) - -- se il tipo corrente è split il pezzo va tagliato con il bottomrail, altrimenti con il bottom - local nOrigStartProfileId = GetOutlineProfileId( nPrevOutlineId, nProfileType == WIN_PRF.SPLIT) - local nOrigEndProfileId = GetOutlineProfileId( nNextOutlineId, nProfileType == WIN_PRF.SPLIT) - - -- creo copie di profilo e controprofili - local nMainProfileId = EgtCopy( nOrigMainProfileId, nFrameProfileLayerId) - local sMainProfileType = EgtGetName( nMainProfileId) - EgtSetInfo( nMainProfileId, WIN_PRF_TYPE, sMainProfileType) - EgtSetName( nMainProfileId, WIN_PRF_MAIN) - local nStartProfileId = EgtCopy( nOrigStartProfileId, nFrameProfileLayerId) - local sStartProfileType = EgtGetName( nStartProfileId) - EgtSetInfo( nStartProfileId, WIN_PRF_TYPE, sStartProfileType) - EgtSetName( nStartProfileId, WIN_PRF_START) - local nEndProfileId = EgtCopy( nOrigEndProfileId, nFrameProfileLayerId) - local sEndProfileType = EgtGetName( nEndProfileId) - EgtSetInfo( nEndProfileId, WIN_PRF_TYPE, sEndProfileType) - EgtSetName( nEndProfileId, WIN_PRF_END) - - -- creo solido dai profili - MakeSolidByExtrusion( nGeoId, nOutlineId, nMainProfileId, nStartProfileId, nEndProfileId, nProfileType, nSolidLayerId, nProcLayerId) - - -- aggiungo dowels degli split - AddSplitDowels( nOutlineId, nOutlineLayerId, nPartId, nProfileType) - - end - --------------------------------------------------------------------- -- funzione che calcola l'ingombro dei pezzi del telaio e i loro solidi local function CreatePartFromOutline( nAreaLayerId, nOutlineId, bBottomRail) - - local nAreaType = EgtGetInfo( nAreaLayerId, WIN_AREATYPE, 'i') + -- creo pezzo local nPartId = EgtGroup( GDB_ID.ROOT) - -- se BottomRail, creo riferimento - if bBottomRail then - EgtSetInfo( nOutlineId, WIN_REF_BOTTOMRAIL_PART, nPartId) - end - -- recupero outline + -- inserisco riferimento alla sua area + EgtSetInfo( nPartId, WIN_AREA, nAreaLayerId) + + local nAreaType = EgtGetInfo( nAreaLayerId, WIN_AREATYPE, 'i') local nOutlineLayerId = EgtGetFirstNameInGroup( nAreaLayerId, WIN_OUTLINE) - local nProfileType = WIN_PRF.NULL + + -- a) Telaio, anta o split if nAreaType == WIN_AREATYPES.FRAME or nAreaType == WIN_AREATYPES.SASH or nAreaType == WIN_AREATYPES.SPLIT then - -- se area senza outline, cerco quella superiore - if not nOutlineLayerId then - local nParentAreaLayerId = EgtGetParent( nAreaLayerId) - if nParentAreaLayerId then - nOutlineLayerId = EgtGetFirstNameInGroup( nParentAreaLayerId, WIN_OUTLINE) - end + + -- creo riferimenti tra pezzo e outline + EgtSetInfo( nPartId, WIN_REF_OUTLINE, nOutlineId) + if bBottomRail then + EgtSetInfo( nOutlineId, WIN_REF_BOTTOMRAIL_PART, nPartId) + else + EgtSetInfo( nOutlineId, WIN_REF_PART, nPartId) end - - -- imposto nome + + -- imposto nome del pezzo local sName = EgtGetName( nOutlineId) if bBottomRail then sName = WIN_BOTTOMRAIL @@ -1707,39 +1753,37 @@ local function CreatePartFromOutline( nAreaLayerId, nOutlineId, bBottomRail) EgtSetColor( nPartId, Color3d( 255, 159, 57)) end + -- ricavo il tipo di profilo + local nProfileType = GetOutlineProfileType( nOutlineId, bBottomRail) + -- disegno ingombro + local nGeoId = CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, nProfileType) + -- disegno solido + if bCalcSolid then + CalcFrameSolid( nPartId, nOutlineId, nGeoId, nProfileType) + end + -- calcolo i fori per le spine + CalcFrameDowels( nPartId, nOutlineId, nOutlineLayerId, nProfileType) + + + -- b) Fill elseif nAreaType == WIN_AREATYPES.FILL then - -- imposto nome + -- imposto nome del pezzo EgtSetName( nPartId, WIN_FILL) -- ricavo tipo local nFillType = EgtGetInfo( nAreaLayerId, WIN_FILLTYPE, 'i') + -- imposto colore if nFillType == WIN_FILLTYPES.GLASS then EgtSetColor( nPartId, Color3d( 71, 161, 255)) EgtSetAlpha( nPartId, 30) elseif nFillType == WIN_FILLTYPES.WOOD then EgtSetColor( nPartId, Color3d( 194, 148, 103)) end - end - - -- inserisco riferimento alla sua area ed al suo outline - EgtSetInfo( nPartId, WIN_AREA, nAreaLayerId) - if nAreaType ~= WIN_AREATYPES.FILL then - EgtSetInfo( nPartId, WIN_REF_OUTLINE, nOutlineId) - if not bBottomRail then EgtSetInfo( nOutlineId, WIN_REF_PART, nPartId) end - end - - if nAreaType == WIN_AREATYPES.FRAME or nAreaType == WIN_AREATYPES.SASH or nAreaType == WIN_AREATYPES.SPLIT then - -- disegno ingombro - local nGeoId = CalcFrameGeo( nPartId, nOutlineId, nOutlineLayerId, bBottomRail) - -- disegno solido - if bCalcSolid then - CalcFrameSolid( nPartId, nOutlineId, nGeoId, nOutlineLayerId, bBottomRail) - end - elseif nAreaType == WIN_AREATYPES.FILL then + -- disegno ingombro local nGeoLayerId = CalcFillGeo( nPartId, nOutlineLayerId) -- disegno solido if bCalcSolid then - CalcFillSolid(nPartId, nOutlineLayerId, nGeoLayerId) + CalcFillSolid( nPartId, nOutlineLayerId, nGeoLayerId) end end end From a47204dc6fd7d397e39d93549e841ae4a3701608 Mon Sep 17 00:00:00 2001 From: SaraP Date: Tue, 18 Jun 2024 11:38:11 +0200 Subject: [PATCH 5/5] =?UTF-8?q?-=20aggiunti=20profili=20French=5FIn=20e=20?= =?UTF-8?q?French=5Fout=20-=20gestione=20di=20finestre=20con=20pi=C3=B9=20?= =?UTF-8?q?ante=20battente/ricevente=20-=20nelle=20creazione=20della=20fin?= =?UTF-8?q?estra=20vengono=20salvati=20tutti=20i=20children=20di=20una=20c?= =?UTF-8?q?urva.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Profiles/Main.lua | 74 +++++++++++++++ Profiles/Profilo78 - Offset - Copy (46).nge | Bin 0 -> 226562 bytes Profiles/Profilo78 - Offset.nge | Bin 226562 -> 254906 bytes Profiles/WinConst.lua | 8 ++ Profiles/WinLib/WinCalculate.lua | 94 +++++++++++++++----- Profiles/WinLib/WinCreate.lua | 36 +++++--- 6 files changed, 178 insertions(+), 34 deletions(-) create mode 100644 Profiles/Profilo78 - Offset - Copy (46).nge diff --git a/Profiles/Main.lua b/Profiles/Main.lua index 31e8a3c..4df78ce 100644 --- a/Profiles/Main.lua +++ b/Profiles/Main.lua @@ -382,6 +382,80 @@ local nFillId = WinCreate.AddFill( nSashId, WIN_FILLTYPES.GLASS) -- -- aggiungo vetro -- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS) +------------------------ Finestra tripla anta battente / ricevente / ricevente ------------------------ + +-- -- definisco divisioni +-- local nArea1Id, nArea0Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH) +-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea0Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH) +-- +-- -- aggiungo prima anta +-- local SashJointType = WIN_JNT.FULL_V +-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE) +-- -- aggiungo vetro +-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS) +-- +-- -- aggiungo seconda anta +-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE_IN) +-- -- aggiungo vetro +-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS) +-- +-- -- aggiungo terza anta +-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE_OUT) +-- -- aggiungo vetro +-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS) + + +------------------------ Finestra tripla anta battente / battente / ricevente ------------------------ + +-- -- definisco divisioni +-- local nArea1Id, nArea0Id = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH) +-- local nArea2Id, nArea3Id = WinCreate.AddSplit( nArea0Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 3, _, WIN_SPLITTYPES.FRENCH) +-- +-- -- aggiungo prima anta +-- local SashJointType = WIN_JNT.FULL_V +-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE_OUT) +-- -- aggiungo vetro +-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS) +-- +-- -- aggiungo seconda anta +-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE_IN) +-- -- aggiungo vetro +-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS) +-- +-- -- aggiungo terza anta +-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE) +-- -- aggiungo vetro +-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS) + + +------------------------ Finestra quattro ante battente / battente / ricevente / ricevente ------------------------ + +-- -- definisco divisioni +-- local nArea1Id, nAreaTmpId = WinCreate.AddSplit( nFrameId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 4, _, WIN_SPLITTYPES.FRENCH) +-- local nArea2Id, nAreaTmp1Id = WinCreate.AddSplit( nAreaTmpId, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 4, _, WIN_SPLITTYPES.FRENCH) +-- local nArea3Id, nArea4Id = WinCreate.AddSplit( nAreaTmp1Id, WIN_SPLITORIENTATION.VERTICAL, WIN_MEASURE.ABSOLUT, WindowWidth / 4, _, WIN_SPLITTYPES.FRENCH) +-- +-- -- aggiungo prima anta +-- local SashJointType = WIN_JNT.FULL_V +-- local nSash1Id = WinCreate.AddSash( nArea1Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE_OUT) +-- -- aggiungo vetro +-- local nFill1Id = WinCreate.AddFill( nSash1Id, WIN_FILLTYPES.GLASS) +-- +-- -- aggiungo seconda anta +-- local nSash2Id = WinCreate.AddSash( nArea2Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.ACTIVE_IN) +-- -- aggiungo vetro +-- local nFill2Id = WinCreate.AddFill( nSash2Id, WIN_FILLTYPES.GLASS) +-- +-- -- aggiungo terza anta +-- local nSash3Id = WinCreate.AddSash( nArea3Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE_IN) +-- -- aggiungo vetro +-- local nFill3Id = WinCreate.AddFill( nSash3Id, WIN_FILLTYPES.GLASS) +-- +-- -- aggiungo quarta anta +-- local nSash4Id = WinCreate.AddSash( nArea4Id, SashJointType, SashJointType, SashJointType, SashJointType, WIN_SASHTYPES.INACTIVE_OUT) +-- -- aggiungo vetro +-- local nFill4Id = WinCreate.AddFill( nSash4Id, WIN_FILLTYPES.GLASS) + ------------------------ Finestra sei ante con montanti verticali e orizzontale ------------------------ diff --git a/Profiles/Profilo78 - Offset - Copy (46).nge b/Profiles/Profilo78 - Offset - Copy (46).nge new file mode 100644 index 0000000000000000000000000000000000000000..bceecb3635a93d9798ccef059a1ce57751d8d585 GIT binary patch literal 226562 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ð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 literal 0 HcmV?d00001 diff --git a/Profiles/Profilo78 - Offset.nge b/Profiles/Profilo78 - Offset.nge index bceecb3635a93d9798ccef059a1ce57751d8d585..5f0a6806d141f6d81d4dd1b2eb7a5813acd53d47 100644 GIT binary patch delta 8347 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 G!v6sV{a*I~ delta 20 bcmdmWoWJQ6Z$k@X3)2?ne