Imports EgtUILib Public Class SideAngleUC ' NOTA: gli oggetti AngleTxBx e HeelTxBx ora sono usate come caselle di testo indipendentemente dal nome sia in SideAngle che in Drip/Engrave Public Enum ModeOpt As Integer SIDEANGLE = 0 DRIP = 1 ENGRAVE = 2 End Enum ' Variabile che indica se sono in sideangle o drip Friend m_Mode As ModeOpt ' 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 ' Gestione pagine Private Const MAX_LINES As Integer = 10 Private m_nCurrPage As Integer = 1 Private m_nCount As Integer = 0 Private m_nShow As Integer = 0 ' Massimo angolo di lato ammesso Private Const STD_MAXSIDEANG As Double = 50.0 Private Const MAX_MAXSIDEANG As Double = 75.0 Private m_dMaxSideAng As Double = STD_MAXSIDEANG ' Lista di tutte le entità inclinabili presenti nel progetto Friend m_SideAngleEntityList As New List(Of SideAngleEntity) Friend m_DripEntityList As New List(Of DripEntity) Friend m_dDripOffset As Double = 10 Friend m_dDripOffset2 As Double = 0 Friend m_nEngrNbr2 As Integer = 1 Friend m_dDripDepth As Double = 10 Friend m_dEngraveDepth2 As Double = 15 Friend m_dDripShort As Double = 0 Friend m_dEngraveAngle As Double = 0 Private CurrEntityDrip As DripEntity ' carico la pagina Private Sub SideAngleUC_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded ' Imposto riferimenti ad altre pagine: definisco la pagina attiva m_CallingPage = m_MainWindow.m_ActivePage ' Leggo da Ini il massimo angolo di fianco ammesso m_dMaxSideAng = GetPrivateProfileDouble(S_SIDES, K_MAXSIDEANGLE, STD_MAXSIDEANG, m_MainWindow.GetIniFile()) If m_dMaxSideAng > MAX_MAXSIDEANG Then m_dMaxSideAng = MAX_MAXSIDEANG ' Imposto messaggi a fondo pagina If m_Mode <> ModeOpt.SIDEANGLE Then Parameter1TxBl.Text = EgtMsg(90460) ' Offset Parameter2TxBl.Text = EgtMsg(90466) ' Offset2 Parameter3TxBl.Text = EgtMsg(90461) ' Affondamento Parameter4TxBl.Text = EgtMsg(90462) ' Accorciamento End If If m_CallingPage = MainWindow.Pages.Draw Then ' Imposto questa come pagina correntemente visualizzata nella drawpage m_MainWindow.m_DrawPageUC.m_ActiveComponentPage = DrawPageUC.Pages.SideAngle ' 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 ' Inizializzo: Spengo tutti i CheckBox attivi DeleteSideAngle() m_nCurrPage = 1 ' numero di elemnti presenti nella lista SideAngle/DripEntity m_nCount = 0 ' numero di righe rese disponibili nella pagina -> m_nShow = min(m_nCount, MAX_LINE) m_nShow = 0 ' Inizializzo lati per angoli e per gocciolatoi (ne compilo la lista e aggiungo la scritta nel disegno) InitSides() '' Aggiorno testi nel disegno e creo i gocciolatoi 'RefreshSideAngleText() ' Aggiorno check e valori RefreshCheckAndValue() ' Aggiorno testi nel disegno e creo i gocciolatoi RefreshSideAngleText() ' Gestisco visualizzazione di tutti i parametri If m_Mode = ModeOpt.SIDEANGLE Then ' nascondo tutti i CheckBox (ho bisogno solle delle caselle di campo) For Index As Integer = 1 To MAX_LINES GetChBxFromIndex(Index).Visibility = Windows.Visibility.Collapsed GetAngleTxBxFromIndex(Index).Visibility = Windows.Visibility.Visible GetHeelTxBxFromIndex(Index).Visibility = Windows.Visibility.Visible Next '------------> Nascondo tutti i parametri presenti a fine pagina ' Offset Parameter1TxBl.Visibility = Windows.Visibility.Hidden Parameter1TxBx.Visibility = Windows.Visibility.Hidden ' Offset2 Parameter2TxBl.Visibility = Windows.Visibility.Hidden Parameter2TxBx.Visibility = Windows.Visibility.Hidden Parameter2aTxBx.Visibility = Windows.Visibility.Hidden Parameter2bTxBx.Visibility = Windows.Visibility.Hidden ' Affondamento Parameter3TxBl.Visibility = Windows.Visibility.Hidden Parameter3TxBx.Visibility = Windows.Visibility.Hidden ' Accorciamento Parameter4TxBl.Visibility = Windows.Visibility.Hidden Parameter4TxBx.Visibility = Windows.Visibility.Hidden ' Angolo Parameter5TxBl.Visibility = Windows.Visibility.Hidden Parameter5TxBx.Visibility = Windows.Visibility.Hidden Else ' se aggiungo gli ENGRAVE e i DRIP ' SideAngleBl.Visibility = Windows.Visibility.Collapsed ' HeelBl.Visibility = Windows.Visibility.Collapsed For Index As Integer = 1 To MAX_LINES GetChBxFromIndex(Index).Visibility = Windows.Visibility.Visible GetAngleTxBxFromIndex(Index).Visibility = Windows.Visibility.Visible GetHeelTxBxFromIndex(Index).Visibility = Windows.Visibility.Visible Next ' Offset Parameter1TxBl.Visibility = Windows.Visibility.Visible Parameter1TxBx.Visibility = Windows.Visibility.Visible Parameter2TxBl.Visibility = Windows.Visibility.Visible ' Offset2 If m_Mode <> ModeOpt.ENGRAVE Then Parameter2TxBx.Visibility = Windows.Visibility.Visible Parameter2aTxBx.Visibility = Windows.Visibility.Hidden Parameter2bTxBx.Visibility = Windows.Visibility.Hidden Else Parameter2TxBx.Visibility = Windows.Visibility.Hidden Parameter2aTxBx.Visibility = Windows.Visibility.Visible Parameter2bTxBx.Visibility = Windows.Visibility.Visible End If ' Affondamento Parameter3TxBl.Visibility = Windows.Visibility.Visible Parameter3TxBx.Visibility = Windows.Visibility.Visible ' Accorciamento If m_Mode = ModeOpt.ENGRAVE Then ' modifico il nome del messaggio Parameter4TxBl.Text = EgtMsg(90461) & "2" ' Affondamento2 Parameter4TxBl.Visibility = Windows.Visibility.Visible Parameter4TxBx.Visibility = Windows.Visibility.Visible Else Parameter4TxBl.Visibility = Windows.Visibility.Hidden Parameter4TxBx.Visibility = Windows.Visibility.Hidden End If ' Angolo If m_Mode = ModeOpt.ENGRAVE Then ' modifico il nome del messaggio Parameter5TxBl.Text = EgtMsg(90459) ' Angolo Parameter5TxBl.Visibility = Windows.Visibility.Visible Parameter5TxBx.Visibility = Windows.Visibility.Visible Else Parameter5TxBl.Visibility = Windows.Visibility.Hidden Parameter5TxBx.Visibility = Windows.Visibility.Hidden End If End If ' Gestisco Checkbox e nomi in base al numero di lati inclinabili ' Controllo se la checkbox SideAngle è attiva If SideAngleChBx.IsChecked Then Dim dSideAngle As Double = 0 Dim dHell As Double = 0 ' Controllo se l'angolo della nuova entità non è nullo If Not String.IsNullOrEmpty(NewA1TxBx.Text) Then StringToDouble(NewA1TxBx.Text, dSideAngle) ' Controllo se l'angolo è diverso da 0 If dSideAngle <> 0 Then ' Aggiorno l'angolo delle entità UpdateSideAngleAllEntities() End If End If ' Controllo se il tallone della nuova entità non è nullo If Not String.IsNullOrEmpty(NewH1TxBx.Text) Then StringToDouble(NewH1TxBx.Text, dHell) ' Controllo se il tallone è maggiore di 0 If dHell > 0 Then ' Aggiorno il tallone delle entità UpdateHeelAllEntities() End If End If ' Elimino le righe per riposizionarle Grid.SetRow(NewEntity, MAX_LINES - m_nShow + 1) Grid.SetRow(NewA1TxBx, MAX_LINES - m_nShow + 1) Grid.SetRow(NewH1TxBx, MAX_LINES - m_nShow + 1) Grid.SetRow(SideAngleBl, MAX_LINES - m_nShow) Grid.SetRow(HeelBl, MAX_LINES - m_nShow) Grid.SetRow(SideAngleGrid, MAX_LINES - m_nShow) ' Rendo visibile solo la nuova entità CollapsedCheckAllTextSideAng() Else ' Altrimenti eseguo impaginazione classica TxBlChBxView() End If ' Aggiorno valori If m_Mode = ModeOpt.DRIP Then m_dDripOffset = GetPrivateProfileDouble(S_SIDES, K_DRIPOFFSET, 20, m_MainWindow.GetIniFile()) m_dDripOffset2 = GetPrivateProfileDouble(S_SIDES, K_DRIPOFFSET2, 0, m_MainWindow.GetIniFile()) m_dDripDepth = GetPrivateProfileDouble(S_SIDES, K_DRIPDEPTH, 10, m_MainWindow.GetIniFile()) m_dDripShort = GetPrivateProfileDouble(S_SIDES, K_DRIPSHORT, 0, m_MainWindow.GetIniFile()) Parameter1TxBx.Text = LenToString(m_dDripOffset, 3) Parameter2TxBx.Text = LenToString(m_dDripOffset2, 3) Parameter3TxBx.Text = LenToString(m_dDripDepth, 3) Parameter4TxBx.Text = LenToString(m_dDripShort, 3) ElseIf m_Mode = ModeOpt.ENGRAVE Then m_dDripOffset = GetPrivateProfileDouble(S_SIDES, K_ENGRAVEOFFSET, 20, m_MainWindow.GetIniFile()) m_nEngrNbr2 = GetPrivateProfileInt(S_SIDES, K_ENGRAVENUMBER2, 1, m_MainWindow.GetIniFile()) m_dDripOffset2 = GetPrivateProfileDouble(S_SIDES, K_ENGRAVEOFFSET2, 0, m_MainWindow.GetIniFile()) m_dDripDepth = GetPrivateProfileDouble(S_SIDES, K_ENGRAVEDEPTH, 10, m_MainWindow.GetIniFile()) m_dEngraveDepth2 = GetPrivateProfileDouble(S_SIDES, K_ENGRAVEDEPTH2, 0, m_MainWindow.GetIniFile()) m_dEngraveAngle = GetPrivateProfileDouble(S_SIDES, K_ENGRAVEANGLE, 0, m_MainWindow.GetIniFile()) Parameter1TxBx.Text = LenToString(m_dDripOffset, 3) Parameter2aTxBx.Text = m_nEngrNbr2.ToString() Parameter2bTxBx.Text = LenToString(m_dDripOffset2, 3) Parameter3TxBx.Text = LenToString(m_dDripDepth, 3) Parameter4TxBx.Text = LenToString(m_dEngraveDepth2, 3) Parameter5TxBx.Text = DoubleToString(m_dEngraveAngle, 3) End If ' Aggiorno visualizzazione If m_CallingPage = MainWindow.Pages.Draw Then EgtZoom(ZM.ALL) Else EgtDraw() End If End Sub ' verfico di poter inserire i lati inclinati e le incisioni Private Sub InitSides() Dim PartId As Integer = GDB_ID.NULL ' Id del loop eseterno Dim LoopId As Integer = GDB_ID.NULL If m_CallingPage = MainWindow.Pages.Draw Then ' Imposto contesto corrente EgtSetCurrentContext(m_MainWindow.m_DrawPageUC.DrawScene.GetCtx()) ' Ricavo nome primo pezzo e lo sistemo If m_Mode = ModeOpt.ENGRAVE And m_MainWindow.m_DrawPageUC.SelectedLayer = GDB_ID.NULL Then PartId = EgtGetFirstPart() m_MainWindow.m_DrawPageUC.SetCurrLayer(EgtGetFirstNameInGroup(PartId, NAME_OUTLOOP)) End If PartId = If(m_MainWindow.m_DrawPageUC.SelectedLayer <> GDB_ID.NULL, EgtGetFirstPart(), GDB_ID.NULL) ' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo LoopId = m_MainWindow.m_DrawPageUC.SelectedLayer Else ' Imposto contesto corrente EgtSetCurrentContext(m_MainWindow.m_ImportPageUC.ImportScene.GetCtx()) ' Recupero nome pezzo selezionato PartId = m_MainWindow.m_ImportPageUC.SelectedPart ' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo LoopId = m_MainWindow.m_ImportPageUC.SelectedLayer End If '-----------------> Determino se loop esterno o interno Dim sLoopName As String = "" Dim bOutLoop As Boolean = (EgtGetName(LoopId, sLoopName) AndAlso sLoopName = NAME_OUTLOOP) ' Calcolo dimensione ingombro Loop Dim ptMin, ptMax As Point3d EgtGetBBoxGlob(LoopId, GDB_BB.STANDARD, ptMin, ptMax) Dim dBBoxRad As Double = 0.5 * Point3d.DistXY(ptMin, ptMax) ' Creo layer per testi se non esiste già Dim TextLayer As Integer = EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER) If TextLayer = GDB_ID.NULL And PartId <> GDB_ID.NULL Then TextLayer = EgtCreateGroup(PartId) EgtSetName(TextLayer, SIDE_ANGLE_LAYER) EgtSetColor(TextLayer, New Color3d(0, 0, 0)) End If '-----------------> Recupero Id della curva del Loop Esterno Dim PrevLine As Integer = EgtGetLastInGroup(LoopId) Dim CurrLine As Integer = EgtGetFirstInGroup(LoopId) ' Creo indice per numerare le entità in ImportPage Dim nEntityIndex As Integer = 1 Dim nOtherIndex As Integer = 1 ' Ciclo che verifica se possibile inclinare la curva corrente o inserire un gocciolatoio While CurrLine <> GDB_ID.NULL Dim NextLine As Integer = EgtGetNext(CurrLine) If NextLine = GDB_ID.NULL Then NextLine = EgtGetFirstInGroup(LoopId) If m_Mode = ModeOpt.SIDEANGLE Then If SideAngle.VerifySideAnglePossible(PrevLine, CurrLine, NextLine, bOutLoop) Then ' Aggiungo il lato alla lista di quelli inclinabili e ne azzero l'inclinazione AddSideAngle(CurrLine, TextLayer, dBBoxRad, nEntityIndex) nEntityIndex += 1 Else EgtSetName(CurrLine, "B" & nOtherIndex.ToString()) nOtherIndex += 1 End If Else If VerifyIsSideDripPossible(PrevLine, CurrLine, NextLine) Then ' Aggiungo il lato alla lista di quelli su cui è possibile mettere il gocciolatoio AddDripSide(CurrLine, TextLayer, dBBoxRad, nEntityIndex) nEntityIndex += 1 Else EgtSetName(CurrLine, "B" & nOtherIndex.ToString()) nOtherIndex += 1 End If End If PrevLine = CurrLine CurrLine = EgtGetNext(CurrLine) End While '-----------------> Aggiorno numero di lati carciati If m_Mode = ModeOpt.SIDEANGLE Then m_nCount = m_SideAngleEntityList.Count() Else m_nCount = m_DripEntityList.Count() End If ' Aggiorno numero item visualizzati nella pagina iniziale m_nShow = Math.Min(m_nCount, MAX_LINES) ' Se non ci sono lati su cui operare, messaggio utente If LoopId <> GDB_ID.NULL Then If m_nCount = 0 Then If m_CallingPage = MainWindow.Pages.Draw Then m_MainWindow.m_DrawPageUC.MessageTxBx.Text = EgtMsg(90387) ' Non ci sono lati modificabili m_MainWindow.m_DrawPageUC.MessageBrd.Background = Application.Current.FindResource("OmagCut_Yellow") Else m_MainWindow.m_ImportPageUC.MessageTxBx.Text = EgtMsg(90387) ' Non ci sono lati modificabili m_MainWindow.m_ImportPageUC.MessageBrd.Background = Application.Current.FindResource("OmagCut_Yellow") End If Else If m_CallingPage = MainWindow.Pages.Draw Then m_MainWindow.m_DrawPageUC.MessageTxBx.Text = "" m_MainWindow.m_DrawPageUC.MessageBrd.Background = Brushes.Transparent Else m_MainWindow.m_ImportPageUC.MessageTxBx.Text = "" m_MainWindow.m_ImportPageUC.MessageBrd.Background = Brushes.Transparent End If End If End If End Sub ' Imposto la visibilità degli oggetti nella pagina: qui eseguo l'impaginazione Private Sub TxBlChBxView() ' Attualmente il vaore m_nCount è inizializzato ad "1".. ' Bottoni Prev Next If m_nCount <= MAX_LINES Then PrevBtn.Visibility = Windows.Visibility.Hidden NextBtn.Visibility = Windows.Visibility.Hidden SideAngleChBx.Visibility = Windows.Visibility.Hidden NewEntity.Visibility = Windows.Visibility.Hidden NewA1.Visibility = Windows.Visibility.Hidden NewA1TxBx.Visibility = Windows.Visibility.Hidden NewH1TxBx.Visibility = Windows.Visibility.Hidden Else Grid.SetRow(PrevBtn, MAX_LINES - m_nShow) PrevBtn.Visibility = Windows.Visibility.Visible PrevBtn.IsEnabled = (m_nCurrPage > 1) Grid.SetRow(NextBtn, MAX_LINES - m_nShow) NextBtn.Visibility = Windows.Visibility.Visible NextBtn.IsEnabled = (m_nCount > m_nCurrPage * MAX_LINES) Grid.SetRow(SideAngleGrid, MAX_LINES - m_nShow) SideAngleChBx.Visibility = Windows.Visibility.Visible End If ' Intestazione per angoli di lato If m_Mode = ModeOpt.SIDEANGLE Then If m_nCount = 0 Then SideAngleBl.Visibility = Windows.Visibility.Hidden HeelBl.Visibility = Windows.Visibility.Hidden Else ' definisco il posizionamento del nome (A;T/Start;End) delle colonne all'interno della grigia Grid.SetRow(SideAngleBl, MAX_LINES - m_nShow) SideAngleBl.Text = EgtMsg(91653) ' A° SideAngleBl.Visibility = Windows.Visibility.Visible Grid.SetRow(HeelBl, MAX_LINES - m_nShow) HeelBl.Text = EgtMsg(91654) ' T HeelBl.Visibility = Windows.Visibility.Visible Grid.SetRow(SideAngleGrid, MAX_LINES - m_nShow) SideAngleChBx.Visibility = Windows.Visibility.Visible End If Else If m_nCount = 0 Then SideAngleBl.Visibility = Windows.Visibility.Hidden HeelBl.Visibility = Windows.Visibility.Hidden Else ' definisco il posizionamento del nome (A;T/Start;End) delle colonne all'interno della grigia Grid.SetRow(SideAngleBl, MAX_LINES - m_nShow) SideAngleBl.Text = EgtMsg(91655) ' Start SideAngleBl.Visibility = Windows.Visibility.Visible Grid.SetRow(HeelBl, MAX_LINES - m_nShow) HeelBl.Text = EgtMsg(91656) ' End HeelBl.Visibility = Windows.Visibility.Visible End If End If ' Lati visibili For nI As Integer = 1 To m_nShow Dim Index As Integer = MAX_LINES - m_nShow + nI If m_Mode = ModeOpt.SIDEANGLE Then GetAngleTxBxFromIndex(Index).Visibility = Windows.Visibility.Visible GetHeelTxBxFromIndex(Index).Visibility = Windows.Visibility.Visible Else GetChBxFromIndex(Index).Visibility = Windows.Visibility.Visible ' aggiungo i campi per allungare e accorciare i lati GetAngleTxBxFromIndex(Index).Visibility = Windows.Visibility.Visible GetHeelTxBxFromIndex(Index).Visibility = Windows.Visibility.Visible GetPrivateProfileDouble(S_SIDES, K_ENGRAVESHORT, 0, m_MainWindow.GetIniFile()) If m_Mode = ModeOpt.ENGRAVE Then GetAngleTxBxFromIndex(Index).Text = GetPrivateProfileDouble(S_SIDES, K_ENGRAVESHORT & "A" & nI.ToString & "_Start", 0, m_MainWindow.GetIniFile()) GetHeelTxBxFromIndex(Index).Text = GetPrivateProfileDouble(S_SIDES, K_ENGRAVESHORT & "A" & nI.ToString & "_End", 0, m_MainWindow.GetIniFile()) Else GetAngleTxBxFromIndex(Index).Text = GetPrivateProfileDouble(S_SIDES, K_DRIPSHORT & "A" & nI.ToString & "_Start", 0, m_MainWindow.GetIniFile()) GetHeelTxBxFromIndex(Index).Text = GetPrivateProfileDouble(S_SIDES, K_DRIPSHORT & "A" & nI.ToString & "_End", 0, m_MainWindow.GetIniFile()) End If End If Dim TxBlIndex As Integer = (m_nCurrPage - 1) * MAX_LINES + nI - 1 GetTxBlFromIndex(Index).Text = If(m_Mode = ModeOpt.SIDEANGLE, m_SideAngleEntityList(TxBlIndex).sEntityName, m_DripEntityList(TxBlIndex).sEntityName) GetTxBlFromIndex(Index).Visibility = Windows.Visibility.Visible Next ' Lati nascosti: nascondo i lati partendo dall'alto (se ho 4 lati la prima TextBx disponibile è la settima -> 11-4 = 7 lati nascosti) For Index As Integer = 1 To MAX_LINES - m_nShow If m_Mode = ModeOpt.SIDEANGLE Then GetAngleTxBxFromIndex(Index).Visibility = Windows.Visibility.Hidden GetHeelTxBxFromIndex(Index).Visibility = Windows.Visibility.Hidden Else GetChBxFromIndex(Index).Visibility = Windows.Visibility.Hidden GetAngleTxBxFromIndex(Index).Visibility = Windows.Visibility.Hidden GetHeelTxBxFromIndex(Index).Visibility = Windows.Visibility.Hidden End If GetTxBlFromIndex(Index).Visibility = Windows.Visibility.Hidden Next End Sub Private Sub CheckedSideAngle() Handles SideAngleChBx.Checked Grid.SetRow(NewEntity, MAX_LINES - m_nShow + 1) Grid.SetRow(NewA1TxBx, MAX_LINES - m_nShow + 1) Grid.SetRow(NewH1TxBx, MAX_LINES - m_nShow + 1) ' Se interrompo la creazione di un unico SideAng If Not GetSideAngleFromAllEntities() Then Return CollapsedCheckAllTextSideAng() End Sub ' Rende visibile NewEntity quando si attiva la spunta sulla checkbox Private Sub CollapsedCheckAllTextSideAng() NewEntity.Text = "A#" PrevBtn.Visibility = Visibility.Collapsed NextBtn.Visibility = Visibility.Collapsed NewEntity.Visibility = Visibility.Visible NewA1TxBx.Visibility = Visibility.Visible NewH1TxBx.Visibility = Visibility.Visible Entity1.Visibility = Visibility.Collapsed A1TxBx.Visibility = Visibility.Collapsed H1TxBx.Visibility = Visibility.Collapsed Entity2.Visibility = Visibility.Collapsed A2TxBx.Visibility = Visibility.Collapsed H2TxBx.Visibility = Visibility.Collapsed Entity3.Visibility = Visibility.Collapsed A3TxBx.Visibility = Visibility.Collapsed H3TxBx.Visibility = Visibility.Collapsed Entity4.Visibility = Visibility.Collapsed A4TxBx.Visibility = Visibility.Collapsed H4TxBx.Visibility = Visibility.Collapsed Entity5.Visibility = Visibility.Collapsed A5TxBx.Visibility = Visibility.Collapsed H5TxBx.Visibility = Visibility.Collapsed Entity6.Visibility = Visibility.Collapsed A6TxBx.Visibility = Visibility.Collapsed H6TxBx.Visibility = Visibility.Collapsed Entity7.Visibility = Visibility.Collapsed A7TxBx.Visibility = Visibility.Collapsed H7TxBx.Visibility = Visibility.Collapsed Entity8.Visibility = Visibility.Collapsed A8TxBx.Visibility = Visibility.Collapsed H8TxBx.Visibility = Visibility.Collapsed Entity9.Visibility = Visibility.Collapsed A9TxBx.Visibility = Visibility.Collapsed H9TxBx.Visibility = Visibility.Collapsed Entity10.Visibility = Visibility.Collapsed A10TxBx.Visibility = Visibility.Collapsed H10TxBx.Visibility = Visibility.Collapsed End Sub Private Sub UnCheckSideAngle() Handles SideAngleChBx.Unchecked NewEntity.Visibility = Visibility.Collapsed NewA1TxBx.Visibility = Visibility.Collapsed NewH1TxBx.Visibility = Visibility.Collapsed TxBlChBxView() RefreshCheckAndValue() End Sub Private Function GetSideAngleFromAllEntities() As Boolean Dim tmpSideAngleList As New List(Of Double) tmpSideAngleList.Clear() Dim tmpSideHeelList As New List(Of Double) tmpSideHeelList.Clear() Dim m_SideAngleOneForAllWindow As New SideAngleOneForAllWindow For i As Integer = 0 To m_SideAngleEntityList.Count - 1 If Not tmpSideAngleList.Contains(m_SideAngleEntityList(i).dSideAngle) Then tmpSideAngleList.Add(m_SideAngleEntityList(i).dSideAngle) End If If Not tmpSideHeelList.Contains(m_SideAngleEntityList(i).dSideHeel) Then tmpSideHeelList.Add(m_SideAngleEntityList(i).dSideHeel) End If Next NewA1TxBx.Text = DoubleToString(tmpSideAngleList(0), 2) NewH1TxBx.Text = LenToString(tmpSideHeelList(0), 2) If tmpSideAngleList.Count > 1 Or tmpSideHeelList.Count > 1 Then m_SideAngleOneForAllWindow.SideAngleOneForAllCBx.ItemsSource = tmpSideAngleList m_SideAngleOneForAllWindow.SideAngleOneForAllCBx.SelectedIndex = 0 m_SideAngleOneForAllWindow.SideHeelOneForAllCBx.ItemsSource = tmpSideHeelList m_SideAngleOneForAllWindow.SideHeelOneForAllCBx.SelectedIndex = 0 m_SideAngleOneForAllWindow.ShowDialog() If m_SideAngleOneForAllWindow.DialogResult Then NewA1TxBx.Text = DoubleToString(m_SideAngleOneForAllWindow.SideAngleOneForAllCBx.SelectedItem, 2) NewH1TxBx.Text = LenToString(m_SideAngleOneForAllWindow.SideHeelOneForAllCBx.SelectedItem, 2) UpdateSideAngleAllEntities() UpdateHeelAllEntities() Else SideAngleChBx.IsChecked = False Return False End If End If Return True End Function Private Sub UpdateHeelAllEntities() ' Nuovo tallone Dim dSideHeel As Double StringToLen(NewH1TxBx.Text, dSideHeel) ' Verifico stia nei limiti If dSideHeel < 0 Then dSideHeel = 0 NewH1TxBx.Text = "0" End If For Each Entity As SideAngleEntity In m_SideAngleEntityList ' Lo modifico nella geometria e nella lista inclinazioni ModifySideHeel(Entity.sEntityName, dSideHeel) ' Aggiorno tutti i testi RefreshSideAngleText() Next End Sub Private Sub UpdateSideAngleAllEntities() ' Nuovo angolo di inclinazione Dim dSideAngle As Double StringToDouble(NewA1TxBx.Text, dSideAngle) ' Verifico stia nei limiti If dSideAngle < -m_dMaxSideAng Then dSideAngle = -m_dMaxSideAng NewA1TxBx.Text = DoubleToString(dSideAngle, 2) ElseIf dSideAngle > m_dMaxSideAng Then dSideAngle = m_dMaxSideAng NewA1TxBx.Text = DoubleToString(dSideAngle, 2) End If For Each Entity As SideAngleEntity In m_SideAngleEntityList ' Lo modifico nella geometria e nella lista inclinazioni ModifySideAngle(Entity.sEntityName, dSideAngle) ' Aggiorno tutti i testi RefreshSideAngleText() Next End Sub '-------------> Restituisce gli oggetto della grafica assegnato l'indice Private Function GetChBxFromIndex(Index As Integer) As CheckBox Select Case Index Case 1 Return A1 Case 2 Return A2 Case 3 Return A3 Case 4 Return A4 Case 5 Return A5 Case 6 Return A6 Case 7 Return A7 Case 8 Return A8 Case 9 Return A9 Case Else Return A10 End Select End Function Private Function GetAngleTxBxFromIndex(Index As Integer) As EgtWPFLib.EgtTextBox Select Case Index Case 1 Return A1TxBx Case 2 Return A2TxBx Case 3 Return A3TxBx Case 4 Return A4TxBx Case 5 Return A5TxBx Case 6 Return A6TxBx Case 7 Return A7TxBx Case 8 Return A8TxBx Case 9 Return A9TxBx Case Else Return A10TxBx End Select End Function Private Function GetHeelTxBxFromIndex(Index As Integer) As EgtWPFLib.EgtTextBox Select Case Index Case 1 Return H1TxBx Case 2 Return H2TxBx Case 3 Return H3TxBx Case 4 Return H4TxBx Case 5 Return H5TxBx Case 6 Return H6TxBx Case 7 Return H7TxBx Case 8 Return H8TxBx Case 9 Return H9TxBx Case Else Return H10TxBx End Select End Function Private Function GetTxBlFromIndex(Index As Integer) As TextBlock Select Case Index Case 1 Return Entity1 Case 2 Return Entity2 Case 3 Return Entity3 Case 4 Return Entity4 Case 5 Return Entity5 Case 6 Return Entity6 Case 7 Return Entity7 Case 8 Return Entity8 Case 9 Return Entity9 Case Else Return Entity10 End Select End Function '-------------> Restituisce gli oggetto della grafica assegnato l'indice ' quando esco salvo nel file l'ultima configurazione per le incisioni Private Sub SideAngleUC_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded If m_CallingPage = MainWindow.Pages.Draw Then ' Ricavo nome pezzo Dim PartId As Integer = EgtGetFirstInGroup(GDB_ID.ROOT) ' Svuoto layer in cui sono presenti i testi con le inclinazioni dei lati If m_Mode = ModeOpt.SIDEANGLE Then EgtEmptyGroup(EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER)) Else EgtEmptyGroup(EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER)) End If ElseIf m_CallingPage = MainWindow.Pages.Import Then ' Nessuna azione necessaria End If If m_Mode = ModeOpt.DRIP Then WritePrivateProfileString(S_SIDES, K_DRIPOFFSET, LenToString(m_dDripOffset, 3), m_MainWindow.GetIniFile()) WritePrivateProfileString(S_SIDES, K_DRIPOFFSET2, LenToString(m_dDripOffset2, 3), m_MainWindow.GetIniFile()) WritePrivateProfileString(S_SIDES, K_DRIPDEPTH, LenToString(m_dDripDepth, 3), m_MainWindow.GetIniFile()) 'WritePrivateProfileString( S_SIDES, K_DRIPSHORT, DoubleToString( m_dDripShort, 3), m_MainWindow.GetIniFile()) ElseIf m_Mode = ModeOpt.ENGRAVE Then WritePrivateProfileString(S_SIDES, K_ENGRAVEOFFSET, LenToString(m_dDripOffset, 3), m_MainWindow.GetIniFile()) WritePrivateProfileString(S_SIDES, K_ENGRAVENUMBER2, m_nEngrNbr2.ToString(), m_MainWindow.GetIniFile()) WritePrivateProfileString(S_SIDES, K_ENGRAVEOFFSET2, LenToString(m_dDripOffset2, 3), m_MainWindow.GetIniFile()) WritePrivateProfileString(S_SIDES, K_ENGRAVEDEPTH, LenToString(m_dDripDepth, 3), m_MainWindow.GetIniFile()) WritePrivateProfileString(S_SIDES, K_ENGRAVEDEPTH2, LenToString(m_dEngraveDepth2, 3), m_MainWindow.GetIniFile()) 'WritePrivateProfileString( S_SIDES, K_ENGRAVESHORT, DoubleToString( m_dDripShort, 3), m_MainWindow.GetIniFile()) WritePrivateProfileString(S_SIDES, K_ENGRAVEANGLE, LenToString(m_dEngraveAngle, 3), m_MainWindow.GetIniFile()) End If EgtDraw() End Sub ' aggiunge il messaggio nel disegno, se DripGeom creo la geometria Private Sub RefreshSideAngleText() Dim PartId As Integer = GDB_ID.NULL Dim LoopId As Integer = GDB_ID.NULL If m_CallingPage = MainWindow.Pages.Draw Then ' Imposto contesto corrente EgtSetCurrentContext(m_MainWindow.m_DrawPageUC.DrawScene.GetCtx()) PartId = If(m_MainWindow.m_DrawPageUC.SelectedLayer <> GDB_ID.NULL, EgtGetFirstPart(), GDB_ID.NULL) ' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo LoopId = m_MainWindow.m_DrawPageUC.SelectedLayer ElseIf m_CallingPage = MainWindow.Pages.Import Then ' Imposto contesto corrente EgtSetCurrentContext(m_MainWindow.m_ImportPageUC.ImportScene.GetCtx()) ' Recupero nome pezzo PartId = m_MainWindow.m_ImportPageUC.SelectedPart ' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo LoopId = m_MainWindow.m_ImportPageUC.SelectedLayer End If ' Calcolo dimensione ingombro Loop Dim ptMin, ptMax As Point3d EgtGetBBoxGlob(LoopId, GDB_BB.STANDARD, ptMin, ptMax) Dim dBBoxRad As Double = 0.5 * Point3d.DistXY(ptMin, ptMax) ' Preparo layer con testi inclinazioni (svuotandolo o creandolo) Dim TextLayer As Integer = EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER) If TextLayer <> GDB_ID.NULL Then EgtEmptyGroup(TextLayer) ElseIf PartId <> GDB_ID.NULL Then TextLayer = EgtCreateGroup(PartId) EgtSetName(TextLayer, SIDE_ANGLE_LAYER) EgtSetColor(TextLayer, New Color3d(0, 0, 0)) End If ' Se modalità angoli di inclinazione... If m_Mode = ModeOpt.SIDEANGLE Then ' Per ogni entità (della lista inizializzata), creo testo con nome e angolo di inclinazione For Each Entity As SideAngleEntity In m_SideAngleEntityList Dim sText As String = Entity.sEntityName & " = " & DoubleToString(Entity.dSideAngle, 2) & "°" If Entity.dSideHeel > 10 * EPS_SMALL Then sText += "; " & LenToString(Entity.dSideHeel, 2) SideAngle.AddTextToLine(sText, Entity.nTextId, Entity.nGeomId, 20, dBBoxRad, True) Next ' Altrimenti modalità gocciolatoio Else ' Per ogni entità creo testo con nome For Each Entity As DripEntity In m_DripEntityList SideAngle.AddTextToLine(Entity.sEntityName, Entity.nTextId, Entity.nGeomId, 20, dBBoxRad, True) Next ' Creo le geometrie dei gocciolatoi CreateDripGeom(PartId) End If ' Aggiorno visualizzazione EgtDraw() End Sub ' refresh dei checkbox e della caselle di testo per tutte le entità presenti nelle liste SideAngle/DripEntity Private Sub RefreshCheckAndValue() If m_Mode = ModeOpt.SIDEANGLE Then For nIndex As Integer = 1 To m_nCount Dim Entity As SideAngleEntity = m_SideAngleEntityList(nIndex - 1) ' Creo testo con angolo di inclinazione e dimensione tallone If nIndex < (m_nCurrPage - 1) * MAX_LINES Or nIndex > m_nCurrPage * MAX_LINES Then Continue For ' recupero l'inidce degli oggetti della grafica Dim nTxBxIndex As Integer = nIndex - (m_nCurrPage - 1) * MAX_LINES + MAX_LINES - m_nShow ' aggiorno i valore delle caselle di testo per le entità caricate GetAngleTxBxFromIndex(nTxBxIndex).Text = DoubleToString(Entity.dSideAngle, 1) GetHeelTxBxFromIndex(nTxBxIndex).Text = LenToString(Entity.dSideHeel, 1) Next Else For nIndex As Integer = 1 To m_nCount Dim Entity As DripEntity = m_DripEntityList(nIndex - 1) ' Imposto check box (se sono stati definiti il numero corretto di CheckBox If nIndex < (m_nCurrPage - 1) * MAX_LINES Or nIndex > m_nCurrPage * MAX_LINES Then Continue For Dim nChIndex As Integer = nIndex - (m_nCurrPage - 1) * MAX_LINES + MAX_LINES - m_nShow ' verifico se l'entità ha un gocciolatoio GetChBxFromIndex(nChIndex).IsChecked = Entity.bHaveDrip ' aggiorno i valore delle caselle di testo per le entità caricate (Start/End) If m_Mode = ModeOpt.ENGRAVE Then Dim dVal As Double = 0 If StringToLen(GetPrivateProfileDouble(S_SIDES, K_ENGRAVESHORT & "A" & nIndex.ToString & "_Start", 0, m_MainWindow.GetIniFile()), dVal) Then Entity.dShortStart = dVal End If If StringToLen(GetPrivateProfileDouble(S_SIDES, K_ENGRAVESHORT & "A" & nIndex.ToString & "_End", 0, m_MainWindow.GetIniFile()), dVal) Then Entity.dShortEnd = dVal End If Else 'GetAngleTxBxFromIndex(Index).Text = GetPrivateProfileDouble(S_SIDES, K_DRIPSHORT & "A" & nI.ToString & "_Start", 0, m_MainWindow.GetIniFile()) 'GetHeelTxBxFromIndex(Index).Text = GetPrivateProfileDouble(S_SIDES, K_DRIPSHORT & "A" & nI.ToString & "_End", 0, m_MainWindow.GetIniFile()) End If GetAngleTxBxFromIndex(nChIndex).Text = LenToString(Entity.dShortStart, 1) GetHeelTxBxFromIndex(nChIndex).Text = LenToString(Entity.dShortEnd, 1) Next End If End Sub ' Funzione che verifica se alla linea corrente è associabile un canalino Private Function VerifyIsSideDripPossible(LastLine As Integer, CurrLine As Integer, NextLine As Integer) As Boolean ' Verifico se CurrLine è una linea If EgtGetType(CurrLine) <> GDB_TY.CRV_LINE Then Return False End If Return True End Function ' Funzione che gestisce le operazioni sull'entità da inclinare Private Sub AddSideAngle(CurrLine As Integer, TextLayer As Integer, dBBoxRad As Double, nEntityIndex As Integer) ' Imposto nome del lato EgtSetName(CurrLine, "A" & nEntityIndex.ToString()) ' Ricavo angolo dell'entità Dim dSideAngleVal As Double If Not EgtGetInfo(CurrLine, INFO_SIDE_ANGLE, dSideAngleVal) Then dSideAngleVal = 0 ' Ricavo tallone dell'entità Dim dSideHeelVal As Double If Not EgtGetInfo(CurrLine, INFO_HEEL, dSideHeelVal) Then dSideHeelVal = 0 ' Aggiungo entità all'elenco di quelle inclinabili Dim sEntityName As String = String.Empty EgtGetName(CurrLine, sEntityName) m_SideAngleEntityList.Add(New SideAngleEntity(CurrLine, sEntityName, TextLayer, dSideAngleVal, dSideHeelVal)) ' Creo testo con angolo di inclinazione ed eventuale tallone Dim sText As String = sEntityName & " = " & DoubleToString(dSideAngleVal, 2) & "°" If dSideHeelVal > 10 * EPS_SMALL Then sText += "; " & LenToString(dSideHeelVal, 2) SideAngle.AddTextToLine(sText, TextLayer, CurrLine, 20, dBBoxRad, True) End Sub ' Funzione che gestisce le operazioni sull'entità con gocciolatoio Private Sub AddDripSide(CurrLine As Integer, TextLayer As Integer, dBBoxRad As Double, nEntityIndex As Integer) ' Imposto nome del lato EgtSetName(CurrLine, "A" & nEntityIndex.ToString()) ' Ricavo info dell'entità Dim bHaveDripVal As Boolean If Not EgtGetInfo(CurrLine, INFO_HAVE_DRIP, bHaveDripVal) Then bHaveDripVal = False ' Aggiungo entità all'elenco di quelle che possono avere il gocciolatoio Dim sEntityName As String = String.Empty EgtGetName(CurrLine, sEntityName) m_DripEntityList.Add(New DripEntity(CurrLine, sEntityName, TextLayer, bHaveDripVal)) ' Creo testo con nome lato SideAngle.AddTextToLine(sEntityName, TextLayer, CurrLine, 20, dBBoxRad, True) End Sub ' Funzione che crea le geometrie dei gocciolatoi (NON UTILIZZATA) Friend Sub CreateDripGeomOLD(nPartId As Integer) ' Recupero Id layer di contorno esterno Dim nOutLoopId = EgtGetFirstNameInGroup(nPartId, NAME_OUTLOOP) ' Preparo layer con geometria gocciolatoi (svuotandolo o creandolo) Dim DripName As String = If(m_Mode = ModeOpt.DRIP, NAME_DRIPCUT, NAME_ONPATH) Dim DripLayer As Integer = EgtGetFirstNameInGroup(nPartId, DripName) If DripLayer <> GDB_ID.NULL Then EgtEmptyGroup(DripLayer) Else DripLayer = EgtCreateGroup(nPartId) EgtSetName(DripLayer, DripName) End If ' Per ogni entità con gocciolatoio, ne inserisco una copia nel layer Dim vSelId As New List(Of Integer) For Each Entity As DripEntity In m_DripEntityList If Entity.bHaveDrip Then Dim nSouId As Integer = EgtGetFirstNameInGroup(nOutLoopId, Entity.sEntityName) Dim nNewId As Integer = EgtCopyGlob(nSouId, DripLayer) EgtSetName(nNewId, Entity.sEntityName) vSelId.Add(nNewId) End If Next ' Eseguo eventuali allungamenti iniziali e finali Dim nCrvId As Integer = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL If m_dDripShort < -EPS_SMALL Then EgtExtendCurveEndByLen(nCrvId, -m_dDripShort) EgtExtendCurveStartByLen(nCrvId, -m_dDripShort) End If nCrvId = EgtGetNext(nCrvId) End While ' Concateno le curve EgtCreateCurveCompoByReorder(DripLayer, vSelId.Count(), vSelId.ToArray(), New Point3d(), True) ' Eseguo eventuali accorciamenti iniziali e finali nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL If m_dDripShort > EPS_SMALL AndAlso Not EgtCurveIsClosed(nCrvId) Then Dim dLen As Double EgtCurveLength(nCrvId, dLen) EgtTrimCurveEndAtLen(nCrvId, dLen - m_dDripShort) EgtTrimCurveStartAtLen(nCrvId, m_dDripShort) End If nCrvId = EgtGetNext(nCrvId) End While ' Eseguo offset dei risultati nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL EgtOffsetCurve(nCrvId, -m_dDripOffset, OFF_TYPE.EXTEND) nCrvId = EgtGetNext(nCrvId) End While ' Eventuali curve aggiuntive con offset2 If m_nEngrNbr2 > 0 And m_dDripOffset2 > EPS_SMALL Then nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL Dim nNextCrvId As Integer = EgtGetNext(nCrvId) For i As Integer = 1 To m_nEngrNbr2 Dim nNewId As Integer = EgtCopy(nCrvId, nCrvId, GDB_POS.AFTER) EgtOffsetCurve(nNewId, -i * m_dDripOffset2, OFF_TYPE.EXTEND) Next nCrvId = nNextCrvId End While End If If m_Mode = ModeOpt.DRIP Then ' Esplodo nelle curve componenti nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL Dim nNextCrvId = EgtGetNext(nCrvId) Dim nCount As Integer EgtExplodeCurveCompo(nCrvId, nCount) nCrvId = nNextCrvId End While ' Assegno colore e attributi nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL EgtSetColor(nCrvId, COL_MCH_DRIPCUT()) EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth) If m_dDripShort > EPS_SMALL Then EgtSetInfo(nCrvId, INFO_STRICT, "1") nCrvId = EgtGetNext(nCrvId) End While Else ' Assegno colore e attributi nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL EgtSetColor(nCrvId, COL_MCH_DRIPCUT()) EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth) EgtSetInfo(nCrvId, INFO_STRICT, If(m_dDripShort > EPS_SMALL, "3", "0")) nCrvId = EgtGetNext(nCrvId) End While End If End Sub ' nuova funzione per gestire l'accorcaimento dei segmenti Friend Sub CreateDripGeom(nPartId As Integer) ' Recupero Id layer di contorno esterno Dim nOutLoopId = EgtGetFirstNameInGroup(nPartId, NAME_OUTLOOP) ' Preparo layer con geometria gocciolatoi (svuotandolo o creandolo) Dim DripName As String = If(m_Mode = ModeOpt.DRIP, NAME_DRIPCUT, NAME_ONPATH) Dim DripLayer As Integer = EgtGetFirstNameInGroup(nPartId, DripName) If DripLayer <> GDB_ID.NULL Then EgtEmptyGroup(DripLayer) Else DripLayer = EgtCreateGroup(nPartId) EgtSetName(DripLayer, DripName) End If ' Per ogni entità con gocciolatoio, ne inserisco una copia nel layer Dim vSelId As New List(Of Integer) Dim vTempSelId As New List(Of Integer) Dim nIndex As Integer = 0 Dim vJoint As New List(Of Boolean) Dim bJointStart As Boolean = False For Each Entity As DripEntity In m_DripEntityList If Entity.bHaveDrip Then vJoint.Add(True) Else vJoint.Add(False) End If Next ' se non riesco a generare un elenco allora esco If vJoint.Count < 1 Then Return If vJoint(0) And vJoint(vJoint.Count - 1) Then bJointStart = True End If For Each Entity As DripEntity In m_DripEntityList If Entity.bHaveDrip Then Dim nSouId As Integer = EgtGetFirstNameInGroup(nOutLoopId, Entity.sEntityName) Dim nNewId As Integer = EgtCopyGlob(nSouId, DripLayer) EgtSetName(nNewId, Entity.sEntityName) vSelId.Add(nNewId) vTempSelId.Add(nNewId) End If ' devo distingure i casi in cui inserisco un valore positivo ed uno negativo! For Each IdCurve As Integer In vTempSelId ' accorcio entrmabi i lati Dim dLen As Double EgtCurveLength(IdCurve, dLen) If nIndex = vJoint.Count - 1 And (Not bJointStart Or Entity.dShortEnd <> 0) Then ' se l'ultimo segmento non è collegato al primo If Entity.dShortEnd > -EPS_SMALL Then EgtTrimCurveEndAtLen(IdCurve, dLen - Entity.dShortEnd) Else EgtExtendCurveEndByLen(IdCurve, -Entity.dShortEnd) End If ElseIf nIndex < vJoint.Count - 1 Then ' se l'elemento corrente non è collegato al precedente allora accorcio la coda If Not vJoint(nIndex + 1) Or Entity.dShortEnd <> 0 Then If Entity.dShortEnd > -EPS_SMALL Then EgtTrimCurveEndAtLen(IdCurve, dLen - Entity.dShortEnd) Else EgtExtendCurveEndByLen(IdCurve, -Entity.dShortEnd) End If End If End If If nIndex = 0 And (Not bJointStart Or Entity.dShortStart <> 0) Then ' se il primo elemento non è collegato all'ultimo If Entity.dShortStart > -EPS_SMALL Then EgtTrimCurveStartAtLen(IdCurve, Entity.dShortStart) Else EgtExtendCurveStartByLen(IdCurve, -Entity.dShortStart) End If ElseIf nIndex > 0 Then ' se l'elemento precedente non è collegato al corrente allora accorcio la testa If Not vJoint(nIndex - 1) Or Entity.dShortStart <> 0 Then If Entity.dShortStart > -EPS_SMALL Then EgtTrimCurveStartAtLen(IdCurve, Entity.dShortStart) Else EgtExtendCurveStartByLen(IdCurve, -Entity.dShortStart) End If End If End If Next vTempSelId.Clear() nIndex = nIndex + 1 Next ' se tutti i lati sono accorciati allora eseguo il collegamento EgtCreateCurveCompoByReorder(DripLayer, vSelId.Count(), vSelId.ToArray(), New Point3d(), True) ' Eseguo offset dei risultati Dim nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL EgtOffsetCurve(nCrvId, -m_dDripOffset, OFF_TYPE.EXTEND) If m_Mode = ModeOpt.ENGRAVE Then EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth) End If nCrvId = EgtGetNext(nCrvId) End While ' Eventuali curve aggiuntive con offset2 If m_nEngrNbr2 > 0 And m_dDripOffset2 > EPS_SMALL Then nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL Dim nNextCrvId As Integer = EgtGetNext(nCrvId) For i As Integer = 1 To m_nEngrNbr2 Dim nNewId As Integer = EgtCopy(nCrvId, nCrvId, GDB_POS.AFTER) EgtOffsetCurve(nNewId, -i * m_dDripOffset2, OFF_TYPE.EXTEND) If m_Mode = ModeOpt.ENGRAVE Then EgtSetInfo(nNewId, INFO_DEPTH, m_dEngraveDepth2) End If Next nCrvId = nNextCrvId End While End If Dim ListEngraveSideAng As New List(Of Integer) If m_Mode = ModeOpt.DRIP Then ' Esplodo nelle curve componenti nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL Dim nNextCrvId = EgtGetNext(nCrvId) Dim nCount As Integer EgtExplodeCurveCompo(nCrvId, nCount) nCrvId = nNextCrvId End While ' Assegno colore e attributi nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL EgtSetColor(nCrvId, COL_MCH_DRIPCUT()) EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth) If m_dDripShort > EPS_SMALL Then EgtSetInfo(nCrvId, INFO_STRICT, "1") nCrvId = EgtGetNext(nCrvId) End While Else ' Assegno colore e attributi Dim nInd As Integer = 0 nCrvId = EgtGetFirstInGroup(DripLayer) While nCrvId <> GDB_ID.NULL EgtSetColor(nCrvId, COL_MCH_DRIPCUT()) 'EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth) EgtSetInfo(nCrvId, INFO_STRICT, If(m_dDripShort > EPS_SMALL, "3", "0")) If nInd = 0 Then ' solo se m_dEngraveAngle > 0 If Math.Abs(m_dEngraveAngle) > EPS_ANG_SMALL Then ' salvo l'Id della curva che deve essere manipolato separatamente ListEngraveSideAng.Add(nCrvId) Else EgtRemoveInfo(nCrvId, INFO_SIDE_ANGLE) EgtModifyCurveThickness(nCrvId, -m_dEngraveDepth2) End If Else If nInd = m_nEngrNbr2 Then nInd = -1 End If EgtModifyCurveThickness(nCrvId, -m_dEngraveDepth2) End If nInd = nInd + 1 If nInd > m_nEngrNbr2 Then nInd = 0 nCrvId = EgtGetNext(nCrvId) End While End If SplitJointedSideEngrave(ListEngraveSideAng) End Sub Private Sub SplitJointedSideEngrave(ListEngraveSideAngId As List(Of Integer)) For Each nCrvId As Integer In ListEngraveSideAngId ' eventualmente separo il taglio inclinato Dim dUs, dUe As Double EgtCurveDomain(nCrvId, dUs, dUe) Dim dU As Double = dUs While dU < dUe ' + EPS_ZERO Dim ptCurr As Point3d EgtAtParamPoint(nCrvId, dU + 1, nCrvId, ptCurr) ' separa la curva in questo punto Dim nNewCurvId As Integer = GDB_ID.NULL If dUe > 1 Then nNewCurvId = EgtSplitCurveAtPoint(nCrvId, ptCurr, GDB_RT.LOC) Else nNewCurvId = nCrvId End If EgtSetColor(nCrvId, COL_MCH_ONENGRAVE_ANG()) EgtSetInfo(nCrvId, INFO_SIDE_ANGLE, m_dEngraveAngle) ' recupero il vettore di estrusione della curva e la direzione della curva Dim vtAux As Vector3d EgtStartVector(nCrvId, vtAux) Dim vtExtrusion As Vector3d EgtCurveExtrusion(nCrvId, vtExtrusion) ' ruoto il vetottore nella nuova direzione vtExtrusion.Rotate(vtAux, -m_dEngraveAngle) ' assegno il vettore di estrusione nella nuova direzione indicata (segno negativo perchè dentro il pezzo) EgtModifyCurveExtrusion(nCrvId, vtExtrusion) Dim ExtendFactor As Double = New Vector3d(0, 0, 1) * vtExtrusion EgtModifyCurveThickness(nCrvId, -m_dDripDepth / ExtendFactor) If dUe = 1 Then Exit While nCrvId = nNewCurvId ' aggiorno i valori del dominio della curva che rimane EgtCurveDomain(nCrvId, dUs, dUe) End While Next End Sub Private Sub PrevBtn_Click(sender As Object, e As RoutedEventArgs) Handles PrevBtn.Click If m_nCurrPage = 1 Then Return m_nCurrPage -= 1 m_nShow = Math.Min(m_nCount - (m_nCurrPage - 1) * MAX_LINES, MAX_LINES) TxBlChBxView() RefreshCheckAndValue() End Sub Private Sub NextBtn_Click(sender As Object, e As RoutedEventArgs) Handles NextBtn.Click If m_nCount <= (m_nCurrPage - 1) * MAX_LINES Then Return m_nCurrPage += 1 m_nShow = Math.Min(m_nCount - (m_nCurrPage - 1) * MAX_LINES, MAX_LINES) TxBlChBxView() RefreshCheckAndValue() End Sub Private Sub SideCheck_Click(sender As Object, e As RoutedEventArgs) Handles A1.Click, A2.Click, A3.Click, A4.Click, A5.Click, A6.Click, A7.Click, A8.Click, A9.Click, A10.Click Dim CurrCheckBox As CheckBox = e.Source If m_Mode = ModeOpt.DRIP Or m_Mode = ModeOpt.ENGRAVE Then ' Recupero stato entità Dim bVal As Boolean = CurrCheckBox.IsChecked() Dim SideIndex As Integer = CInt(CurrCheckBox.Name.Substring(1)) ' Converto nome checkbox in nome elemento tenendo conto della pagina e dello slittamento verso il basso Dim nCurrSide As Integer = (m_nCurrPage - 1) * MAX_LINES + SideIndex - (MAX_LINES - m_nShow) Dim sCurrSide As String = m_DripEntityList(nCurrSide - 1).sEntityName ' aggiorno l'entità con i valori scritti nel campo di testo Dim CurrEntity As DripEntity = DripEntity.FindEntity(sCurrSide) Dim dVal As Double = 0 StringToLen(GetAngleTxBxFromIndex(SideIndex).Text, dVal) CurrEntity.dShortStart = dVal StringToLen(GetHeelTxBxFromIndex(SideIndex).Text, dVal) CurrEntity.dShortEnd = dVal ' Modifico info gocciolatoi ModifyDrip(sCurrSide, bVal) ' Aggiorno tutti i testi e le geometrie RefreshSideAngleText() End If End Sub '-------> riga 1 Private Sub A1TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A1TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(1, A1TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(1, A1TxBx) End If End Sub Private Sub H1TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H1TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(1, H1TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(1, H2TxBx) End If End Sub '-------> riga 2 Private Sub A2TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A2TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(2, A2TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(2, A2TxBx) End If End Sub Private Sub H2TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H2TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(2, H2TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(2, H2TxBx) End If End Sub '-------> riga 3 Private Sub A3TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A3TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(3, A3TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(3, A3TxBx) End If End Sub Private Sub H3TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H3TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(3, H3TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(3, H3TxBx) End If End Sub '-------> riga 4 Private Sub A4TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A4TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(4, A4TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(4, A4TxBx) End If End Sub Private Sub H4TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H4TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(4, H4TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(4, H4TxBx) End If End Sub '-------> riga 5 Private Sub A5TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A5TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(5, A5TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(5, A5TxBx) End If End Sub Private Sub H5TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H5TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(5, H5TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(5, H5TxBx) End If End Sub '-------> riga 6 Private Sub A6TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A6TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(6, A6TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(6, A6TxBx) End If End Sub Private Sub H6TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H6TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(6, H6TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(6, H6TxBx) End If End Sub '-------> riga 7 Private Sub A7TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A7TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(7, A7TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(7, A7TxBx) End If End Sub Private Sub H7TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H7TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(7, H7TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(7, H7TxBx) End If End Sub ' -------> riga 8 Private Sub A8TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A8TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(8, A8TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(8, A8TxBx) End If End Sub Private Sub H8TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H8TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(8, H8TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(8, H8TxBx) End If End Sub ' -------> riga 9 Private Sub A9TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A9TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(9, A9TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(9, A9TxBx) End If End Sub Private Sub H9TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H9TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(9, H9TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(9, H9TxBx) End If End Sub ' -------> riga 10 Private Sub A10TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A10TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideAngleFromTxBx(10, A10TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortStartFromTxBx(10, A10TxBx) End If End Sub Private Sub H10TxBx_EgtClosed(sender As Object, e As EventArgs) Handles H10TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then SetSideHeelFromTxBx(10, H10TxBx) Else 'If m_Mode = ModeOpt.DRIP Then SetDripShortEndFromTxBx(10, H10TxBx) End If End Sub '-------> riga nuova Private Sub NewA1TxBx_EgtClosed(sender As Object, e As EventArgs) Handles NewA1TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then UpdateSideAngleAllEntities() End If End Sub Private Sub NewH1TxBx_EgtClosed(sender As Object, e As EventArgs) Handles NewH1TxBx.EgtClosed If m_Mode = ModeOpt.SIDEANGLE Then UpdateHeelAllEntities() End If End Sub Private Sub SetSideAngleFromTxBx(SideIndex As Integer, AngleTxBx As EgtWPFLib.EgtTextBox) ' Nuovo angolo di inclinazione Dim dSideAngle As Double StringToDouble(AngleTxBx.Text, dSideAngle) ' Verifico stia nei limiti If dSideAngle < -m_dMaxSideAng Then dSideAngle = -m_dMaxSideAng AngleTxBx.Text = DoubleToString(dSideAngle, 2) ElseIf dSideAngle > m_dMaxSideAng Then dSideAngle = m_dMaxSideAng AngleTxBx.Text = DoubleToString(dSideAngle, 2) End If ' Converto nome checkbox in nome elemento tenendo conto della pagina e dello slittamento verso il basso Dim nCurrSide As Integer = (m_nCurrPage - 1) * MAX_LINES + SideIndex - (MAX_LINES - m_nShow) Dim sCurrSide As String = m_SideAngleEntityList(nCurrSide - 1).sEntityName ' Lo modifico nella geometria e nella lista inclinazioni ModifySideAngle(sCurrSide, dSideAngle) ' Aggiorno tutti i testi RefreshSideAngleText() End Sub ' definsce l'accorciamento del lato rispetto al punto iniziale Private Sub SetDripShortStartFromTxBx(SideIndex As Integer, AngleTxBx As EgtWPFLib.EgtTextBox) ' Nuovo angolo di inclinazione Dim dSideAngle As Double StringToDouble(AngleTxBx.Text, dSideAngle) ' Verifico stia nei limiti ' Converto nome checkbox in nome elemento tenendo conto della pagina e dello slittamento verso il basso Dim nCurrSide As Integer = (m_nCurrPage - 1) * MAX_LINES + SideIndex - (MAX_LINES - m_nShow) Dim sCurrSide As String = m_DripEntityList(nCurrSide - 1).sEntityName ' Ricavo CurrEntity dal nome Dim CurrEntity As DripEntity = DripEntity.FindEntity(sCurrSide) CurrEntity.dShortStart = dSideAngle ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() If m_Mode = ModeOpt.DRIP Then WritePrivateProfileString(S_SIDES, K_DRIPSHORT & CurrEntity.sEntityName & "_End", LenToString(CurrEntity.dShortStart, 3), m_MainWindow.GetIniFile()) Else WritePrivateProfileString(S_SIDES, K_ENGRAVESHORT & CurrEntity.sEntityName & "_Start", LenToString(CurrEntity.dShortStart, 3), m_MainWindow.GetIniFile()) End If End Sub ' definisce l'accorciamento del alto rispetto al punto finale Private Sub SetDripShortEndFromTxBx(SideIndex As Integer, AngleTxBx As EgtWPFLib.EgtTextBox) ' Nuovo angolo di inclinazione Dim dSideAngle As Double StringToDouble(AngleTxBx.Text, dSideAngle) ' Verifico stia nei limiti ' Converto nome checkbox in nome elemento tenendo conto della pagina e dello slittamento verso il basso Dim nCurrSide As Integer = (m_nCurrPage - 1) * MAX_LINES + SideIndex - (MAX_LINES - m_nShow) Dim sCurrSide As String = m_DripEntityList(nCurrSide - 1).sEntityName ' Ricavo CurrEntity dal nome Dim CurrEntity As DripEntity = DripEntity.FindEntity(sCurrSide) CurrEntity.dShortEnd = dSideAngle ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() If m_Mode = ModeOpt.DRIP Then WritePrivateProfileString(S_SIDES, K_DRIPSHORT & CurrEntity.sEntityName & "_End", LenToString(CurrEntity.dShortEnd, 3), m_MainWindow.GetIniFile()) Else WritePrivateProfileString(S_SIDES, K_ENGRAVESHORT & CurrEntity.sEntityName & "_End", LenToString(CurrEntity.dShortEnd, 3), m_MainWindow.GetIniFile()) End If End Sub Private Sub SetSideHeelFromTxBx(SideIndex As Integer, HeelTxBx As EgtWPFLib.EgtTextBox) ' Nuovo tallone Dim dSideHeel As Double StringToLen(HeelTxBx.Text, dSideHeel) ' Verifico stia nei limiti If dSideHeel < 0 Then dSideHeel = 0 HeelTxBx.Text = "0" End If ' Converto nome checkbox in nome elemento tenendo conto della pagina e dello slittamento verso il basso Dim nCurrSide As Integer = (m_nCurrPage - 1) * MAX_LINES + SideIndex - (MAX_LINES - m_nShow) Dim sCurrSide As String = m_SideAngleEntityList(nCurrSide - 1).sEntityName ' Lo modifico nella geometria e nella lista inclinazioni ModifySideHeel(sCurrSide, dSideHeel) ' Aggiorno tutti i testi RefreshSideAngleText() End Sub ' Funzione che modifica l'eventuale canalino di un lato Friend Function ModifyDrip(sEntityName As String, bVal As Boolean) As Boolean ' Ricavo CurrEntity dal nome Dim CurrEntity As DripEntity = DripEntity.FindEntity(sEntityName) If IsNothing(CurrEntity) Then EgtOutLog("Error in drip definition: selected line not found in DripEntity") Return False End If ' Scrivo nuovo angolo nelle info If bVal Then EgtSetInfo(CurrEntity.nGeomId, INFO_HAVE_DRIP, "1") ' Cancello inclinazione nell'apposito campo info Else EgtRemoveInfo(CurrEntity.nGeomId, INFO_HAVE_DRIP) End If ' Aggiorno lista entità con nuova inclinazione CurrEntity.bHaveDrip = bVal Return True End Function ' Funzione che modifica l'inclinazione di un lato Friend Function ModifySideAngle(sEntityName As String, dSideAngle As Double) As Boolean ' Ricavo CurrEntity dal nome Dim CurrEntity As SideAngleEntity = SideAngleEntity.FindEntity(sEntityName) If IsNothing(CurrEntity) Then EgtOutLog("Error in side angle definition: selected line not found in SideAngleList") Return False End If ' Scrivo nuovo angolo nelle info If dSideAngle <> 0 Then EgtSetInfo(CurrEntity.nGeomId, INFO_SIDE_ANGLE, dSideAngle) EgtSetInfo(CurrEntity.nGeomId, INFO_ORIG_SIDE_ANGLE, dSideAngle) Dim sSawingTilted As String = m_MainWindow.m_CurrentMachine.sCurrSawingTilted If Not String.IsNullOrEmpty(sSawingTilted) And m_MainWindow.m_CurrentMachine.bApplySawingTilted Then EgtSetInfo(CurrEntity.nGeomId, DEF_MACHINING_TILTED, sSawingTilted) End If ' Cancello inclinazione nell'apposito campo info Else EgtRemoveInfo(CurrEntity.nGeomId, INFO_SIDE_ANGLE) EgtRemoveInfo(CurrEntity.nGeomId, INFO_ORIG_SIDE_ANGLE) EgtRemoveInfo(CurrEntity.nGeomId, DEF_MACHINING_TILTED) End If ' Aggiorno lista entità con nuova inclinazione CurrEntity.dSideAngle = dSideAngle Return True End Function ' Funzione che modifica il tallone di un lato Friend Function ModifySideHeel(sEntityName As String, dSideHeel As Double) As Boolean ' Ricavo CurrEntity dal nome Dim CurrEntity As SideAngleEntity = SideAngleEntity.FindEntity(sEntityName) If IsNothing(CurrEntity) Then EgtOutLog("Error in side angle definition: selected line not found in SideAngleList") Return False End If ' Scrivo nuovo tallone nelle info If dSideHeel > 10 * EPS_SMALL Then EgtSetInfo(CurrEntity.nGeomId, INFO_HEEL, dSideHeel) ' Cancello inclinazione nell'apposito campo info Else EgtRemoveInfo(CurrEntity.nGeomId, INFO_HEEL) End If ' Aggiorno lista entità con nuova inclinazione CurrEntity.dSideHeel = dSideHeel Return True End Function ' Pulisco la finestra e svuoto le liste SideAngle/DripEntity Friend Sub DeleteSideAngle() ' Cancello lista lati inclinati If m_Mode = ModeOpt.SIDEANGLE Then m_SideAngleEntityList.Clear() ' Annullo tutti i testi For Index As Integer = 1 To MAX_LINES GetAngleTxBxFromIndex(Index).Text = String.Empty GetHeelTxBxFromIndex(Index).Text = String.Empty Next Else m_DripEntityList.Clear() ' Annullo tutti i CheckBox e svuoto tutte le caselle di testo For Index As Integer = 1 To MAX_LINES GetChBxFromIndex(Index).IsChecked = False GetAngleTxBxFromIndex(Index).Text = String.Empty GetHeelTxBxFromIndex(Index).Text = String.Empty Next End If End Sub '---------------> Elenco parametri presenti a fine pagina Private Sub Parameter1TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter1TxBx.EgtClosed If m_Mode = ModeOpt.DRIP Or m_Mode = ModeOpt.ENGRAVE Then ' Recupero il valore StringToLen(Parameter1TxBx.Text, m_dDripOffset) ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() End If End Sub Private Sub Parameter2TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter2TxBx.EgtClosed If m_Mode = ModeOpt.DRIP Then ' Recupero il valore StringToLen(Parameter2TxBx.Text, m_dDripOffset2) ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() End If End Sub Private Sub Parameter2aTxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter2aTxBx.EgtClosed If m_Mode = ModeOpt.ENGRAVE Then ' Recupero il valore StringToInt(Parameter2aTxBx.Text, m_nEngrNbr2) ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() End If End Sub Private Sub Parameter2bTxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter2bTxBx.EgtClosed If m_Mode = ModeOpt.ENGRAVE Then ' Recupero il valore StringToLen(Parameter2bTxBx.Text, m_dDripOffset2) ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() End If End Sub Private Sub Parameter3TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter3TxBx.EgtClosed If m_Mode = ModeOpt.DRIP Or m_Mode = ModeOpt.ENGRAVE Then ' Recupero il valore StringToLen(Parameter3TxBx.Text, m_dDripDepth) ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() End If End Sub Private Sub Parameter4TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter4TxBx.EgtClosed If m_Mode = ModeOpt.DRIP Then ' Recupero il valore StringToLen(Parameter4TxBx.Text, m_dDripShort) ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() ElseIf m_Mode = ModeOpt.ENGRAVE Then ' Recupero il valore StringToLen(Parameter4TxBx.Text, m_dEngraveDepth2) ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() End If End Sub Private Sub Parameter5TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter5TxBx.EgtClosed If m_Mode = ModeOpt.ENGRAVE Then ' Recupero il valore StringToDouble(Parameter5TxBx.Text, m_dEngraveAngle) ' Creo le geometrie dei gocciolatoi RefreshSideAngleText() End If End Sub Friend Sub ReLoadSideAnglePage() SideAngleUC_Loaded(Me, New RoutedEventArgs) End Sub End Class Friend Class SideAngleEntity Private Shared m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) Private m_nGeomId As Integer Private m_sEntityName As String Private m_nTextId As Integer Private m_dSideAngle As Double Private m_dSideHeel As Double Public Property nGeomId As Integer Get Return m_nGeomId End Get Set(value As Integer) m_nGeomId = value End Set End Property Public ReadOnly Property sEntityName As String Get Return m_sEntityName End Get End Property Public ReadOnly Property nTextId As Integer Get Return m_nTextId End Get End Property Public Property dSideAngle As Double Get Return m_dSideAngle End Get Set(value As Double) m_dSideAngle = value End Set End Property Public Property dSideHeel As Double Get Return m_dSideHeel End Get Set(value As Double) m_dSideHeel = value End Set End Property Sub New(nId As Integer, sEntityName As String, nTextId As Integer, dSideAngle As Double, dSideHeel As Double) m_nGeomId = nId m_sEntityName = sEntityName m_nTextId = nTextId m_dSideAngle = dSideAngle m_dSideHeel = dSideHeel End Sub Friend Shared Function FindEntity(sEntityName As String) As SideAngleEntity Dim EntityList As List(Of SideAngleEntity) = Nothing If m_MainWindow.m_ActivePage = MainWindow.Pages.Draw Then EntityList = m_MainWindow.m_DrawPageUC.m_SideAngleUC.m_SideAngleEntityList ElseIf m_MainWindow.m_ActivePage = MainWindow.Pages.Import Then EntityList = m_MainWindow.m_ImportPageUC.m_SideAngleUC.m_SideAngleEntityList End If If IsNothing(EntityList) Then Return Nothing End If For Each Entity As SideAngleEntity In EntityList If Entity.m_sEntityName = sEntityName Then Return Entity End If Next Return Nothing End Function End Class Friend Class DripEntity Private Shared m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) Private m_nGeomId As Integer Private m_sEntityName As String Private m_nTextId As Integer Private m_bHaveDrip As Boolean Private m_dShortStart As Double Private m_dShortEnd As Double Public Property nGeomId As Integer Get Return m_nGeomId End Get Set(value As Integer) m_nGeomId = value End Set End Property Public ReadOnly Property sEntityName As String Get Return m_sEntityName End Get End Property Public ReadOnly Property nTextId As Integer Get Return m_nTextId End Get End Property Public Property bHaveDrip As Boolean Get Return m_bHaveDrip End Get Set(value As Boolean) m_bHaveDrip = value End Set End Property Public Property dShortEnd As Double Get Return m_dShortEnd End Get Set(value As Double) m_dShortEnd = value End Set End Property Public Property dShortStart As Double Get Return m_dShortStart End Get Set(value As Double) m_dShortStart = value End Set End Property Sub New(nId As Integer, sEntityName As String, nTextId As Integer, bHaveDrip As Boolean) m_nGeomId = nId m_sEntityName = sEntityName m_nTextId = nTextId m_bHaveDrip = bHaveDrip End Sub Friend Shared Function FindEntity(sEntityName As String) As DripEntity Dim EntityList As List(Of DripEntity) = Nothing If m_MainWindow.m_ActivePage = MainWindow.Pages.Draw Then EntityList = m_MainWindow.m_DrawPageUC.m_SideAngleUC.m_DripEntityList ElseIf m_MainWindow.m_ActivePage = MainWindow.Pages.Import Then EntityList = m_MainWindow.m_ImportPageUC.m_SideAngleUC.m_DripEntityList End If If IsNothing(EntityList) Then Return Nothing End If For Each Entity As DripEntity In EntityList If Entity.m_sEntityName = sEntityName Then Return Entity End If Next Return Nothing End Function End Class