|
|
|
@@ -8,6 +8,8 @@ Module VacuumCups
|
|
|
|
|
Private m_nVacId As Integer = GDB_ID.NULL
|
|
|
|
|
Private m_nRefId As Integer = GDB_ID.NULL
|
|
|
|
|
Private m_dPreferredRot As Double = 0
|
|
|
|
|
Private m_dPrefVertRotXMinus As Double = 0
|
|
|
|
|
Private m_dPrefVertRotXPlus As Double = 0
|
|
|
|
|
Private m_dDripRefAng As Double = 0
|
|
|
|
|
|
|
|
|
|
' Nome del gruppo temporaneo per le ventose
|
|
|
|
@@ -73,7 +75,10 @@ Module VacuumCups
|
|
|
|
|
m_nVacId = EgtCopyGlob(nLayId, m_nTempId)
|
|
|
|
|
If m_nVacId = GDB_ID.NULL Then Return False
|
|
|
|
|
' Angolo di rotazione preferito
|
|
|
|
|
EgtGetInfo( m_nVacId, KEY_VACLAY_PREFROT, m_dPreferredRot)
|
|
|
|
|
EgtGetInfo(m_nVacId, KEY_VACLAY_PREFROT, m_dPreferredRot)
|
|
|
|
|
' Angoli di rotazione preferiti per ventosa in verticale (lungo Y) a sinistra e a destra del centro tavola
|
|
|
|
|
EgtGetInfo(m_nVacId, KEY_VACLAY_PREFVROTXMINUS, m_dPrefVertRotXMinus)
|
|
|
|
|
EgtGetInfo(m_nVacId, KEY_VACLAY_PREFVROTXPLUS, m_dPrefVertRotXPlus)
|
|
|
|
|
' Direzione di riferimento per tagli Drip
|
|
|
|
|
EgtGetInfo( m_nVacId, KEY_VACLAY_DRIPREFDIR, m_dDripRefAng)
|
|
|
|
|
' Nascondo il gruppo ma rendo visibili le curve di contorno delle ventose
|
|
|
|
@@ -363,6 +368,9 @@ Module VacuumCups
|
|
|
|
|
If b3Vac.IsEmpty() Then Return INFINITO
|
|
|
|
|
' Se box maggiore di quello del pezzo, scarto soluzione
|
|
|
|
|
If b3Vac.Radius() > b3Raw.Radius() Then Return INFINITO
|
|
|
|
|
' Recupero l'area della tavola
|
|
|
|
|
Dim b3Tab As New BBox3d
|
|
|
|
|
EgtGetTableArea(1, b3Tab)
|
|
|
|
|
' Determino il movimento
|
|
|
|
|
vtMove = ptRawCen - b3Vac.Center()
|
|
|
|
|
b3Vac.Move(vtMove)
|
|
|
|
@@ -374,11 +382,19 @@ Module VacuumCups
|
|
|
|
|
frMinRect.VersX().ToSpherical(dLen, dAngVertDeg, dAngOrizzDeg)
|
|
|
|
|
dRotAngDeg = dAngOrizzDeg
|
|
|
|
|
If b3Vac.DimY() > b3Vac.DimX() + EPS_SMALL Then dRotAngDeg -= 90
|
|
|
|
|
Dim dPreferredRot As Double = m_dPreferredRot
|
|
|
|
|
If Math.Abs(dRotAngDeg - 90) < 45 Or Math.Abs(dRotAngDeg - 270) < 45 Then
|
|
|
|
|
If frMinRect.Orig().x < b3Tab.Center().x Then
|
|
|
|
|
dPreferredRot = m_dPrefVertRotXMinus
|
|
|
|
|
Else
|
|
|
|
|
dPreferredRot = m_dPrefVertRotXPlus
|
|
|
|
|
End If
|
|
|
|
|
End If
|
|
|
|
|
Dim dAngDelta As Double = If( Math.Abs( b3Vac.DimY() - b3Vac.DimX()) < 10 * EPS_SMALL, 90, 180)
|
|
|
|
|
While dRotAngDeg - m_dPreferredRot >= dAngDelta / 2
|
|
|
|
|
While dRotAngDeg - dPreferredRot >= dAngDelta / 2
|
|
|
|
|
dRotAngDeg -= dAngDelta
|
|
|
|
|
End While
|
|
|
|
|
While dRotAngDeg - m_dPreferredRot <= -dAngDelta / 2
|
|
|
|
|
While dRotAngDeg - dPreferredRot <= -dAngDelta / 2
|
|
|
|
|
dRotAngDeg += dAngDelta
|
|
|
|
|
End While
|
|
|
|
|
Else
|
|
|
|
@@ -431,8 +447,6 @@ Module VacuumCups
|
|
|
|
|
ptRef.Move(vtMove)
|
|
|
|
|
ptRef.Rotate(ptRotCen, Vector3d.Z_AX(), dRotAngDeg)
|
|
|
|
|
' Ne calcolo la distanza dal centro della tavola
|
|
|
|
|
Dim b3Tab As New BBox3d
|
|
|
|
|
EgtGetTableArea(1, b3Tab)
|
|
|
|
|
Dim dDist As Double = Point3d.DistXY(ptRef, b3Tab.Center())
|
|
|
|
|
Return dDist
|
|
|
|
|
End Function
|
|
|
|
|