bab90cf7dc
- implementazione copia rawpart travi - selezione dei pezzi btl in prod - implementazione accesso Db con codice chiave
672 lines
28 KiB
VB.net
672 lines
28 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports System.IO
|
|
Imports EgtBEAMWALL.Core
|
|
Imports EgtUILib
|
|
Imports EgtWPFLib5
|
|
|
|
Public Class LeftPanelVM
|
|
Inherits VMBase
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
Public ReadOnly Property ViewPage_Visibility As Visibility
|
|
Get
|
|
Return If(Map.refMainMenuVM.SelPage = Pages.VIEW, Visibility.Visible, Visibility.Collapsed)
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property MachiningPage_Visibility As Visibility
|
|
Get
|
|
Return If(Map.refMainMenuVM.SelPage = Pages.MACHINING, Visibility.Visible, Visibility.Collapsed)
|
|
End Get
|
|
End Property
|
|
|
|
' Definizione comandi
|
|
Private m_cmdNewRawPart As ICommand
|
|
Private m_cmdAddToRawPart As ICommand
|
|
Private m_cmdCopyPart As ICommand
|
|
Private m_cmdAddPart As ICommand
|
|
Private m_cmdRemovePart As ICommand
|
|
Private m_cmdCopyFeature As ICommand
|
|
Private m_cmdMacroFeature As ICommand
|
|
Private m_cmdAddFeature As ICommand
|
|
Private m_cmdRemoveFeature As ICommand
|
|
|
|
#End Region 'FIELDS & PROPERTIES
|
|
|
|
Sub New()
|
|
' imposto riferimento su mappa
|
|
Map.SetRefLeftPanelVM(Me)
|
|
End Sub
|
|
|
|
#Region "METHODS"
|
|
|
|
Friend Sub UpdateView()
|
|
NotifyPropertyChanged("ViewPage_Visibility")
|
|
NotifyPropertyChanged("MachiningPage_Visibility")
|
|
End Sub
|
|
|
|
#End Region ' METHODS
|
|
|
|
#Region "COMMANDS"
|
|
|
|
#Region "NewRawPart"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property NewRawPart_Command As ICommand
|
|
Get
|
|
If m_cmdNewRawPart Is Nothing Then
|
|
m_cmdNewRawPart = New Command(AddressOf NewRawPart)
|
|
End If
|
|
Return m_cmdNewRawPart
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub NewRawPart()
|
|
If IsNothing(Map.refProdManagerVM.CurrProd) Then Return
|
|
Dim SelPart As BTLPartVM = Map.refProjectVM.BTLStructureVM.SelBTLPart
|
|
If IsNothing(SelPart) Then Return
|
|
' verifico se sono gia' stati messi tutti i pezzi richiesti
|
|
If Not VerifyPartCount(SelPart) Then Return
|
|
' Determino il tipo di macchina (travi o pareti)
|
|
Dim nMachType As MachineType = Map.refMachinePanelVM.SelectedMachine.nType
|
|
' chiedo lunghezza grezzo
|
|
Dim dRawL As Double = SelPart.dL
|
|
Dim dRawW As Double = SelPart.dW
|
|
Dim dStartOffset As Double = 0
|
|
Dim dKerf As Double = 0
|
|
Dim sWarehouseIniPath As String = Map.refMainWindowVM.MainWindowM.sWarehouseDir & "\" & WH_BASIC_INI_FILE_NAME
|
|
If Map.refMachinePanelVM.SelectedMachine.nType = MachineType.BEAM Then
|
|
dStartOffset = EgtUILib.GenInterface.GetPrivateProfileDouble(WRH_BEAM, WRH_STARTOFFSET, 0, sWarehouseIniPath)
|
|
dRawL += dStartOffset
|
|
Else
|
|
dKerf = EgtUILib.GenInterface.GetPrivateProfileDouble(WRH_WALL, WRH_KERF, 0, sWarehouseIniPath)
|
|
dRawL += 2 * dKerf
|
|
dRawW += 2 * dKerf
|
|
End If
|
|
Dim AddRawPartWndVM As New AddRawPartWndVM(Map.refMachinePanelVM.SelectedMachine.nType, dRawL, dRawW, dStartOffset)
|
|
Dim AddRawPartWnd As New AddRawPartWndV(Application.Current.MainWindow, AddRawPartWndVM)
|
|
If Not AddRawPartWnd.ShowDialog() Then Return
|
|
' creo nuovo gruppo di lavorazione
|
|
Map.refMachGroupPanelVM.AddMachGroup()
|
|
Dim nCurrMachGroup As Integer = EgtGetCurrMachGroup()
|
|
Dim sCurrMachGroupName As String = ""
|
|
EgtGetMachGroupName(nCurrMachGroup, sCurrMachGroupName)
|
|
' creo copia del pezzo
|
|
Dim nPartDuploId As Integer = EgtDuploNew(SelPart.nPartId)
|
|
' elimino valori calcolo dell'originale
|
|
MyMachGroupPanelVM.DuploRemoveProjCalc(nPartDuploId)
|
|
' lo rendo std
|
|
EgtSetMode(nPartDuploId, GDB_MD.STD)
|
|
Dim sLogPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\RawPartLog.txt"
|
|
If Map.refMachinePanelVM.SelectedMachine.nType = MachineType.BEAM Then
|
|
' scrivo dati per variabili P di comunicazione con la macchina in gruppo di lavorazione
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_PRODID, Map.refProdManagerVM.CurrProd.nProdId)
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_PATTID, nCurrMachGroup)
|
|
' scrivo dati costruzione grezzo in gruppo di lavorazione
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_BARLEN, AddRawPartWndVM.VariableList(0).dValue)
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_PART & 1, nPartDuploId & "," & AddRawPartWndVM.VariableList(1).dValue)
|
|
Dim BeamMachGroup As BeamMachGroupVM = Map.refMachGroupPanelVM.GetLastMachGroup()
|
|
' eseguo script creazione grezzo
|
|
If Not ExecBeam(sLogPath, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdType.RAWPART, False) Then
|
|
BeamMachGroup.DeleteMachGroup()
|
|
Dim LogFile As String() = File.ReadAllLines(sLogPath)
|
|
If LogFile.Count >= 2 AndAlso Not IsNothing(LogFile(1)) Then
|
|
MessageBox.Show(LogFile(1), "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
|
End If
|
|
Return
|
|
End If
|
|
' aggiorno contatore pezzi usati in Prod
|
|
SelPart.RefreshPartInProd()
|
|
'aggiorno lista pezzi
|
|
BeamMachGroup.m_BeamMachGroupM.RefreshPartList()
|
|
BeamMachGroup.m_BeamMachGroupM.RefreshGroupData()
|
|
' aggiorno dati ultilizzo barra
|
|
BeamMachGroup.UpdateUsage()
|
|
EgtSetView(VT.ISO_SW, False)
|
|
ElseIf Map.refMachinePanelVM.SelectedMachine.nType = MachineType.WALL Then
|
|
' scrivo dati in gruppo di lavorazione
|
|
Dim dPosX As Double = dKerf
|
|
Dim dPosY As Double = dKerf
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_PANELLEN, AddRawPartWndVM.VariableList(0).dValue)
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_PANELWIDTH, AddRawPartWndVM.VariableList(1).dValue)
|
|
EgtSetInfo(nCurrMachGroup, MGR_RPT_PART & 1, nPartDuploId & "," & dPosX & "," & dPosY & "," & 0 & "," & 0)
|
|
Dim WallMachGroup As WallMachGroupVM = DirectCast(Map.refMachGroupPanelVM.MachGroupVMList(Map.refMachGroupPanelVM.MachGroupVMList.Count - 1), WallMachGroupVM)
|
|
' eseguo script creazione grezzo
|
|
If Not ExecWall(sLogPath, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdType.RAWPART, False) Then
|
|
WallMachGroup.DeleteMachGroup()
|
|
Dim LogFile As String() = File.ReadAllLines(sLogPath)
|
|
If LogFile.Count >= 2 AndAlso Not IsNothing(LogFile(1)) Then
|
|
MessageBox.Show(LogFile(1), "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
|
End If
|
|
Return
|
|
End If
|
|
' scrivo dati pezzo
|
|
EgtSetInfo(nPartDuploId, MGR_PRT_POSX, dPosX)
|
|
EgtSetInfo(nPartDuploId, MGR_PRT_POSY, dPosY)
|
|
EgtSetInfo(nPartDuploId, MGR_PRT_ROT, 0)
|
|
EgtSetInfo(nPartDuploId, MGR_PRT_FLIP, False)
|
|
' aggiorno lista pezzi
|
|
WallMachGroup.m_WallMachGroupM.RefreshPartList()
|
|
WallMachGroup.m_WallMachGroupM.RefreshGroupData()
|
|
' aggiorno dati ultilizzo barra
|
|
WallMachGroup.UpdateUsage()
|
|
EgtSetView(VT.TOP, False)
|
|
End If
|
|
EgtZoom(ZM.ALL)
|
|
End Sub
|
|
|
|
Private Function VerifyPartCount(SelPart As BTLPartVM) As Boolean
|
|
' verifico se ci sono pezzi da aggiungere
|
|
If Not SelPart.CanAddPartToCount Then
|
|
' se non ci sono, chiedo se aggiungerne uno nuovo
|
|
If MessageBox.Show("Raggiunto numero di pezzi da produrre: " &
|
|
SelPart.nCNT & " da BTL; " & SelPart.nADDED & " aggiunti. Aggiungerne un altro?", "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
|
|
SelPart.AddNewPartToAdded()
|
|
Else
|
|
Return False
|
|
End If
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
'Friend Sub IncrementPartCount(SelPart As BTLPartVM)
|
|
' ' incremento i pezzi utilizzati
|
|
' SelPart.AddPartToProd()
|
|
'End Sub
|
|
#End Region ' NewRawPart
|
|
|
|
#Region "AddToRawPart"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property AddToRawPart_Command As ICommand
|
|
Get
|
|
If m_cmdAddToRawPart Is Nothing Then
|
|
m_cmdAddToRawPart = New Command(AddressOf AddToRawPart)
|
|
End If
|
|
Return m_cmdAddToRawPart
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub AddToRawPart()
|
|
If IsNothing(Map.refProdManagerVM.CurrProd) Then Return
|
|
Dim SelPart As BTLPartVM = Map.refProjectVM.BTLStructureVM.SelBTLPart
|
|
If IsNothing(SelPart) Then Return
|
|
Dim SelMachGroup As MachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup
|
|
If IsNothing(SelMachGroup) Then Return
|
|
' verifico se sono gia' stati messi tutti i pezzi richiesti
|
|
If Not VerifyPartCount(SelPart) Then Return
|
|
If Map.refMachinePanelVM.SelectedMachine.nType = MachineType.BEAM Then
|
|
Dim BeamMachGroup As BeamMachGroupVM = DirectCast(SelMachGroup, BeamMachGroupVM)
|
|
' verifico sezione
|
|
If SelPart.dW < BeamMachGroup.dW - EPS_SMALL OrElse SelPart.dW > BeamMachGroup.dW + EPS_SMALL OrElse
|
|
SelPart.dH < BeamMachGroup.dH - EPS_SMALL OrElse SelPart.dH > BeamMachGroup.dH + EPS_SMALL Then
|
|
MessageBox.Show("Il pezzo selezionato ha sezione diversa dalla barra selezionata. Impossibile aggiungerlo.", "Errore")
|
|
Return
|
|
End If
|
|
' verifico lunghezza totale
|
|
If Not VerifyTotLength(BeamMachGroup, SelPart) Then
|
|
MessageBox.Show("Il pezzo selezionato supera la lunghezza dalla barra selezionata. Impossibile aggiungerlo.", "Errore")
|
|
Return
|
|
End If
|
|
If AddPartToBeam(BeamMachGroup, SelPart) Then
|
|
' aggiorno contatore pezzi usati in Prod
|
|
SelPart.RefreshPartInProd()
|
|
End If
|
|
' aggiorno dati ultilizzo barra
|
|
BeamMachGroup.UpdateUsage()
|
|
EgtSetView(VT.ISO_SW, False)
|
|
ElseIf Map.refMachinePanelVM.SelectedMachine.nType = MachineType.WALL Then
|
|
Dim WallMachGroup As WallMachGroupVM = DirectCast(SelMachGroup, WallMachGroupVM)
|
|
' verifico spessore
|
|
If SelPart.dH < WallMachGroup.dH - EPS_SMALL OrElse SelPart.dH > WallMachGroup.dH + EPS_SMALL Then
|
|
MessageBox.Show("Il pezzo selezionato ha spessore diverso dalla parete selezionata. Impossibile aggiungerlo.", "Errore")
|
|
Return
|
|
End If
|
|
If AddPartToWall(WallMachGroup, SelPart) Then
|
|
' aggiorno contatore pezzi usati in Prod
|
|
SelPart.RefreshPartInProd()
|
|
End If
|
|
' aggiorno dati ultilizzo barra
|
|
WallMachGroup.UpdateUsage()
|
|
EgtSetView(VT.TOP, False)
|
|
End If
|
|
EgtZoom(ZM.ALL)
|
|
End Sub
|
|
|
|
Friend Function VerifyTotLength(BeamMachGroup As BeamMachGroupVM, PartToAdd As BTLPartVM) As Boolean
|
|
Dim dNewPartPos As Double = 0
|
|
If BeamMachGroup.PartVMList.Count > 0 Then
|
|
Dim LastPart As PartVM = BeamMachGroup.PartVMList(BeamMachGroup.PartVMList.Count - 1)
|
|
dNewPartPos += LastPart.dPOSX + LastPart.dL
|
|
End If
|
|
dNewPartPos += RawPartConfiguration.dBeamDist + PartToAdd.dL
|
|
Return dNewPartPos < BeamMachGroup.dL
|
|
End Function
|
|
|
|
Friend Function AddPartToBeam(BeamMachGroup As BeamMachGroupVM, PartToAdd As BTLPartVM) As Boolean
|
|
' creo copia del pezzo
|
|
Dim nPartDuploId As Integer = EgtDuploNew(PartToAdd.nPartId)
|
|
' lo rendo std
|
|
EgtSetMode(nPartDuploId, GDB_MD.STD)
|
|
' calcolo posizione nuovo pezzo per rispettare ordine lunghezze
|
|
Dim nInsertIndex As Integer
|
|
' scrivo dati di tutti i pezzi
|
|
Dim dPosX As Double = BeamMachGroup.dStartCut
|
|
Dim bPartAdded As Boolean = False
|
|
Dim nIndex As Integer
|
|
' ciclo sui pezzi
|
|
For nIndex = 0 To BeamMachGroup.PartVMList.Count - 1
|
|
' se non ancora aggiunto e lunghezza minore del pezzo corrente, lo aggiungo
|
|
If Not bPartAdded AndAlso BeamMachGroup.PartVMList(nIndex).dL > PartToAdd.dL Then
|
|
' se non è primo, aggiungo offset tra barre standard
|
|
If nIndex <> 0 Then
|
|
dPosX += RawPartConfiguration.dBeamDist
|
|
End If
|
|
EgtSetInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + 1, nPartDuploId & "," & DoubleToString(dPosX, 3))
|
|
' incremento posizione della sua lunghezza
|
|
dPosX += PartToAdd.dL
|
|
' conservo indice d'inserimento
|
|
nInsertIndex = nIndex
|
|
bPartAdded = True
|
|
End If
|
|
' se non è primo, aggiungo offset del pezzo
|
|
If nIndex <> 0 Then
|
|
Dim Beam As BeamVM = DirectCast(BeamMachGroup.PartVMList(nIndex), BeamVM)
|
|
dPosX += Beam.dOffset
|
|
' se sono a indice primo ed è stato aggiunto pezzo nuovo
|
|
ElseIf nIndex = 0 AndAlso bPartAdded Then
|
|
' aggiungo offset tra barre standard
|
|
dPosX += RawPartConfiguration.dBeamDist
|
|
End If
|
|
EgtSetInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + If(bPartAdded, 2, 1), BeamMachGroup.PartVMList(nIndex).nPartId & "," & DoubleToString(dPosX, 3))
|
|
' incremento posizione della sua lunghezza
|
|
dPosX += BeamMachGroup.PartVMList(nIndex).dL
|
|
Next
|
|
' se non è ancora stato aggiunto
|
|
If Not bPartAdded Then
|
|
' aggiungo offset tra barre standard
|
|
dPosX += RawPartConfiguration.dBeamDist
|
|
' lo aggiungo in fondo
|
|
EgtSetInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + 1, nPartDuploId & "," & DoubleToString(dPosX, 3))
|
|
' conservo indice d'inserimento
|
|
nInsertIndex = nIndex
|
|
End If
|
|
' elimino vecchio grezzo ed eseguo script creazione nuovo
|
|
Dim nRawId As Integer = EgtGetFirstRawPart()
|
|
While nRawId <> GDB_ID.NULL
|
|
EgtRemoveRawPart(nRawId)
|
|
nRawId = EgtGetFirstRawPart()
|
|
End While
|
|
If Not ExecBeam(Map.refMainWindowVM.MainWindowM.sTempDir, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdType.RAWPART, False) Then
|
|
Return False
|
|
End If
|
|
' aggiorno lista pezzi
|
|
BeamMachGroup.m_BeamMachGroupM.RefreshPartList()
|
|
' seleziono pezzo aggiunto
|
|
If BeamMachGroup.PartVMList.Count > nInsertIndex Then BeamMachGroup.SelPart = BeamMachGroup.PartVMList(nInsertIndex)
|
|
Return True
|
|
End Function
|
|
|
|
Friend Function AddPartToWall(WallMachGroup As WallMachGroupVM, PartToAdd As BTLPartVM) As Boolean
|
|
' creo copia del pezzo
|
|
Dim nPartDuploId As Integer = EgtDuploNew(PartToAdd.nPartId)
|
|
' lo rendo std
|
|
EgtSetMode(nPartDuploId, GDB_MD.STD)
|
|
' Posizione di inserimento
|
|
Dim dPosX As Double = 10
|
|
Dim dPosY As Double = 10
|
|
' Se ci sono pezzi già inseriti
|
|
If WallMachGroup.PartVMList.Count > 0 Then
|
|
Dim LastWall As WallVM = DirectCast(WallMachGroup.PartVMList(WallMachGroup.PartVMList.Count - 1), WallVM)
|
|
' verifico se posso metterlo sopra in Y
|
|
Dim NextPosY = LastWall.m_WallM.dPOSY + LastWall.dW + RawPartConfiguration.dWallDist
|
|
If WallMachGroup.dW - NextPosY > PartToAdd.dW + 10 Then
|
|
dPosX = LastWall.dPOSX
|
|
dPosY = NextPosY
|
|
Else
|
|
dPosX = 10
|
|
For i As Integer = 0 To WallMachGroup.PartVMList.Count - 1
|
|
Dim CurrWall As WallVM = DirectCast(WallMachGroup.PartVMList(i), WallVM)
|
|
Dim NextPosX = CurrWall.dPOSX + CurrWall.dL + RawPartConfiguration.dWallDist
|
|
If NextPosX > dPosX Then
|
|
dPosX = NextPosX
|
|
End If
|
|
Next
|
|
dPosY = 10
|
|
End If
|
|
End If
|
|
If EgtAddPartToRawPart(nPartDuploId, New Point3d(dPosX, dPosY, 0), WallMachGroup.m_WallMachGroupM.nRawPartId) Then
|
|
EgtSetInfo(nPartDuploId, MGR_PRT_POSX, dPosX)
|
|
EgtSetInfo(nPartDuploId, MGR_PRT_POSY, dPosY)
|
|
EgtSetInfo(nPartDuploId, MGR_PRT_ROT, 0)
|
|
EgtSetInfo(nPartDuploId, MGR_PRT_FLIP, False)
|
|
Else
|
|
Return False
|
|
End If
|
|
'' scrivo dati in gruppo di lavorazione
|
|
'EgtSetInfo(WallMachGroup.Id, MGR_RPT_PART & WallMachGroup.PartVMList.Count + 1, nPartDuploId & "," & dPosX & "," & dPosY & "," & 0 & "," & 0)
|
|
'' eseguo script creazione grezzo
|
|
'Dim nRawId As Integer = EgtGetFirstRawPart()
|
|
'While nRawId <> GDB_ID.NULL
|
|
' EgtRemoveRawPart(nRawId)
|
|
' nRawId = EgtGetFirstRawPart()
|
|
'End While
|
|
'If Not ExecWall(Map.refMainWindowVM.MainWindowM.sTempDir, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdType.RAWPART, False) Then Return False
|
|
'aggiorno lista pezzi
|
|
WallMachGroup.m_WallMachGroupM.RefreshPartList()
|
|
' seleziono pezzo aggiunto
|
|
If WallMachGroup.PartVMList.Count > 0 Then WallMachGroup.SelPart = WallMachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = nPartDuploId)
|
|
Return True
|
|
End Function
|
|
|
|
#End Region ' AddToRawPart
|
|
|
|
#Region "CopyPart"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property CopyPart_Command As ICommand
|
|
Get
|
|
If m_cmdCopyPart Is Nothing Then
|
|
m_cmdCopyPart = New Command(AddressOf CopyPart)
|
|
End If
|
|
Return m_cmdCopyPart
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub CopyPart()
|
|
If IsNothing(Map.refProjManagerVM.CurrProj) Then Return
|
|
Dim SelPart As BTLPartVM = Map.refProjectVM.BTLStructureVM.SelBTLPart
|
|
If IsNothing(SelPart) Then Return
|
|
' creo copia
|
|
Dim NewPart As BTLPartM = SelPart.Copy()
|
|
If Not IsNothing(NewPart) Then
|
|
' selezione ultimo che e' quello appena crerato
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart = Map.refProjectVM.BTLStructureVM.BTLPartVMList(Map.refProjectVM.BTLStructureVM.BTLPartVMList.Count - 1)
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' CopyPart
|
|
|
|
#Region "AddPart"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property AddPart_Command As ICommand
|
|
Get
|
|
If m_cmdAddPart Is Nothing Then
|
|
m_cmdAddPart = New Command(AddressOf AddPart)
|
|
End If
|
|
Return m_cmdAddPart
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub AddPart(ByVal param As Object)
|
|
If IsNothing(Map.refProjManagerVM.CurrProj) Then Return
|
|
' apro finestra di definizione nuovo part
|
|
Dim AddPartWndVM As New AddPartWndVM()
|
|
Dim AddPartWnd As New AddPartWndV(Application.Current.MainWindow, AddPartWndVM)
|
|
If AddPartWnd.ShowDialog() Then
|
|
' creo nuovo part
|
|
Dim nNewPartId As Integer = EgtBeamCreatePart()
|
|
' scrivo info proj
|
|
EgtSetInfo(nNewPartId, BTL_PRT_PROJ, Map.refProjManagerVM.CurrProj.nProjId)
|
|
EgtBeamSetPartProdNbr(AddPartWndVM.nPDN)
|
|
If Not IsNothing(AddPartWndVM.sNAM) Then EgtBeamSetPartName(AddPartWndVM.sNAM)
|
|
EgtBeamSetPartCount(AddPartWndVM.nCNT)
|
|
EgtBeamSetPartBox(AddPartWndVM.dL, AddPartWndVM.dH, AddPartWndVM.dW)
|
|
' aggiungo dati pezzo
|
|
Dim NewPart As BTLPartM = BTLPartM.CreateBTLPart(nNewPartId)
|
|
' aggiungo pezzo alla lista
|
|
Map.refProjectVM.BTLStructureVM.BTLStructureM.AddBTLPart(NewPart)
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart = Map.refProjectVM.BTLStructureVM.BTLPartVMList.FirstOrDefault(Function(x) x.BTLPartM Is NewPart)
|
|
End If
|
|
|
|
End Sub
|
|
|
|
#End Region ' AddPart
|
|
|
|
#Region "RemovePart"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property RemovePart_Command As ICommand
|
|
Get
|
|
If m_cmdRemovePart Is Nothing Then
|
|
m_cmdRemovePart = New Command(AddressOf RemovePart)
|
|
End If
|
|
Return m_cmdRemovePart
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub RemovePart()
|
|
If IsNothing(Map.refProjManagerVM.CurrProj) Then Return
|
|
If IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart) Then Return
|
|
EgtBeamSetPart(Map.refProjectVM.BTLStructureVM.SelBTLPart.nPartId)
|
|
If EgtBeamErasePart() Then
|
|
' rimuovo dalla lista pezzi
|
|
Dim Index As Integer = Map.refProjectVM.BTLStructureVM.BTLPartVMList.IndexOf(Map.refProjectVM.BTLStructureVM.SelBTLPart)
|
|
If Index = 0 Then
|
|
If Map.refProjectVM.BTLStructureVM.BTLPartVMList.Count > 0 Then
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart = Map.refProjectVM.BTLStructureVM.BTLPartVMList(0)
|
|
Else
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart = Nothing
|
|
End If
|
|
ElseIf Index = Map.refProjectVM.BTLStructureVM.BTLPartVMList.Count - 1 Then
|
|
If Map.refProjectVM.BTLStructureVM.BTLPartVMList.Count > 1 Then
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart = Map.refProjectVM.BTLStructureVM.BTLPartVMList(Map.refProjectVM.BTLStructureVM.BTLPartVMList.Count - 2)
|
|
Else
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart = Nothing
|
|
End If
|
|
Else
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart = Map.refProjectVM.BTLStructureVM.BTLPartVMList(Index - 1)
|
|
End If
|
|
Map.refProjectVM.BTLStructureVM.BTLPartVMList.RemoveAt(Index)
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' RemovePart
|
|
|
|
#Region "CopyFeature"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property CopyFeature_Command As ICommand
|
|
Get
|
|
If m_cmdCopyFeature Is Nothing Then
|
|
m_cmdCopyFeature = New Command(AddressOf CopyFeature)
|
|
End If
|
|
Return m_cmdCopyFeature
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub CopyFeature()
|
|
If IsNothing(Map.refProjManagerVM.CurrProj) Then Return
|
|
Dim SelPart As BTLPartVM = Map.refProjectVM.BTLStructureVM.SelBTLPart
|
|
If IsNothing(SelPart) Then Return
|
|
Dim SelFeature As BTLFeatureVM = SelPart.SelBTLFeatureVM
|
|
If IsNothing(SelFeature) Then Return
|
|
' creo copia
|
|
Dim NewFeature = SelFeature.Copy()
|
|
If Not IsNothing(NewFeature) Then
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.FirstOrDefault(Function(x) x.BTLFeatureM Is NewFeature)
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' CopyFeature
|
|
|
|
#Region "MacroFeature"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property MacroFeature_Command As ICommand
|
|
Get
|
|
If m_cmdMacroFeature Is Nothing Then
|
|
m_cmdMacroFeature = New Command(AddressOf MacroFeature)
|
|
End If
|
|
Return m_cmdMacroFeature
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub MacroFeature()
|
|
If IsNothing(Map.refProjManagerVM.CurrProj) Then Return
|
|
If IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart) Then Return
|
|
' apro finestra di creazione macro
|
|
Dim MacroFeatureWndVM As New MacroFeatureWndVM()
|
|
Dim MacroFeatureWnd As New MacroFeatureWndV(Application.Current.MainWindow, MacroFeatureWndVM)
|
|
If MacroFeatureWnd.ShowDialog() Then
|
|
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' MacroFeature
|
|
|
|
#Region "AddFeature"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property AddFeature_Command As ICommand
|
|
Get
|
|
If m_cmdAddFeature Is Nothing Then
|
|
m_cmdAddFeature = New Command(AddressOf AddFeature)
|
|
End If
|
|
Return m_cmdAddFeature
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub AddFeature(ByVal param As Object)
|
|
If IsNothing(Map.refProjManagerVM.CurrProj) Then Return
|
|
If IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart) Then Return
|
|
' apro finestra di definizione nuova feature
|
|
Dim AddFeatureWndVM As New AddFeatureWndVM()
|
|
Dim AddFeatureWnd As New AddFeatureWndV(Application.Current.MainWindow, AddFeatureWndVM)
|
|
If AddFeatureWnd.ShowDialog() Then
|
|
Dim NewFeat As BTLFeatureM
|
|
Dim nNewFeatureId As Integer = 0
|
|
Dim bMacroFlag As Boolean = False
|
|
' verifico se una Macro è selezionata
|
|
If AddFeatureWndVM.MacroList.Count > 0 AndAlso AddFeatureWndVM.nSelMacro >= 0 Then
|
|
' Creo nuova feature sulla base della Macro selezionata
|
|
' Creo table e setto variabili
|
|
EgtLuaCreateGlobTable("MACRO")
|
|
EgtLuaSetGlobNumVar("MACRO.L", Map.refProjectVM.BTLStructureVM.SelBTLPart.dBtlL)
|
|
EgtLuaSetGlobNumVar("MACRO.W", Map.refProjectVM.BTLStructureVM.SelBTLPart.dBtlW)
|
|
EgtLuaSetGlobNumVar("MACRO.H", Map.refProjectVM.BTLStructureVM.SelBTLPart.dBtlH)
|
|
EgtLuaSetGlobIntVar("MACRO.PROCID", Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLPartM.NewProcId())
|
|
Dim bOk = EgtLuaExecFile(AddFeatureWndVM.m_MacroFilePathList(AddFeatureWndVM.nSelMacro))
|
|
' Leggo variabili
|
|
EgtLuaGetGlobIntVar("MACRO.FEATUREID", nNewFeatureId)
|
|
' Reset lua
|
|
EgtLuaResetGlobVar("MACRO")
|
|
If Not bOk Then
|
|
MessageBox.Show("Errore nell'esecuzione del file Macro!", "Errore")
|
|
Return
|
|
End If
|
|
bMacroFlag = True
|
|
Else
|
|
' Creo nuova feature (Macro non selezionata)
|
|
NewFeat = BTLFeatureM.CreateBTLFeature(AddFeatureWndVM.nSelPRC.nPRC, AddFeatureWndVM.nSelPRC.nGRP, AddFeatureWndVM.nSelPRC.nSIDE)
|
|
NewFeat.SetDefaultValues()
|
|
Dim vPar() As Double = Nothing
|
|
Dim sPar As String = String.Empty
|
|
NewFeat.CalcParamArray(vPar, sPar)
|
|
' aggiorno la feature con nuovo valore
|
|
EgtBeamSetPart(Map.refProjectVM.BTLStructureVM.SelBTLPart.nPartId)
|
|
nNewFeatureId = EgtBeamAddProcess(NewFeat.nSelGRP, NewFeat.nPRC, NewFeat.nSelSIDE, "", Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLPartM.NewProcId(), New Frame3d(), vPar, sPar)
|
|
bMacroFlag = False
|
|
End If
|
|
' se è stata creata
|
|
If nNewFeatureId <> GDB_ID.NULL Then
|
|
' la aggiungo a struttura BTL corrente
|
|
NewFeat = BTLFeatureM.CreateBTLFeature(Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLPartM, nNewFeatureId)
|
|
If Not bMacroFlag Then NewFeat.SetDefaultValues()
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLPartM.AddBTLFeature(NewFeat)
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.FirstOrDefault(Function(x) x.BTLFeatureM Is NewFeat)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' AddFeature
|
|
|
|
#Region "RemoveFeature"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property RemoveFeature_Command As ICommand
|
|
Get
|
|
If m_cmdRemoveFeature Is Nothing Then
|
|
m_cmdRemoveFeature = New Command(AddressOf RemoveFeature)
|
|
End If
|
|
Return m_cmdRemoveFeature
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub RemoveFeature()
|
|
If IsNothing(Map.refProjManagerVM.CurrProj) Then Return
|
|
If EgtBeamEraseProcess(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM.nFeatureId) Then
|
|
' rimuovo dalla lista pezzi
|
|
Dim Index As Integer = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.IndexOf(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM)
|
|
If Index = 0 Then
|
|
If Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.Count > 0 Then
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList(0)
|
|
Else
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Nothing
|
|
End If
|
|
ElseIf Index = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.Count - 1 Then
|
|
If Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.Count > 1 Then
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList(Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.Count - 2)
|
|
Else
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Nothing
|
|
End If
|
|
Else
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList(Index - 1)
|
|
End If
|
|
Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.RemoveAt(Index)
|
|
EgtDraw()
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' RemoveFeature
|
|
|
|
#End Region ' COMMANDS
|
|
|
|
End Class
|