- in NestProcess modifiche per nestare pezzi senza alternative
This commit is contained in:
+74
-45
@@ -188,7 +188,7 @@ end
|
||||
-- JobPool (lista di tutti i singoli pezzi, multipli compresi, da nestare)
|
||||
local PartTemplates = {}
|
||||
|
||||
function PartTemplates:GetInfoFromPart( id, sStateWithSide)
|
||||
function PartTemplates:GetStateInfoFromPart( id, sStateWithSide)
|
||||
local OffsetX = {}
|
||||
local vtN
|
||||
|
||||
@@ -219,58 +219,84 @@ function PartTemplates:AddPart( id)
|
||||
dMaxJobLength = self[id].dLength
|
||||
end
|
||||
|
||||
local States = { '1000', '0010', '1000_INV', '0010_INV' }
|
||||
-- info eventuali rotazioni / inversioni custom e forzature manuali
|
||||
local bIsManualFlipRot = ( ( EgtGetInfo( id, 'MANUALROT', 'i') or 0) == 1) or ( ( EgtGetInfo( id, 'MANUALFLIP', 'i') or 0) == 1)
|
||||
|
||||
for _, sState in ipairs(States) do
|
||||
local OffsetXHead, vtNHead = self:GetInfoFromPart( id, 'ALT' .. sState .. '_H')
|
||||
local OffsetXTail, vtNTail = self:GetInfoFromPart( id, 'ALT' .. sState .. '_T')
|
||||
if not bIsManualFlipRot then
|
||||
|
||||
if OffsetXHead or OffsetXTail then
|
||||
local States = { '1000', '0010', '1000_INV', '0010_INV' }
|
||||
|
||||
if not OffsetXHead then
|
||||
OffsetXHead = { 0, 0, 0, 0}
|
||||
vtNHead = Vector3d( 1, 0, 0)
|
||||
end
|
||||
if not OffsetXTail then
|
||||
OffsetXTail = { 0, 0, 0, 0}
|
||||
vtNTail = Vector3d( -1, 0, 0)
|
||||
end
|
||||
for _, sState in ipairs(States) do
|
||||
local OffsetXHead, vtNHead = self:GetStateInfoFromPart( id, 'ALT' .. sState .. '_H')
|
||||
local OffsetXTail, vtNTail = self:GetStateInfoFromPart( id, 'ALT' .. sState .. '_T')
|
||||
|
||||
self[id].States[sState] = {}
|
||||
local State = self[id].States[sState]
|
||||
if OffsetXHead or OffsetXTail then
|
||||
|
||||
State.Head = {
|
||||
OffsetX = OffsetXHead,
|
||||
vtN = vtNHead,
|
||||
vtNXabs = abs( vtNHead:getX())
|
||||
}
|
||||
State.Tail = {
|
||||
OffsetX = OffsetXTail,
|
||||
vtN = vtNTail,
|
||||
vtNXabs = abs( vtNTail:getX())
|
||||
}
|
||||
|
||||
-- overlap massimi in testa e in coda per questo pezzo
|
||||
local dMaxHeadRecess = 0
|
||||
for i = 1, 4 do
|
||||
if State.Head.OffsetX[i] > dMaxHeadRecess + 10 * GEO.EPS_SMALL then
|
||||
dMaxHeadRecess = State.Head.OffsetX[i]
|
||||
if not OffsetXHead then
|
||||
OffsetXHead = { 0, 0, 0, 0}
|
||||
vtNHead = Vector3d( 1, 0, 0)
|
||||
end
|
||||
end
|
||||
State.dMaxHeadRecess = dMaxHeadRecess
|
||||
|
||||
local dMaxTailRecess = 0
|
||||
for i = 1, 4 do
|
||||
if abs( State.Tail.OffsetX[i]) > dMaxTailRecess + 10 * GEO.EPS_SMALL then
|
||||
dMaxTailRecess = abs( State.Tail.OffsetX[i])
|
||||
if not OffsetXTail then
|
||||
OffsetXTail = { 0, 0, 0, 0}
|
||||
vtNTail = Vector3d( -1, 0, 0)
|
||||
end
|
||||
|
||||
self[id].States[sState] = {}
|
||||
local State = self[id].States[sState]
|
||||
|
||||
State.Head = {
|
||||
OffsetX = OffsetXHead,
|
||||
vtN = vtNHead,
|
||||
vtNXabs = abs( vtNHead:getX())
|
||||
}
|
||||
State.Tail = {
|
||||
OffsetX = OffsetXTail,
|
||||
vtN = vtNTail,
|
||||
vtNXabs = abs( vtNTail:getX())
|
||||
}
|
||||
|
||||
-- overlap massimi in testa e in coda per questo pezzo
|
||||
local dMaxHeadRecess = 0
|
||||
for i = 1, 4 do
|
||||
if State.Head.OffsetX[i] > dMaxHeadRecess + 10 * GEO.EPS_SMALL then
|
||||
dMaxHeadRecess = State.Head.OffsetX[i]
|
||||
end
|
||||
end
|
||||
State.dMaxHeadRecess = dMaxHeadRecess
|
||||
|
||||
local dMaxTailRecess = 0
|
||||
for i = 1, 4 do
|
||||
if abs( State.Tail.OffsetX[i]) > dMaxTailRecess + 10 * GEO.EPS_SMALL then
|
||||
dMaxTailRecess = abs( State.Tail.OffsetX[i])
|
||||
end
|
||||
end
|
||||
State.dMaxTailRecess = dMaxTailRecess
|
||||
if dMaxTailRecess > self[id].dMaxGlobalTailRecess + 10 * GEO.EPS_SMALL then
|
||||
self[id].dMaxGlobalTailRecess = dMaxTailRecess
|
||||
end
|
||||
end
|
||||
State.dMaxTailRecess = dMaxTailRecess
|
||||
if dMaxTailRecess > self[id].dMaxGlobalTailRecess + 10 * GEO.EPS_SMALL then
|
||||
self[id].dMaxGlobalTailRecess = dMaxTailRecess
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- se nessuna alternativa stato fisso
|
||||
if not next( self[id].States) then
|
||||
|
||||
self[id].States['FIXED'] = {}
|
||||
local State = self[id].States['FIXED']
|
||||
|
||||
State.Head = {
|
||||
OffsetX = { 0, 0, 0, 0},
|
||||
vtN = Vector3d( 1, 0, 0),
|
||||
vtNXabs = 1
|
||||
}
|
||||
State.Tail = {
|
||||
OffsetX = { 0, 0, 0, 0},
|
||||
vtN = Vector3d( -1, 0, 0),
|
||||
vtNXabs = 1
|
||||
}
|
||||
State.dMaxHeadRecess = 0
|
||||
State.dMaxTailRecess = 0
|
||||
end
|
||||
end
|
||||
|
||||
-- ordinamento JobPool per lunghezza decrescente dei pezzi
|
||||
@@ -318,8 +344,11 @@ local function CalculateMove( Beam, dPartLength, sState, State)
|
||||
end
|
||||
end
|
||||
|
||||
-- il massimo overlap va ridotto dello spessore lama
|
||||
local dProjectedBlade = CONFIG.BLADE_THICKNESS / min( Beam.vtNXabs, State.Tail.vtNXabs)
|
||||
-- Il massimo overlap va ridotto dello spessore lama solo se ci sono già altri pezzi sulla barra
|
||||
local dProjectedBlade = 0
|
||||
if #Beam.NestedParts > 0 then
|
||||
dProjectedBlade = CONFIG.BLADE_THICKNESS / min( Beam.vtNXabs, State.Tail.vtNXabs)
|
||||
end
|
||||
dSafeOverlap = dSafeOverlap - dProjectedBlade
|
||||
|
||||
-- lunghezza barra rimasta (se negativo non ci sta)
|
||||
|
||||
Reference in New Issue
Block a user