Files
Nicola Pievani 98b6563e57 OmagVIEWPlus 2.2k1:
-> 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.
2020-11-20 19:48:51 +00:00

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