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:
+76
-69
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user