DataWindow :
- aggiunta funzione per ricalcolo solidi.
This commit is contained in:
@@ -414,6 +414,7 @@ WIN_THRESHOLD_LEN = 'ThresholdLen'
|
||||
|
||||
-- FERRAMENTA
|
||||
WIN_HDW_FAVOURITE = 'HdwFavourite'
|
||||
WIN_HDW_NULL = '000000'
|
||||
WIN_HDW_HANDLE = 'HdwHandle'
|
||||
WIN_HDW_FRAME = 'HdwFrame'
|
||||
WIN_HDW_HANDLE_HEIGHT = 'HMan'
|
||||
|
||||
@@ -21,6 +21,7 @@ require( 'EgtBase')
|
||||
require( 'WinConst')
|
||||
|
||||
local s_dDowelTol = 1
|
||||
local s_dSimplSolidApprox = 0.2 -- approssimazione lineare nel caso di solidi semplificati
|
||||
local s_nSashNbr = 0 -- contatore delle ante per assegnare nomi
|
||||
|
||||
local s_bCalcSolid = false
|
||||
@@ -2142,6 +2143,7 @@ local function CalcGeoRaw( nPartId)
|
||||
end
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
---------------------------------- SOLIDO ----------------------------------------
|
||||
----------------------------------------------------------------------------------
|
||||
@@ -2204,7 +2206,7 @@ local function CreateProfileSurfById( nOutlineId, nProfileId, nSectionId, dExtra
|
||||
return nStmId
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------
|
||||
-- come CreateProfileSurfById ma riceve il nome della sezione da estrudere
|
||||
local function CreateProfileSurf( nOutlineId, nProfileId, sSectionName, dExtraLen, nLayerId)
|
||||
-- recupero l'id della sezione da estrudere
|
||||
@@ -2394,6 +2396,7 @@ local function CalcMixedFrameSolid( nOutlineId, nSolidLayerId, nProfileLayerId,
|
||||
EgtSetStatus( nTrimSurfEnd, GDB_ST.OFF)
|
||||
EgtSurfTmIntersect( vMainExtrusions[1], nTrimSurfEnd)
|
||||
|
||||
return vMainExtrusions[1]
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -2424,6 +2427,8 @@ local function CalcMixedSplitSolid( nOutlineId, nSolidLayerId, nProfileLayerId,
|
||||
EgtSetName( nStmTrimEnd, WIN_SRF_END)
|
||||
EgtSetStatus( nStmTrimEnd, GDB_ST.OFF)
|
||||
EgtSurfTmIntersect( nMainExtrusionId, nStmTrimEnd)
|
||||
|
||||
return nMainExtrusionId
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -2483,6 +2488,8 @@ local function CalcSolid( nPartId, nOutlineId)
|
||||
-- eseguo intersezione per ottenere un solido unico
|
||||
EgtSurfTmIntersect( nMainExtrusionId, nTrimSurf)
|
||||
end
|
||||
|
||||
return nMainExtrusionId
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -2500,33 +2507,38 @@ local function CalcFillSolid( nPartId, nOutlineLayerId, nGeoLayerId)
|
||||
EgtErase( nCompoOutlineId)
|
||||
end
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
-- funzione che aggiorna il solido principale con quello associato ad una lavorazione partendo dalla sua curva
|
||||
local function UpdateSolidWithProcessingSurf( nProcId, nSolidId, nLayerId)
|
||||
|
||||
if not EgtCurveIsClosed( nProcId) then
|
||||
return
|
||||
end
|
||||
|
||||
local vtExtr = EgtCurveExtrusion( nProcId)
|
||||
local dThick = EgtCurveThickness( nProcId)
|
||||
local nRefCrv = nProcId
|
||||
-- se solidi semplificati approssimo in modo grossolano per velocizzare operazioni di subtract ( soprattuto su archi)
|
||||
if s_bSimplSolid then
|
||||
nRefCrv = EgtCopyGlob( nProcId, nLayerId)
|
||||
EgtApproxCurve( nRefCrv, GDB_CA.LINES, s_dSimplSolidApprox)
|
||||
end
|
||||
local nProcSolidId = EgtSurfTmByRegionExtrusion( nLayerId, nRefCrv, dThick * vtExtr)
|
||||
|
||||
-- sottraggo al solido
|
||||
EgtSurfTmSubtract( nSolidId, nProcSolidId)
|
||||
|
||||
EgtErase( nProcSolidId)
|
||||
if s_bSimplSolid then
|
||||
EgtErase( nRefCrv)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
---------------------------------- DOWELS ----------------------------------------
|
||||
----------------------------------------------------------------------------------
|
||||
-- funzione che sottrae il dowel al solido
|
||||
local function UpdateSolidWithDowel( nDowelId, nSolidId, vtDir, dLen, nLayerId)
|
||||
|
||||
-- creo il solido del dowel a partire dalla circonferenza che lo definisce
|
||||
local nDowelSolidId
|
||||
if s_bSimplSolid then
|
||||
-- se solidi semplificati creo foro grossolano per velocizzare operazioni di subtract
|
||||
local nDowelApprox = EgtCopyGlob( nDowelId, nLayerId)
|
||||
EgtApproxCurve( nDowelApprox, GDB_CA.LINES, 0.2)
|
||||
nDowelSolidId = EgtSurfTmByRegionExtrusion( nLayerId, nDowelApprox, vtDir * dLen)
|
||||
EgtErase( nDowelApprox)
|
||||
else
|
||||
nDowelSolidId = EgtSurfTmByRegionExtrusion( nLayerId, nDowelId, vtDir * dLen)
|
||||
end
|
||||
|
||||
-- sottraggo il dowel al solido
|
||||
EgtSurfTmSubtract( nSolidId, nDowelSolidId)
|
||||
EgtErase( nDowelSolidId)
|
||||
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- funzione che recupera la lunghezza del dowel
|
||||
local function CalcDowelLen( nDowelId, sKey, bFullOrShort)
|
||||
|
||||
@@ -2627,7 +2639,7 @@ local function CreateDowel( nOrigDowelId, nLayerId, frOrig, frDest, vtDir, nTest
|
||||
|
||||
-- eventuale aggiornamento del solido
|
||||
if nMainExtrusionId then
|
||||
UpdateSolidWithDowel( nDowelId, nMainExtrusionId, vtDir, dLen, nLayerId)
|
||||
UpdateSolidWithProcessingSurf( nDowelId, nMainExtrusionId, nLayerId)
|
||||
end
|
||||
|
||||
return nDowelId
|
||||
@@ -3922,7 +3934,7 @@ local function CalcLogDowel( nOrigPartId, nCrvOut, bLeftOrRight, nProcLayerId, n
|
||||
|
||||
-- eventuale aggiornamento del solido
|
||||
if nSolidId then
|
||||
UpdateSolidWithDowel( nDowelId, nSolidId, vtDir, dLen, nProcLayerId)
|
||||
UpdateSolidWithProcessingSurf( nDowelId, nSolidId, nProcLayerId)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4239,22 +4251,6 @@ function WinCalculate.CreateArcLogs( nPartId, nLogsNbr, vSections, bAlign, dOver
|
||||
end
|
||||
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
------------------------------ FUNZIONI ----------------------------------------
|
||||
----------------------------------------------------------------------------------
|
||||
-- funzione che crea tutti i pezzi della finestra partendo dal telaio
|
||||
function WinCalculate.CreatePartFromArea( nFrameId)
|
||||
-- assegno il tipo di profilo alle curve del base outline
|
||||
CalculateAreaProfileType( nFrameId)
|
||||
-- calcolo outline a partire dal base outline
|
||||
CalculateAreaOutline( nFrameId)
|
||||
-- creo pezzi
|
||||
s_nSashNbr = 0 -- resetto il numero di ante del progetto
|
||||
CalculateAreaParts( nFrameId)
|
||||
-- calcolo le spine
|
||||
CalculateAreaDowels( nFrameId)
|
||||
end
|
||||
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
---------------------------------- FERRAMENTA ----------------------------------
|
||||
@@ -4707,7 +4703,7 @@ function WinCalculate.AddHardwareForSash( nFrameId, bOnlyRequest)
|
||||
if bOnlyRequest then
|
||||
nFavourite = WDG.HDWFAVOURITE
|
||||
end
|
||||
if not nFavourite or nFavourite == '000000' then
|
||||
if not nFavourite or nFavourite == WIN_HDW_NULL then
|
||||
EgtOutLog('Warning! No hardware favourite set!')
|
||||
return
|
||||
end
|
||||
@@ -4963,18 +4959,12 @@ function WinCalculate.AddHardwareForSash( nFrameId, bOnlyRequest)
|
||||
EgtSetInfo( nPocketOutlineId, WIN_PRC_SIDE, WIN_PRC_SIDETYPE.IN)
|
||||
EgtModifyCurveExtrusion( nPocketOutlineId, Z_AX())
|
||||
EgtModifyCurveThickness( nPocketOutlineId, - dHeight)
|
||||
-- aggiornamento del solido
|
||||
if s_bCalcSolid then
|
||||
-- costruisco asola come volume chiuso per eseguire operazioni booleane con il solido
|
||||
local nOutlineId = EgtCopyGlob( nPocketOutlineId, nSolidLayerId)
|
||||
EgtMove( nOutlineId, Z_AX())
|
||||
local nSolidId = EgtSurfTmByRegionExtrusion( nProcLayerId, nOutlineId, - ( dHeight + 1) * Z_AX())
|
||||
EgtTransform( nSolidId, frHdw)
|
||||
EgtSurfTmSubtract( nMainExtrusionId, nSolidId)
|
||||
EgtErase( {nSolidId, nOutlineId})
|
||||
end
|
||||
-- porto la lavorazione in globale
|
||||
EgtTransform( nPocketOutlineId, frHdw)
|
||||
-- aggiornamento del solido
|
||||
if s_bCalcSolid then
|
||||
UpdateSolidWithProcessingSurf( nPocketOutlineId, nMainExtrusionId, nSolidLayerId)
|
||||
end
|
||||
|
||||
elseif vMacro[1] == 'TASCA' then
|
||||
elseif vMacro[1] == 'VITE' then
|
||||
@@ -4990,7 +4980,7 @@ function WinCalculate.AddHardwareForSash( nFrameId, bOnlyRequest)
|
||||
local nHoleId = EgtCircle( nProcLayerId, ptCenter, dRadius)
|
||||
EgtMove( nHoleId, Z_AX())
|
||||
EgtModifyCurveExtrusion( nHoleId, Z_AX())
|
||||
EgtModifyCurveThickness( nHoleId, - dDepth)
|
||||
EgtModifyCurveThickness( nHoleId, - ( dDepth + 1))
|
||||
EgtTransform( nHoleId, frHdw)
|
||||
EgtSetInfo( nHoleId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE)
|
||||
|
||||
@@ -5008,16 +4998,12 @@ function WinCalculate.AddHardwareForSash( nFrameId, bOnlyRequest)
|
||||
EgtModifyCurveThickness( nHoleId, - dDepth)
|
||||
EgtSetColor( nHoleId, EgtStdColor( 'GRAY'))
|
||||
EgtSetInfo( nHoleId, WIN_PRC_FEATURE_TYPE, WIN_PRC_TYPE.HOLE)
|
||||
-- aggiornamento del solido
|
||||
if s_bCalcSolid then
|
||||
local nSolidHoleId = EgtSurfTmByRegionExtrusion( nProcLayerId, nHoleId, - ( dDepth + 1) * Z_AX())
|
||||
EgtMove( nSolidHoleId, Z_AX())
|
||||
EgtTransform( nSolidHoleId, frHdw)
|
||||
EgtSurfTmSubtract( nMainExtrusionId, nSolidHoleId)
|
||||
EgtErase( nSolidHoleId)
|
||||
end
|
||||
-- porto la lavorazione in globale
|
||||
EgtTransform( nHoleId, frHdw)
|
||||
-- aggiornamento del solido
|
||||
if s_bCalcSolid then
|
||||
UpdateSolidWithProcessingSurf( nHoleId, nMainExtrusionId, nSolidLayerId)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5058,6 +5044,64 @@ function WinCalculate.AddHardware( nAreaId)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- funzione che disegna l'hardware
|
||||
local function DrawHardware( nAreaId, nAuxLayerId)
|
||||
-- verifico il tipo
|
||||
local nAreaType = EgtGetInfo( nAreaId, WIN_AREATYPE, 'i')
|
||||
-- se anta disegno la ferramenta
|
||||
if nAreaType == WIN_AREATYPES.SASH then
|
||||
-- se è stato definito un preferito disegno la ferramenta
|
||||
local sFavourite = EgtGetInfo( nAreaId, WIN_HDW_FAVOURITE) or WIN_HDW_NULL
|
||||
if sFavourite ~= WIN_HDW_NULL then
|
||||
DrawSashHardware( nAreaId, nAreaId, nAuxLayerId)
|
||||
end
|
||||
return
|
||||
|
||||
else
|
||||
-- verifico se contiene un french split
|
||||
local nSplitLayerId = EgtGetFirstNameInGroup( nAreaId, WIN_SPLIT)
|
||||
local nSplitType = WIN_SPLITTYPES.NULL
|
||||
if nSplitLayerId then
|
||||
nSplitType = EgtGetInfo( nSplitLayerId, WIN_SPLITTYPE, 'i')
|
||||
end
|
||||
if nSplitType == WIN_SPLITTYPES.FRENCH then
|
||||
-- se ha definito un preferito devo disegnare la ferramenta
|
||||
local sFavourite = EgtGetInfo( nAreaId, WIN_HDW_FAVOURITE) or WIN_HDW_NULL
|
||||
if sFavourite ~= WIN_HDW_NULL then
|
||||
-- recupero tutte le sottoaree di tipo anta
|
||||
local vSashes = {}
|
||||
local vStack = EgtGetNameInGroup( nAreaId, WIN_AREA .. '*')
|
||||
local i = 1
|
||||
while vStack[i] do
|
||||
local nType = EgtGetInfo( vStack[i], WIN_AREATYPE, 'i')
|
||||
if nType == WIN_AREATYPES.SASH then
|
||||
table.insert( vSashes, vStack[i])
|
||||
else
|
||||
local vChildren = EgtGetNameInGroup( vStack[i], WIN_AREA .. '*')
|
||||
vStack = EgtJoinTables( vStack, vChildren)
|
||||
end
|
||||
end
|
||||
-- disegno la ferramenta su tutte le ante
|
||||
for i = 1, #vSashes do
|
||||
DrawSashHardware( vSashes[i], nAreaId, nAuxLayerId)
|
||||
end
|
||||
end
|
||||
return
|
||||
|
||||
else
|
||||
-- verifico se ci sono sotto-aree
|
||||
local nChildAreaId = EgtGetFirstNameInGroup( nAreaId, WIN_AREA .. '*')
|
||||
while nChildAreaId do
|
||||
-- lancio verifica di quell'area
|
||||
DrawHardware( nChildAreaId, nAuxLayerId)
|
||||
nChildAreaId = EgtGetNextName( nChildAreaId, WIN_AREA .. '*')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
----------------------------------- ACCESSORI ----------------------------------
|
||||
@@ -5490,5 +5534,93 @@ function WinCalculate.AddAccessories( nAreaId, bDraw)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
------------------------------ FUNZIONI ----------------------------------------
|
||||
----------------------------------------------------------------------------------
|
||||
-- funzione che crea tutti i pezzi della finestra partendo dal telaio
|
||||
function WinCalculate.CreatePartFromArea( nFrameId)
|
||||
-- assegno il tipo di profilo alle curve del base outline
|
||||
CalculateAreaProfileType( nFrameId)
|
||||
-- calcolo outline a partire dal base outline
|
||||
CalculateAreaOutline( nFrameId)
|
||||
-- creo pezzi
|
||||
s_nSashNbr = 0 -- resetto il numero di ante del progetto
|
||||
CalculateAreaParts( nFrameId)
|
||||
-- calcolo le spine
|
||||
CalculateAreaDowels( nFrameId)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- funzione che ricalcola i solidi ( per cambio modalità visualizzazione)
|
||||
function WinCalculate.RecalcSolids( nFrameId)
|
||||
|
||||
-- scorro tutti i pezzi
|
||||
local nPartId = EgtGetFirstPart()
|
||||
while nPartId do
|
||||
-- se solidi non vanno calcolati elimino semplicemente il gruppo dei solidi da ogni pezzo
|
||||
if not s_bCalcSolid then
|
||||
local nSolidLayId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) or GDB_ID.NULL
|
||||
EgtErase( nSolidLayId)
|
||||
|
||||
-- ricalcolo dei solidi
|
||||
else
|
||||
-- se fill, lo uso per ricalcolare strip
|
||||
if EgtExistsInfo( nPartId, WIN_FILLTYPE) then
|
||||
local nAreaId = EgtGetInfo( nPartId, WIN_AREA, 'i')
|
||||
local nParentAreaId = EgtGetParent( nAreaId)
|
||||
local nParentOutlineLayId = EgtGetFirstNameInGroup( nParentAreaId, WIN_OUTLINE)
|
||||
local vParentOutlines = EgtGetAllInGroup( nParentOutlineLayId)
|
||||
for i = 1, #vParentOutlines do
|
||||
CreateStripFromOutline( nParentAreaId, vParentOutlines[i])
|
||||
end
|
||||
|
||||
-- verifico se solido da calcolare
|
||||
local nSolidLayId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID)
|
||||
if not nSolidLayId then
|
||||
local nOutlineLayId = EgtGetFirstNameInGroup( nAreaId, WIN_OUTLINE)
|
||||
local nGeoLayId = EgtGetFirstNameInGroup( nPartId, WIN_GEO)
|
||||
CalcFillSolid( nPartId, nOutlineLayId, nGeoLayId)
|
||||
end
|
||||
|
||||
-- se pezzo, ricalcolo il suo solido
|
||||
else
|
||||
-- elimino gruppo dei solidi
|
||||
local nSolidLayId = EgtGetFirstNameInGroup( nPartId, WIN_SOLID) or GDB_ID.NULL
|
||||
EgtErase( nSolidLayId)
|
||||
-- ricalcolo il solido principale
|
||||
local nOutlineId = EgtGetInfo( nPartId, WIN_REF_OUTLINE, 'i')
|
||||
local nSolidId = CalcSolid( nPartId, nOutlineId)
|
||||
-- aggiungo lavorazioni
|
||||
local nProcLayId = EgtGetFirstNameInGroup( nPartId, WIN_PRC)
|
||||
local vProc = EgtGetAllInGroup( nProcLayId)
|
||||
for i = 1, #vProc do
|
||||
local nType = EgtGetInfo( vProc[i], WIN_PRC_FEATURE_TYPE)
|
||||
local nProfilingType = EgtGetInfo( vProc[i], WIN_PRC_PROFILE_INFO)
|
||||
if nType == WIN_PRC_TYPE.HOLE or ( nType == WIN_PRC_TYPE.PROFILING and nProfilingType == WIN_PRC_PROFILE_TYPE.GENERIC) then
|
||||
UpdateSolidWithProcessingSurf( vProc[i], nSolidId, nProcLayId)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
nPartId = EgtGetNextPart( nPartId)
|
||||
end
|
||||
|
||||
-- accessori e ferramenta
|
||||
local nAuxGrp = EgtGetFirstNameInGroup( GDB_ID.ROOT, WIN_AUX)
|
||||
if not s_bCalcSolid then
|
||||
EgtErase( nAuxGrp or GDB_ID.NULL)
|
||||
elseif not nAuxGrp then
|
||||
nAuxGrp = GetAuxLayer()
|
||||
-- ferramenta
|
||||
DrawHardware( nFrameId, nAuxGrp)
|
||||
-- accessori
|
||||
WinCalculate.AddAccessories( nFrameId, true)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
return WinCalculate
|
||||
|
||||
@@ -202,6 +202,12 @@ local function WinCalculate_CreatePartFromArea()
|
||||
end
|
||||
_G.WinCalculate_CreatePartFromArea = WinCalculate_CreatePartFromArea
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
local function WinCalculate_RecalcSolids()
|
||||
WinCalculate.RecalcSolids( WDG.FRAMEID)
|
||||
end
|
||||
_G.WinCalculate_RecalcSolids = WinCalculate_RecalcSolids
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
local function WinCalculate_AddHardware()
|
||||
WinCalculate.AddHardware( WDG.FRAMEID)
|
||||
|
||||
Reference in New Issue
Block a user