Gestione visualizzazione percorso FiloTop

This commit is contained in:
NicolaP
2022-06-30 19:01:07 +02:00
parent fb0d35eddf
commit a92822bb87
9 changed files with 285 additions and 8 deletions
+200 -2
View File
@@ -143,6 +143,7 @@ Public Class SideEntityControlVM
StringToLen(value, m_Parameter1)
' Recupero il valore
StringToLen(value, m_dDripOffset)
StringToLen(value, m_dOffsetFiloTop)
' Creo le geometrie dei gocciolatoi
RefreshSideAngleText()
' Aggiorno i dati delle alette
@@ -203,6 +204,7 @@ Public Class SideEntityControlVM
RefreshSideAngleText()
Else
m_dDripOffset2 = m_Parameter2
m_dDepthFiloTop = m_Parameter2
' Creo le geometrie dei gocciolatoi
RefreshSideAngleText()
End If
@@ -367,6 +369,41 @@ Public Class SideEntityControlVM
#End Region 'Parameter 4
#Region "Parameter 5"
Private m_Parameter5_Visibility As Visibility
Public Property Parameter5_Visibility As Visibility
Get
Return m_Parameter5_Visibility
End Get
Set(value As Visibility)
m_Parameter5_Visibility = value
NotifyPropertyChanged(NameOf(Parameter5_Visibility))
End Set
End Property
Private m_Parameter5ChBx As Boolean
Public Property Parameter5ChBx As Boolean
Get
Return m_Parameter5ChBx
End Get
Set(value As Boolean)
If m_Mode = ModeOpt.FILOTOP Then
m_bCornerRadius = value
' Creo le geometrie dei gocciolatoi
RefreshSideAngleText()
m_Parameter5ChBx = m_bCornerRadius
End If
NotifyPropertyChanged("Parameter5ChBx")
End Set
End Property
Private Sub SetParameter5(value As Boolean)
m_Parameter5ChBx = value
NotifyPropertyChanged("Parameter5ChBx")
End Sub
#End Region 'Parameter 5
Private m_dSideAngle As Double = 0
Private m_HeightA As Double = 0
@@ -374,8 +411,10 @@ Public Class SideEntityControlVM
Private m_DeltaAngF As Double = 0
Private m_DeltaAngA As Double = 0
Private m_SelList As New List(Of Integer)
Private m_dOffsetFiloTop As Double = 5
Private m_dDepthFiloTop As Double = 5
Private m_bCornerRadius As Boolean = False
Private m_dDripOffset As Double = 10
Private m_dDripOffset2 As Double = 0
@@ -431,6 +470,16 @@ Public Class SideEntityControlVM
End Set
End Property
Private m_Parameter5Msg As String = "RoundOff"
Public Property Parameter5Msg As String
Get
Return m_Parameter5Msg ' Arrotonda
End Get
Set(value As String)
m_Parameter5Msg = value
End Set
End Property
#End Region ' Messages
#Region "CONSTRUCTOR"
@@ -476,21 +525,26 @@ Public Class SideEntityControlVM
Parameter2_Visibility = Visibility.Visible
Parameter2ab_Visibility = Visibility.Hidden
Parameter4_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden
ElseIf m_Mode = ModeOpt.FILOTOP Then
Parameter23_Visibility = Windows.Visibility.Hidden
Parameter2_Visibility = Visibility.Visible
Parameter2ab_Visibility = Visibility.Hidden
Parameter4_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Visible
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
Parameter2_Visibility = Visibility.Hidden
Parameter23_Visibility = Windows.Visibility.Visible
Parameter2ab_Visibility = Visibility.Visible
Parameter4_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden
Else
' Temporaneamente lo disabilito
Parameter23_Visibility = Windows.Visibility.Visible
Parameter4_Visibility = Visibility.Visible
Parameter2ab_Visibility = Visibility.Visible
Parameter2_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden
End If
'------------------ VALORI E TITOLI PARAMETRI
@@ -503,12 +557,15 @@ Public Class SideEntityControlVM
ElseIf m_Mode = ModeOpt.FILOTOP Then
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset
Dim x As String = EgtMsg(MSG_IMPORTPAGEUC + 11)
Parameter2Msg = EgtMsg(MSG_IMPORTPAGEUC + 11) ' Depth
Parameter5Msg = "Round Off"
m_dOffsetFiloTop = GetMainPrivateProfileDouble(S_SIDES, K_FILOTOPOFFSET, 5)
m_dDepthFiloTop = GetMainPrivateProfileDouble(S_SIDES, K_FILOTOPDEPTH, 5)
m_bCornerRadius = GetMainPrivateProfileInt(S_SIDES, K_FILOTOPROUNDOFF, 0) <> 0
SetParameter1(m_dOffsetFiloTop)
SetParameter2(m_dDepthFiloTop)
SetParameter5(m_bCornerRadius)
m_SelList.Clear()
ElseIf m_Mode = ModeOpt.ENGRAVE Or m_Mode = ModeOpt.DRIP Then
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset
@@ -619,7 +676,9 @@ Public Class SideEntityControlVM
' Creo le geometrie dei gocciolatoi
CreateDripGeom(PartId)
ElseIf m_Mode = ModeOpt.ENGRAVE Then
'--- ??? ---
' --- ??? ---
ElseIf m_Mode = ModeOpt.FILOTOP Then
CreateFiloTopPreView(m_SelList, False)
End If
' Aggiorno visualizzazione
EgtDraw()
@@ -1285,6 +1344,7 @@ Public Class SideEntityControlVM
ElseIf m_Mode = ModeOpt.FILOTOP Then
WriteMainPrivateProfileString(S_SIDES, K_FILOTOPOFFSET, LenToString(m_Parameter1, 3))
WriteMainPrivateProfileString(S_SIDES, K_FILOTOPDEPTH, LenToString(m_Parameter2, 3))
WriteMainPrivateProfileString(S_SIDES, K_FILOTOPROUNDOFF, If(m_Parameter5ChBx, "1", "0"))
' Aggiorno affondamento del profilo
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
@@ -1754,8 +1814,146 @@ Public Class SideEntityControlVM
End If
End Sub
' ----------------------- FILO TOP -----------------------
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_dOffsetFiloTop)
EgtGetInfo(nLayFiloTop, INFO_DEPTH, m_dDepthFiloTop)
Dim nVal As Integer = If(m_bCornerRadius, 1, 0)
EgtGetInfo(nLayFiloTop, INFO_ROUNDOFF, nVal)
m_bCornerRadius = If(nVal = 1, True, False)
SetParameter1(m_dOffsetFiloTop)
SetParameter2(m_dDepthFiloTop)
SetParameter5(m_bCornerRadius)
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_dOffsetFiloTop)
EgtSetInfo(nLayFiloTop, INFO_DEPTH, m_dDepthFiloTop)
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_dOffsetFiloTop, OFF_TYPE.EXTEND)
Else
bOk = EgtOffsetCurve(nIdCompoCurve, -m_dOffsetFiloTop, 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 ")
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 Region ' METHODS
End Class
Public MustInherit Class SideEntity