Files
Demetrio Cassarino 0d81ee5974 -aggiornato messaggi
2025-06-16 08:33:33 +02:00

3801 lines
150 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.Drawing
Imports System.Reflection
Imports System.Security.Cryptography
Imports EgtUILib
Imports EgtWPFLib5
Imports EgtWPFLib5.EgtCustomWindow
Public Class SplitModeVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
' Stato
Private m_nCurrPhase As Integer = 0
Private m_MachiningList As New List(Of SplitMach)
Private m_bModified As Boolean = False
Private m_nNbrGrpId As Integer = GDB_ID.NULL
Private m_CurrFirstInd As Integer = -1
Private m_CurrLastInd As Integer = -1
Private m_SelectedItemsList As New ObservableCollection(Of NameIdLsBxItem)
' numero di lavorazioni di tipo lama
Private m_nCountSawing As Integer = 0
' numero di lavprazioni di tipo waterjet
Private m_nCountWaterjetting As Integer = 0
' altri tipi di lavorazioni (Foro/Fresa)
Private m_nCountOtherMachining As Integer = 0
' verifico che le lavorazioni selezionate siano omogenee (con lo stesso utensile)
Private m_bAreHomogeneous As Boolean = False
' Id tagli WJ per generazione ponticelli tra due percorsi
Private m_nIdSelectedPartWJ_Srt As Integer = GDB_ID.NULL
Private m_nIdSelectedSideWJ_Srt As Integer = GDB_ID.NULL
Private m_nIdSelectedWaterJet_Srt As Integer = GDB_ID.NULL
Private m_nIdSelectedPartWJ_End As Integer = GDB_ID.NULL
Private m_nIdSelectedSideWJ_End As Integer = GDB_ID.NULL
Private m_nIdSelectedWaterJet_End As Integer = GDB_ID.NULL
' Id gruppo Bridges (Nuovo da versione 30/08/2022)
Private m_nIdBridgesGroup As Integer = GDB_ID.NULL
'Private m_nIdBridgeLineGroup As Integer = GDB_ID.NULL
Private m_nIdBridge As Integer = GDB_ID.NULL
Private m_ptSrtBridge As New Point3d
Private m_ptEndBridge As New Point3d
' Punti per creazione tagli odi separazione
Private m_ptStartPoint As Point3d
Private m_bGetStartPoint As Boolean = False
Private m_ptEndPoint As Point3d
Private m_bGetEndPoint As Boolean = False
Private m_IdSplitLine As Integer = GDB_ID.NULL
Private m_IdSplitGroup As Integer = GDB_ID.NULL
Private m_IdSplitGroupLayer As Integer = GDB_ID.NULL
Private m_IdCurrRawSolid As Integer = GDB_ID.NULL
Private m_IdSplitLineRemove As Integer = GDB_ID.NULL
' Flag di pagina attiva
Private m_bActive As Boolean = False
' Drag
Private m_nDragInd As Integer = -1
Private m_nDragType As Integer = 0 '0=niente, 1=attacco, 2=uscita
Private m_ptDragPrev As Point3d
Private m_bDragging As Boolean = False
' Selected cut
Private m_nSelected As Integer = GDB_ID.NULL
' Abilita la mofica Inizio fine per i tagli interni sugli angoli
Private m_StartEndModifyOnIntCorner As Boolean = False
Private m_ItemList As New ObservableCollection(Of NameIdLsBxItem)
Public ReadOnly Property ItemList As ObservableCollection(Of NameIdLsBxItem)
Get
Return m_ItemList
End Get
End Property
Private m_bEnabledCommandMove As Boolean = False
Public Property bEnabledCommandMove As Boolean
Get
Return m_bEnabledCommandMove
End Get
Set(value As Boolean)
m_bEnabledCommandMove = value
NotifyPropertyChanged("bEnabledCommandMove")
End Set
End Property
Private m_SplitModeIsEnabled As Boolean
Public Property SplitModeIsEnabled As Boolean
Get
Return m_SplitModeIsEnabled
End Get
Set(value As Boolean)
m_SplitModeIsEnabled = value
NotifyPropertyChanged("SplitModeIsEnabled")
End Set
End Property
Private m_AllExtRedVisibility As Visibility
Public Property AllExtRedVisibility As Visibility
Get
Return m_AllExtRedVisibility
End Get
Set(value As Visibility)
m_AllExtRedVisibility = value
NotifyPropertyChanged("AllExtRedVisibility")
End Set
End Property
Private m_CutBtnVisibility As Visibility
Public Property CutBtnVisibility As Visibility
Get
Return m_CutBtnVisibility
End Get
Set(value As Visibility)
m_CutBtnVisibility = value
NotifyPropertyChanged(NameOf(CutBtnVisibility))
End Set
End Property
Private m_CutStartBtnVisibility As Visibility
Public Property CutStartBtnVisibility As Visibility
Get
Return m_CutStartBtnVisibility
End Get
Set(value As Visibility)
m_CutStartBtnVisibility = value
NotifyPropertyChanged(NameOf(CutStartBtnVisibility))
End Set
End Property
Private m_CutEndBtnVisibility As Visibility
Public Property CutEndBtnVisibility As Visibility
Get
Return m_CutEndBtnVisibility
End Get
Set(value As Visibility)
m_CutEndBtnVisibility = value
NotifyPropertyChanged(NameOf(CutEndBtnVisibility))
End Set
End Property
Private m_OutCenStartBtnVisibility As Visibility
Public Property OutCenStartBtnVisibility As Visibility
Get
Return m_OutCenStartBtnVisibility
End Get
Set(value As Visibility)
m_OutCenStartBtnVisibility = value
NotifyPropertyChanged(NameOf(OutCenStartBtnVisibility))
End Set
End Property
Private m_OutCenEndBtnVisibility As Visibility
Public Property OutCenEndBtnVisibility As Visibility
Get
Return m_OutCenEndBtnVisibility
End Get
Set(value As Visibility)
m_OutCenEndBtnVisibility = value
NotifyPropertyChanged(NameOf(OutCenEndBtnVisibility))
End Set
End Property
Private m_InvertBtnVisibility As Visibility
Public Property InvertBtnVisibility As Visibility
Get
Return m_InvertBtnVisibility
End Get
Set(value As Visibility)
m_InvertBtnVisibility = value
NotifyPropertyChanged(NameOf(InvertBtnVisibility))
End Set
End Property
Private m_PauseBtnVisibility As Visibility
Public Property PauseBtnVisibility As Visibility
Get
Return m_PauseBtnVisibility
End Get
Set(value As Visibility)
m_PauseBtnVisibility = value
NotifyPropertyChanged(NameOf(PauseBtnVisibility))
End Set
End Property
Private m_AllOutStartBtnVisibility As Visibility
Public Property AllOutStartBtnVisibility As Visibility
Get
Return m_AllOutStartBtnVisibility
End Get
Set(value As Visibility)
m_AllOutStartBtnVisibility = value
NotifyPropertyChanged(NameOf(AllOutStartBtnVisibility))
End Set
End Property
Private m_AllCenStartBtnVisibility As Visibility
Public Property AllCenStartBtnVisibility As Visibility
Get
Return m_AllCenStartBtnVisibility
End Get
Set(value As Visibility)
m_AllCenStartBtnVisibility = value
NotifyPropertyChanged(NameOf(AllCenStartBtnVisibility))
End Set
End Property
Private m_AllOutEndBtnVisibility As Visibility
Public Property AllOutEndBtnVisibility As Visibility
Get
Return m_AllOutEndBtnVisibility
End Get
Set(value As Visibility)
m_AllOutEndBtnVisibility = value
NotifyPropertyChanged(NameOf(AllOutEndBtnVisibility))
End Set
End Property
Private m_AllCenEndBtnVisibility As Visibility
Public Property AllCenEndBtnVisibility As Visibility
Get
Return m_AllCenEndBtnVisibility
End Get
Set(value As Visibility)
m_AllCenEndBtnVisibility = value
NotifyPropertyChanged(NameOf(AllCenEndBtnVisibility))
End Set
End Property
Private m_AllExtendBtnVisibility As Visibility
Public Property AllExtendBtnVisibility As Visibility
Get
Return m_AllExtendBtnVisibility
End Get
Set(value As Visibility)
m_AllExtendBtnVisibility = value
NotifyPropertyChanged(NameOf(AllExtendBtnVisibility))
End Set
End Property
Private m_AllReduceBtnVisibility As Visibility
Public Property AllReduceBtnVisibility As Visibility
Get
Return m_AllReduceBtnVisibility
End Get
Set(value As Visibility)
m_AllReduceBtnVisibility = value
NotifyPropertyChanged(NameOf(AllReduceBtnVisibility))
End Set
End Property
Private m_BridgeBtnVisibility As Visibility = Visibility.Hidden
Public Property BridgeBtnVisibility As Visibility
Get
Return m_BridgeBtnVisibility
End Get
Set(value As Visibility)
m_BridgeBtnVisibility = value
NotifyPropertyChanged(NameOf(BridgeBtnVisibility))
End Set
End Property
Private m_BridgeDeleteBtnVisibility As Visibility = Visibility.Hidden
Public Property BridgeDeleteBtnVisibility As Visibility
Get
Return m_BridgeDeleteBtnVisibility
End Get
Set(value As Visibility)
m_BridgeDeleteBtnVisibility = value
NotifyPropertyChanged(NameOf(BridgeDeleteBtnVisibility))
End Set
End Property
Private m_QualityBtnVisibility As Visibility = Visibility.Hidden
Public Property QualityBtnVisibility As Visibility
Get
Return m_QualityBtnVisibility
End Get
Set(value As Visibility)
m_QualityBtnVisibility = value
NotifyPropertyChanged(NameOf(QualityBtnVisibility))
End Set
End Property
Private m_bOnOffCut_IsExpanded As Boolean = True
Public Property bOnOffCut_IsExpanded As Boolean
Get
Return m_bOnOffCut_IsExpanded
End Get
Set(value As Boolean)
m_bOnOffCut_IsExpanded = value
NotifyPropertyChanged(NameOf(bOnOffCut_IsExpanded))
WriteMainPrivateProfileString("Split", "OnOffCut", If(m_bOnOffCut_IsExpanded, "1", "0"))
End Set
End Property
Private m_bSpLitCut_IsExpanded As Boolean = True
Public Property bSpLitCut_IsExpanded As Boolean
Get
Return m_bSpLitCut_IsExpanded
End Get
Set(value As Boolean)
m_bSpLitCut_IsExpanded = value
NotifyPropertyChanged(NameOf(bSpLitCut_IsExpanded))
WriteMainPrivateProfileString("Split", "SplitCut", If(m_bSpLitCut_IsExpanded, "1", "0"))
End Set
End Property
Private m_bDirectSpLitCut_IsExpanded As Boolean = True
Public Property bDirectSpLitCut_IsExpanded As Boolean
Get
Return m_bDirectSpLitCut_IsExpanded
End Get
Set(value As Boolean)
m_bDirectSpLitCut_IsExpanded = value
NotifyPropertyChanged(NameOf(bDirectSpLitCut_IsExpanded))
WriteMainPrivateProfileString("Split", "DirectSplitCut", If(m_bDirectSpLitCut_IsExpanded, "1", "0"))
End Set
End Property
Private m_bModifyCut_IsExpanded As Boolean = True
Public Property bModifyCut_IsExpanded As Boolean
Get
Return m_bModifyCut_IsExpanded
End Get
Set(value As Boolean)
m_bModifyCut_IsExpanded = value
NotifyPropertyChanged(NameOf(bModifyCut_IsExpanded))
WriteMainPrivateProfileString("Split", "ModifyCut", If(m_bModifyCut_IsExpanded, "1", "0"))
End Set
End Property
Private m_BridgeBtn_IsChecked As Boolean = False
Public Property BridgeBtn_IsChecked As Boolean
Get
Return m_BridgeBtn_IsChecked
End Get
Set(value As Boolean)
m_BridgeBtn_IsChecked = value
BridgeIsChecked()
NotifyPropertyChanged(NameOf(BridgeBtn_IsChecked))
End Set
End Property
Private m_BridgeDeleteBtn_IsChecked As Boolean = False
Public Property BridgeDeleteBtn_IsChecked As Boolean
Get
Return m_BridgeDeleteBtn_IsChecked
End Get
Set(value As Boolean)
m_BridgeDeleteBtn_IsChecked = value
BridgeDeleteIsChecked()
NotifyPropertyChanged(NameOf(BridgeDeleteBtn_IsChecked))
End Set
End Property
Private m_LayNbArrTgBtn_IsChecked As Boolean = False
Public Property LayNbArrTgBtn_IsChecked As Boolean
Get
Return m_LayNbArrTgBtn_IsChecked
End Get
Set(value As Boolean)
' imposto il valore della bottone, dell'icona e del messaggio
SetLayNbArrTgBtn_IsChecked(value)
WriteMainPrivateProfileString(S_GENERAL, K_SHOWNBARROW, If(m_LayNbArrTgBtn_IsChecked, "1", "0"))
End Set
End Property
Private Sub SetLayNbArrTgBtn_IsChecked(value As Boolean)
m_LayNbArrTgBtn_IsChecked = value
If value Then
StatusOffNumbArrow(GDB_ST.ON_)
m_LayNbArrTgBtnMsg = EgtMsg(91218) ' Hide
m_LayNbArrTgBtnImg = "/Resources/NewIcons/LightArrowOn.png"
Else
StatusOffNumbArrow(GDB_ST.OFF)
m_LayNbArrTgBtnMsg = EgtMsg(91219) ' Show
m_LayNbArrTgBtnImg = "/Resources/NewIcons/LightArrowOff.png"
End If
NotifyPropertyChanged(NameOf(LayNbArrTgBtnMsg))
NotifyPropertyChanged(NameOf(LayNbArrTgBtnImg))
End Sub
#Region "SPLIT CUT"
Private m_CreateCut_IsChecked As Boolean
Public Property CreateCut_IsChecked As Boolean
Get
Return m_CreateCut_IsChecked
End Get
Set(value As Boolean)
m_CreateCut_IsChecked = value
m_RemoveCut_IsChecked = False
m_CreateParallelCut_IsChecked = False
m_ModifyCut_IsChecked = False
NotifyPropertyChanged(NameOf(RemoveCut_IsChecked))
NotifyPropertyChanged(NameOf(CreateParallelCut_IsChecked))
NotifyPropertyChanged(NameOf(ModifyCut_IsChecked))
CreateCutIsChecked()
NotifyPropertyChanged(NameOf(CreateCut_IsChecked))
End Set
End Property
Private m_RemoveCut_IsChecked As Boolean
Public Property RemoveCut_IsChecked As Boolean
Get
Return m_RemoveCut_IsChecked
End Get
Set(value As Boolean)
m_RemoveCut_IsChecked = value
m_CreateCut_IsChecked = False
m_CreateParallelCut_IsChecked = False
m_ModifyCut_IsChecked = False
NotifyPropertyChanged(NameOf(CreateCut_IsChecked))
NotifyPropertyChanged(NameOf(CreateParallelCut_IsChecked))
NotifyPropertyChanged(NameOf(ModifyCut_IsChecked))
RemoveCutIsChecked()
NotifyPropertyChanged(NameOf(RemoveCut_IsChecked))
End Set
End Property
Private m_CreateParallelCut_IsChecked As Boolean
Public Property CreateParallelCut_IsChecked As Boolean
Get
Return m_CreateParallelCut_IsChecked
End Get
Set(value As Boolean)
m_CreateParallelCut_IsChecked = value
m_CreateCut_IsChecked = False
m_RemoveCut_IsChecked = False
m_ModifyCut_IsChecked = False
NotifyPropertyChanged(NameOf(CreateCut_IsChecked))
NotifyPropertyChanged(NameOf(RemoveCut_IsChecked))
NotifyPropertyChanged(NameOf(ModifyCut_IsChecked))
CreateParellelCutIsChecked()
NotifyPropertyChanged(NameOf(CreateParallelCut_IsChecked))
End Set
End Property
Private m_ModifyCut_IsChecked As Boolean
Public Property ModifyCut_IsChecked As Boolean
Get
Return m_ModifyCut_IsChecked
End Get
Set(value As Boolean)
m_ModifyCut_IsChecked = value
m_CreateCut_IsChecked = False
m_RemoveCut_IsChecked = False
m_CreateParallelCut_IsChecked = False
NotifyPropertyChanged(NameOf(CreateCut_IsChecked))
NotifyPropertyChanged(NameOf(RemoveCut_IsChecked))
NotifyPropertyChanged(NameOf(CreateParallelCut_IsChecked))
ModifyCutIsChecked()
NotifyPropertyChanged(NameOf(ModifyCut_IsChecked))
End Set
End Property
#End Region ' Split Cut
#Region "Messages"
Public ReadOnly Property OnOffMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 1)
End Get
End Property
Public ReadOnly Property AllOnMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 2)
End Get
End Property
Public ReadOnly Property AllOffMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 3)
End Get
End Property
Public ReadOnly Property CutMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 4)
End Get
End Property
Public ReadOnly Property CutStartMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 5)
End Get
End Property
Public ReadOnly Property CutEndMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 6)
End Get
End Property
Public ReadOnly Property OutCenStartMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 7)
End Get
End Property
Public ReadOnly Property AllOutStartMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 8)
End Get
End Property
Public ReadOnly Property AllCenStartMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 9)
End Get
End Property
Public ReadOnly Property OutCenEndMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 12)
End Get
End Property
Public ReadOnly Property AllOutEndMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 13)
End Get
End Property
Public ReadOnly Property AllCenEndMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 14)
End Get
End Property
Public ReadOnly Property AllExtendMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 15)
End Get
End Property
Public ReadOnly Property AllReduceMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 16)
End Get
End Property
Public ReadOnly Property ModifStartMsg As String
Get
Return EgtMsg(90373) ' Inizio Modif.
End Get
End Property
Public ReadOnly Property ModifEndMsg As String
Get
Return EgtMsg(90374) ' Fine Modif.
End Get
End Property
Public ReadOnly Property PauseMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 31)
End Get
End Property
Public ReadOnly Property InvertMsg As String
Get
Return EgtMsg(MSG_SPLITPAGEUC + 36)
End Get
End Property
Public ReadOnly Property BridgeMsg As String
Get
Return EgtMsg(91671)
End Get
End Property
Public ReadOnly Property BridgeDeleteMsg As String
Get
Return EgtMsg(91672)
End Get
End Property
Public ReadOnly Property QualityMsg As String
Get
Return EgtMsg(91673)
End Get
End Property
Public ReadOnly Property EnableCutMsg As String
Get
Return EgtMsg(91663)
End Get
End Property
Public ReadOnly Property SplitCutMsg As String
Get
Return EgtMsg(91664)
End Get
End Property
Public ReadOnly Property DirectSplitCutMsg As String
Get
Return EgtMsg(91665)
End Get
End Property
Public ReadOnly Property ManageStartEndCutMsg As String
Get
Return EgtMsg(91666)
End Get
End Property
Private Property m_LayNbArrTgBtnMsg As String = "Show"
Public ReadOnly Property LayNbArrTgBtnMsg As String
Get
Return m_LayNbArrTgBtnMsg
End Get
End Property
Private Property m_LayNbArrTgBtnImg As String = "/Resources/NewIcons/LightArrowOn.png"
Public ReadOnly Property LayNbArrTgBtnImg As String
Get
Return m_LayNbArrTgBtnImg
End Get
End Property
#End Region ' Messages
' Definizione comandi
Private m_cmdMoveUp As ICommand
Private m_cmdMoveDown As ICommand
Private m_cmdOnOff As ICommand
Private m_cmdAllOn As ICommand
Private m_cmdAllOff As ICommand
Private m_cmdCut As ICommand
Private m_cmdCutStart As ICommand
Private m_cmdCutEnd As ICommand
Private m_cmdOutCenStart As ICommand
Private m_cmdAllOutStart As ICommand
Private m_cmdAllCenStart As ICommand
Private m_cmdOutCenEnd As ICommand
Private m_cmdAllOutEnd As ICommand
Private m_cmdAllCenEnd As ICommand
Private m_cmdAllExtend As ICommand
Private m_cmdAllReduce As ICommand
Private m_cmdModifStart As ICommand
Private m_cmdModifEnd As ICommand
Private m_cmdPause As ICommand
Private m_cmdInvert As ICommand
Private m_cmdQuality As ICommand
#End Region ' FIELDS & PROPERTIES
#Region "CONSTRUCTOR"
Sub New()
' Creo riferimento a questa classe in OmagOFFICEMap
OmagOFFICEMap.SetRefSplitModeVM(Me)
' leggo la configurazione
SetLayNbArrTgBtn_IsChecked((GetMainPrivateProfileInt(S_GENERAL, K_SHOWNBARROW, 1) <> 0))
End Sub
#End Region ' CONSTRUCTOR
#Region "METHODS"
Friend Function InitSplitRaw() As Boolean
m_bActive = True
m_bOnOffCut_IsExpanded = GetMainPrivateProfileInt("Split", "OnOffCut", 0) <> 0
NotifyPropertyChanged(NameOf(bOnOffCut_IsExpanded))
m_bSpLitCut_IsExpanded = GetMainPrivateProfileInt("Split", "SplitCut", 0) <> 0
NotifyPropertyChanged(NameOf(bSpLitCut_IsExpanded))
m_bDirectSpLitCut_IsExpanded = GetMainPrivateProfileInt("Split", "DirectSplitCut", 0) <> 0
NotifyPropertyChanged(NameOf(bDirectSpLitCut_IsExpanded))
m_bModifyCut_IsExpanded = GetMainPrivateProfileInt("Split", "ModifyCut", 0) <> 0
NotifyPropertyChanged(NameOf(bModifyCut_IsExpanded))
' aggiorno la visualizzazione dei comandi per generare i bridge
m_BridgeBtn_IsChecked = False
NotifyPropertyChanged(NameOf(BridgeBtn_IsChecked))
m_BridgeDeleteBtn_IsChecked = False
NotifyPropertyChanged(NameOf(BridgeDeleteBtn_IsChecked))
'm_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
m_nDragInd = -1
m_nDragType = 0
' verifico se è abilitata la possibiltà di allungare i lati interni
m_StartEndModifyOnIntCorner = (GetPrivateProfileInt(S_NEST, K_STARTENDMODIFYONINTCORNER, 0, sMachIniFile) <> 0)
' Nascondo eventuali pezzi in parcheggio
EstCalc.HideParkedParts()
' Nascondo eventuale contorno da foto
EstPhoto.ShowContour(False)
' Deseleziono pezzi
EgtDeselectAll()
VeinMatching.OnDeselectAll()
EgtZoom(ZM.ALL)
' Elimino eventuali pretagli su uscite
CamAuto.RemoveAllExitPreCuts()
' Se non sono in sola visualizzazione, faccio ordine automatico delle lavorazioni
If Not OmagOFFICEMap.refMachiningTabVM.IsShow Then
If CurrentMachine.WaterJettingActive Then ResetAllMachinings()
If SortAllMachinings() Then EstCalc.SetOrderMachiningFlag()
If CurrentMachine.WaterJettingActive Then
Dim bModif As Boolean = TestAllMachiningsForStrict()
If bModif Then OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(90321), 3, MSG_TYPE.WARNING) 'Ridotte alcune lavorazioni per evitare interferenze
End If
End If
' Disabilito impostazione modificato
EgtDisableModified()
' Creo gruppo per numeri identificativi di lavorazione (colore default grigio)
m_nNbrGrpId = EgtCreateGroup(GDB_ID.ROOT)
EgtSetColor(m_nNbrGrpId, COL_MCH_DIS_NUMBER)
EgtSetStatus(m_nNbrGrpId, GDB_ST.SEL)
EgtSetLevel(m_nNbrGrpId, GDB_LV.TEMP)
' Recupero l'indice della fase corrente
m_nCurrPhase = EgtGetCurrPhase()
' Visualizzo solo anteprime di lavorazioni della fase
ShowOnePhaseMachiningPreview(m_nCurrPhase)
' Preparo la lista delle lavorazioni
CalculateSplitMachList(m_nCurrPhase, m_MachiningList)
' azzero i contatori delle lavorazioni
m_nCountSawing = 0
m_nCountWaterjetting = 0
m_nCountOtherMachining = 0
' Aggiorno visualizzazione delle lavorazioni
For nI As Integer = 0 To m_MachiningList.Count() - 1
' sistemo colore
ColorMachining(m_MachiningList(nI))
' assegno numerazione
NumberDirectionMachining(nI)
' conto il numero di tipi di lavorazioni
CountMachiningType(m_MachiningList(nI), m_nCountSawing, m_nCountWaterjetting, m_nCountOtherMachining)
Next
' Preparo la lista degli Item
ShowMachiningList()
' Aggiorno visualizzazione
EgtDraw()
' Abilito impostazione modificato
EgtEnableModified()
' Nessun item corrente
m_CurrFirstInd = -1
m_CurrLastInd = -1
' Reset flag di modifica
m_bModified = False
' Abilitazione bottoni
EnableButtons()
Return True
End Function
Friend Function ExitSplitRaw(Optional bTrueExit As Boolean = True) As Boolean
m_bActive = False
' eventualmente interrompo la creazione dei ponticelli
DeselectWJBridgesPart()
' Interrompo la creazione di tagli di separazione
ResetSplitCut()
m_CreateCut_IsChecked = False
NotifyPropertyChanged(NameOf(CreateCut_IsChecked))
m_RemoveCut_IsChecked = False
NotifyPropertyChanged(NameOf(RemoveCut_IsChecked))
m_CreateParallelCut_IsChecked = False
NotifyPropertyChanged(NameOf(CreateParallelCut_IsChecked))
m_ModifyCut_IsChecked = False
NotifyPropertyChanged(NameOf(ModifyCut_IsChecked))
' Rimuovo evidenziazione e numeri
RemoveMarkAndNumbers()
' Ripristino colori lavorazioni
EgtDisableModified()
For i As Integer = 0 To m_MachiningList.Count() - 1
ColorMachining(m_MachiningList(i), True)
Next
EgtEnableModified()
' Pulisco la lista che tiene conto delle lavorazioni selezionate
m_SelectedItemsList.Clear()
' se modificato salvo ordine e stato delle lavorazioni
If m_bModified Then
' Al primo posto deve rimanere la disposizione della fase
Dim nFirstOperId As Integer = EgtGetPhaseDisposition(m_nCurrPhase)
For i = m_ItemList.Count() - 1 To 0 Step -1
Dim nI As Integer = m_ItemList(i).Ind
Dim nMchId As Integer = m_MachiningList(nI).m_nId
EgtRelocate(nMchId, nFirstOperId, GDB_POS.AFTER)
If m_MachiningList(nI).m_bEnabled Then
EgtSetOperationMode(m_MachiningList(nI).m_nId, True)
EgtRemoveInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_OFF)
Else
EgtSetOperationMode(m_MachiningList(nI).m_nId, False)
EgtSetInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_OFF, True)
End If
Next
' dichiaro ordine salvato
EstCalc.SetOrderMachiningFlag()
End If
' Affondamento ridotto
Dim dReducedDepth As Double = GetMainPrivateProfileDouble(S_MACH_NEST, K_MACH_REDUCEDDEPTH, 1)
' Restringo o rialzo lavorazioni abilitate ma con interferenza
Dim bModified As Boolean = False
For Each Mach As SplitMach In m_MachiningList
If Mach.m_bEnabled And Mach.m_nInterf <> FMI_TYPE.NONE Then
If AdjustMachining(Mach.m_nId, Mach.m_nInterf, dReducedDepth) Then
bModified = True
End If
End If
Next
If bTrueExit Then
' ritorno a fase 1
EgtSetCurrPhase(1)
' Ripristino visualizzazione preview lavorazioni
ShowAllPhasesMachiningPreview()
End If
If bModified Then
' Ridotte alcune lavorazioni per evitare interferenze
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(90321), 3, MSG_TYPE.WARNING)
End If
Return True
End Function
Private Sub AddPauseText(ByRef sName As String)
sName &= " " & EgtMsg(MSG_SPLITPAGEUC + 32) ' Pausa
End Sub
Private Sub AddTopText(ByRef sName As String)
sName &= EgtMsg(91217) ' Top
End Sub
Private Sub RemovePauseText(ByRef sName As String)
sName = sName.Replace(EgtMsg(MSG_SPLITPAGEUC + 32), "")
sName = sName.TrimEnd()
End Sub
Friend Function GetDisabledCutsCount() As Integer
' Determino il numero di tagli disabilitati
Dim nCount As Integer = 0
For nI As Integer = 0 To m_MachiningList.Count() - 1
If Not m_MachiningList(nI).m_bEnabled Then
nCount += 1
End If
Next
Return nCount
End Function
Friend Function GetSplitCutsCount() As Integer
' Determino il numero di tagli passanti almeno da un lato
Dim nCount As Integer = 0
For nI As Integer = 0 To m_MachiningList.Count() - 1
If m_MachiningList(nI).m_bEnabled And
(m_MachiningList(nI).m_bStartAll Or m_MachiningList(nI).m_bEndAll) Then
nCount += 1
End If
Next
Return nCount
End Function
Friend Sub GetSplitCuts(ByRef Cuts() As Integer)
' Determino l'elenco dei tagli passanti almeno da un lato
Dim MyCuts As New List(Of Integer)
For nI As Integer = 0 To m_MachiningList.Count() - 1
If m_MachiningList(nI).m_bEnabled And
(m_MachiningList(nI).m_bStartAll Or m_MachiningList(nI).m_bEndAll) Then
MyCuts.Add(m_MachiningList(nI).m_nId)
End If
Next
Cuts = MyCuts.ToArray()
End Sub
Friend Sub GetEnabledCuts(ByRef Cuts() As Integer)
' Determino l'elenco dei tagli abilitati
Dim MyCuts As New List(Of Integer)
For nI As Integer = 0 To m_MachiningList.Count() - 1
If m_MachiningList(nI).m_bEnabled Then
MyCuts.Add(m_MachiningList(nI).m_nId)
End If
Next
Cuts = MyCuts.ToArray()
End Sub
Friend Sub ExecAuto()
' Con movimento manuale, non disponibile movimento automatico
If OmagOFFICEMap.refMachiningTabVM.ByHand Then Return
' Elimino evidenziazione e numerazione
RemoveMarkAndNumbers()
' Calcolo automatico
Dim bFinished As Boolean = False
Dim bOk As Boolean = SplitAuto.CalculateOnePhaseSplitAuto(bFinished)
If Not bOk Then
' Calcolo automatico non riuscito
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(90350), 3, MSG_TYPE.WARNING)
End If
m_bModified = True
End Sub
Friend Sub ChangeToModify()
' Elimino le fasi successive alla corrente
While EgtGetPhaseCount() > m_nCurrPhase
RemoveLastPhase()
End While
' Aggiorno le lavorazioni (eliminato sort per lasciare ordine immutato)
If CurrentMachine.WaterJettingActive Then ResetAllMachinings()
EstCalc.SetOrderMachiningFlag()
If CurrentMachine.WaterJettingActive Then
Dim bModif As Boolean = TestAllMachiningsForStrict()
If bModif Then OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(90321), 3, MSG_TYPE.WARNING) 'Ridotte alcune lavorazioni per evitare interferenze
End If
' Visualizzo solo anteprime di lavorazioni della fase
ShowOnePhaseMachiningPreview(m_nCurrPhase)
' Nascondo gli eventuali percorsi di lavorazione
HideAllMachinings()
' Preparo la lista delle lavorazioni e le disabilito
CalculateSplitMachList(m_nCurrPhase, m_MachiningList)
' azzero i contatori delle lavorazioni
m_nCountSawing = 0
m_nCountWaterjetting = 0
m_nCountOtherMachining = 0
For nI As Integer = 0 To m_MachiningList.Count() - 1
m_MachiningList(nI).m_bEnabled = False
' conto il numero di tipi di lavorazioni
CountMachiningType(m_MachiningList(nI), m_nCountSawing, m_nCountWaterjetting, m_nCountOtherMachining)
Next
' Aggiorno visualizzazione delle lavorazioni
EgtEmptyGroup(m_nNbrGrpId)
For nI As Integer = 0 To m_MachiningList.Count() - 1
' sistemo colore
ColorMachining(m_MachiningList(nI))
' assegno numerazione
NumberDirectionMachining(nI)
Next
' -------------------- Recupero le lavorazioni indicate come attive --------------------
Dim ActiveMachLst As New List(Of Integer)
For Each ItemSplitMach As NameIdLsBxItem In m_ItemList
ActiveMachLst.Add(ItemSplitMach.Ind)
Next
' -------------------- Recupero le lavorazioni indicate come attive --------------------
' Preparo la lista degli Item
ShowMachiningList()
' -------------------- Riattivo le lavorazioni precedenti --------------------
For Each Item As SplitMach In m_MachiningList
EgtSetInfo(Item.m_nId, INFO_MCH_USER_OFF, True)
Next
For nIndex As Integer = 0 To ActiveMachLst.Count - 1
For Each ItemSplitMach As NameIdLsBxItem In m_ItemList
If ItemSplitMach.Ind = ActiveMachLst(nIndex) Then
EgtRemoveInfo(m_MachiningList(ItemSplitMach.Ind).m_nId, INFO_MCH_USER_OFF)
m_MachiningList(ItemSplitMach.Ind).m_bEnabled = True
ItemSplitMach.bIsActive = True
' sistemo colore
ColorMachining(m_MachiningList(ItemSplitMach.Ind))
Exit For
End If
Next
Next
' -------------------- Riattivo le lavorazioni precedenti --------------------
' Aggiorno visualizzazione
EgtDraw()
' Aggiono abilitazione bottoni
EnableButtons()
End Sub
' Aggiorno le lavorazioni
Private Sub PreviewMachinigList()
' Visualizzo solo anteprime di lavorazioni della fase
ShowOnePhaseMachiningPreview(m_nCurrPhase)
' Preparo la lista delle lavorazioni
CalculateSplitMachList(m_nCurrPhase, m_MachiningList)
' azzero i contatori delle lavorazioni
m_nCountSawing = 0
m_nCountWaterjetting = 0
m_nCountOtherMachining = 0
' Aggiorno visualizzazione delle lavorazioni
EgtEmptyGroup(m_nNbrGrpId)
For nI As Integer = 0 To m_MachiningList.Count() - 1
' sistemo colore
ColorMachining(m_MachiningList(nI))
' assegno numerazione
NumberDirectionMachining(nI)
' conto il numero di tipi di lavorazioni
CountMachiningType(m_MachiningList(nI), m_nCountSawing, m_nCountWaterjetting, m_nCountOtherMachining)
Next
' Preparo la lista degli Item
ShowMachiningList()
End Sub
Private Sub ShowMachiningList()
m_ItemList.Clear()
For i As Integer = 1 To m_MachiningList.Count()
Dim Mach As SplitMach = m_MachiningList(i - 1)
If Mach.m_nType = MCH_OY.SAWING Then ' Taglio
Dim sText As String = String.Empty
If Math.Abs(Mach.m_dSideAng) < EPS_ANG_SMALL Then
sText = EgtMsg(90791) & " " & i.ToString()
If Mach.m_sLay = NAME_ONPATH Then AddTopText(sText)
Else
sText = EgtMsg(90791) & " " & i.ToString() & " " & DoubleToString(Mach.m_dSideAng, 2) & "°"
End If
If Mach.m_bPause Then AddPauseText(sText)
m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.SAWING, "/Resources/NewIcons/Movimento-manuale.png"))
ElseIf Mach.m_nType = MCH_OY.DRILLING Then ' Foratura
Dim sText As String = EgtMsg(90792) & " " & i.ToString()
If Mach.m_bPause Then AddPauseText(sText)
m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.DRILLING, "/Resources/NewIcons/Foro-singolo.png"))
ElseIf Mach.m_nType = MCH_OY.MILLING Then ' Fresatura
Dim sText As String = EgtMsg(90793) & " " & i.ToString()
If Mach.m_sLay = NAME_ONPATH Then AddTopText(sText)
m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.MILLING, "/Resources/NewIcons/Spianatura.png"))
ElseIf Mach.m_nType = MCH_OY.POCKETING Then ' Svuotatura
Dim sText As String = EgtMsg(90796) & " " & i.ToString()
If Mach.m_bPause Then AddPauseText(sText)
m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.POCKETING))
ElseIf Mach.m_nType = MCH_OY.WATERJETTING Then ' Waterjet
Dim sText As String = EgtMsg(90797) & " " & i.ToString()
If Mach.m_bPause Then AddPauseText(sText)
m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled, MCH_OY.WATERJETTING))
End If
Next
End Sub
Private Sub EnableButtons()
' Per bottone PREV
OmagOFFICEMap.refMachiningTabVM.PrevIsEnabled = (m_nCurrPhase > 1)
' Per bottone NEXT
' Se abilitato manipolatore
If OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.MAN_MANIP) Or
OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.AUTO_MANIP) Then
' Se in modifica
If Not OmagOFFICEMap.refMachiningTabVM.IsShow Then
' Se allontanamento perpendicolare
If OmagOFFICEMap.refMachiningTabVM.ByHand Then
' Ci deve essere almeno 1 taglio disabilitato e 1 e 1 solo passante
OmagOFFICEMap.refMachiningTabVM.NextIsEnabled = (GetDisabledCutsCount() > 0 And GetSplitCutsCount() = 1)
' Altrimenti
Else
' Ci deve essere almeno 1 taglio disabilitato e almeno 1 passante oppure fase successiva alla prima
OmagOFFICEMap.refMachiningTabVM.NextIsEnabled = (GetDisabledCutsCount() > 0 And
(GetSplitCutsCount() > 0 Or m_nCurrPhase > 1)) Or
CurrentMachine.bRawFinalMove
End If
' altrimenti sto solo visualizzando
Else
OmagOFFICEMap.refMachiningTabVM.NextIsEnabled = (m_nCurrPhase < EgtGetPhaseCount())
End If
Else
OmagOFFICEMap.refMachiningTabVM.NextIsEnabled = False
End If
' Per bottone MODIFY
OmagOFFICEMap.refMachiningTabVM.ModifyIsEnabled = OmagOFFICEMap.refMachiningTabVM.IsShow
' Per bottone AUTO
OmagOFFICEMap.refMachiningTabVM.AutoIsEnabled = Not OmagOFFICEMap.refMachiningTabVM.IsShow And
((GetDisabledCutsCount() > 0 Or m_nCurrPhase = 1) And
Not OmagOFFICEMap.refMachiningTabVM.ByHand)
' Altri bottoni
SplitModeIsEnabled = Not OmagOFFICEMap.refMachiningTabVM.IsShow
' nascondo i comandi che non devono essere visualizzati in funzione delle lavorazioni attive
If m_nCountSawing = 0 And (m_nCountWaterjetting > 0 Or m_nCountOtherMachining > 0) Then
VisibilityButtonFromMachining(MCH_OY.WATERJETTING)
Else
VisibilityButtonFromMachining(MCH_OY.SAWING)
End If
End Sub
Private Sub VerifyHomogenousMachining(ItemList As List(Of NameIdLsBxItem))
If IsNothing(ItemList) OrElse ItemList.Count = 0 Then
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
Return
End If
Dim nSawing As Integer = 0
Dim nWaterjetting As Integer = 0
Dim nOtherMachining As Integer = 0
' conto il numero di tipi di lavprazioni
For Each Item As NameIdLsBxItem In ItemList
If Item.Type = MCH_OY.SAWING Then
nSawing += 1
ElseIf Item.Type = MCH_OY.WATERJETTING Then
nWaterjetting += 1
Else
nOtherMachining += 1
End If
Next
' verifico se le lavorazioni sono omeogenee
If nSawing > 0 And (nWaterjetting > 0 Or nOtherMachining > 0) Then
m_bAreHomogeneous = False
VisibilityButtonFromMachining(MCH_OY.SAWING)
ElseIf nSawing = 0 And nOtherMachining > 0 And nWaterjetting > 0 Then
m_bAreHomogeneous = False
VisibilityButtonFromMachining(MCH_OY.WATERJETTING)
Else
VisibilityButtonFromMachining(ItemList(0).Type)
m_bAreHomogeneous = True
End If
' eventualmente stampo messaggio
If Not m_bAreHomogeneous Then
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
OmagOFFICEMap.refStatusBarVM.SetOutputMessage("Lavorazioni non omogenee", MSG_TYPE.WARNING)
Else
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
End If
End Sub
Private Sub VisibilityButtonFromMachining(ByVal Type As Integer)
If Type <> MCH_OY.SAWING Then
CutBtnVisibility = Visibility.Hidden
CutStartBtnVisibility = Visibility.Hidden
CutEndBtnVisibility = Visibility.Hidden
OutCenStartBtnVisibility = Visibility.Hidden
OutCenEndBtnVisibility = Visibility.Hidden
InvertBtnVisibility = Visibility.Hidden
PauseBtnVisibility = Visibility.Hidden
AllOutStartBtnVisibility = Visibility.Hidden
AllCenStartBtnVisibility = Visibility.Hidden
AllOutEndBtnVisibility = Visibility.Hidden
AllCenEndBtnVisibility = Visibility.Hidden
AllExtendBtnVisibility = Visibility.Hidden
AllReduceBtnVisibility = Visibility.Hidden
Else
CutBtnVisibility = Visibility.Visible
CutStartBtnVisibility = Visibility.Visible
CutEndBtnVisibility = Visibility.Visible
OutCenStartBtnVisibility = Visibility.Visible
OutCenEndBtnVisibility = Visibility.Visible
InvertBtnVisibility = Visibility.Visible
PauseBtnVisibility = Visibility.Visible
AllOutStartBtnVisibility = Visibility.Visible
AllCenStartBtnVisibility = Visibility.Visible
AllOutEndBtnVisibility = Visibility.Visible
AllCenEndBtnVisibility = Visibility.Visible
AllExtendBtnVisibility = Visibility.Visible
AllReduceBtnVisibility = Visibility.Visible
End If
' gestione bottone per generazione ponticelli
If Type = MCH_OY.WATERJETTING Then
' siccome la stessa posizione è occupata da due comandi sovrapposti
If CutBtnVisibility = Visibility.Hidden Then
BridgeBtnVisibility = Visibility.Visible
BridgeDeleteBtnVisibility = Visibility.Visible
QualityBtnVisibility = Visibility.Visible
Else
BridgeBtnVisibility = Visibility.Hidden
BridgeDeleteBtnVisibility = Visibility.Hidden
QualityBtnVisibility = Visibility.Hidden
End If
Else
BridgeBtnVisibility = Visibility.Hidden
BridgeDeleteBtnVisibility = Visibility.Hidden
End If
End Sub
Private Function ModifyOtherLeadIn(nI As Integer, nLiOthType As Integer) As Boolean
' Modifico l'attacco delle lavorazioni inglobate
For Each nMchId As Integer In m_MachiningList(nI).m_vOthId
EgtSetCurrMachining(nMchId)
EgtSetMachiningParam(MCH_MP.LEADINTYPE, nLiOthType)
Next
Return True
End Function
Private Function ModifyOtherLeadOut(nI As Integer, nLoOthType As Integer) As Boolean
' Modifico l'uscita delle lavorazioni inglobate
For Each nMchId As Integer In m_MachiningList(nI).m_vOthId
EgtSetCurrMachining(nMchId)
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, nLoOthType)
Next
Return True
End Function
Private Sub NumberDirectionMachining(nI As Integer, Optional bNumber As Boolean = True)
EgtDisableModified()
' Determino se seconda lavorazione
Dim sName As String = String.Empty
EgtGetName(m_MachiningList(nI).m_nId, sName)
Dim b2ndLav As Boolean = sName.Contains("_") Or sName.Contains("Drip")
' Ingombro complessivo della lavorazione
Dim ptMin, ptMax As Point3d
If Not BoxFromMachining(nI, ptMin, ptMax) Then Return
' Metto il numero nel centro
Dim dRadXY = Point3d.DistXY(ptMin, ptMax)
Dim dHtxt As Double = 50
Dim dRat As Double = 0.75
If dRadXY < 200 Then
dHtxt = 40
dRat = 0.6
ElseIf dRadXY < 25 Then
dHtxt = 25
dRat = 0.5
End If
Dim vtXY As Vector3d = ptMax - ptMin
vtXY.Normalize()
Dim ptCen As Point3d = Point3d.Media(ptMin, ptMax) + vtXY * If(Not b2ndLav, -0.8, 0.8) * dHtxt
ptCen.z = ptMax.z + 1
' ricavo la posizione del punto (se waterjet separata)
If m_MachiningList(nI).m_nType = MCH_OY.WATERJETTING Or m_MachiningList(nI).m_nType = MCH_OY.MILLING Then
Dim ptMid As Point3d
Dim vVers As Vector3d
MidPointOfCurve(m_MachiningList(nI).m_nId, ptMid, vVers)
ptCen = ptMid ' + vVers * If(Not b2ndLav, -0.8, 0.8) * dHtxt
End If
If bNumber Then
Dim nNbrId As Integer = EgtCreateTextAdv(m_nNbrGrpId, ptCen, 0, (nI + 1).ToString(), "",
300, False, dHtxt, dRat, 0, INS_POS.MC)
m_MachiningList(nI).m_nNbrId = nNbrId
' Aggiungo a numero info con identificativo della lavorazione e viceversa
EgtSetInfo(nNbrId, "MId", m_MachiningList(nI).m_nId)
EgtSetInfo(m_MachiningList(nI).m_nId, "NbrId", nNbrId)
If Not m_LayNbArrTgBtn_IsChecked Then
EgtSetStatus(nNbrId, GDB_ST.OFF)
Else
EgtSetStatus(nNbrId, GDB_ST.ON_)
End If
End If
' Se taglio con lama, metto la direzione accanto al numero
If m_MachiningList(nI).m_nType = MCH_OY.SAWING Then
Dim ptStart As New Point3d(ptCen + m_MachiningList(nI).m_vtDir * dHtxt)
Dim vtDir As New Vector3d(m_MachiningList(nI).m_vtDir)
Dim bTwin As Boolean = (Not m_MachiningList(nI).m_bEnableInvert OrElse Math.Abs(m_MachiningList(nI).m_dSideAng) > 0.1)
Dim nArrId As Integer = AddMachiningDirection(ptStart, vtDir, dHtxt, bTwin)
m_MachiningList(nI).m_nArrId = nArrId
' Aggiungo a freccia info con identificativo della lavorazione e viceversa
EgtSetInfo(nArrId, "MId", m_MachiningList(nI).m_nId)
EgtSetInfo(m_MachiningList(nI).m_nId, "ArrId", nArrId)
If Not m_LayNbArrTgBtn_IsChecked Then
EgtSetStatus(nArrId, GDB_ST.OFF)
Else
EgtSetStatus(nArrId, GDB_ST.ON_)
End If
Else
m_MachiningList(nI).m_nArrId = GDB_ID.NULL
End If
' Assegno colore a numero e freccia
ColorNumberArrow(nI)
EgtEnableModified()
End Sub
Private Function BoxFromMachining(nI As Integer, ByRef ptMin As Point3d, ByRef ptMax As Point3d) As Boolean
If nI < 0 Then Return False
' Lavorazione principale
If Not BoxFromSingleMachining(m_MachiningList(nI).m_nId, ptMin, ptMax) Then
Return False
End If
' Eventuali lavorazioni inglobate
For Each nId As Integer In m_MachiningList(nI).m_vOthId
Dim ptMchMin, ptMchMax As Point3d
If BoxFromSingleMachining(nId, ptMchMin, ptMchMax) Then
ptMin.x = Math.Min(ptMin.x, ptMchMin.x)
ptMin.y = Math.Min(ptMin.y, ptMchMin.y)
ptMin.z = Math.Min(ptMin.z, ptMchMin.z)
ptMax.x = Math.Max(ptMax.x, ptMchMax.x)
ptMax.y = Math.Max(ptMax.y, ptMchMax.y)
ptMax.z = Math.Max(ptMax.z, ptMchMax.z)
End If
Next
Return True
End Function
Private Function BoxFromSingleMachining(nOperId As Integer, ByRef ptMin As Point3d, ByRef ptMax As Point3d) As Boolean
' Recupero il preview della lavorazione
Dim nPvId As Integer = GDB_ID.NULL
EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId)
Return EgtGetBBoxGlob(nPvId, GDB_BB.STANDARD, ptMin, ptMax)
End Function
Private Function MidPointOfCurve(nOperId As Integer, ByRef ptMid As Point3d, ByRef vVers As Vector3d) As Boolean
Dim nPvId As Integer = GDB_ID.NULL
EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId)
' creo un layer ausiliario per creare la curva composita
Dim AuxLayer As Integer = EgtCreateGroup(nPvId)
' imposto la lavorazione corrente
EgtSetCurrMachining(nOperId)
' recupero tutte le entità della lavorazione corrente
Dim nInd As Integer = 0
Dim nIdCurr As Integer
Dim nSub As Integer
Dim CurveCompoList As New List(Of Integer)
While EgtGetMachiningGeometry(nInd, nIdCurr, nSub)
CurveCompoList.Add(nIdCurr)
nInd += 1
End While
Dim PtNearStart As Point3d
Dim nIdCutPath As Integer = EgtCreateCurveCompoByChain(AuxLayer, CurveCompoList.ToArray, PtNearStart, False)
Dim dLength As Double = 0
EgtCurveLength(nIdCutPath, dLength)
Dim dParam As Double = 0
EgtCurveParamAtLength(nIdCutPath, dLength / 2, dParam)
EgtAtParamPoint(nIdCutPath, dParam, GDB_RT.GLOB, ptMid)
EgtAtParamVector(nIdCutPath, dParam, -1, vVers)
vVers.Normalize()
vVers.Rotate(Vector3d.Z_AX, 90)
EgtErase(AuxLayer)
Return True
End Function
Private Function AddMachiningDirection(ptStart As Point3d, vtDir As Vector3d, dLen As Double, bTwin As Boolean) As Integer
Dim dArrX As Double = dLen * Math.Cos(30 * Math.PI / 180)
Dim dArrY As Double = dLen * Math.Sin(30 * Math.PI / 180)
Dim nTmpId As Integer = EgtCreateLine(m_nNbrGrpId, Point3d.ORIG() + dArrY * Vector3d.Y_AX(), Point3d.ORIG() + dArrX * Vector3d.X_AX())
Dim nCrvId As Integer = EgtCreateCurveCompo(m_nNbrGrpId, nTmpId, True)
EgtAddCurveCompoLine(nCrvId, Point3d.ORIG() - dArrY * Vector3d.Y_AX())
If bTwin Then
EgtAddCurveCompoLine(nCrvId, Point3d.ORIG() + 2 * dArrX * Vector3d.X_AX())
EgtCloseCurveCompo(nCrvId)
End If
Dim frLoc As New Frame3d(ptStart, vtDir, Vector3d.Z_AX() ^ vtDir, Vector3d.Z_AX())
EgtTransform(nCrvId, frLoc)
Return nCrvId
End Function
Private Sub MarkMachining(nI As Integer, bMark As Boolean)
If nI < 0 Then Return
Dim nOperId As Integer = m_MachiningList(nI).m_nId
' Evidenzio la lavorazione principale
MarkSingleMachining(nOperId, bMark)
' Evidenzio l'eventuale numero della lavorazione
MarkNumberArrow(nI, bMark)
' Marco anche le lavorazioni inglobate
For Each nId As Integer In m_MachiningList(nI).m_vOthId
MarkSingleMachining(nId, bMark)
Next
End Sub
Private Sub MarkSingleMachining(nOperId As Integer, bMark As Boolean)
Dim nPvId As Integer = GDB_ID.NULL
If EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId) Then
If bMark Then
EgtSetMark(nPvId)
Else
EgtResetMark(nPvId)
End If
End If
End Sub
Private Sub MarkNumberArrow(nI As Integer, bMark As Boolean)
If nI < 0 Then Return
Dim nNbrId As Integer = m_MachiningList(nI).m_nNbrId
Dim nArrId As Integer = m_MachiningList(nI).m_nArrId
If bMark Then
EgtSetMark(nNbrId)
EgtSetMark(nArrId)
Else
EgtResetMark(nNbrId)
EgtResetMark(nArrId)
End If
If Not m_LayNbArrTgBtn_IsChecked And Not bMark Then
EgtSetStatus(nNbrId, GDB_ST.OFF)
EgtSetStatus(nArrId, GDB_ST.OFF)
Else
EgtSetStatus(nNbrId, GDB_ST.ON_)
EgtSetStatus(nArrId, GDB_ST.ON_)
End If
End Sub
Private Sub ColorNumberArrow(nI As Integer)
If nI < 0 Then Return
Dim nNbrId As Integer = m_MachiningList(nI).m_nNbrId
Dim nArrId As Integer = m_MachiningList(nI).m_nArrId
If m_MachiningList(nI).m_bEnabled Then
If m_MachiningList(nI).m_nInterf = FMI_TYPE.NONE Then
EgtSetColor(nNbrId, COL_MCH_FREE)
EgtSetColor(nArrId, COL_MCH_FREE)
Else
EgtSetColor(nNbrId, COL_MCH_INTERF)
EgtSetColor(nArrId, COL_MCH_INTERF)
End If
Else
If m_MachiningList(nI).m_nInterf = FMI_TYPE.NONE Then
EgtResetColor(nNbrId)
EgtResetColor(nArrId)
ElseIf Not m_MachiningList(nI).m_bEnabled Then
EgtSetColor(nNbrId, COL_MCH_DIS_INTERF)
EgtSetColor(nArrId, COL_MCH_DIS_INTERF)
End If
End If
End Sub
Private Sub RemoveMarkAndNumbers()
EgtDisableModified()
' cancello evidenziazione
If m_CurrFirstInd >= 0 Then
For Index = m_CurrFirstInd To m_CurrLastInd
MarkMachining(m_ItemList(Index).Ind, False)
Next
m_CurrFirstInd = -1
m_CurrLastInd = -1
End If
' cancello gruppo di numerazione e ripristino colori lavorazioni
EgtErase(m_nNbrGrpId)
For i As Integer = 0 To m_MachiningList.Count() - 1
ColorMachining(m_MachiningList(i), True)
Next
EgtEnableModified()
End Sub
Private Sub SwapStartEndData(nI As Integer)
' Swap angoli precedente e successivo
Dim dAng As Double = m_MachiningList(nI).m_dPrevAng
m_MachiningList(nI).m_dPrevAng = m_MachiningList(nI).m_dNextAng
m_MachiningList(nI).m_dNextAng = dAng
' Swap lunghezze libere
Dim dFreeLen As Double = m_MachiningList(nI).m_dStartFreeLen
m_MachiningList(nI).m_dStartFreeLen = m_MachiningList(nI).m_dEndFreeLen
m_MachiningList(nI).m_dEndFreeLen = dFreeLen
' Swap stato di allungamento
Dim bAll As Boolean = m_MachiningList(nI).m_bStartAll
m_MachiningList(nI).m_bStartAll = m_MachiningList(nI).m_bEndAll
m_MachiningList(nI).m_bEndAll = bAll
' Swap possibilità di allungamento
Dim bCanAll As Boolean = m_MachiningList(nI).m_bCanStartAll
m_MachiningList(nI).m_bCanStartAll = m_MachiningList(nI).m_bCanEndAll
m_MachiningList(nI).m_bCanEndAll = bCanAll
' Swap stato interferenza
If (m_MachiningList(nI).m_nInterf And FMI_TYPE.LI) <> 0 And (m_MachiningList(nI).m_nInterf And FMI_TYPE.LO) = 0 Then
m_MachiningList(nI).m_nInterf -= FMI_TYPE.LI
m_MachiningList(nI).m_nInterf += FMI_TYPE.LO
ElseIf (m_MachiningList(nI).m_nInterf And FMI_TYPE.LI) = 0 And (m_MachiningList(nI).m_nInterf And FMI_TYPE.LO) <> 0 Then
m_MachiningList(nI).m_nInterf += FMI_TYPE.LI
m_MachiningList(nI).m_nInterf -= FMI_TYPE.LO
End If
' Swap Allungamento Utente
Dim dOrigUsal As Double = 0
EgtGetInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_SAL, dOrigUsal)
Dim dOrigUeal As Double = 0
EgtGetInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_EAL, dOrigUeal)
EgtSetInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_SAL, dOrigUeal)
EgtSetInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_EAL, dOrigUsal)
End Sub
Private Sub BridgeIsChecked()
' eventualmente spengo il comando per eliminare i ponticelli
If m_BridgeDeleteBtn_IsChecked Then
m_BridgeDeleteBtn_IsChecked = False
NotifyPropertyChanged(NameOf(BridgeDeleteBtn_IsChecked))
End If
' se deseleziono resetto tutte le variabili
If Not m_BridgeBtn_IsChecked Then
' se sono in fase di creazione di un ponticello interrompo
DeselectWJBridgesPart()
Return
End If
' recuoero il gruppo di lavorazione corrente
Dim nIdCurrMachGroup As Integer = EgtGetCurrMachGroup()
' creo il gruppo per i ponticelli
Dim sNameGroup As String = NAME_BRIDGES
Dim nId As Integer = EgtGetFirstNameInGroup(nIdCurrMachGroup, sNameGroup)
If nId <> GDB_ID.NULL Then
m_nIdBridgesGroup = nId
End If
' se non lo trovo allora lo creo
If nId = GDB_ID.NULL Then
m_nIdBridgesGroup = EgtCreateGroup(nIdCurrMachGroup)
EgtSetName(m_nIdBridgesGroup, NAME_BRIDGES)
End If
End Sub
Private Sub BridgeDeleteIsChecked()
' eventualmente spengo il comando per inserire i ponticelli
If m_BridgeBtn_IsChecked Then
m_BridgeBtn_IsChecked = False
NotifyPropertyChanged(NameOf(BridgeBtn_IsChecked))
End If
If Not m_BridgeDeleteBtn_IsChecked Then
DeselectWJBridgesPart()
End If
End Sub
Private Sub CreateCutIsChecked()
' attivo la scena per renderla attiva
If m_CreateCut_IsChecked Then
' OmagOFFICEMap.refSceneHostVM.MainScene.SetStatusSelPoint()
OmagOFFICEMap.refSceneHostVM.MainScene.SetStatusNull()
ResetSplitCut()
Else
' ????????
ResetSplitCut()
End If
End Sub
Private Sub RemoveCutIsChecked()
If m_RemoveCut_IsChecked Then
OmagOFFICEMap.refSceneHostVM.MainScene.SetStatusNull()
ResetSplitCut()
Else
' ????????
ResetSplitCut()
End If
End Sub
Private Sub CreateParellelCutIsChecked()
If m_CreateParallelCut_IsChecked Then
OmagOFFICEMap.refSceneHostVM.MainScene.SetStatusNull()
ResetSplitCut()
Else
' ????????
ResetSplitCut()
End If
End Sub
Private Sub ModifyCutIsChecked()
If m_CreateParallelCut_IsChecked Then
OmagOFFICEMap.refSceneHostVM.MainScene.SetStatusNull()
ResetSplitCut()
Else
' ????????
ResetSplitCut()
End If
End Sub
' Forzo la fine della creazione di un elemento SplitCut
Private Sub ResetSplitCut()
EgtResetMark(m_IdCurrRawSolid)
ResetAllMark()
If m_IdSplitGroup <> GDB_ID.NULL Then
EgtErase(m_IdSplitGroup)
End If
m_bGetStartPoint = False
m_bGetEndPoint = False
m_IdSplitLine = GDB_ID.NULL
m_IdSplitGroup = GDB_ID.NULL
m_IdSplitGroupLayer = GDB_ID.NULL
m_IdCurrRawSolid = GDB_ID.NULL
m_IdSplitLineRemove = GDB_ID.NULL
EgtDraw()
End Sub
' spegno il comando Split correntemente attivo
Public Sub DeactiveSplitCut()
ResetSplitCut()
m_RemoveCut_IsChecked = False
m_CreateCut_IsChecked = False
m_CreateParallelCut_IsChecked = False
m_ModifyCut_IsChecked = False
NotifyPropertyChanged(NameOf(CreateCut_IsChecked))
NotifyPropertyChanged(NameOf(CreateParallelCut_IsChecked))
NotifyPropertyChanged(NameOf(RemoveCut_IsChecked))
NotifyPropertyChanged(NameOf(ModifyCut_IsChecked))
End Sub
Public Sub ResetAllMark()
For Each Item As NameIdLsBxItem In m_ItemList
Item.IsSelected = False
MarkMachining(Item.Ind, False)
Next
End Sub
#End Region ' METHODS
#Region "COMMANDS"
#Region "MoveCommands"
Public ReadOnly Property MoveUpCommand As ICommand
Get
If m_cmdMoveUp Is Nothing Then
m_cmdMoveUp = New Command(AddressOf MoveUp)
End If
Return m_cmdMoveUp
End Get
End Property
Public Sub MoveUp(ByVal param As Object)
MoveItem(-1)
End Sub
Public ReadOnly Property MoveDownCommand As ICommand
Get
If m_cmdMoveDown Is Nothing Then
m_cmdMoveDown = New Command(AddressOf MoveDown)
End If
Return m_cmdMoveDown
End Get
End Property
Public Sub MoveDown(ByVal param As Object)
MoveItem(+1)
End Sub
Public Sub MoveItem(direction As Integer)
' Checking selected item
If m_CurrFirstInd = -1 Then
Return
End If
' Se la direzione è giù
If direction = 1 And m_CurrLastInd < m_ItemList.Count - 1 Then
' sposto il successivo prima di tutti i selezionati
m_ItemList.Move(m_CurrLastInd + 1, m_CurrFirstInd)
MoveMachining(m_CurrLastInd + 1, m_CurrFirstInd)
' aggiorno gli indici degli elementi coinvolti nello spostamento (selezionati e non)
For index = m_CurrLastInd + 1 To m_CurrFirstInd Step -1
m_ItemList(index).Ind = index
Next
m_CurrFirstInd += 1
m_CurrLastInd += 1
ElseIf direction = -1 And m_CurrFirstInd > 0 Then
' sposto il precedente dopo tutti i selezionati
m_ItemList.Move(m_CurrFirstInd - 1, m_CurrLastInd)
MoveMachining(m_CurrFirstInd - 1, m_CurrLastInd)
' aggiorno gli indici degli elementi coinvolti nello spostamento (selezionati e non)
For index = m_CurrFirstInd - 1 To m_CurrLastInd
m_ItemList(index).Ind = index
Next
m_CurrFirstInd -= 1
m_CurrLastInd -= 1
End If
' Imposto flag di modifica
m_bModified = True
End Sub
Private Sub MoveMachining(oldIndex As Integer, newIndex As Integer)
Dim item As SplitMach = m_MachiningList(oldIndex)
m_MachiningList.RemoveAt(oldIndex)
m_MachiningList.Insert(newIndex, item)
End Sub
#End Region ' MoveCommands
#Region "OnOffCommand"
Public ReadOnly Property OnOffCommand As ICommand
Get
If m_cmdOnOff Is Nothing Then
m_cmdOnOff = New Command(AddressOf OnOff)
End If
Return m_cmdOnOff
End Get
End Property
Public Sub OnOff(ByVal param As Object)
If m_CurrFirstInd = -1 Then Return
For Index = m_CurrFirstInd To m_CurrLastInd
If m_ItemList(Index).IsSelected Then
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
If m_MachiningList(nI).m_bEnabled Then
m_MachiningList(nI).m_bEnabled = False
m_ItemList(Index).bIsActive = False
Else
m_MachiningList(nI).m_bEnabled = True
m_ItemList(Index).bIsActive = True
End If
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
End If
Next
EgtDraw()
' Imposto flag di modifica
m_bModified = True
' Abilitazione bottone Next
' EnableButtons()
' recupero l'elenco degli elementi selezionati
Dim ItemList As New List(Of NameIdLsBxItem)
For Each Item As NameIdLsBxItem In m_SelectedItemsList ' MachiningLsBx.SelectedItems
ItemList.Add(Item)
Next
'For Each Item As NameIdLsBxItem In m_ItemList
' If Item.bIsActive Then ItemList.Add(Item)
'Next
VerifyHomogenousMachining(ItemList)
End Sub
#End Region ' OnOffCommand
#Region "AllOnCommand"
Public ReadOnly Property AllOnCommand As ICommand
Get
If m_cmdAllOn Is Nothing Then
m_cmdAllOn = New Command(AddressOf AllOn)
End If
Return m_cmdAllOn
End Get
End Property
Public Sub AllOn(ByVal param As Object)
For nI As Integer = 0 To m_MachiningList.Count() - 1
If Not m_MachiningList(nI).m_bEnabled Then
m_MachiningList(nI).m_bEnabled = True
m_ItemList(nI).bIsActive = True
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
End If
Next
EgtDraw()
' Imposto flag di modifica
m_bModified = True
' Abilitazione bottone Next
EnableButtons()
End Sub
#End Region ' AllOnCommand
#Region "AllOffCommand"
Public ReadOnly Property AllOffCommand As ICommand
Get
If m_cmdAllOff Is Nothing Then
m_cmdAllOff = New Command(AddressOf AllOff)
End If
Return m_cmdAllOff
End Get
End Property
Public Sub AllOff(ByVal param As Object)
For nI As Integer = 0 To m_MachiningList.Count() - 1
If m_MachiningList(nI).m_bEnabled Then
m_MachiningList(nI).m_bEnabled = False
m_ItemList(nI).bIsActive = False
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
End If
Next
EgtDraw()
' Imposto flag di modifica
m_bModified = True
' Abilitazione bottone Next
EnableButtons()
End Sub
#End Region ' AllOffCommand
#Region "CutCommands"
Public ReadOnly Property CutCommand As ICommand
Get
If m_cmdCut Is Nothing Then
m_cmdCut = New Command(AddressOf Cut)
End If
Return m_cmdCut
End Get
End Property
Public Sub Cut(ByVal param As Object)
If m_CurrFirstInd = -1 Then Return
Dim bGenModif As Boolean = False
For Index = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
' Provo ad entrambi gli estremi
Dim bModif As Boolean = AdjustBothCuts(nI)
' Provo all'inizio
If Not bModif Then bModif = AdjustStartCut(nI)
' Provo alla fine
If Not bModif Then bModif = AdjustEndCut(nI)
' Se modificato qualcosa
If bModif Then
bGenModif = True
End If
Next
' Se modificato qualcosa
If bGenModif Then
EgtDraw()
m_bModified = True
End If
' Aggiono abilitazione bottoni
EnableButtons()
End Sub
Public ReadOnly Property CutStartCommand As ICommand
Get
If m_cmdCutStart Is Nothing Then
m_cmdCutStart = New Command(AddressOf CutStart)
End If
Return m_cmdCutStart
End Get
End Property
Public Sub CutStart(ByVal param As Object)
If m_CurrFirstInd = -1 Then Return
Dim bGenModif As Boolean = False
For Index = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
' Eseguo
If AdjustStartCut(nI) Then
bGenModif = True
End If
Next
' Se modificato qualcosa
If bGenModif Then
EgtDraw()
m_bModified = True
End If
' Aggiono abilitazione bottoni
EnableButtons()
End Sub
Public ReadOnly Property CutEndCommand As ICommand
Get
If m_cmdCutEnd Is Nothing Then
m_cmdCutEnd = New Command(AddressOf CutEnd)
End If
Return m_cmdCutEnd
End Get
End Property
Public Sub CutEnd(ByVal param As Object)
If m_CurrFirstInd = -1 Then Return
Dim bGenModif As Boolean = False
For Index = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
' Eseguo
If AdjustEndCut(nI) Then
bGenModif = True
End If
Next
' Se modificato qualcosa
If bGenModif Then
EgtDraw()
m_bModified = True
End If
' Aggiono abilitazione bottoni
EnableButtons()
End Sub
Private Function AdjustBothCuts(nI As Integer,
Optional bAllForced As Boolean = False,
Optional bAccForced As Boolean = False) As Boolean
' Verifico che entrambi gli estremi siano allungabili
If Not (m_MachiningList(nI).m_bCanStartAll And m_MachiningList(nI).m_bCanEndAll) Then Return False
' Eseguo allungamento o riporto allo standard
EgtSetCurrMachining(m_MachiningList(nI).m_nId)
Dim nLiPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev)
Dim nLoPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev)
If (m_MachiningList(nI).m_bStartAll Or m_MachiningList(nI).m_bEndAll) And Not bAllForced Then
' accorcio
If nLiPrev = MCH_SAW_LI.EXT_OUT Then
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.OUT)
Else
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.CENT)
End If
If nLoPrev = MCH_SAW_LO.EXT_OUT Then
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.OUT)
Else
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.CENT)
End If
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
m_MachiningList(nI).m_bStartAll = False
m_MachiningList(nI).m_bEndAll = False
ElseIf m_MachiningList(nI).m_bEnabled And Not bAccForced Then
' allungo
If nLiPrev = MCH_SAW_LI.OUT Then
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_OUT)
Else
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_CENT)
End If
If nLoPrev = MCH_SAW_LO.OUT Then
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_OUT)
Else
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_CENT)
End If
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
m_MachiningList(nI).m_bStartAll = True
m_MachiningList(nI).m_bEndAll = True
End If
ColorMachining(m_MachiningList(nI))
Return True
End Function
Private Function AdjustStartCut(nI As Integer,
Optional bAllForced As Boolean = False,
Optional bAccForced As Boolean = False) As Boolean
' Verifico che l'estremo iniziale sia allungabile
If Not m_MachiningList(nI).m_bCanStartAll Then Return False
' Eseguo allungamento o riporto allo standard
EgtSetCurrMachining(m_MachiningList(nI).m_nId)
Dim nLiPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev)
If m_MachiningList(nI).m_bStartAll And Not bAllForced Then
' accorcio
If nLiPrev = MCH_SAW_LI.EXT_OUT Then
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.OUT)
Else
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.CENT)
End If
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
m_MachiningList(nI).m_bStartAll = False
ElseIf m_MachiningList(nI).m_bEnabled And Not bAccForced Then
' allungo
If nLiPrev = MCH_SAW_LI.OUT Then
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_OUT)
Else
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_CENT)
End If
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
m_MachiningList(nI).m_bStartAll = True
End If
ColorMachining(m_MachiningList(nI))
Return True
End Function
Private Function AdjustEndCut(nI As Integer,
Optional bAllForced As Boolean = False,
Optional bAccForced As Boolean = False) As Boolean
' Verifico che l'estremo finale sia allungabile
If Not m_MachiningList(nI).m_bCanEndAll Then Return False
' Eseguo allungamento o riporto allo standard
EgtSetCurrMachining(m_MachiningList(nI).m_nId)
Dim nLoPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev)
If m_MachiningList(nI).m_bEndAll And Not bAllForced Then
' accorcio
If nLoPrev = MCH_SAW_LO.EXT_OUT Then
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.OUT)
Else
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.CENT)
End If
m_MachiningList(nI).m_bEndAll = False
ElseIf m_MachiningList(nI).m_bEnabled And Not bAccForced Then
' allungo
If nLoPrev = MCH_SAW_LO.OUT Then
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_OUT)
Else
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_CENT)
End If
m_MachiningList(nI).m_bEndAll = True
End If
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ColorMachining(m_MachiningList(nI))
Return True
End Function
#End Region ' CutCommands
#Region "OutCenStartCommand"
Public ReadOnly Property OutCenStartCommand As ICommand
Get
If m_cmdOutCenStart Is Nothing Then
m_cmdOutCenStart = New Command(AddressOf OutCenStart)
End If
Return m_cmdOutCenStart
End Get
End Property
Public Sub OutCenStart(ByVal param As Object)
If m_CurrFirstInd = -1 Then Return
Dim bGenModif As Boolean = False
For Index = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
If m_MachiningList(nI).m_sLay = NAME_OUTLOOP Then
EgtSetCurrMachining(m_MachiningList(nI).m_nId)
Dim nLiPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev)
If nLiPrev = MCH_SAW_LI.OUT Then
' accorcio
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.CENT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadIn(nI, MCH_SAW_LI.CENT)
' ri-verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ElseIf nLiPrev = MCH_SAW_LI.EXT_OUT Then
' accorcio
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_CENT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadIn(nI, MCH_SAW_LI.CENT)
ElseIf nLiPrev = MCH_SAW_LI.CENT Then
' allungo
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.OUT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadIn(nI, MCH_SAW_LI.OUT)
' ri-verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ElseIf nLiPrev = MCH_SAW_LI.EXT_CENT Then
' allungo
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_OUT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadIn(nI, MCH_SAW_LI.OUT)
End If
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
bGenModif = True
End If
Next
' Se modificato qualcosa
If bGenModif Then
EgtDraw()
m_bModified = True
End If
End Sub
#End Region ' OutCenStartCommand
#Region "AllOutStartCommand"
Public ReadOnly Property AllOutStartCommand As ICommand
Get
If m_cmdAllOutStart Is Nothing Then
m_cmdAllOutStart = New Command(AddressOf AllOutStart)
End If
Return m_cmdAllOutStart
End Get
End Property
Public Sub AllOutStart(ByVal param As Object)
For nI As Integer = 0 To m_MachiningList.Count() - 1
EgtSetCurrMachining(m_MachiningList(nI).m_nId)
Dim nLiPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev)
If nLiPrev = MCH_SAW_LI.CENT Then
' allungo
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.OUT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadIn(nI, MCH_SAW_LI.OUT)
' ri-verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ElseIf nLiPrev = MCH_SAW_LI.EXT_CENT Then
' allungo
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_OUT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadIn(nI, MCH_SAW_LI.OUT)
End If
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
Next
EgtDraw()
' Imposto flag di modifica
m_bModified = True
End Sub
#End Region ' AllOutStartCommand
#Region "AllCenStartCommand"
Public ReadOnly Property AllCenStartCommand As ICommand
Get
If m_cmdAllCenStart Is Nothing Then
m_cmdAllCenStart = New Command(AddressOf AllCenStart)
End If
Return m_cmdAllCenStart
End Get
End Property
Public Sub AllCenStart(ByVal param As Object)
For nI As Integer = 0 To m_MachiningList.Count() - 1
EgtSetCurrMachining(m_MachiningList(nI).m_nId)
Dim nLiPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev)
If nLiPrev = MCH_SAW_LI.OUT Then
' accorcio
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.CENT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadIn(nI, MCH_SAW_LI.CENT)
' ri-verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ElseIf nLiPrev = MCH_SAW_LI.EXT_OUT Then
' accorcio
EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_CENT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadIn(nI, MCH_SAW_LI.CENT)
End If
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
Next
EgtDraw()
' Imposto flag di modifica
m_bModified = True
End Sub
#End Region ' AllCenStartCommand
#Region "OutCenEndCommand"
Public ReadOnly Property OutCenEndCommand As ICommand
Get
If m_cmdOutCenEnd Is Nothing Then
m_cmdOutCenEnd = New Command(AddressOf OutCenEnd)
End If
Return m_cmdOutCenEnd
End Get
End Property
Public Sub OutCenEnd(ByVal param As Object)
If m_CurrFirstInd = -1 Then Return
Dim bGenModif As Boolean = False
For Index = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
If m_MachiningList(nI).m_sLay = NAME_OUTLOOP Then
EgtSetCurrMachining(m_MachiningList(nI).m_nId)
Dim nLoPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev)
If nLoPrev = MCH_SAW_LO.OUT Then
' accorcio
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.CENT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadOut(nI, MCH_SAW_LO.CENT)
' ri-verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ElseIf nLoPrev = MCH_SAW_LO.EXT_OUT Then
' accorcio
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_CENT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadOut(nI, MCH_SAW_LO.CENT)
ElseIf nLoPrev = MCH_SAW_LO.CENT Then
' allungo
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.OUT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadOut(nI, MCH_SAW_LO.OUT)
' ri-verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ElseIf nLoPrev = MCH_SAW_LO.EXT_CENT Then
' allungo
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_OUT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadOut(nI, MCH_SAW_LO.OUT)
End If
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
bGenModif = True
End If
Next
' Se modificato qualcosa
If bGenModif Then
EgtDraw()
m_bModified = True
End If
End Sub
#End Region ' OutCenEndCommand
#Region "AllOutEndCommand"
Public ReadOnly Property AllOutEndCommand As ICommand
Get
If m_cmdAllOutEnd Is Nothing Then
m_cmdAllOutEnd = New Command(AddressOf AllOutEnd)
End If
Return m_cmdAllOutEnd
End Get
End Property
Public Sub AllOutEnd(ByVal param As Object)
For nI As Integer = 0 To m_MachiningList.Count() - 1
EgtSetCurrMachining(m_MachiningList(nI).m_nId)
Dim nLoPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev)
If nLoPrev = MCH_SAW_LO.CENT Then
' allungo
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.OUT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadOut(nI, MCH_SAW_LO.OUT)
' ri-verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ElseIf nLoPrev = MCH_SAW_LO.EXT_CENT Then
' allungo
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_OUT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadOut(nI, MCH_SAW_LO.OUT)
End If
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
Next
EgtDraw()
' Imposto flag di modifica
m_bModified = True
End Sub
#End Region ' AllOutEndCommand
#Region "AllCenEndCommand"
Public ReadOnly Property AllCenEndCommand As ICommand
Get
If m_cmdAllCenEnd Is Nothing Then
m_cmdAllCenEnd = New Command(AddressOf AllCenEnd)
End If
Return m_cmdAllCenEnd
End Get
End Property
Public Sub AllCenEnd(ByVal param As Object)
For nI As Integer = 0 To m_MachiningList.Count() - 1
EgtSetCurrMachining(m_MachiningList(nI).m_nId)
Dim nLoPrev As Integer
EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev)
If nLoPrev = MCH_SAW_LO.OUT Then
' accorcio
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.CENT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadOut(nI, MCH_SAW_LO.CENT)
' ri-verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ElseIf nLoPrev = MCH_SAW_LO.EXT_OUT Then
' accorcio
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_CENT)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
ModifyOtherLeadOut(nI, MCH_SAW_LO.CENT)
End If
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
Next
EgtDraw()
' Imposto flag di modifica
m_bModified = True
End Sub
#End Region ' AllCenEndCommand
#Region "AllExtendCommand"
Public ReadOnly Property AllExtendCommand As ICommand
Get
If m_cmdAllExtend Is Nothing Then
m_cmdAllExtend = New Command(AddressOf AllExtend)
End If
Return m_cmdAllExtend
End Get
End Property
Public Sub AllExtend(ByVal param As Object)
Dim bModif As Boolean = False
For nI As Integer = 0 To m_MachiningList.Count() - 1
' Provo ad entrambi gli estremi
Dim bOneModif As Boolean = AdjustBothCuts(nI, True, False)
' Provo all'inizio
If Not bOneModif Then bOneModif = AdjustStartCut(nI, True, False)
' Provo alla fine
If Not bOneModif Then bOneModif = AdjustEndCut(nI, True, False)
' Aggiorno flag globale
If bOneModif Then bModif = True
Next
' Se modificato qualcosa
If bModif Then
EgtDraw()
m_bModified = True
End If
' Abilitazione bottone Next
EnableButtons()
End Sub
#End Region ' AllExtendCommand
#Region "AllReduceCommand"
Public ReadOnly Property AllReduceCommand As ICommand
Get
If m_cmdAllReduce Is Nothing Then
m_cmdAllReduce = New Command(AddressOf AllReduce)
End If
Return m_cmdAllReduce
End Get
End Property
Public Sub AllReduce(ByVal param As Object)
Dim bModif As Boolean = False
For nI As Integer = 0 To m_MachiningList.Count() - 1
' Provo ad entrambi gli estremi
Dim bOneModif As Boolean = AdjustBothCuts(nI, False, True)
' Provo all'inizio
If Not bOneModif Then bOneModif = AdjustStartCut(nI, False, True)
' Provo alla fine
If Not bOneModif Then bOneModif = AdjustEndCut(nI, False, True)
' Aggiorno flag globale
If bOneModif Then bModif = True
Next
' Se modificato qualcosa
If bModif Then
EgtDraw()
m_bModified = True
End If
' Abilitazione bottone Next
EnableButtons()
End Sub
#End Region ' AllReduceCommand
#Region "ModifStartCommand"
Public ReadOnly Property ModifStartCommand As ICommand
Get
If m_cmdModifStart Is Nothing Then
m_cmdModifStart = New Command(AddressOf ModifStart)
End If
Return m_cmdModifStart
End Get
End Property
Public Sub ModifStart(ByVal param As Object)
Dim bFirstInd As Boolean = True
Dim bFirstMill As Boolean = True
Dim bFirstWJ As Boolean = True
' elenco delle variabili : MCH_MY.SAWING/MCH_MY.MILLING
Dim dUsal As Double = 0
' elenco delle variabili : MCH_MY.WATERJETTING
Dim dWJAddLen As Double = 0
Dim bWJLiHole As Boolean = True
Dim nWJTangDist As Double = 0
Dim nWJPerpDist As Double = 0
Dim nWJLeadInType As Integer = 0
' Recupero la lavorazione corrente
If m_CurrFirstInd = -1 Then Return
Dim bGenModif As Boolean = False
For Index = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
Dim nOperId As Integer = m_MachiningList(nI).m_nId
Dim nMachiningType As Integer = EgtGetOperationType(nOperId)
' Se taglio con lama
If nMachiningType = MCH_MY.SAWING Then
Dim dOrigUsal As Double = 0
EgtGetInfo(nOperId, INFO_MCH_USER_SAL, dOrigUsal)
' Dialogo richiesta valore
If bFirstInd Then
Dim ModifStartWindow As New ModifStartEndCutWindowV
Dim ModifStartWindowVM As New ModifStartEndCutWindowVM
ModifStartWindowVM.Title = EgtMsg(90791) ' Sawing
ModifStartWindow.DataContext = ModifStartWindowVM
ModifStartWindow.Owner = Application.Current.MainWindow
ModifStartWindowVM.SetVal(dOrigUsal)
' Il posizionamento è forzato nel codice xaml: WindowStartupLocation="CenterOwner"
ModifStartWindow.Left = 190
ModifStartWindow.Top = 600
If Not ModifStartWindow.ShowDialog() Then Return
' Modifica della lavorazione
dUsal = ModifStartWindowVM.GetVal()
bFirstInd = False
End If
Dim bRepeat As Boolean = False
Do
' Se c'è limite alla lunghezza libera
If m_MachiningList(nI).m_dStartFreeLen < FREELEN_INF Then
' se abilitati i controlli sugli allungamenti dei lati interni
If Not m_StartEndModifyOnIntCorner Then
' Recupero sicurezza in corner interno
Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, CurrentMachine.sMachIniFile), 10 * EPS_SMALL)
' Recupero lunghezza baffo del taglio
Dim nPvId As Integer = GDB_ID.NULL
EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId)
Dim dDT As Double = 0
EgtGetInfo(EgtGetFirstGroupInGroup(nPvId), "DT", dDT)
dUsal = Math.Min(dUsal, m_MachiningList(nI).m_dStartFreeLen - dDT - dCornerSafety)
End If
End If
EgtSetCurrMachining(nOperId)
Dim dAddLen As Double = 0
EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen)
' verifico che non sia sull'angolo interno (altrimenti vieto la modifica)
If Not m_StartEndModifyOnIntCorner And (dAddLen - dOrigUsal < -10 * EPS_SMALL) Then
Return
End If
EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen + dUsal - dOrigUsal)
EgtSetInfo(nOperId, INFO_MCH_USER_SAL, dUsal)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
bRepeat = Not UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
If bRepeat Then
EgtSetMachiningParam(MCH_MP.STARTADDLEN, dOrigUsal)
EgtSetInfo(nOperId, INFO_MCH_USER_SAL, dOrigUsal)
dUsal = dOrigUsal
End If
Loop Until Not bRepeat
' verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
bGenModif = True
ElseIf nMachiningType = MCH_MY.MILLING Then ' And m_MachiningList(nI).m_sLay = NAME_ONPATH
' leggo il valore salvato nella geometria
Dim dOrigUsal As Double = 0
EgtGetInfo(nOperId, INFO_MCH_USER_SAL, dOrigUsal)
' Dialogo richiesta valore
If bFirstMill Then
Dim ModifStartWindow As New ModifStartEndCutWindowV
Dim ModifStartWindowVM As New ModifStartEndCutWindowVM
ModifStartWindowVM.Title = EgtMsg(90793) ' Milling
ModifStartWindow.DataContext = ModifStartWindowVM
ModifStartWindow.Owner = Application.Current.MainWindow
ModifStartWindowVM.SetVal(dOrigUsal)
If Not ModifStartWindow.ShowDialog() Then Return
' Modifica della lavorazione
dUsal = ModifStartWindowVM.GetVal()
bFirstMill = False
End If
' Modifica della lavorazione
EgtSetCurrMachining(nOperId)
Dim dAddLen As Double = 0
EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen)
EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen + dUsal - dOrigUsal)
EgtSetInfo(nOperId, INFO_MCH_USER_SAL, dUsal)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
bGenModif = True
' se altrimenti getto d'acqua
ElseIf nMachiningType = MCH_MY.WATERJETTING Then
' Recupero i valori attuali della lavorazione
If bFirstWJ Then
Dim bOriginalIsLeadIn As Boolean = True
Dim dOriginalAddLen As Double = 0
Dim bOriginalLiHole As Boolean = True
Dim nOriginalTangDist As Double = 0
Dim nOriginalPerpDist As Double = 0
Dim nOriginalLeadInType As Integer = 0
EgtSetCurrMachining(nOperId)
EgtGetMachiningParam(MCH_MP.STARTADDLEN, dOriginalAddLen)
EgtGetMachiningParam(MCH_MP.LIHOLE, bOriginalLiHole)
EgtGetMachiningParam(MCH_MP.LITANG, nOriginalTangDist)
EgtGetMachiningParam(MCH_MP.LIPERP, nOriginalPerpDist)
EgtGetMachiningParam(MCH_MP.LEADINTYPE, nOriginalLeadInType)
' Dialogo richiesta valori
Dim ModifStartWnd As New ModifStartEndWjWindowV
Dim ModifStartWndVM As New ModifStartEndWjWindowVM
ModifStartWndVM.Title = EgtMsg(90798) ' Water jetting
ModifStartWnd.DataContext = ModifStartWndVM
ModifStartWnd.Owner = Application.Current.MainWindow
ModifStartWndVM.HoleVisibility = Visibility.Visible
ModifStartWndVM.LeadInVisibility = Visibility.Visible
ModifStartWndVM.LeadOutVisibility = Visibility.Collapsed
ModifStartWndVM.SetVal(dOriginalAddLen)
ModifStartWndVM.SetHole(bOriginalLiHole)
ModifStartWndVM.SetLeadInType(nOriginalLeadInType)
ModifStartWndVM.SetLiTangDist(nOriginalTangDist)
ModifStartWndVM.SetLiPerpDist(nOriginalPerpDist)
If Not ModifStartWnd.ShowDialog() Then Return
dWJAddLen = ModifStartWndVM.GetVal()
bWJLiHole = ModifStartWndVM.GetHole()
nWJTangDist = ModifStartWndVM.GetLiTangDist()
nWJPerpDist = ModifStartWndVM.GetLiPerpDist()
nWJLeadInType = ModifStartWndVM.GetLeadInType().Id
bFirstWJ = False
End If
' Modifica della lavorazione
EgtSetCurrMachining(nOperId)
EgtSetMachiningParam(MCH_MP.LIHOLE, bWJLiHole)
EgtSetMachiningParam(MCH_MP.STARTADDLEN, dWJAddLen)
EgtSetMachiningParam(MCH_MP.LEADINTYPE, nWJLeadInType)
EgtSetMachiningParam(MCH_MP.LITANG, nWJTangDist)
EgtSetMachiningParam(MCH_MP.LIPERP, nWJPerpDist)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
' verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
bGenModif = True
End If
Next
' Se modificato qualcosa
If bGenModif Then
EgtDraw()
m_bModified = True
End If
End Sub
#End Region ' ModifStartCommand
#Region "ModifEndCommand"
Public ReadOnly Property ModifEndCommand As ICommand
Get
If m_cmdModifEnd Is Nothing Then
m_cmdModifEnd = New Command(AddressOf ModifEnd)
End If
Return m_cmdModifEnd
End Get
End Property
Public Sub ModifEnd(ByVal param As Object)
Dim bFirstInd As Boolean = True
Dim bFirstMill As Boolean = True
Dim bFirstWJ As Boolean = True
' elenco delle variabili : MCH_MY.SAWING/MCH_MY.MILLING
Dim dUeal As Double = 0
' elenco delle variabili : MCH_MY.WATERJETTING
Dim dWJAddLen As Double = 0
Dim nWJTangDist As Double = 0
Dim nWJPerpDist As Double = 0
Dim nWJLeadInType As Integer = 0
' Recupero la lavorazione corrente
If m_CurrFirstInd = -1 Then Return
Dim bGenModif As Boolean = False
For Index = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
Dim nOperId As Integer = m_MachiningList(nI).m_nId
Dim nMachiningType As Integer = EgtGetOperationType(nOperId)
' Se taglio con lama
If nMachiningType = MCH_MY.SAWING Then
Dim dOrigUeal As Double = 0
EgtGetInfo(nOperId, INFO_MCH_USER_EAL, dOrigUeal)
' Dialogo richiesta valore
If bFirstInd Then
Dim ModifStartWindow As New ModifStartEndCutWindowV
Dim ModifStartWindowVM As New ModifStartEndCutWindowVM
ModifStartWindowVM.Title = EgtMsg(90791) ' Sawing
ModifStartWindow.DataContext = ModifStartWindowVM
ModifStartWindow.Owner = Application.Current.MainWindow
ModifStartWindowVM.SetVal(dOrigUeal)
If Not ModifStartWindow.ShowDialog() Then Return
' Modifica della lavorazione
dUeal = ModifStartWindowVM.GetVal()
bFirstInd = False
End If
Dim bRepeat As Boolean = False
Do
' Se c'è limite alla lunghezza libera
If m_MachiningList(nI).m_dEndFreeLen < FREELEN_INF Then
' se abilitati i controlli sugli allungamenti dei lati interni
If Not m_StartEndModifyOnIntCorner Then
' Recupero sicurezza in corner interno
Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, CurrentMachine.sMachIniFile), 10 * EPS_SMALL)
' Recupero lunghezza baffo del taglio
Dim nPvId As Integer = GDB_ID.NULL
EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId)
Dim dDT As Double = 0
EgtGetInfo(EgtGetFirstGroupInGroup(nPvId), "DT", dDT)
dUeal = Math.Min(dUeal, m_MachiningList(nI).m_dEndFreeLen - dDT - dCornerSafety)
End If
End If
EgtSetCurrMachining(nOperId)
Dim dAddLen As Double = 0
EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen)
If Not m_StartEndModifyOnIntCorner And (dAddLen - dOrigUeal < -10 * EPS_SMALL) Then
Return
End If
EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen + dUeal - dOrigUeal)
EgtSetInfo(nOperId, INFO_MCH_USER_EAL, dUeal)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
bRepeat = Not UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
If bRepeat Then
EgtSetMachiningParam(MCH_MP.ENDADDLEN, dOrigUeal)
EgtSetInfo(nOperId, INFO_MCH_USER_EAL, dOrigUeal)
dUeal = dOrigUeal
End If
Loop Until Not bRepeat
' verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
bGenModif = True
ElseIf nMachiningType = MCH_MY.MILLING Then ' And m_MachiningList(nI).m_sLay = NAME_ONPATH
Dim dOrigUeal As Double = 0
EgtGetInfo(nOperId, INFO_MCH_USER_EAL, dOrigUeal)
' ------------------ INIZIO PREPARAZIONE TASTIERINO VIRTUALE ------------------
If bFirstMill Then
Dim ModifStartWindow As New ModifStartEndCutWindowV
Dim ModifStartWindowVM As New ModifStartEndCutWindowVM
ModifStartWindowVM.Title = EgtMsg(90793) ' Milling
ModifStartWindow.DataContext = ModifStartWindowVM
ModifStartWindow.Owner = Application.Current.MainWindow
ModifStartWindowVM.SetVal(dOrigUeal)
If Not ModifStartWindow.ShowDialog() Then Return
' Modifica della lavorazione
dUeal = ModifStartWindowVM.GetVal()
bFirstMill = False
End If
' ------------------ FINE PREPARAZIONE TASTIERINO VIRTUALE ------------------
' Modifica della lavorazione
EgtSetCurrMachining(nOperId)
Dim dAddLen As Double = 0
EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen)
EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen + dUeal - dOrigUeal)
EgtSetInfo(nOperId, INFO_MCH_USER_EAL, dUeal)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
bGenModif = True
' se altrimenti getto d'acqua
ElseIf nMachiningType = MCH_MY.WATERJETTING Then
' Recupero i valori attuali della lavorazione
If bFirstWJ Then
Dim dAddLen As Double = 0
Dim nTangDist As Double = 0
Dim nPerpDist As Double = 0
Dim LeadOutTypeId As Integer = 0
EgtSetCurrMachining(nOperId)
EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen)
EgtGetMachiningParam(MCH_MP.LOTANG, nTangDist)
EgtGetMachiningParam(MCH_MP.LOPERP, nPerpDist)
EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, LeadOutTypeId)
' Dialogo richiesta valori
Dim ModifStartWnd As New ModifStartEndWjWindowV()
Dim ModifStartWndVM As New ModifStartEndWjWindowVM
ModifStartWndVM.Title = EgtMsg(90798) ' Water jetting
ModifStartWnd.DataContext = ModifStartWndVM
ModifStartWnd.Owner = Application.Current.MainWindow
ModifStartWndVM.HoleVisibility = Visibility.Collapsed
ModifStartWndVM.LeadInVisibility = Visibility.Collapsed
ModifStartWndVM.LeadOutVisibility = Visibility.Visible
ModifStartWndVM.SetVal(dAddLen)
ModifStartWndVM.SetLeadOutType(LeadOutTypeId)
ModifStartWndVM.SetLoTangDist(nTangDist)
ModifStartWndVM.SetLoPerpDist(nPerpDist)
If Not ModifStartWnd.ShowDialog() Then Return
dWJAddLen = ModifStartWndVM.GetVal()
nWJTangDist = ModifStartWndVM.GetLoTangDist()
nWJPerpDist = ModifStartWndVM.GetLoPerpDist()
nWJLeadInType = ModifStartWndVM.GetLeadOutType().Id
bFirstWJ = False
End If
' Modifica della lavorazione
EgtSetCurrMachining(nOperId)
EgtSetMachiningParam(MCH_MP.ENDADDLEN, dWJAddLen)
EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, nWJLeadInType)
EgtSetMachiningParam(MCH_MP.LOTANG, nWJTangDist)
EgtSetMachiningParam(MCH_MP.LOPERP, nWJPerpDist)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
' verifico interferenza
EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf)
ColorMachining(m_MachiningList(nI))
ColorNumberArrow(nI)
bGenModif = True
End If
Next
' Se modificato qualcosa
If bGenModif Then
EgtDraw()
m_bModified = True
End If
End Sub
#End Region ' ModifEndCommand
#Region "PauseCommand"
Public ReadOnly Property PauseCommand As ICommand
Get
If m_cmdPause Is Nothing Then
m_cmdPause = New Command(AddressOf Pause)
End If
Return m_cmdPause
End Get
End Property
Public Sub Pause(ByVal param As Object)
If m_CurrFirstInd = -1 Then Return
For Index = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
Dim nOperId As Integer = m_MachiningList(nI).m_nId
If GetPause(nOperId) Then
ResetPause(nOperId)
m_MachiningList(nI).m_bPause = False
RemovePauseText(m_ItemList(Index).Name)
Else
SetPause(nOperId)
m_MachiningList(nI).m_bPause = True
AddPauseText(m_ItemList(Index).Name)
End If
Next
End Sub
#End Region ' PauseCommand
#Region "InvertCommand"
Public ReadOnly Property InvertCommand As ICommand
Get
If m_cmdInvert Is Nothing Then
m_cmdInvert = New Command(AddressOf Invert)
End If
Return m_cmdInvert
End Get
End Property
Public Sub Invert(ByVal param As Object)
If m_CurrFirstInd = -1 Then Return
For Index = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
' Si possono invertire solo i tagli di lama
If m_MachiningList(nI).m_nType <> MCH_OY.SAWING Then Continue For
' Non si possono invertire i tagli di lama inclinati
If Math.Abs(m_MachiningList(nI).m_dSideAng) > 0.1 Then Continue For
' Se abilitata inversione automatica e quindi non invertito
If m_MachiningList(nI).m_bEnableInvert Then
' Inverto e disabilito inversione automatica
If CamAuto.InvertVerticalCut(m_MachiningList(nI).m_nId) Then
m_MachiningList(nI).m_bInvert = True
m_MachiningList(nI).m_vtDir = -m_MachiningList(nI).m_vtDir
m_MachiningList(nI).m_bEnableInvert = False
SwapStartEndData(nI)
ResetEnableInvert(m_MachiningList(nI).m_nEntId)
EgtErase(m_MachiningList(nI).m_nArrId)
NumberDirectionMachining(nI, False)
EgtDraw()
End If
' se altrimenti disabilitata inversione automatica e invertito
ElseIf m_MachiningList(nI).m_bInvert Then
' Tolgo inversione e lascio disabilitazione inv. autom.
If CamAuto.InvertVerticalCut(m_MachiningList(nI).m_nId) Then
m_MachiningList(nI).m_bInvert = False
m_MachiningList(nI).m_vtDir = -m_MachiningList(nI).m_vtDir
SwapStartEndData(nI)
EgtErase(m_MachiningList(nI).m_nArrId)
NumberDirectionMachining(nI, False)
EgtDraw()
End If
' altrimenti disabilitata inversione automatica e non invertito
Else
' Abilito inversione automatica e lascio non invertito
m_MachiningList(nI).m_bEnableInvert = True
SetEnableInvert(m_MachiningList(nI).m_nEntId)
EgtErase(m_MachiningList(nI).m_nArrId)
NumberDirectionMachining(nI, False)
EgtDraw()
End If
Next
End Sub
#End Region ' InvertComman
#End Region ' COMMANDS
#Region "EVENTS"
#Region "BRIDGE"
Private Sub OnMyMouseDownSceneBridges(sender As Object, e As System.Windows.Forms.MouseEventArgs,
ByVal IsFirst As Boolean,
ByRef m_nIdSelectedSideWJ As Integer,
ByRef m_nIdSelectedWaterJet As Integer,
ByRef nIdParentPart As Integer)
' Acquisisco punto da disegno
Dim CurrPoint As New Point3d
EgtUnProjectPoint(e.Location, CurrPoint)
' Verifico se selezionato indicativo di pezzo
EgtSetObjFilterForSelWin(False, True, False, False, False)
Dim nSelMy As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSelMy)
Dim nIdMy As Integer = EgtGetFirstObjInSelWin()
While nIdMy <> GDB_ID.NULL
Dim sLayer As String = String.Empty
' layer di origine
Dim nIdParent As Integer = EgtGetParent(nIdMy)
' recupero il nome del Layer
EgtGetName(nIdParent, sLayer)
' solo se il nome del layer è quello associato ad un lato esterno allora procedo con l'evidenziazione
If sLayer = NAME_OUTLOOP Then
If (EgtGetType(nIdMy) = GDB_TY.CRV_ARC OrElse EgtGetType(nIdMy) = GDB_TY.CRV_COMPO OrElse EgtGetType(nIdMy) = GDB_TY.CRV_LINE) AndAlso VerifySideIsAcceptable(nIdMy) Then
If m_nIdSelectedSideWJ <> GDB_ID.NULL Or m_nIdSelectedSideWJ = nIdMy Then
EgtDeselectObj(m_nIdSelectedSideWJ)
End If
' recupero il gruppo della lavorazione associata
nIdParentPart = EgtGetParent(nIdParent)
' se non esiste almeno 1 Preview di tipo WaterJet
If IsWaterJetting(nIdMy) Then
m_nIdSelectedSideWJ = nIdMy
' recupero il punto più vicino alla curva passata
If IsFirst Then
EgtNearPoint(nIdMy, CurrPoint, GDB_RT.GLOB, m_ptSrtBridge)
Else
' prima di confermare verifico che non ci siano interferenze
EgtNearPoint(nIdMy, CurrPoint, GDB_RT.GLOB, m_ptEndBridge)
EgtModifyCurveEndPoint(m_nIdBridge, m_ptEndBridge, GDB_RT.GLOB)
If VerifyInterference(m_nIdBridge) Then
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
EgtSetInfo(m_nIdBridge, "PartStart", m_nIdSelectedPartWJ_Srt)
EgtSetInfo(m_nIdBridge, "EntStart", m_nIdSelectedSideWJ_Srt)
EgtSetInfo(m_nIdBridge, "PartEnd", m_nIdSelectedPartWJ_End)
EgtSetInfo(m_nIdBridge, "EntEnd", m_nIdSelectedSideWJ_End)
EgtSetInfo(m_nIdBridge, "Ph", EgtGetCurrPhase())
' Ricalcolo tutte le lavorazioni
Dim nWarn As Integer = 0
ResetAllMachinings(nWarn)
Else
' attendo la selezione di un punto valido
m_nIdSelectedSideWJ = GDB_ID.NULL
m_nIdSelectedWaterJet = GDB_ID.NULL
nIdParentPart = GDB_ID.NULL
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
OmagOFFICEMap.refStatusBarVM.SetOutputMessage("Bridge intersects part", 3, MSG_TYPE.ERROR_)
Return
End If
End If
' salvo il valore del PreView evidenziato
EgtSetMark(nIdParentPart)
' EgtSetMark(nIdWJ)
EgtSelectObj(nIdMy)
EgtDraw()
Exit While
End If
End If
End If
nIdMy = EgtGetNextObjInSelWin()
End While
End Sub
Private Sub OnMyMouseDownSceneBridgesDelete(sender As Object, e As System.Windows.Forms.MouseEventArgs)
' Acquisisco punto da disegno
Dim CurrPoint As New Point3d
EgtUnProjectPoint(e.Location, CurrPoint)
' Verifico se selezionato indicativo di pezzo
EgtSetObjFilterForSelWin(False, True, False, False, False)
Dim nSelMy As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSelMy)
Dim nIdMy As Integer = EgtGetFirstObjInSelWin()
While nIdMy <> GDB_ID.NULL
Dim sGroupName As String = String.Empty
Dim sSelName As String = String.Empty
' gruppo di appartenenza
Dim nIdParent As Integer = EgtGetParent(nIdMy)
' recupero il nome del gruppo di appartenenza
EgtGetName(nIdParent, sGroupName)
' recupero il nome dell'oggetto selezionato
EgtGetName(nIdMy, sSelName)
If sGroupName.Contains(NAME_BRIDGES) AndAlso sSelName.Contains(NAME_BRIDGESLINE) Then
EgtErase(nIdMy)
EgtDraw()
' Ricalcolo tutte le lavorazioni
Dim nWarn As Integer = 0
ResetAllMachinings(nWarn)
Return
End If
nIdMy = EgtGetNextObjInSelWin()
End While
End Sub
Private Sub OnMyMouseMoveSceneBridges(ptCurr As Point3d)
ptCurr.z = m_ptSrtBridge.z
' rappresento il egmento
If m_nIdBridge = GDB_ID.NULL Then
m_nIdBridge = EgtCreateLine(m_nIdBridgesGroup, m_ptSrtBridge, ptCurr, GDB_RT.GLOB)
' assegno un nome alla linea
EgtSetName(m_nIdBridge, NAME_BRIDGESLINE)
End If
EgtModifyCurveEndPoint(m_nIdBridge, ptCurr, GDB_RT.GLOB)
EgtDraw()
End Sub
Private Function VerifyInterference(nIdBridge As Integer) As Boolean
' prima di procedere alla verifica accorco il segmento (solo per sicurezza) 10 * EPS_SMALL
Dim dLen As Double
EgtCurveLength(nIdBridge, dLen)
If dLen > 21 AndAlso Not EgtCurveIsClosed(nIdBridge) Then
EgtTrimCurveEndAtLen(nIdBridge, dLen - 10 * EPS_SMALL)
EgtTrimCurveStartAtLen(nIdBridge, 10 * EPS_SMALL)
End If
' EgtSaveFile("c:\EgtData\OmagOFFICE\Temp\Bridge.nge", NGE.BIN)
Dim nIdPart As Integer = GDB_ID.NULL
nIdPart = EgtGetFirstPartInRawPart(GetCurrentRaw())
While nIdPart <> GDB_ID.NULL
Dim nIdRegion As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_REGION)
Dim nIdSurf As Integer = EgtGetFirstInGroup(nIdRegion)
While nIdSurf <> GDB_ID.NULL
If EgtGetType(nIdSurf) = GDB_TY.SRF_FRGN Then
' se la linea bridge interseca la superficie allora restitusco false
If EgtCurveWithRegionClassify(nIdBridge, nIdSurf) <> CREGC.OUT Then
EgtExtendCurveStartByLen(nIdBridge, 10 * EPS_SMALL)
Return False
End If
Exit While
End If
End While
nIdPart = EgtGetNextPartInRawPart(nIdPart)
End While
Return True
End Function
Private Function VerifySideIsAcceptable(nMyId As Integer) As Boolean
Dim dVal As Double = 0
' verifico che l'entità selezionata non contenga questi parametri
If EgtGetInfo(nMyId, INFO_SIDE_ANGLE2, dVal) Then
If dVal <> 0 Then
Return False
End If
End If
If EgtGetInfo(nMyId, INFO_SIDE_ANGLE, dVal) Then
If dVal <> 0 Then
Return False
End If
End If
If EgtGetInfo(nMyId, INFO_ORIG_SIDE_ANGLE, dVal) Then
If dVal <> 0 Then
Return False
End If
End If
' altrimenti l'entità è accettabile
Return True
End Function
' verifico che il lato selezionato appartenga ad una lavorazione di tipo Waterjet
Private Function IsWaterJetting(nMyId As Integer) As Boolean
' verifico che sul lato indicato sia impostato un taglio di tipo WaterJet
Dim nMchId As Integer = GDB_ID.NULL
For nInd As Integer = 0 To m_MachiningList.Count() - 1
nMchId = m_MachiningList(nInd).m_nId
Dim nMachiningType As Integer = EgtGetOperationType(m_MachiningList(nInd).m_nId)
If nMachiningType = MCH_MY.WATERJETTING Then
EgtSetCurrMachining(nMchId)
Dim nIndex As Integer = 0
Dim nIdSide As Integer = GDB_ID.NULL
Dim nSub As Integer = GDB_ID.NULL
While EgtGetMachiningGeometry(nIndex, nIdSide, nSub)
If nIdSide = nMyId Then
Return True
End If
nIndex += 1
End While
End If
Next
Return False
End Function
Private Sub RefreshMachList()
For nI As Integer = 0 To m_MachiningList.Count() - 1
' cancello tutti gli indici di lavorazione presenti nel disegno
Dim nNbrId As Integer = GDB_ID.NULL
EgtErase(m_MachiningList(nI).m_nNbrId)
EgtRemoveInfo(m_MachiningList(nI).m_nId, "NbrId")
Next
' Preparo la lista delle lavorazioni
CalculateSplitMachList(m_nCurrPhase, m_MachiningList)
' Aggiorno visualizzazione delle lavorazioni
For nI As Integer = 0 To m_MachiningList.Count() - 1
' sistemo colore
ColorMachining(m_MachiningList(nI))
' assegno nuova numerazione
NumberDirectionMachining(nI)
' conto il numero di tipi di lavorazioni
CountMachiningType(m_MachiningList(nI), m_nCountSawing, m_nCountWaterjetting, m_nCountOtherMachining)
Next
' aggiorno grafica
ShowMachiningList()
' aggiorno la visualizzazione
EgtDraw()
End Sub
Public Sub DeselectWJBridgesPart()
' se in fase di definzione di un ponticello lo elimino
If m_nIdSelectedSideWJ_Srt <> GDB_ID.NULL And m_nIdSelectedSideWJ_End = GDB_ID.NULL And m_nIdBridge <> GDB_ID.NULL Then
EgtErase(EgtGetParent(m_nIdBridge))
End If
m_nIdBridge = GDB_ID.NULL
EgtResetMark(m_nIdSelectedPartWJ_Srt)
m_nIdSelectedPartWJ_Srt = GDB_ID.NULL
EgtDeselectObj(m_nIdSelectedSideWJ_Srt)
m_nIdSelectedSideWJ_Srt = GDB_ID.NULL
m_nIdSelectedWaterJet_Srt = GDB_ID.NULL
EgtResetMark(m_nIdSelectedPartWJ_End)
m_nIdSelectedPartWJ_End = GDB_ID.NULL
EgtDeselectObj(m_nIdSelectedSideWJ_End)
m_nIdSelectedSideWJ_End = GDB_ID.NULL
m_nIdSelectedWaterJet_End = GDB_ID.NULL
EgtDraw()
End Sub
#End Region ' Bridge
#Region "Quality"
Public ReadOnly Property QualityCommand As ICommand
Get
If m_cmdQuality Is Nothing Then
m_cmdQuality = New Command(AddressOf ModifyQuality)
End If
Return m_cmdQuality
End Get
End Property
Public Sub ModifyQuality()
Dim bFirstWJ As Boolean = True
Dim sQuality As String = String.Empty
' Recupero la lavorazione corrente
If m_CurrFirstInd = -1 Then Return
Dim bGenModif As Boolean = False
For Index As Integer = m_CurrFirstInd To m_CurrLastInd
If Not m_ItemList(Index).IsSelected Then
Continue For
End If
Dim nI As Integer = m_ItemList(Index).Ind
Dim nOperId As Integer = m_MachiningList(nI).m_nId
Dim nMachiningType As Integer = EgtGetOperationType(nOperId)
' se altrimenti getto d'acqua
If nMachiningType = MCH_MY.WATERJETTING Then
' ------------------ INIZIO PREPARAZIONE TASTIERINO VIRTUALE ------------------
If bFirstWJ Then
EgtSetCurrMachining(nOperId)
' Dialogo richiesta valore
'(m_MainWindow, m_MainWindow.m_CurrentMachine.Qualities, "Quality")
Dim ModifyQualityWnd As New ModifyQualityV
Dim ModifyQuality As New ModifyQualityVM
ModifyQuality.Title = EgtMsg(91673) ' Quality
ModifyQuality.QualityList = CurrentMachine.Qualities
ModifyQualityWnd.DataContext = ModifyQuality
ModifyQualityWnd.Owner = Application.Current.MainWindow
If EgtGetInfo(nOperId, "Quality", sQuality) Then
ModifyQuality.SelectedQuality = sQuality
Else
ModifyQuality.SelectedQuality = CurrentMachine.sCurrWaterJettingQuality
End If
If Not ModifyQualityWnd.ShowDialog() Then Return
sQuality = ModifyQuality.SelectedQuality
' comunico che ho letto il primo dato
bFirstWJ = False
End If
' ------------------ INIZIO PREPARAZIONE TASTIERINO VIRTUALE ------------------
' Modifica della lavorazione
EgtSetCurrMachining(nOperId)
EgtSetInfo(nOperId, "Quality", sQuality)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
' verifico interferenza
bGenModif = True
End If
Next
' Se modificato qualcosa
If bGenModif Then
EgtDraw()
m_bModified = True
End If
End Sub
#End Region ' Quality
' Genera la lavorazione associata al percoso indicato
Private Function CreateSingleCut() As Boolean
Dim bOk As Boolean = False
' Verifico sia definito il punto iniziale e il grezzo
If Not (m_bGetStartPoint And m_bGetEndPoint) AndAlso m_IdCurrRawSolid <> GDB_ID.NULL Then
Return False
End If
' Spessore grezzo
Dim ptRawMin, ptRawMax As Point3d
If Not EgtGetRawPartBBox(m_IdCurrRawSolid, ptRawMin, ptRawMax) Then Return False
Dim dRawHeight As Double = ptRawMax.z - ptRawMin.z
' Recupero spessore lama corrente
Dim sSaw As String = CurrentMachine.sCurrSaw
Dim sSawing As String = CurrentMachine.sCurrSawing
EgtTdbSetCurrTool(sSaw)
Dim dThick As Double = 0
' Se è impostata una lavorazione di lama
If Not String.IsNullOrEmpty(sSawing) Then
EgtTdbGetCurrToolParam(MCH_TP.THICK, dThick)
End If
' Recupero pezzo per il taglio diretto
Dim nPartId = m_IdSplitGroup
' Calcolo punto di inserimento nel grezzo
Dim ptMin, ptMax As Point3d
EgtGetBBoxGlob(nPartId, GDB_BB.STANDARD, ptMin, ptMax)
Dim ptTabOri As Point3d
EgtGetTableRef(1, ptTabOri)
'Dim ptIns As Point3d = ptMin + (ptTabOri - ptRawMin)
Dim ptOri As New Point3d
Dim ptIns As Point3d = ptOri + (ptMin - ptRawMin)
ptIns.z = dRawHeight
' Imposto la fase corrente
EgtSetCurrPhase(m_nCurrPhase)
' Inserisco il taglio nel grezzo : CamAuto.GetCurrentRaw()
EgtAddPartToRawPart(nPartId, ptIns, m_IdCurrRawSolid)
' Inserisco la lavorazione
bOk = AddMachinings(nPartId) AndAlso UpdateAllMachiningsToolpaths()
'' Spengo la linea
'If bOk Then
' EgtSetStatus(m_IdSplitLine, GDB_ST.OFF)
'End If
Return bOk
End Function
Private Function RemoveCut(nId As Integer) As Boolean
Dim bOk As Boolean = False
Dim nIdCurrMachGroup As Integer = EgtGetCurrMachGroup()
Dim ParentId As Integer = EgtGetParent(nId)
While ParentId <> GDB_ID.NULL
Dim sCutName As String = String.Empty
EgtGetName(ParentId, sCutName)
If sCutName.Contains(SPLIT_CUT & "_" & nIdCurrMachGroup.ToString) Then
bOk = RemoveCurrentSplitCut(ParentId)
Return bOk
End If
ParentId = EgtGetParent(ParentId)
End While
Return bOk
End Function
Friend Sub OnMouseDownScene_DoubleClick(sender As Object, e As System.Windows.Forms.MouseEventArgs)
OnMouseDownScene(sender, e)
If m_nSelected = GDB_ID.NULL Then Return
OnOff(Nothing)
End Sub
Friend Sub OnMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs)
' Se tasto premuoto allora attivo la selezione multipla da Scena
Dim bKeyCtrlPressed = (Keyboard.Modifiers And ModifierKeys.Control) > 0
' Verifico di essere il gestore attivo e non in modalità sola visualizzazione
If Not m_bActive OrElse OmagOFFICEMap.refMachiningTabVM.IsShow Then Return
' Si può selezionare solo con il tasto sinistro e se stato NULL
If e.Button <> Windows.Forms.MouseButtons.Left Or
Not OmagOFFICEMap.refSceneHostVM.MainScene.IsStatusNull() Then
Return
End If
' definizione dei ponticelli
If m_BridgeBtn_IsChecked Then
If m_nIdSelectedPartWJ_Srt = GDB_ID.NULL Then
OnMyMouseDownSceneBridges(sender, e, True, m_nIdSelectedSideWJ_Srt, m_nIdSelectedWaterJet_Srt, m_nIdSelectedPartWJ_Srt)
Else
OnMyMouseDownSceneBridges(sender, e, False, m_nIdSelectedSideWJ_End, m_nIdSelectedWaterJet_End, m_nIdSelectedPartWJ_End)
' aggiorno la visualizzazione delle lavorazioni e la lista
RefreshMachList()
End If
' se entrambi i pezzi sono stati definiti allora procedo alla deselezione
If m_nIdSelectedPartWJ_Srt <> GDB_ID.NULL And m_nIdSelectedPartWJ_End <> GDB_ID.NULL Then
DeselectWJBridgesPart()
End If
Return
End If
' eliminazione dei ponticelli
If m_BridgeDeleteBtn_IsChecked Then
OnMyMouseDownSceneBridgesDelete(sender, e)
' aggiorno la visualizzazione delle lavorazioni e la lista
RefreshMachList()
Return
End If
' Recupero le coordinate del punto corrente (solo se esiste la selezione di un grezzo corrente -> vedi sotto)
If m_CreateCut_IsChecked AndAlso m_IdCurrRawSolid <> GDB_ID.NULL Then
Dim ptCurr As Point3d
EgtUnProjectPoint(e.Location, ptCurr)
If m_bGetStartPoint And Not m_bGetEndPoint Then
m_ptEndPoint = ptCurr
m_bGetEndPoint = True
End If
If Not m_bGetStartPoint Then
m_ptStartPoint = ptCurr
m_bGetStartPoint = True
m_IdSplitGroup = EgtCreateGroup(GDB_ID.ROOT)
Dim nIdCurrMachGroup As Integer = EgtGetCurrMachGroup()
EgtSetName(m_IdSplitGroup, SPLIT_CUT & "_" & nIdCurrMachGroup.ToString & "." & EgtGetCurrPhase())
m_IdSplitGroupLayer = EgtCreateGroup(m_IdSplitGroup)
EgtSetName(m_IdSplitGroupLayer, NAME_OUTLOOP)
End If
If m_bGetStartPoint And m_bGetEndPoint Then
' procedo a disegnare la linea tra i due punti indicati
Dim ptRawMin, ptRawMax As Point3d
If EgtGetRawPartBBox(m_IdCurrRawSolid, ptRawMin, ptRawMax) Then
m_ptStartPoint.z = ptRawMax.z
m_ptEndPoint.z = ptRawMax.z
EgtModifyCurveEndPoint(m_IdSplitLine, m_ptEndPoint)
CreateSingleCut()
' Resetto tutte le variabili utilizzate
EgtResetMark(m_IdCurrRawSolid)
m_bGetStartPoint = False
m_bGetEndPoint = False
m_IdSplitLine = GDB_ID.NULL
m_IdSplitGroup = GDB_ID.NULL
m_IdSplitGroupLayer = GDB_ID.NULL
m_IdCurrRawSolid = GDB_ID.NULL
m_IdSplitLineRemove = GDB_ID.NULL
' Aggiorno la visualizzazione
PreviewMachinigList()
EgtDraw()
End If
End If
Return
ElseIf m_CreateCut_IsChecked AndAlso m_IdCurrRawSolid = GDB_ID.NULL Then
' Verifico se selezionato grezzo
EgtSetObjFilterForSelWin(False, False, True, False, False)
Dim nSelRaw As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSelRaw)
Dim nIdRaw As Integer = EgtGetFirstObjInSelWin()
While nIdRaw <> GDB_ID.NULL
Dim sRawName As String = String.Empty
If EgtGetName(nIdRaw, sRawName) AndAlso sRawName = NAME_RAW_SOLID Then
m_IdCurrRawSolid = EgtGetParent(nIdRaw)
EgtSetMark(m_IdCurrRawSolid)
EgtDraw()
Return
End If
nIdRaw = EgtGetNextObjInSelWin()
End While
Return
End If
If m_CreateParallelCut_IsChecked AndAlso m_IdCurrRawSolid = GDB_ID.NULL Then
' Verifico se selezionato grezzo
EgtSetObjFilterForSelWin(False, False, True, False, False)
Dim nSelRaw As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSelRaw)
Dim nIdRaw As Integer = EgtGetFirstObjInSelWin()
While nIdRaw <> GDB_ID.NULL
Dim sRawName As String = String.Empty
If EgtGetName(nIdRaw, sRawName) AndAlso sRawName = NAME_RAW_SOLID Then
m_IdCurrRawSolid = EgtGetParent(nIdRaw)
EgtSetMark(m_IdCurrRawSolid)
EgtDraw()
Return
End If
nIdRaw = EgtGetNextObjInSelWin()
End While
Return
ElseIf m_CreateParallelCut_IsChecked AndAlso m_IdCurrRawSolid <> GDB_ID.NULL AndAlso m_bGetStartPoint AndAlso Not m_bGetEndPoint Then
m_bGetEndPoint = True
CreateSingleCut()
' Resetto tutte le variabili utilizzate
EgtResetMark(m_IdCurrRawSolid)
m_bGetStartPoint = False
m_bGetEndPoint = False
m_IdSplitLine = GDB_ID.NULL
m_IdSplitGroup = GDB_ID.NULL
m_IdSplitGroupLayer = GDB_ID.NULL
m_IdCurrRawSolid = GDB_ID.NULL
m_IdSplitLineRemove = GDB_ID.NULL
' Aggiorno la visualizzazione
PreviewMachinigList()
EgtDraw()
Return
End If
If m_ModifyCut_IsChecked AndAlso m_IdCurrRawSolid = GDB_ID.NULL Then
' Verifico se selezionato grezzo
EgtSetObjFilterForSelWin(False, False, True, False, False)
Dim nSelRaw As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSelRaw)
Dim nIdRaw As Integer = EgtGetFirstObjInSelWin()
While nIdRaw <> GDB_ID.NULL
Dim sRawName As String = String.Empty
If EgtGetName(nIdRaw, sRawName) AndAlso sRawName = NAME_RAW_SOLID Then
m_IdCurrRawSolid = EgtGetParent(nIdRaw)
EgtSetMark(m_IdCurrRawSolid)
EgtDraw()
Return
End If
nIdRaw = EgtGetNextObjInSelWin()
End While
Return
ElseIf m_ModifyCut_IsChecked AndAlso m_IdCurrRawSolid <> GDB_ID.NULL AndAlso m_bGetStartPoint AndAlso Not m_bGetEndPoint Then
m_bGetEndPoint = True
CreateSingleCut()
RemoveCut(m_IdSplitLineRemove)
' Resetto tutte le variabili utilizzate
EgtResetMark(m_IdCurrRawSolid)
m_bGetStartPoint = False
m_bGetEndPoint = False
m_IdSplitLine = GDB_ID.NULL
m_IdSplitGroup = GDB_ID.NULL
m_IdSplitGroupLayer = GDB_ID.NULL
m_IdCurrRawSolid = GDB_ID.NULL
m_IdSplitLineRemove = GDB_ID.NULL
' Aggiorno la visualizzazione
PreviewMachinigList()
EgtDraw()
Return
End If
' Reset drag
m_nDragInd = -1
m_nDragType = 0
' Reset selection interface
m_nSelected = GDB_ID.NULL
' Verifico se selezionato estremo di taglio con lama
EgtSetObjFilterForSelWin(False, True, False, False, False)
Dim nSel As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel)
Dim nId As Integer = EgtGetFirstObjInSelWin()
While nId <> GDB_ID.NULL
' --------------------------------- SPLIT CUT ---------------------------------
' Se attiva l'eliminazione di un taglio di separazione
If m_RemoveCut_IsChecked Then
RemoveCut(nId)
' Aggiorno la visualizzazione
PreviewMachinigList()
EgtDraw()
Return
End If
' Recupero le info del pezzo selezionato per procedere a generare
If m_CreateParallelCut_IsChecked AndAlso m_IdCurrRawSolid <> GDB_ID.NULL Then
Dim sMyName As String = ""
EgtGetName(nId, sMyName)
If String.Compare(sMyName, NAME_PV_CUT) = 0 Then
Dim nPvId As Integer = EgtGetParent(EgtGetParent(nId))
Dim sPvid As String = String.Empty
EgtGetName(nPvId, sPvid)
If sPvid.StartsWith("Saw") Then
sPvid = sPvid.Remove(0, 3)
If IsNumeric(sPvid) Then
Dim nIdLine As Integer = CInt(sPvid)
m_IdSplitGroup = EgtCreateGroup(GDB_ID.ROOT)
Dim nIdCurrMachGroup As Integer = EgtGetCurrMachGroup()
EgtSetName(m_IdSplitGroup, SPLIT_CUT & "_" & nIdCurrMachGroup.ToString & "." & EgtGetCurrPhase())
m_IdSplitGroupLayer = EgtCreateGroup(m_IdSplitGroup)
EgtSetName(m_IdSplitGroupLayer, NAME_OUTLOOP)
m_IdSplitLine = EgtCopyGlob(nIdLine, m_IdSplitGroupLayer)
' Recupero la dimennsione del taglio (non basta copiare la geometria)
Dim dUsal As Double = 0
Dim dUeal As Double = 0
Dim nMchId As Integer = GDB_ID.NULL
If EgtGetInfo(nPvId, "MId", nMchId) Then
EgtGetInfo(nMchId, INFO_MCH_USER_SAL, dUsal)
EgtGetInfo(nMchId, INFO_MCH_USER_EAL, dUeal)
End If
' Aggiorno la dimensione della geometria
EgtExtendCurveStartByLen(m_IdSplitLine, dUsal)
EgtExtendCurveEndByLen(m_IdSplitLine, dUeal)
EgtDeselectObj(nId)
m_bGetStartPoint = True
End If
End If
Return
End If
Return
End If
If m_ModifyCut_IsChecked AndAlso m_IdCurrRawSolid <> GDB_ID.NULL Then
Dim sMyName As String = ""
EgtGetName(nId, sMyName)
If String.Compare(sMyName, NAME_PV_CUT) = 0 Then
Dim nPvId As Integer = EgtGetParent(EgtGetParent(nId))
Dim sPvId As String = String.Empty
EgtGetName(nPvId, sPvId)
If sPvId.StartsWith("Saw") Then
sPvId = sPvId.Remove(0, 3)
If IsNumeric(sPvId) Then
Dim nIdLine As Integer = CInt(sPvId)
m_IdSplitGroup = EgtCreateGroup(GDB_ID.ROOT)
Dim nIdCurrMachGroup As Integer = EgtGetCurrMachGroup()
EgtSetName(m_IdSplitGroup, SPLIT_CUT & "_" & nIdCurrMachGroup.ToString & "." & EgtGetCurrPhase())
m_IdSplitGroupLayer = EgtCreateGroup(m_IdSplitGroup)
EgtSetName(m_IdSplitGroupLayer, NAME_OUTLOOP)
m_IdSplitLine = EgtCopyGlob(nIdLine, m_IdSplitGroupLayer)
' Recupero la dimennsione del taglio (non basta copiare la geometria)
Dim dUsal As Double = 0
Dim dUeal As Double = 0
Dim nMchId As Integer = GDB_ID.NULL
If EgtGetInfo(nPvId, "MId", nMchId) Then
EgtGetInfo(nMchId, INFO_MCH_USER_SAL, dUsal)
EgtGetInfo(nMchId, INFO_MCH_USER_EAL, dUeal)
End If
' Aggiorno la dimensione della geometria
EgtExtendCurveStartByLen(m_IdSplitLine, dUsal)
EgtExtendCurveEndByLen(m_IdSplitLine, dUeal)
EgtDeselectObj(nId)
' Salvo l'Id del tagli da eliminare
m_IdSplitLineRemove = nId
m_bGetStartPoint = True
EgtDraw()
End If
End If
Return
End If
Return
End If
' --------------------------------- SPLIT CUT ---------------------------------
' Verifico sia un attacco o uscita di taglio con lama
Dim nType As Integer = 0
Dim sName As String = ""
EgtGetName(nId, sName)
If String.Compare(sName, NAME_PV_PRECUT) = 0 Then
nType = 1
ElseIf String.Compare(sName, NAME_PV_POSTCUT) = 0 Then
nType = 2
ElseIf String.Compare(sName, NAME_PV_CUT) = 0 Then
nType = 3
End If
If nType = 1 Or nType = 2 Then
Dim nPvId As Integer = EgtGetParent(EgtGetParent(nId))
Dim nMchId As Integer = GDB_ID.NULL
If EgtGetInfo(nPvId, "MId", nMchId) Then
For nInd As Integer = 0 To m_MachiningList.Count() - 1
If m_MachiningList(nInd).m_nId = nMchId Then
m_nDragInd = nInd
m_nDragType = nType
End If
For nJ As Integer = 0 To m_MachiningList(nInd).m_vOthId.Count() - 1
If m_MachiningList(nInd).m_vOthId(nJ) = nMchId Then
m_nDragInd = nInd
m_nDragType = nType
Exit For
End If
Next
If m_nDragInd >= 0 Then
' Assegno l'id dell'elemento selezionato
m_nSelected = m_nDragInd
Exit For
End If
Next
End If
If m_nDragInd >= 0 Then
' Assegno l'id dell'elemento selezionato
m_nSelected = m_nDragInd
Exit While
End If
ElseIf nType = 3 Then
Dim nPvId As Integer = EgtGetParent(EgtGetParent(nId))
Dim nMchId As Integer = GDB_ID.NULL
If EgtGetInfo(nPvId, "MId", nMchId) Then
For nInd As Integer = 0 To m_MachiningList.Count() - 1
If m_MachiningList(nInd).m_nId = nMchId Then
m_nSelected = nInd
End If
For nJ As Integer = 0 To m_MachiningList(nInd).m_vOthId.Count() - 1
If m_MachiningList(nInd).m_vOthId(nJ) = nMchId Then
m_nSelected = nInd
Exit For
End If
Next
If m_nSelected >= 0 Then Exit For
Next
End If
If m_nSelected >= 0 Then Exit While
End If
nId = EgtGetNextObjInSelWin()
End While
' Sistemazioni per drag
If m_nSelected >= 0 AndAlso EgtUnProjectPoint(e.Location, m_ptDragPrev) Then
Dim nItemIndex = 0
For Each Item In ItemList
If Not bKeyCtrlPressed Then
Item.IsSelected = (nItemIndex = m_nSelected)
Else
' procedo ad rendere attivo solo l'elemnento selezionato
If nItemIndex = m_nSelected Then
Item.IsSelected = True
End If
End If
nItemIndex += 1
Next
Else
m_nDragInd = -1
m_nDragType = 0
m_nSelected = GDB_ID.NULL
End If
End Sub
Friend Sub OnMyMouseMoveScene(sender As Object, e As System.Windows.Forms.MouseEventArgs)
' Verifico di essere il gestore attivo e non in modalità sola visualizzazione
If Not m_bActive OrElse OmagOFFICEMap.refMachiningTabVM.IsShow Then Return
' Ricavo il punto corrente in coordinate mondo
Dim ptCurr As Point3d
EgtUnProjectPoint(e.Location, ptCurr)
' definizione dei ponticelli
If m_BridgeBtn_IsChecked Then
If m_nIdSelectedPartWJ_Srt <> GDB_ID.NULL Then
OnMyMouseMoveSceneBridges(ptCurr)
End If
Return
End If
' Recupero le coordinate del punto corrente
If m_CreateCut_IsChecked Then
If m_bGetStartPoint And Not m_bGetEndPoint Then
m_ptEndPoint = ptCurr
End If
If m_bGetStartPoint And Not m_bGetEndPoint Then
' procedo a disegnare la linea tra i due punti indicati
Dim ptRawMin, ptRawMax As Point3d
If EgtGetRawPartBBox(m_IdCurrRawSolid, ptRawMin, ptRawMax) Then
m_ptStartPoint.z = ptRawMax.z
m_ptEndPoint.z = ptRawMax.z
If m_IdSplitLine = GDB_ID.NULL Then
m_IdSplitLine = EgtCreateLine(m_IdSplitGroupLayer, m_ptStartPoint, m_ptEndPoint)
Else
EgtModifyCurveEndPoint(m_IdSplitLine, m_ptEndPoint)
End If
EgtDraw()
End If
End If
Return
End If
If m_CreateParallelCut_IsChecked AndAlso m_IdSplitLine <> GDB_ID.NULL Then
Dim mPoint3d As Point3d
EgtMidPoint(m_IdSplitLine, mPoint3d)
mPoint3d.z = 0
ptCurr.z = 0
EgtMove(m_IdSplitLine, ptCurr - mPoint3d)
EgtDraw()
End If
If m_ModifyCut_IsChecked AndAlso m_IdSplitLine <> GDB_ID.NULL Then
Dim mPoint3d As Point3d
EgtMidPoint(m_IdSplitLine, mPoint3d)
mPoint3d.z = 0
ptCurr.z = 0
EgtMove(m_IdSplitLine, ptCurr - mPoint3d)
EgtDraw()
End If
' Se drag non abilitato o in corso
If m_nDragInd = -1L Or m_bDragging Then Return
m_bDragging = True
Dim nOperId As Integer = m_MachiningList(m_nDragInd).m_nId
' Ricavo il vettore di movimento e la variazione di lunghezza
Dim vtMove As Vector3d = ptCurr - m_ptDragPrev
Dim dDelta = vtMove * m_MachiningList(m_nDragInd).m_vtDir
If m_nDragType = 1 Then
Dim dOrigUsal As Double = 0
Dim dUsal As Double
' ----------------------- REPEAT -----------------------
Do
dDelta = -dDelta
' Leggo il valore salvato nella geometria
EgtGetInfo(nOperId, INFO_MCH_USER_SAL, dOrigUsal)
dUsal = dOrigUsal + dDelta
' Se c'è limite alla lunghezza libera
If m_MachiningList(m_nDragInd).m_dStartFreeLen < FREELEN_INF Then
' Recupero sicurezza in corner interno
Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, CurrentMachine.sMachIniFile), 10 * EPS_SMALL)
' Recupero lunghezza baffo del taglio
Dim nPvId As Integer = GDB_ID.NULL
EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId)
Dim dDT As Double = 0
EgtGetInfo(EgtGetFirstGroupInGroup(nPvId), "DT", dDT)
dUsal = Math.Min(dUsal, m_MachiningList(m_nDragInd).m_dStartFreeLen - dDT - dCornerSafety)
End If
' Modifica della lavorazione
EgtSetCurrMachining(nOperId)
Dim dAddLen As Double = 0
EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen)
If dAddLen - dOrigUsal < -10 * EPS_SMALL Then
m_bDragging = False
Return
End If
EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen + dUsal - dOrigUsal)
EgtSetInfo(nOperId, INFO_MCH_USER_SAL, dUsal)
Loop Until UpdateMachiningPreview(m_MachiningList(m_nDragInd).m_nId, True)
' ----------------------- REPEAT (solo se il segmento scompare) -----------------------
Else
Dim dOrigUeal As Double = 0
Dim dUeal As Double
dDelta = -dDelta
Do
dDelta = -dDelta
' Leggo il valore salvato nella geometria
EgtGetInfo(nOperId, INFO_MCH_USER_EAL, dOrigUeal)
dUeal = dOrigUeal + dDelta
' Se c'è limite alla lunghezza libera
If m_MachiningList(m_nDragInd).m_dEndFreeLen < FREELEN_INF Then
' Recupero sicurezza in corner interno
Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, CurrentMachine.sMachIniFile), 10 * EPS_SMALL)
' Recupero lunghezza baffo del taglio
Dim nPvId As Integer = GDB_ID.NULL
EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId)
Dim dDT As Double = 0
EgtGetInfo(EgtGetFirstGroupInGroup(nPvId), "DT", dDT)
dUeal = Math.Min(dUeal, m_MachiningList(m_nDragInd).m_dEndFreeLen - dDT - dCornerSafety)
End If
' Modifica della lavorazione
EgtSetCurrMachining(nOperId)
Dim dAddLen As Double = 0
EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen)
If dAddLen - dOrigUeal < -10 * EPS_SMALL Then
m_bDragging = False
Return
End If
EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen + dUeal - dOrigUeal)
EgtSetInfo(nOperId, INFO_MCH_USER_EAL, dUeal)
Loop Until UpdateMachiningPreview(m_MachiningList(m_nDragInd).m_nId, True)
End If
' verifico interferenza
EgtVerifyMachining(m_MachiningList(m_nDragInd).m_nId, m_MachiningList(m_nDragInd).m_nInterf)
ColorMachining(m_MachiningList(m_nDragInd))
ColorNumberArrow(m_nDragInd)
' Aggiorno visualizzazione
EgtDraw()
m_bModified = True
' Aggiorno punto e stato di drag
m_ptDragPrev = ptCurr
m_bDragging = False
End Sub
Friend Sub OnMyMouseUpScene(sender As Object, e As System.Windows.Forms.MouseEventArgs)
' Verifico di essere il gestore attivo e non in modalità sola visualizzazione
If Not m_bActive OrElse OmagOFFICEMap.refMachiningTabVM.IsShow Then Return
' Se drag in corso
If m_nDragInd >= 0 Then
m_nDragInd = -1
End If
End Sub
Friend Sub OnKeyDownScene(sender As Object, e As System.Windows.Forms.KeyEventArgs)
' Con CANC cancello i pezzi selezionati
If (e.KeyData = System.Windows.Forms.Keys.Delete Or e.KeyData = System.Windows.Forms.Keys.Escape) And (m_BridgeBtn_IsChecked Or m_BridgeDeleteBtn_IsChecked) Then
DeselectWJBridgesPart()
End If
End Sub
Friend Sub StatusOffNumbArrow(Status As GDB_ST)
For Each Item In m_MachiningList
Dim nOperId As Integer = Item.m_nId
Dim nNbrId As Integer = Item.m_nNbrId
Dim nArrId As Integer = Item.m_nArrId
Dim nInd As Integer = m_MachiningList.IndexOf(Item)
If nInd >= 0 AndAlso nInd < m_ItemList.Count AndAlso Not m_ItemList(nInd).IsSelected Then
EgtSetStatus(nNbrId, Status)
EgtSetStatus(nArrId, Status)
End If
Next
EgtDraw()
End Sub
#End Region ' EVENTS
'-----------------------------------------------------------------------------------------------
Public Class NameIdLsBxItem
Inherits VMBase
Private m_nInd As Integer
Private m_sName As String
Private m_sSourceImg As String
Private m_bIsActive As Boolean
Private m_nType As Integer
Public Property Ind As Integer
Get
Return m_nInd
End Get
Set(value As Integer)
m_nInd = value
End Set
End Property
Public Property Name As String
Get
Return m_sName
End Get
Set(value As String)
If value <> m_sName Then
m_sName = value
NotifyPropertyChanged("Name")
End If
End Set
End Property
Public Property SourceImg As String
Get
Return m_sSourceImg
End Get
Set(value As String)
m_sSourceImg = value
NotifyPropertyChanged("SourceImg")
End Set
End Property
Public Property bIsActive As Boolean
Get
Return m_bIsActive
End Get
Set(value As Boolean)
If value <> m_bIsActive Then
m_bIsActive = value
NotifyPropertyChanged("bIsActive")
End If
End Set
End Property
Private m_IsSelected As Boolean
Public Property IsSelected As Boolean
Get
Return m_IsSelected
End Get
Set(value As Boolean)
If Not IsNothing(value) Then
m_IsSelected = value
If value AndAlso Not OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList.Contains(Me) Then
OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList.Add(Me)
Else
OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList.Remove(Me)
End If
' se non è stato aggiunto nessun nuovo elemento alla lista dei selezionati allora esco
If OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList.Count = 0 Then
EgtDraw()
NotifyPropertyChanged("IsSelected")
Return
End If
' se ho un solo elemento allora so che è coerrente con se stesso come lavorazione
If OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList.Count = 1 Then
OmagOFFICEMap.refSplitModeVM.m_bAreHomogeneous = True
End If
' creo lista ordinata dei selezionati
Dim ItemList As New List(Of NameIdLsBxItem)
For Each Item In OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList
ItemList.Add(Item)
Next
' ------------------------ verifico che le lavorazioni siano dello stesso tipo ------------------------
OmagOFFICEMap.refSplitModeVM.VerifyHomogenousMachining(ItemList)
' -----------------------------------------------------------------------------------------------------
' riordino l'elenco delle lavorazioni
ItemList.Sort(Function(x, y) Comparer(Of Integer).Default.Compare(OmagOFFICEMap.refSplitModeVM.m_ItemList.IndexOf(x), OmagOFFICEMap.refSplitModeVM.m_ItemList.IndexOf(y)))
' ------------------------ verifico che le lavorazioni siano contigue ---------------------------------
OmagOFFICEMap.refSplitModeVM.bEnabledCommandMove = VerifyContinuity(ItemList)
' -----------------------------------------------------------------------------------------------------
'If Not My.Computer.Keyboard.ShiftKeyDown And (My.Computer.Keyboard.CtrlKeyDown And value) Then
' ' verifico che siano contigui
' Dim bContigus As Boolean = False
' Dim LastSel As NameIdLsBxItem = OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList(OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList.Count - 1)
' If OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList.Count = 1 Then
' bContigus = True
' Else
' For Each Item In ItemList
' If Item.Ind = LastSel.Ind + 1 Or Item.Ind = LastSel.Ind - 1 Then
' bContigus = True
' End If
' Next
' End If
' ' se non contiguo, elimino dai selezionati il primo(che è l'ultimo ad essere stato selezionato)
' If Not bContigus Then
' ItemList.Remove(LastSel)
' OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList.RemoveAt(OmagOFFICEMap.refSplitModeVM.m_SelectedItemsList.Count - 1)
' OmagOFFICEMap.refSplitModeVM.ItemList(LastSel.Ind).IsSelected = Not value 'm_IsSelected = Not value
' ' disabilito il pulsanti per spostare le lavorazioni
' End If
'End If
' resetto marcatura lavorazioni
If OmagOFFICEMap.refSplitModeVM.m_CurrFirstInd > -1 Then
For Index = OmagOFFICEMap.refSplitModeVM.m_CurrFirstInd To OmagOFFICEMap.refSplitModeVM.m_CurrLastInd
OmagOFFICEMap.refSplitModeVM.MarkMachining(OmagOFFICEMap.refSplitModeVM.m_ItemList(Index).Ind, False)
Next
End If
' resetto indici
OmagOFFICEMap.refSplitModeVM.m_CurrFirstInd = -1
OmagOFFICEMap.refSplitModeVM.m_CurrLastInd = -1
' marco lavorazioni selezionate
For Each Item In ItemList
OmagOFFICEMap.refSplitModeVM.MarkMachining(Item.Ind, True)
Next
If (ItemList.Count > 0) Then
OmagOFFICEMap.refSplitModeVM.m_CurrFirstInd = OmagOFFICEMap.refSplitModeVM.m_ItemList.IndexOf(ItemList(0))
OmagOFFICEMap.refSplitModeVM.m_CurrLastInd = OmagOFFICEMap.refSplitModeVM.m_ItemList.IndexOf(ItemList(ItemList.Count - 1))
End If
EgtDraw()
NotifyPropertyChanged("IsSelected")
End If
End Set
End Property
Public Function VerifyContinuity(ItemList As List(Of NameIdLsBxItem)) As Boolean
If ItemList.Count < 2 Then Return True
Dim bContigus As Boolean = False
For Index As Integer = 0 To ItemList.Count - 2
If ItemList(Index).Ind = ItemList(Index + 1).Ind + 1 Or ItemList(Index).Ind = ItemList(Index + 1).Ind - 1 Then
bContigus = True
Else
bContigus = False
Exit For
End If
Next
Return bContigus
End Function
Public Property Type As Integer
Get
Return m_nType
End Get
Set(value As Integer)
m_nType = value
End Set
End Property
Sub New(Name As String, Ind As Integer, bIsActive As Boolean, nType As Integer)
Me.m_sName = Name
Me.m_nInd = Ind
Me.m_bIsActive = bIsActive
Me.m_nType = nType
End Sub
Sub New(Name As String, Ind As Integer, bIsActive As Boolean, nType As Integer, sImg As String)
Me.m_sName = Name
Me.m_nInd = Ind
Me.m_bIsActive = bIsActive
Me.m_nType = nType
Me.m_sSourceImg = sImg
End Sub
End Class
End Class