Files
EgtCAM5/Utility/SelData.vb
Dario Sassi 2ac342eb89 EgtCAM5 :
- modifiche per visualizzare AUXVIEW di lavorazione quando questa è corrente.
2020-11-28 18:51:50 +00:00

162 lines
5.2 KiB
VB.net

Imports System.Collections.ObjectModel
Imports EgtUILib
Module SelData
Private Class SelData
Friend m_nId As Integer
Friend m_nSub As Integer
Friend m_nSel As Integer
Sub New()
m_nId = GDB_ID.NULL
m_nSub = -1
m_nSel = GDB_ID.NULL
End Sub
Sub New(nId As Integer, nSub As Integer, nSel As Integer)
m_nId = nId
m_nSub = nSub
m_nSel = nSel
End Sub
End Class
Private m_IdSub As New List(Of SelData)
Private m_SelGrpId As Integer = GDB_ID.NULL
Friend Sub ClearIdSub()
RemoveSelGroup()
m_IdSub.Clear()
End Sub
Friend Sub VerifyIdSub()
' Elimino i record con identificativi di entità non selezionate
Dim i As Integer = 0
Do While i < m_IdSub.Count() - 1
If Not EgtIsSelectedObj( m_IdSub( i).m_nId) Then
EgtErase( m_IdSub( i).m_nSel)
m_IdSub.RemoveAt( i)
Else
i += 1
End If
Loop
End Sub
Friend Function AddIdSub(nId As Integer, nSub As Integer) As Boolean
' Verifico se la coppia Id,Sub è già in lista
For i As Integer = 0 To m_IdSub.Count() - 1
If m_IdSub(i).m_nId = nId And m_IdSub(i).m_nSub = nSub Then Return True
Next
' Visualizzo contorno faccia
Dim nSelId As Integer = CreateFacetOrChunkOutline( nId, nSub)
' Non trovato, aggiungo un nuovo record
m_IdSub.Add(New SelData( nId, nSub, nSelId))
Return True
End Function
Friend Function RemoveIdSub( nId As Integer, nSub As Integer) As Boolean
' Ricerca ed eliminazione del record con la coppia Id,Sub da rimuovere
For i As Integer = 0 To m_IdSub.Count() - 1
If m_IdSub( i).m_nId = nId And m_IdSub( i).m_nSub = nSub Then
EgtErase( m_IdSub( i).m_nSel)
m_IdSub.RemoveAt( i)
Exit For
End If
Next
Return True
End Function
Friend Function RemoveId( nId As Integer) As Boolean
' Ricerca ed eliminazione di record con identificativo da rimuovere
For i As Integer = m_IdSub.Count() - 1 To 0 Step -1
If m_IdSub( i).m_nId = nId Then
EgtErase( m_IdSub( i).m_nSel)
m_IdSub.RemoveAt( i)
End If
Next
Return True
End Function
Friend Function FindIdSub( nId As Integer, nSub As Integer) As Boolean
For i As Integer = 0 To m_IdSub.Count() - 1
If m_IdSub(i).m_nId = nId And m_IdSub(i).m_nSub = nSub Then Return True
Next
Return False
End Function
Friend Function FindId(nId As Integer) As Boolean
For i As Integer = 0 To m_IdSub.Count() - 1
If m_IdSub(i).m_nId = nId Then Return True
Next
Return False
End Function
Friend Function GetIdSubCount() As Integer
Return m_IdSub.Count()
End Function
Friend Function GetIdSub(nInd As Integer, ByRef nId As Integer, ByRef nSub As Integer) As Boolean
If nInd < 0 Or nInd > m_IdSub.Count() - 1 Then
nId = GDB_ID.NULL
Return False
End If
nId = m_IdSub(nInd).m_nId
nSub = m_IdSub(nInd).m_nSub
Return True
End Function
Friend Function GetAllIdSub(ByRef vId() As Integer, ByRef vSub() As Integer) As Boolean
Dim MyId(m_IdSub.Count() - 1) As Integer
Dim MySub(m_IdSub.Count() - 1) As Integer
For i As Integer = 0 To m_IdSub.Count() - 1
MyId(i) = m_IdSub(i).m_nId
MySub(i) = m_IdSub(i).m_nSub
Next
vId = MyId
vSub = MySub
Return True
End Function
Private Function VerifySelGroup() As Boolean
If m_SelGrpId <> GDB_ID.NULL Then Return True
Dim bEnMod As Boolean = EgtGetEnableModified()
EgtDisableModified()
m_SelGrpId = EgtCreateGroup( GDB_ID.ROOT)
EgtSetName( m_SelGrpId, "$$SELDATA")
EgtSetLevel( m_SelGrpId, GDB_LV.TEMP)
EgtUnselectableAdd( m_SelGrpId)
If bEnMod Then EgtEnableModified()
Return ( m_SelGrpId <> GDB_ID.NULL)
End Function
Private Sub RemoveSelGroup()
If m_SelGrpId = GDB_ID.NULL Then Return
Dim bEnMod As Boolean = EgtGetEnableModified()
EgtDisableModified()
EgtUnselectableRemove(m_SelGrpId)
EgtErase(m_SelGrpId)
m_SelGrpId = GDB_ID.NULL
If bEnMod Then EgtEnableModified()
End Sub
Private Function CreateFacetOrChunkOutline( nId As Integer, nFac As Integer) As Integer
VerifySelGroup()
Dim bEnMod As Boolean = EgtGetEnableModified()
EgtDisableModified()
Dim nCount As Integer
Dim nFirstId As Integer = GDB_ID.NULL
If EgtGetType( nId) = GDB_TY.SRF_MESH Then
nFirstId = EgtExtractSurfTmFacetLoops( nId, nFac, m_SelGrpId, nCount)
Else
nFirstId = EgtExtractSurfFrChunkLoops( nId, nFac, m_SelGrpId, nCount)
End If
If nFirstId <> GDB_ID.NULL Then
EgtSetColor( nFirstId, New Color3d( 255, 0,0))
For nCrvId As Integer = nFirstId + 1 To nFirstId + nCount - 1
EgtErase( nCrvId)
Next
End If
If bEnMod Then EgtEnableModified()
Return nFirstId
End Function
End Module