98b6563e57
-> verificate coordinate di prelievo e deposito (Tab1 e Tab2) -> scatta foto -> gestione di preparazione pallet (nesting 1d) -> gestione mancato vuoto su tavola 1 -> gestione di mancato vuoto tavola 2.
133 lines
5.2 KiB
VB.net
133 lines
5.2 KiB
VB.net
Imports EgtUILib
|
|
|
|
Module GeomCalc
|
|
|
|
Public Function GetRegionOutLoop(nRegId As Integer, nDestGrpId As Integer) As Integer
|
|
Dim nCount As Integer = 0
|
|
Dim nOutId As Integer = EgtExtractSurfFrChunkLoops(nRegId, 0, nDestGrpId, nCount)
|
|
If nOutId <> GDB_ID.NULL Then
|
|
For nId As Integer = nOutId + 1 To nOutId + nCount - 1
|
|
EgtErase(nId)
|
|
Next
|
|
End If
|
|
Return nOutId
|
|
End Function
|
|
|
|
Public Function CreateSolidFromRegion(nRegId As Integer, vtExtr As Vector3d, nDestGrpId As Integer) As Integer
|
|
Dim nOutId As Integer = GetRegionOutLoop(nRegId, nDestGrpId)
|
|
If nOutId = GDB_ID.NULL Then Return GDB_ID.NULL
|
|
Dim nSolId As Integer = EgtCreateSurfTmByRegionExtrusion(nDestGrpId, 1, {nOutId}, vtExtr,
|
|
100 * EPS_SMALL, GDB_RT.GLOB)
|
|
EgtErase(nOutId)
|
|
Return nSolId
|
|
End Function
|
|
|
|
Public Function GetMaxSideId(nPartId As Integer) As Integer
|
|
Dim nId As Integer = EgtGetFirstInGroup(nPartId)
|
|
Dim sName As String = String.Empty
|
|
While nId <> GDB_ID.NULL
|
|
EgtGetName(nId, sName)
|
|
If sName = NAME_OUTLOOP Then
|
|
Exit While
|
|
End If
|
|
nId = EgtGetNext(nId)
|
|
End While
|
|
Dim nIdMax As Integer = EgtGetFirstInGroup(nId)
|
|
Dim nIdCurr As Integer = nIdMax
|
|
Dim dLen As Double
|
|
Dim dLenMax As Double
|
|
EgtCurveLength(nIdMax, dLen)
|
|
dLenMax = dLen
|
|
nIdCurr = EgtGetNext(nIdCurr)
|
|
While nIdCurr <> GDB_ID.NULL
|
|
EgtCurveLength(nIdCurr, dLen)
|
|
If dLen > dLenMax Then
|
|
nIdMax = nIdCurr
|
|
End If
|
|
nIdCurr = EgtGetNext(nIdCurr)
|
|
End While
|
|
Return nIdMax
|
|
End Function
|
|
|
|
Friend Function UpdateSolidForDrip(nPartId As Integer) As Boolean
|
|
' se non ci sono lavorazioni da sotto nel pezzo si esce
|
|
If EgtGetGroupObjs(EgtGetFirstNameInGroup(nPartId, NAME_DRIPCUT)) = 0 AndAlso
|
|
EgtGetGroupObjs(EgtGetFirstNameInGroup(nPartId, NAME_UNDERDRILL)) = 0 Then Return True
|
|
' Recupero lo spessore del grezzo
|
|
Dim dThick As Double = EstCalc.GetRawHeight()
|
|
' Recupero layer Regione
|
|
Dim nGrpRegId As Integer = EgtGetFirstNameInGroup(nPartId, ConstMach.NAME_REGION)
|
|
' Elimino eventuale vecchio solido
|
|
EgtErase(EgtGetFirstNameInGroup(nGrpRegId, NAME_DRIP_SOLID))
|
|
' Recupero la regione del pezzo
|
|
Dim nRegId As Integer = EgtGetFirstInGroup(nGrpRegId)
|
|
While nRegId <> GDB_ID.NULL
|
|
If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then Exit While
|
|
nRegId = EgtGetNext(nRegId)
|
|
End While
|
|
' Ne derivo il solido di estrusione
|
|
Dim nSolId As Integer = CreateSolidFromRegion(nRegId, -dThick * Vector3d.Z_AX(), nGrpRegId)
|
|
EgtSetName(nSolId, NAME_DRIP_SOLID)
|
|
EgtSetColor(nSolId, New Color3d(0, 255, 255, 25))
|
|
EgtSetStatus(nSolId, GDB_ST.OFF)
|
|
Return nSolId <> GDB_ID.NULL
|
|
End Function
|
|
|
|
Friend Function EraseSolidForDrip(nPartId As Integer) As Boolean
|
|
' Recupero layer Regione
|
|
Dim nGrpRegId As Integer = EgtGetFirstNameInGroup(nPartId, ConstMach.NAME_REGION)
|
|
' Elimino eventuale vecchio solido
|
|
EgtErase(EgtGetFirstNameInGroup(nGrpRegId, NAME_DRIP_SOLID))
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function GetPartArea(nPartId As Integer) As Double
|
|
Dim nRegId As Integer = EgtGetFirstNameInGroup(nPartId, ConstMach.NAME_REGION)
|
|
Dim nSurfId As Integer = EgtGetFirstInGroup(nRegId)
|
|
While nSurfId <> GDB_ID.NULL And EgtGetType(nSurfId) <> GDB_TY.SRF_FRGN
|
|
nSurfId = EgtGetNext(nSurfId)
|
|
End While
|
|
Dim dArea As Double = 0
|
|
EgtSurfFrGrossArea(nSurfId, dArea)
|
|
Return dArea
|
|
End Function
|
|
|
|
Public Function EgtGetPartCenter(nPartId As Integer, ByRef ptCenter As Point3d) As Boolean
|
|
Dim nGrpRegId As Integer = EgtGetFirstNameInGroup(nPartId, ConstMach.NAME_REGION)
|
|
Dim nRegId As Integer = EgtGetFirstInGroup(nGrpRegId)
|
|
While nRegId <> GDB_ID.NULL
|
|
If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then Exit While
|
|
nRegId = EgtGetNext(nRegId)
|
|
End While
|
|
Return EgtCentroid(nRegId, GDB_ID.ROOT, ptCenter)
|
|
End Function
|
|
|
|
Public Function GetPointInTableRef(ByVal ptCenter As Point3d, ByRef ptTable As Point3d) As Point3d
|
|
' setto il riferimento del tavolo1 (passo l'indice della tavola e il punto su cui salvare l'informazione)
|
|
If Not EgtGetTableRef(1, ptTable) Then Return Nothing
|
|
Dim ptResult As New Point3d
|
|
ptResult.x = ptCenter.x - ptTable.x
|
|
ptResult.y = ptCenter.y - ptTable.y
|
|
ptResult.z = ptCenter.z - ptTable.z
|
|
Return ptResult
|
|
End Function
|
|
|
|
' restituisce l'Id della regione del pezzo
|
|
Public Function GetRegionFromPart(IdPart As Integer) As Integer
|
|
Dim nRegId As Integer = EgtGetFirstNameInGroup(IdPart, ConstGen.NAME_REGION)
|
|
If nRegId = GDB_ID.NULL Then
|
|
Return -1
|
|
End If
|
|
' Cerco prima regione nel layer
|
|
Dim nId = EgtGetFirstInGroup(nRegId)
|
|
While nId <> GDB_ID.NULL
|
|
If EgtGetType(nId) = GDB_TY.SRF_FRGN Then
|
|
Return nId
|
|
End If
|
|
nId = EgtGetNext(nId)
|
|
End While
|
|
Return -1
|
|
End Function
|
|
|
|
End Module
|