275 lines
13 KiB
VB.net
275 lines
13 KiB
VB.net
Imports EgtUILib
|
|
|
|
Public Class FiloTopUC
|
|
|
|
' Riferimento alla MainWindow
|
|
Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
|
|
' Riferimento alla pagina che ha aperto SideAngleUC
|
|
Private m_CallingPage As MainWindow.Pages
|
|
|
|
Private m_SelList As New List(Of Integer)
|
|
|
|
' Offset della sfilettatura
|
|
Private m_dFiloTopOffset As Double = 0
|
|
Friend ReadOnly Property FiloTopOffset As Double
|
|
Get
|
|
Return m_dFiloTopOffset
|
|
End Get
|
|
End Property
|
|
|
|
' Profondità della sfilettatura
|
|
Private m_dFiloTopDepth As Double = 0
|
|
Friend ReadOnly Property FiloTopDepth As Double
|
|
Get
|
|
Return m_dFiloTopDepth
|
|
End Get
|
|
End Property
|
|
|
|
' esegue l'arrotindamento sugli angoli del percorso utensile
|
|
Private m_bCornerradius As Boolean = False
|
|
Friend ReadOnly Property bCornerRadius As Boolean
|
|
Get
|
|
Return m_bCornerradius
|
|
End Get
|
|
End Property
|
|
|
|
Private Sub FiloTopUC_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
|
' Imposto riferimenti ad altre pagine
|
|
m_CallingPage = m_MainWindow.m_ActivePage
|
|
|
|
' Imposto messaggi
|
|
ParameterTxBl.Text = EgtMsg(90460) ' Offset
|
|
Parameter2TxBl.Text = EgtMsg(90461) ' Affondamento
|
|
Parameter3TxBl.Text = EgtMsg(91138) ' Arrotonda
|
|
|
|
If m_CallingPage = MainWindow.Pages.Draw Then
|
|
' Imposto questa come pagina correntemente visualizzata nella drawpage
|
|
m_MainWindow.m_DrawPageUC.m_ActiveComponentPage = DrawPageUC.Pages.FiloTop
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_MainWindow.m_DrawPageUC.DrawScene.GetCtx())
|
|
ElseIf m_CallingPage = MainWindow.Pages.Import Then
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_MainWindow.m_ImportPageUC.ImportScene.GetCtx())
|
|
End If
|
|
|
|
' Gestisco visualizzazione dei parametri
|
|
ParameterTxBl.Visibility = Windows.Visibility.Visible
|
|
Parameter2TxBx.Visibility = Windows.Visibility.Visible
|
|
Parameter3TxBl.Visibility = Windows.Visibility.Visible
|
|
|
|
' Aggiorno valori
|
|
m_dFiloTopOffset = GetPrivateProfileDouble(S_SIDES, K_FILOTOPOFFSET, 5, m_MainWindow.GetIniFile())
|
|
ParameterTxBx.Text = LenToString(m_dFiloTopOffset, 3)
|
|
m_dFiloTopDepth = GetPrivateProfileDouble(S_SIDES, K_FILOTOPDEPTH, 5, m_MainWindow.GetIniFile())
|
|
Parameter2TxBx.Text = LenToString(m_dFiloTopDepth, 3)
|
|
m_bCornerradius = GetPrivateProfileInt(S_SIDES, K_ROUNDOFF, 0, m_MainWindow.GetIniFile()) <> 0
|
|
Parameter3ChBx.IsChecked = m_bCornerradius
|
|
m_SelList.Clear()
|
|
End Sub
|
|
|
|
Private Sub FiloTopUC_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Private Sub ParameterTxBx_EgtClosed(sender As Object, e As EventArgs) Handles ParameterTxBx.EgtClosed
|
|
' Recupero il valore
|
|
StringToLen(ParameterTxBx.Text, m_dFiloTopOffset)
|
|
WritePrivateProfileString(S_SIDES, K_FILOTOPOFFSET, DoubleToString(m_dFiloTopOffset, 2), m_MainWindow.GetIniFile())
|
|
' Aggiorno affondamento del profilo
|
|
Dim nPartId As Integer = EgtGetFirstPart()
|
|
While nPartId <> GDB_ID.NULL
|
|
Dim nLayId As Integer = EgtGetFirstLayer(nPartId)
|
|
While nLayId <> GDB_ID.NULL
|
|
Dim sLayName As String = ""
|
|
If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then
|
|
EgtSetInfo(nLayId, INFO_OFFSET, m_dFiloTopOffset)
|
|
End If
|
|
nLayId = EgtGetNextLayer(nLayId)
|
|
End While
|
|
nPartId = EgtGetNextPart(nPartId)
|
|
End While
|
|
' aggiorno la preview
|
|
CreateFiloTopPreView(m_SelList, False)
|
|
End Sub
|
|
|
|
Private Sub Parameter2TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter2TxBx.EgtClosed
|
|
' Recupero il valore
|
|
StringToLen(Parameter2TxBx.Text, m_dFiloTopDepth)
|
|
WritePrivateProfileString(S_SIDES, K_FILOTOPDEPTH, DoubleToString(m_dFiloTopDepth, 2), m_MainWindow.GetIniFile())
|
|
' Aggiorno affondamento del profilo
|
|
Dim nPartId As Integer = EgtGetFirstPart()
|
|
While nPartId <> GDB_ID.NULL
|
|
Dim nLayId As Integer = EgtGetFirstLayer(nPartId)
|
|
While nLayId <> GDB_ID.NULL
|
|
Dim sLayName As String = ""
|
|
If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then
|
|
EgtSetInfo(nLayId, INFO_DEPTH, m_dFiloTopDepth)
|
|
End If
|
|
nLayId = EgtGetNextLayer(nLayId)
|
|
End While
|
|
nPartId = EgtGetNextPart(nPartId)
|
|
End While
|
|
End Sub
|
|
|
|
Private Sub Parameter3ChBx_Checked() Handles Parameter3ChBx.Click
|
|
' Assegno il valore
|
|
m_bCornerradius = Parameter3ChBx.IsChecked
|
|
WritePrivateProfileString(S_SIDES, K_ROUNDOFF, If(m_bCornerradius, "1", "0"), m_MainWindow.GetIniFile())
|
|
' Aggiorno le info del profilo
|
|
Dim nPartId As Integer = EgtGetFirstPart()
|
|
While nPartId <> GDB_ID.NULL
|
|
Dim nLayId As Integer = EgtGetFirstLayer(nPartId)
|
|
While nLayId <> GDB_ID.NULL
|
|
Dim sLayName As String = ""
|
|
If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then
|
|
EgtSetInfo(nLayId, INFO_ROUNDOFF, If(m_bCornerradius, 1, 0))
|
|
End If
|
|
nLayId = EgtGetNextLayer(nLayId)
|
|
End While
|
|
nPartId = EgtGetNextPart(nPartId)
|
|
End While
|
|
' aggiorno la preview (False = blocco la lettura dei dati della componente)
|
|
CreateFiloTopPreView(m_SelList, False)
|
|
End Sub
|
|
|
|
Public Sub CreateFiloTopPreView(SelList As List(Of Integer), Optional bReadInfo As Boolean = True)
|
|
m_SelList = SelList
|
|
If m_SelList.Count < 1 Then Return
|
|
Dim nPartId As Integer = EgtGetFirstPart()
|
|
While nPartId <> GDB_ID.NULL
|
|
Dim nLayId As Integer = EgtGetFirstLayer(nPartId)
|
|
While nLayId <> GDB_ID.NULL
|
|
Dim sLayName As String = ""
|
|
' verifico che lemento corrente appartenga all'elenco degli elementi selezionati
|
|
Dim bIsSelected As Boolean = m_SelList.Find(Function(value As Integer)
|
|
Return value = nLayId
|
|
End Function) <> 0
|
|
If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) AndAlso bIsSelected Then
|
|
' ---------------------- Inizio GESTIONE PREVIEW percorso -------------------------------
|
|
Dim nLayFiloTop As Integer = GDB_ID.NULL
|
|
Dim nInLoopRef As Integer = GDB_ID.NULL
|
|
nLayFiloTop = EgtGetFirstNameInGroup(nPartId, "FiloTop")
|
|
EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef)
|
|
' verifico il Layer "FiloTop" sia associato all'InLoop corrente
|
|
While (nLayFiloTop <> GDB_ID.NULL AndAlso nInLoopRef <> nLayId)
|
|
nLayFiloTop = EgtGetNextName(nLayFiloTop, "FiloTop")
|
|
EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef)
|
|
End While
|
|
|
|
' se non esiste il Layer "FiloTop"
|
|
If nLayFiloTop = GDB_ID.NULL Then
|
|
' lo creo
|
|
nLayFiloTop = EgtCreateGroup(nPartId)
|
|
EgtSetName(nLayFiloTop, "FiloTop")
|
|
EgtSetInfo(nLayFiloTop, "InLoopRef", nLayId)
|
|
EgtSetInfo(nLayId, "FiloTopRef", nLayFiloTop)
|
|
End If
|
|
|
|
' carico i dati del filo top selezionato
|
|
If bReadInfo Then
|
|
EgtGetInfo(nLayFiloTop, INFO_OFFSET, m_dFiloTopOffset)
|
|
ParameterTxBx.Text = LenToString(m_dFiloTopOffset, 3)
|
|
EgtGetInfo(nLayFiloTop, INFO_DEPTH, m_dFiloTopDepth)
|
|
Parameter2TxBx.Text = LenToString(m_dFiloTopDepth, 3)
|
|
Dim nVal As Integer = If(m_bCornerradius, 1, 0)
|
|
EgtGetInfo(nLayFiloTop, INFO_ROUNDOFF, nVal)
|
|
Parameter3ChBx.IsChecked = If(nVal = 1, True, False)
|
|
m_bCornerradius = Parameter3ChBx.IsChecked
|
|
End If
|
|
|
|
' procedo alla creazione della curva
|
|
Dim nIdCompoCurve As Integer = GDB_ID.NULL
|
|
' cancello un eventuale curva composita creata in precedenza
|
|
nIdCompoCurve = EgtGetFirstNameInGroup(nLayFiloTop, "OffsetPreView")
|
|
If nIdCompoCurve <> GDB_ID.NULL Then
|
|
EgtErase(nIdCompoCurve)
|
|
End If
|
|
Dim nCompoCurve As New List(Of Integer)
|
|
' costruisco il percorso chiuso dati i lati di contorno
|
|
Dim nLine As Integer = EgtGetFirstInGroup(nLayId)
|
|
While nLine <> GDB_ID.NULL
|
|
nCompoCurve.Add(nLine)
|
|
nLine = EgtGetNext(nLine)
|
|
End While
|
|
Dim PtNearStart As Point3d
|
|
Dim nInfoRoundOff As Integer = If(m_bCornerradius, 1, 0)
|
|
|
|
nIdCompoCurve = EgtCreateCurveCompoByChain(nLayFiloTop, nCompoCurve.ToArray, PtNearStart, False)
|
|
EgtSetName(nIdCompoCurve, "OffsetPreView")
|
|
|
|
' salvo i dati nel layer FiloTop
|
|
EgtSetInfo(nLayFiloTop, INFO_OFFSET, m_dFiloTopOffset)
|
|
EgtSetInfo(nLayFiloTop, INFO_DEPTH, m_dFiloTopDepth)
|
|
EgtSetInfo(nLayFiloTop, INFO_ROUNDOFF, nInfoRoundOff)
|
|
|
|
Dim bOk As Boolean = False
|
|
' leggo che tipo di offset applicare (Round, Extend)
|
|
If nInfoRoundOff <> 1 Then
|
|
bOk = EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.EXTEND)
|
|
Else
|
|
bOk = EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.FILLET)
|
|
End If
|
|
|
|
' se la generazione della curva non va a buon fine
|
|
If Not bOk Then
|
|
EgtErase(nLayFiloTop)
|
|
EgtRemoveInfo(nLayId, "FiloTopRef")
|
|
EgtOutLog("Error in generation OffsetPreView in TopEgde ")
|
|
Else
|
|
m_MainWindow.m_DrawPageUC.MessageTxBx.Text = ""
|
|
m_MainWindow.m_DrawPageUC.MessageBrd.Background = Brushes.Transparent
|
|
End If
|
|
' ---------------------- Fine GESTIONE PREVIEW percorso -------------------------------
|
|
End If
|
|
nLayId = EgtGetNextLayer(nLayId)
|
|
End While
|
|
nPartId = EgtGetNextPart(nPartId)
|
|
End While
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
' riceve la lista dei LayerFiloTop che devono essere eliminati
|
|
Public Sub EraseFiloTopPreview(EraseList As List(Of Integer))
|
|
Dim m_EraseList As List(Of Integer) = EraseList
|
|
If m_EraseList.Count < 1 Then Return
|
|
Dim nPartId As Integer = EgtGetFirstPart()
|
|
While nPartId <> GDB_ID.NULL
|
|
Dim nLayId As Integer = EgtGetFirstLayer(nPartId)
|
|
While nLayId <> GDB_ID.NULL
|
|
Dim sLayName As String = ""
|
|
Dim bIsSelected As Boolean = m_EraseList.Find(Function(value As Integer)
|
|
Return value = nLayId
|
|
End Function) <> 0
|
|
If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso bIsSelected Then
|
|
' ---------------------- Inizio GESTIONE PREVIEW percorso -------------------------------
|
|
Dim nLayFiloTop As Integer = GDB_ID.NULL
|
|
Dim nInLoopRef As Integer = GDB_ID.NULL
|
|
nLayFiloTop = EgtGetFirstNameInGroup(nPartId, "FiloTop")
|
|
EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef)
|
|
' cerco il Layer associato all'InLoop corrente
|
|
While (nLayFiloTop <> GDB_ID.NULL AndAlso nInLoopRef <> nLayId)
|
|
nLayFiloTop = EgtGetNextName(nLayFiloTop, "FiloTop")
|
|
EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef)
|
|
End While
|
|
|
|
' se non esiste il Layer
|
|
If nLayFiloTop = GDB_ID.NULL Then
|
|
' esco
|
|
Return
|
|
Else
|
|
' lo elimino
|
|
EgtErase(nLayFiloTop)
|
|
EraseList.Remove(nLayId)
|
|
End If
|
|
' ---------------------- Fine GESTIONE PREVIEW percorso -------------------------------
|
|
End If
|
|
nLayId = EgtGetNextLayer(nLayId)
|
|
End While
|
|
nPartId = EgtGetNextPart(nPartId)
|
|
End While
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
|
|
End Class
|