DataWall :

- in Drill vanno accettati fori orizzontali sul bordo anche senza foratori orizzontali speciali
- in FreeContour corretto riconoscimento lato esterno per percorsi aperti
- in LapJoint gestione gorge con lama
- migliorie varie a flip e nest.
This commit is contained in:
DarioS
2022-03-14 20:36:32 +01:00
parent 332011435b
commit 46345f7fef
7 changed files with 319 additions and 151 deletions
+76 -69
View File
@@ -220,11 +220,12 @@ local function IdentifyLJFromBottom( Proc, bCompute, nOutlineGrp)
local nFacInd, dElev, nFacInd2, dElev2 = WL.GetFaceWithMostAdj( Proc.Id, Proc.PartId)
if nFacInd ~= -2 and nFacInd ~= GDB_ID.NULL then
vtFace[1] = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd, GDB_ID.ROOT)
if not ( vtFace[1]:getZ() > dMinCompZ or vtFace[1]:getZ() < - dMinCompZ) then
local nOtherFace = -1
for nIdx = 0, 3 do
local vtN2 = EgtSurfTmFacetNormVersor( Proc.Id, nIdx, GDB_ID.ROOT)
if vtN2:getZ() > dMinCompZ or vtN2:getZ() < - dMinCompZ then
if vtN2:getZ() > dMinCompZ or vtN2:getZ() < - dMinCompZ then
nOtherFace = nIdx
break
end
@@ -240,7 +241,20 @@ local function IdentifyLJFromBottom( Proc, bCompute, nOutlineGrp)
nRectId = CreateToolRectangle( ptP1, 0, ptP2, WD.SIDEMILL_DIAM_DOWN / 2, vtFace[1], WD.SIDEMILL_DIAM_DOWN, nOutlineGrp)
end
end
end
end
if nFacInd2 and nFacInd2 ~= GDB_ID.NULL then
local vtFace2 = EgtSurfTmFacetNormVersor( Proc.Id, nFacInd2, GDB_ID.ROOT)
if ( vtFace2:getZ() < - dMinCompZ or vtFace[1]:getZ() < - dMinCompZ) then
bLJFromBottom = true
if vtFace[1]:getZ() < -dMinCompZ then vtFace[1] = vtFace2 end
if bCompute then
local bAdj, ptP1, ptP2 = EgtSurfTmFacetsContact( Proc.Id, nFacInd, nFacInd2, GDB_ID.ROOT)
nRectId = CreateToolRectangle( ptP1, 0, ptP2, 0, vtFace[1], WD.SIDEMILL_DIAM_DOWN, nOutlineGrp)
end
end
end
end
end
@@ -257,6 +271,8 @@ local function IdentifyLJFromTop( Proc, bCompute, nOutlineGrp)
local bLJFromTop = false
local vtFace, nRectId
if not WD.SIDEMILL_DIAM_UP or WD.SIDEMILL_DIAM_UP < GEO.EPS_SMALL then return end
local dMinComp = 0.95
if Proc.Fct == 2 then
local vtN = {}
@@ -264,7 +280,7 @@ local function IdentifyLJFromTop( Proc, bCompute, nOutlineGrp)
vtN[2] = EgtSurfTmFacetNormVersor( Proc.Id, 1, GDB_ID.ROOT)
-- se rivolto verso l'alto
if ( vtN[1]:getZ() > dMinComp or vtN[2]:getZ() > dMinComp and WD.SIDEMILL_DIAM_UP > 0) then
if (vtN[1]:getZ() > dMinComp or vtN[2]:getZ() > dMinComp) then
bLJFromTop = true
vtFace = EgtIf( vtN[1]:getZ() > dMinComp, vtN[2], vtN[1])
if bCompute then
@@ -420,52 +436,57 @@ local function ComputeToolOutlines( nPartId)
-- lati inclinati free contour
if FreeContour.Identify( Proc) then
for nInd = 0, Proc.Fct - 1 do
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nInd, GDB_ID.ROOT)
-- se inclinato
if abs( vtN:getZ()) > GEO.EPS_SMALL then
local bUnderCut = vtN:getZ() < - GEO.EPS_SMALL
local bPocket = EgtGetInfo( Proc.Id, 'PCKT', 'b')
if not bPocket then
for nInd = 0, Proc.Fct - 1 do
local vtN = EgtSurfTmFacetNormVersor( Proc.Id, nInd, GDB_ID.ROOT)
-- se inclinato
if abs( vtN:getZ()) > GEO.EPS_SMALL then
local bUnderCut = vtN:getZ() < - GEO.EPS_SMALL
local dCosAlpha = (vtN ^ Z_AX()):len()
local dVal
if bUnderCut then
dVal = ( NEST.OFFSET + 0.1) / dCosAlpha
else
dVal = ( NEST.OFFSET + 0.1) * dCosAlpha
end
local frRect = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nInd, GDB_ID.ROOT)
local vtX = frRect:getVersX()
local vtY = Z_AX() ^ vtX
local frLoc = Frame3d( ORIG(), vtX, vtY, Z_AX())
vtN:toLoc( frLoc)
local dCosAlpha = vtN * Y_AX()
local dVal
if bUnderCut then
dVal = ( NEST.OFFSET + 0.1) / dCosAlpha
local frLoc, dDimX, dDimY = EgtSurfTmFacetMinAreaRectangle( Proc.Id, nInd, GDB_ID.ROOT)
local b3Face = EgtSurfTmGetFacetBBoxRef( Proc.Id, nInd, GDB_BB.STANDARD, frLoc)
local ptA = b3Face:getMin()
local ptC = b3Face:getMax()
local ptB = ptA + dDimY * Y_AX()
local ptD = ptA + dDimX * X_AX()
ptA:toGlob( frLoc)
ptB:toGlob( frLoc)
ptC:toGlob( frLoc)
ptD:toGlob( frLoc)
local ptP1, ptP2
if bUnderCut then
ptP1 = EgtIf( ptA:getZ() > ptC:getZ(), ptA, ptC)
ptP2 = EgtIf( ptB:getZ() > ptD:getZ(), ptB, ptD)
else
dVal = ( NEST.OFFSET + 0.1) * dCosAlpha
end
ptP1 = EgtIf( ptA:getZ() < ptC:getZ(), ptA, ptC)
ptP2 = EgtIf( ptB:getZ() < ptD:getZ(), ptB, ptD)
end
local b3Face = EgtSurfTmGetFacetBBoxRef( Proc.Id, nInd, GDB_BB.STANDARD, frLoc)
local dExtra = NEST.OFFSET / 2
local dDim = b3Face:getDimX() + 2 * dExtra
local vtDir = ptP2 - ptP1
vtDir:normalize()
ptP1 = ptP1 - vtDir * 0.5 * NEST.OFFSET
ptP2 = ptP2 + vtDir * 0.5 * NEST.OFFSET
local vtNxy = Vector3d( vtN:getX(), vtN:getY(), 0)
vtNxy:normalize()
local ptP4 = ptP2 + dVal * vtNxy
local dCoordZ = EgtIf( bUnderCut, b3Face:getDimZ(), 0)
local ptP1
if ( dCosAlpha < 0) then
ptP1 = Point3d( b3Face:getMin():getX(), b3Face:getMin():getY(), dCoordZ)
else
ptP1 = Point3d( b3Face:getMax():getX(), b3Face:getMax():getY(), dCoordZ)
dDim = -1 * dDim
dExtra = -1 * dExtra
end
ptP1 = ptP1 - dExtra * X_AX()
local ptDir = ptP1 + dDim * X_AX()
local ptCross = ptDir + dVal * Y_AX()
ptP1:toGlob( frLoc)
ptDir:toGlob( frLoc)
ptCross:toGlob( frLoc)
local nRectId = EgtRectangle3P( nOutlineGrp, ptP1, ptCross, ptDir)
local nRectId = EgtRectangle3P( nOutlineGrp, ptP1, ptP4, ptP2)
EgtSetColor( nRectId, EgtStdColor("AQUA"))
if nRectId ~= GDB_ID.NULL then table.insert( ToolOutlineId, nRectId) end
end
end
end
end
end
end
end
@@ -999,7 +1020,7 @@ local function ClassifyAngles( nPartId, RawPart, sRefOrig, bLockedRot, dMinSheet
nAngle = 100
end
elseif ResLapJoint.Nbr == 4 then
elseif ResLapJoints.Nbr == 4 then
nAngle = 100
end
@@ -1335,19 +1356,6 @@ end
-- Funzione che sposta e aggiunge pezzi per nesting
local function AddRawParts(RawParts, vDoneManually)
-- -- creo tabella dei grezzi
-- for nIndex, nLen in pairs( LEN) do
-- table.insert(RawParts, {Len = nLen})
-- end
-- for nIndex, nWidth in pairs( WIDTH) do
-- RawParts[tonumber(nIndex)].Width = nWidth
-- end
-- for nIndex, nQty in pairs( QTY) do
-- RawParts[tonumber(nIndex)].Qty = nQty
-- end
-- for nIndex, nMaterial in pairs( MATERIAL) do
-- RawParts[tonumber(nIndex)].Material = nMaterial
-- end
local OUTLINE = "Outline"
for nIndex = 1, #RawParts do
@@ -1434,8 +1442,7 @@ local function AddParts(RawParts, vPartsDoneManually)
-- posiziono con il nesting solo quelli mancanti
nCount = nCount - nManuallyDone
end
nPartIndex = nPartIndex + 1
-- calcolo bbox pezzo per rotazioni
@@ -1821,17 +1828,17 @@ EgtAutoNestStart()
-- lista dei grezzi
local RawParts = {}
-- creo tabella dei grezzi
for nIndex, nLen in pairs( LEN) do
table.insert(RawParts, {Len = nLen})
for sIndex, dLen in pairs( LEN) do
RawParts[tonumber(sIndex)] = { Len = dLen}
end
for sIndex, dWidth in pairs( WIDTH) do
RawParts[tonumber(sIndex)].Width = dWidth
end
for nIndex, nWidth in pairs( WIDTH) do
RawParts[tonumber(nIndex)].Width = nWidth
for sIndex, nQty in pairs( QTY) do
RawParts[tonumber(sIndex)].Qty = nQty
end
for nIndex, nQty in pairs( QTY) do
RawParts[tonumber(nIndex)].Qty = nQty
end
for nIndex, nMaterial in pairs( MATERIAL) do
RawParts[tonumber(nIndex)].Material = nMaterial
for sIndex, sMaterial in pairs( MATERIAL) do
RawParts[tonumber(sIndex)].Material = sMaterial
end
--
@@ -1930,7 +1937,7 @@ if bNestingOk then
if RawParts[nIndex].PartId[nInd2] == nId then
EgtSetInfo(nMachGroup, "PANELLEN", RawParts[nIndex].Len)
EgtSetInfo(nMachGroup, "PANELWIDTH", RawParts[nIndex].Width)
EgtSetInfo(nMachGroup, "MATERIAL", RawParts[nIndex].Material)
EgtSetInfo(nMachGroup, "MATERIAL", NEST.MATERIAL)
EgtSetInfo(nMachGroup, "AUTONEST", 1)
-- scrivo dati per variabili P di comunicazione con la macchina in gruppo di lavorazione
EgtSetInfo( nMachGroup, "PRODID", NEST.PRODID)