Files
OmagVIEWPlus/MainWindow/Part.vb
T
Nicola Pievani 98b6563e57 OmagVIEWPlus 2.2k1:
-> verificate coordinate di prelievo e deposito (Tab1 e Tab2)
-> scatta foto
-> gestione di preparazione pallet (nesting 1d)
-> gestione mancato vuoto su tavola 1
-> gestione di mancato vuoto tavola 2.
2020-11-20 19:48:51 +00:00

592 lines
23 KiB
VB.net

Imports EgtUILib
Imports EgtWPFLib5
Imports System.IO
Public Class Part
Inherits VMBase
#Region "PROPERTIES"
' posizione tavola rispetto ad origine macchina
Private m_ptTable1 As New Point3d
Public ReadOnly Property ptTable1 As Point3d
Get
Return m_ptTable1
End Get
End Property
' Dimensioni minime del rettangolo che circonda il pezzo
Private m_MinRectY As Double
Public Property MinRectY As Double
Get
Return m_MinRectY
End Get
Set(value As Double)
m_MinRectY = value
End Set
End Property
Private m_MinRectX As Double
Public Property MinRectX As Double
Get
Return m_MinRectX
End Get
Set(value As Double)
m_MinRectX = value
End Set
End Property
' numerazione del progetto
Private m_IdProject As Integer
Public ReadOnly Property IdProject As Integer
Get
Return m_IdProject
End Get
End Property
' Id gruppo: identificativo del pezzo
Private m_IdPart As Integer
Public ReadOnly Property IdPart As Integer
Get
Return m_IdPart
End Get
End Property
' Id del box che accohlierà il pezzo
Private m_IdBox As Integer = -1
Public Property IdBox As Integer
Get
Return m_IdBox
End Get
Set(value As Integer)
m_IdBox = value
PartWritePrivateProfileString(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "IdBox", m_IdBox.ToString)
End Set
End Property
' Id Warehouse dei box
Private m_enWarehouse As Warehouses = 0
Public Property enWarehouse As Warehouses
Get
Return m_enWarehouse
End Get
Set(value As Warehouses)
m_enWarehouse = value
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "IdWarehouse", CInt(m_enWarehouse))
End Set
End Property
' definsce se il pezzo è l'ultimo del progetto
Private m_IsLast As Boolean
Public ReadOnly Property IsLast As Boolean
Get
Return m_IsLast
End Get
End Property
' indica il livello da occupare nel pallet (partendo da 0)
Private m_nLayer As Integer = 0
Public Property nLayer As Integer
Get
Return m_nLayer
End Get
Set(value As Integer)
m_nLayer = value
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "IdLayer", CInt(m_nLayer))
End Set
End Property
' se pezzo inserito nell'elenco dei pezzi da scaricare dopo il Nesting
Private m_bInsert As Boolean = False
Public Property bInsert As Boolean
Get
Return m_bInsert
End Get
Set(value As Boolean)
m_bInsert = value
End Set
End Property
' offsetY rispetto allo zero del pallet
Private m_OffsetPartY As Double = 0
Public Property dOffestPartY As Double
Get
Return m_OffsetPartY
End Get
Set(value As Double)
m_OffsetPartY = value
PartWritePrivateProfileDouble(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "OffsetY", m_OffsetPartY)
End Set
End Property
' coordinate del pezzo ripsetto alla tavola
Private m_CenterPartTable As New Point3d
Public ReadOnly Property CeneterPartTable As Point3d
Get
Return m_CenterPartTable
End Get
End Property
' posizione angolare del pezzo
Private m_DegAngOnTable As Double = 0
Public ReadOnly Property DegAngOnTable As Double
Get
Return m_MoveTable1.m_dAngRotDeg
End Get
End Property
' altezza del pezzo
Private m_Height As Double
Public ReadOnly Property Height As Double
Get
Return m_Height
End Get
End Property
Public Sub SetHeight(dHeight As Double)
m_Height = dHeight
End Sub
' salvo localmente le informazioni relative all'pezzo sulla tavola 1
Private m_MoveTable1 As New RawMoveData
Public ReadOnly Property MoveTable1 As RawMoveData
Get
Return m_MoveTable1
End Get
End Property
' salvo localmente le informazioni relative all'pezzo sulla tavola 2
Private m_MoveTable2 As New RawMoveData
Public ReadOnly Property MoveTable2 As RawMoveData
Get
Return m_MoveTable2
End Get
End Property
#End Region ' PROPERIES
#Region "STATES"
' inidica la posizione attuale del pezzo-> di default ON_TABLE
Private m_enPlace As Place
Public Property enPlace As Place
Get
Return m_enPlace
End Get
Set(value As Place)
m_enPlace = value
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, ConstIni.K_PLACE, CInt(m_enPlace))
End Set
End Property
' indica lo stato attuale del pezzo-> di default GOOD
Private m_enStatus As StatusPart
Public Property enStatus As StatusPart
Get
Return m_enStatus
End Get
Set(value As StatusPart)
m_enStatus = value
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, ConstIni.K_STATUS, CInt(m_enStatus))
End Set
End Property
' indica il tipo di scarico previsto per il pezzo
Private m_enUnloading As Unloading
Public Property enUnloading As Unloading
Get
Return m_enUnloading
End Get
Set(value As Unloading)
m_enUnloading = value
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, ConstIni.K_UNLOADING, CInt(m_enUnloading))
End Set
End Property
#End Region ' STATES
#Region "CONSTUCTOR"
Sub New(nIdPart As Integer, nProjId As Integer)
SetIdPart(nIdPart)
SetIdProject(nProjId)
' -> MyUpdateVacuumsForUnloading: tavolo
m_enPlace = Place.ON_TABLE
m_enStatus = StatusPart.GOOD
m_enUnloading = Unloading.AUTOMATIC
m_IsLast = False
End Sub
#End Region 'CONSTUCTOR
#Region "METHODS"
' verifico che l'id del progetto sia un intero
Public Sub SetIdProject(nIdProject As Integer)
If IsNumeric(nIdProject) Then
m_IdProject = nIdProject
End If
End Sub
' verifico che l'id del pezzo sia un un numero
Public Sub SetIdPart(nIdPart As Integer)
If IsNumeric(nIdPart) Then
m_IdPart = nIdPart
End If
End Sub
' verifico che l'Id del box sia un numero
Public Sub SetIdBox(nIdBox As Integer)
If IsNumeric(nIdBox) Then
m_IdBox = nIdBox
End If
End Sub
Public Sub SetWareHouse(IdWarehouse As Integer)
If IsNumeric(IdWarehouse) Then
m_enWarehouse = CType(IdWarehouse, Warehouses)
End If
End Sub
Public Sub SetIsLast(bIsLast As Boolean)
m_IsLast = bIsLast
End Sub
Public Sub SetLayer(IdLayer As Integer)
m_nLayer = IdLayer
End Sub
Public Sub SetOffsetY(dOffsetY As Double)
m_OffsetPartY = dOffsetY
End Sub
' cordinate del centro del pezzo rispetto alla tavola
Public Sub SetCenterPartTable(ptCenter As Point3d)
' salvo le coordinate di riferimento della tavola
m_CenterPartTable = GetPointInTableRef(ptCenter, m_ptTable1)
End Sub
' coordinate del centro del rettangolo rispetto alla tavola
Public Function GetPointOnTable1(ptCenter As Point3d) As Point3d
Dim ptResult As New Point3d()
ptResult.x = ptCenter.x - m_ptTable1.x
ptResult.y = ptCenter.y - m_ptTable1.y
ptResult.z = ptCenter.z - m_ptTable1.z
Return ptResult
End Function
' salvo le info del pezzo sulla tavola 1
Public Sub SetInfoTable1(RawData As RawMoveData, dDimz As Double)
m_MoveTable1 = RawData
SetHeight(dDimz)
End Sub
' salvo le info del pezzo sulla tavola 2
Public Sub SetInfoTable2(RawData As RawMoveData)
m_MoveTable2 = RawData
End Sub
' restituisce la poszione della testa
Public Function GetUnloadingPosTable1() As Point3d
Dim ptResult As Point3d
ptResult.x = GetPointOnTable1(m_MoveTable1.m_ptCenMinRect).x + m_MoveTable1.m_vtDelta.x
ptResult.y = GetPointOnTable1(m_MoveTable1.m_ptCenMinRect).y + m_MoveTable1.m_vtDelta.y
ptResult.z = m_Height
Return ptResult
End Function
' quando calcolo le posizioni delle ventose devo recuperare queste info
Public Function GetloadingPosStrip(ByRef dAngC As Double) As Point3d
Dim ptUnLoad As New Point3d
Dim C_Ang As Double = 0
If m_MoveTable1.m_bCupsSecondSel Then
' controruoto e mi porto in posizione posizione di scarico
C_Ang = -m_MoveTable1.m_dAngRotDeg - 90
m_MoveTable1.m_vtDelta.Rotate(Vector3d.Z_AX, -m_MoveTable1.m_dAngRotDeg - 90)
' verifico che le vetose siano sopra alla tavola
If m_MoveTable1.m_vtDelta.y > 0 Then
m_MoveTable1.m_vtDelta.Rotate(Vector3d.Z_AX, 180)
dAngC = 180 + dAngC
End If
Else
' ruoto gli offset per allinearmi al tappeto di scarico
C_Ang = -m_MoveTable1.m_dAngRotDeg
m_MoveTable1.m_vtDelta.Rotate(Vector3d.Z_AX, -m_MoveTable1.m_dAngRotDeg)
If m_MoveTable1.m_vtDelta.x > 0 Then
m_MoveTable1.m_vtDelta.Rotate(Vector3d.Z_AX, 180)
dAngC = 180 + dAngC
End If
End If
Dim vtResult As Vector3d = m_MoveTable1.m_vtDelta - m_MoveTable1.m_vtRect
' se la distanza x è minore della larghezza della ventosa correggo
If Not m_MoveTable1.m_bCupsSecondSel And vtResult.x + Map.refUnloadingAreaVM.VacuumDimX / 2 > 0 Then
ptUnLoad.x = -Map.refUnloadingAreaVM.VacuumDimX / 2
Else
ptUnLoad.x = vtResult.x
End If
' se la distanza y è minore della lunghezza della ventosa allo ra correggo
'If vtResult.y + Map.refUnloadingAreaVM.VacuumDimY / 2 > 0 Then
' ptUnLoad.y = -Map.refUnloadingAreaVM.VacuumDimY / 2
'Else
ptUnLoad.y = vtResult.y
'End If
ptUnLoad.z = m_Height
Return ptUnLoad
End Function
' restuisce la poszione di prelievo dalla rulliera
Public Function GetLoadingPosRuller() As Point3d
Dim ptLoad As New Point3d
' assegno come punto di riferimento l'angolo in alto a sinistra del pezzo
Dim vtRectTopLeft As New Vector3d(-m_MoveTable2.m_vtRect.x, m_MoveTable2.m_vtRect.y, 0)
Dim vtResult As Vector3d = m_MoveTable2.m_vtDelta - vtRectTopLeft
ptLoad.x = vtResult.x
ptLoad.y = vtResult.y
ptLoad.z = m_Height
Return ptLoad
End Function
' restituisce la posizione di deposito sul pallet (riceve l'offset attuale del pellet in funzione dei pezzi già caricati)
Public Function GetUnloadingPosBox(vtCurrOffset As Vector3d, Optional ByVal bRotate As Boolean = False) As Point3d
Dim ptUnload As New Point3d
Dim vtCurrDelta As Vector3d = m_MoveTable2.m_vtDelta
' se sto per scaricare nei pallet dispari allora girare la testa
If bRotate Then
vtCurrDelta.Rotate(Vector3d.Z_AX, 180)
End If
'correggo il vettore Delta a causa di un pivot dell'asse di rotazione
Dim vtResult As Vector3d = vtCurrDelta + vtCurrOffset
ptUnload.x = vtResult.x
ptUnload.y = vtResult.y
ptUnload.z = vtCurrOffset.z
Return ptUnload
End Function
' restituisce la posizione di deposito sul pallet (riceve l'offset attuale del pellet in funzione dei pezzi già caricati)
Public Function GetUnloadingPosRack(vtCurrOffset As Vector3d) As Point3d
Dim ptUnload As New Point3d
Dim OffsetX As Double = vtCurrOffset.z
vtCurrOffset.z = m_Height
Dim vtResult As Vector3d = vtCurrOffset
vtResult.Rotate(Vector3d.Z_AX, +90)
vtResult.Rotate(Vector3d.Y_AX, Map.refUnloadingAreaVM.AngRack)
ptUnload.x = OffsetX + vtResult.x
ptUnload.y = vtResult.y
ptUnload.z = vtResult.z
Return ptUnload
End Function
' restituisce se la ventosa deve essere attivata
Public Function GetVacuumLoadingStatus(sVacuum As String, Optional sTable As String = "Table1") As Integer
If sTable = "Table1" Then
If m_MoveTable1.m_sCups.Contains(sVacuum) Then
Return 1
End If
Else
If m_MoveTable2.m_sCups.Contains(sVacuum) Then
Return 1
End If
End If
Return 0
End Function
Public Function SavePart(nIdexPart As Integer) As Boolean
' scrivo l'elenco dei part presenti nel file
'PartWritePrivateProfileString(m_IdProject, "PartList", "IdPart" & nIdexPart.ToString, m_IdPart.ToString)
' stato della piastrella
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, ConstIni.K_STATUS, CInt(m_enStatus))
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, ConstIni.K_PLACE, CInt(m_enPlace))
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, ConstIni.K_UNLOADING, CInt(m_enUnloading))
' IdWarehouse
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "IdWarehouse", CInt(m_enWarehouse))
' IdBox
PartWritePrivateProfileInt(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "IdBox", m_IdBox)
' altezza della piastrella
PartWritePrivateProfileDouble(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "Height", m_Height)
' posizione della tavola
PartWritePrivateProfilePoint(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "Table1ref", m_ptTable1)
' posizione centro pezzo sulla tavola
PartWritePrivateProfilePoint(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "CenterPartTable1", m_CenterPartTable)
' info Table 1
For nIndex = 1 To 2
Dim objRawMoveData As New RawMoveData
If nIndex = 1 Then
objRawMoveData = m_MoveTable1
Else
objRawMoveData = m_MoveTable2
End If
' CenterMinRect
PartWritePrivateProfilePoint(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "CenterMinRect" & nIndex.ToString, objRawMoveData.m_ptCenMinRect)
' RotAngDeg
PartWritePrivateProfileDouble(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "RotAngDeg" & nIndex.ToString, objRawMoveData.m_dAngRotDeg)
' Delta
PartWritePrivateProfileVector(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "Delta" & nIndex.ToString, objRawMoveData.m_vtDelta)
' Cups
PartWritePrivateProfileString(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "Cups" & nIndex.ToString, objRawMoveData.m_sCups)
' Rect
PartWritePrivateProfileVector(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "Rect" & nIndex.ToString, objRawMoveData.m_vtRect)
' DirX
PartWritePrivateProfileVector(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "DirX" & nIndex.ToString, objRawMoveData.m_vtDirX)
' OrtoDirX
PartWritePrivateProfileVector(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "OrtoDirX" & nIndex.ToString, objRawMoveData.m_vtOrtoDirX)
' RawAngRotDeg
PartWritePrivateProfileDouble(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "RawAngRotDeg" & nIndex.ToString, objRawMoveData.m_dRawAngRotDeg)
' RawMove
PartWritePrivateProfileVector(m_IdProject, ConstIni.S_PART & m_IdPart.ToString, "RawMove" & nIndex.ToString, objRawMoveData.m_vtRawMove)
Next
Return True
End Function
Shared Function GetListOfPart() As Boolean
' recupero l'elenco dei file da caricare dal file Warehouese.ini
Dim sVal As String = String.Empty
WarehauseGetPrivateProfileString("Warehouse", "IdProj", "", sVal)
If String.IsNullOrEmpty(sVal) Then
Return False
End If
' separo l'elenco di progetti
Dim sItemIdProj As String() = sVal.Split(","c)
For Each ItemId In sItemIdProj
' costruisco il nome del file
Dim sFile As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\PartList" & ItemId.Trim & ".ini"
' verifico che esista il file
If Not My.Computer.FileSystem.FileExists(sFile) Then
Continue For
End If
' converto l'Id del progetto in un intero
Dim nIdProj As Integer
If Not IsNumeric(ItemId) Then
Continue For
End If
nIdProj = CInt(ItemId)
Dim objProj As New Proj(nIdProj)
objProj.enStatus = StatusProj.LOADING
If Map.refMainWindowVM.MainWindowM.nProjInd < 1 Then
Map.refMainWindowVM.MainWindowM.SetProjInd(nIdProj)
Map.refUnloadingAreaVM.IdProjTable2 = objProj
End If
Map.refMainWindowVM.MainWindowM.ProjIndList.Add(objProj)
' recupero l'elenco dei pezzi contenuti nel progetto
Dim sParts As String = String.Empty
Dim sValue As String = String.Empty
Dim nInd As Integer = 1
While PartGetPrivateProfileString(nIdProj, "PartList", "IdPart" & nInd.ToString, "0", sValue) > 1
If nInd = 1 Then
sParts = sValue
Else
sParts = sParts & "," & sValue
End If
nInd = nInd + 1
End While
Dim sItemIdPart As String() = sParts.Split(","c)
Dim bIsWorking As Boolean = False
' leggo le info per ogni part del progetto
For Each ItemPart In sItemIdPart
' converto l'Id del Part in un intero
Dim nIdPart As Integer
If Not IsNumeric(ItemPart) Then
Continue For
End If
nIdPart = CInt(ItemPart)
Dim sIpAppName As String = "Part" & Trim(ItemPart)
' inizio la lettura dei dati della piastrella
Dim LocalPart As New Part(nIdPart, nIdProj)
' stato della piastrella
Dim nValue As Integer = 0
LocalPart.enStatus = CType(PartGetPrivateProfileIntger(nIdProj, ConstIni.S_PART & nIdPart.ToString, ConstIni.K_STATUS, nValue), StatusPart)
LocalPart.enPlace = CType(PartGetPrivateProfileIntger(nIdProj, ConstIni.S_PART & nIdPart.ToString, ConstIni.K_PLACE, nValue), Place)
LocalPart.enUnloading = CType(PartGetPrivateProfileIntger(nIdProj, ConstIni.S_PART & nIdPart.ToString, ConstIni.K_UNLOADING, nValue), Unloading)
' posizione della tavola
PartGetPrivateProfilePoint(nIdProj, ConstIni.S_PART & nIdPart.ToString, "Table1ref", LocalPart.m_ptTable1)
' posizione del pezzo sulla tavola
PartGetPrivateProfilePoint(nIdProj, ConstIni.S_PART & nIdPart.ToString, "CenterPartTable1", LocalPart.m_CenterPartTable)
' IdWarehouse
Dim nIdWarehouse As Integer = 0
LocalPart.SetWareHouse(PartGetPrivateProfileIntger(nIdProj, ConstIni.S_PART & nIdPart.ToString, "IdWarehouse", nIdWarehouse))
' IdBox
Dim nIdBox As Integer = -1
LocalPart.SetIdBox(PartGetPrivateProfileIntger(nIdProj, ConstIni.S_PART & nIdPart.ToString, "IdBox", nIdBox))
' altezza della piastrella
Dim dHeight As Double = 0
LocalPart.SetHeight(PartGetPrivateProfileDouble(nIdProj, ConstIni.S_PART & nIdPart.ToString, "Height", dHeight))
' IsLast
Dim bIsLats As Boolean = sItemIdPart(nInd - 2) = ItemPart
LocalPart.SetIsLast(bIsLats)
' nLayer
Dim nIdLayer As Integer = 0
LocalPart.SetLayer(PartGetPrivateProfileIntger(nIdProj, ConstIni.S_PART & nIdPart.ToString, "IdLayer", nIdLayer))
' OffsetPartY
Dim dOffsetY As Double = 0
LocalPart.SetOffsetY(PartGetPrivateProfileDouble(nIdProj, ConstIni.S_PART & nIdPart.ToString, "OffsetY", dOffsetY))
' info Table 1
For nIndex As Integer = 1 To 2
Dim objRawMoveData As New RawMoveData
If nIndex = 1 Then
objRawMoveData = LocalPart.m_MoveTable1
Else
objRawMoveData = LocalPart.m_MoveTable2
End If
' RawMove
PartGetPrivateProfileVector(nIdProj, ConstIni.S_PART & nIdPart.ToString, "RawMove" & nIndex.ToString, objRawMoveData.m_vtRawMove)
' Delta
PartGetPrivateProfileVector(nIdProj, ConstIni.S_PART & nIdPart.ToString, "Delta" & nIndex.ToString, objRawMoveData.m_vtDelta)
' Rect
PartGetPrivateProfileVector(nIdProj, ConstIni.S_PART & nIdPart.ToString, "Rect" & nIndex.ToString, objRawMoveData.m_vtRect)
LocalPart.MinRectX = objRawMoveData.m_vtRect.x * 2
LocalPart.MinRectY = objRawMoveData.m_vtRect.y * 2
' DirX
PartGetPrivateProfileVector(nIdProj, ConstIni.S_PART & nIdPart.ToString, "DirX" & nIndex.ToString, objRawMoveData.m_vtDirX)
' OrtoDirX
PartGetPrivateProfileVector(nIdProj, ConstIni.S_PART & nIdPart.ToString, "OrtoDirX" & nIndex.ToString, objRawMoveData.m_vtOrtoDirX)
' CenterMinRect
PartGetPrivateProfilePoint(nIdProj, ConstIni.S_PART & nIdPart.ToString, "CenterMinRect" & nIndex.ToString, objRawMoveData.m_ptCenMinRect)
' Cups
PartGetPrivateProfileString(nIdProj, ConstIni.S_PART & nIdPart.ToString, "Cups" & nIndex.ToString, "", objRawMoveData.m_sCups)
' RotAngDeg
PartGetPrivateProfileDouble(nIdProj, ConstIni.S_PART & nIdPart.ToString, "RotAngDeg" & nIndex.ToString, objRawMoveData.m_dAngRotDeg)
' RawAngRotDeg
PartGetPrivateProfileDouble(nIdProj, ConstIni.S_PART & nIdPart.ToString, "RawAngRotDeg" & nIndex.ToString, objRawMoveData.m_dRawAngRotDeg)
Next
Map.refUnloadingAreaVM.ListPart.Add(LocalPart)
' terminata la costruzione della lista dei pezzi, genero la lista per i box del progetto corrente
For Each ItemWarehouse In Map.refUnloadingAreaVM.WarehouseList
' ricavo il magazzino corrente
If ItemWarehouse.Id = CType(nIdWarehouse, Warehouses) Then
For Each ItemBox In ItemWarehouse.Boxes
ItemBox.State = States.LOADING
If ItemBox.Id = LocalPart.IdBox Then
ItemBox.MyListPart.Add(LocalPart)
End If
Next
End If
Next
' verifico se almeno un pezzo del progetto è stato depositato nel magazzino
If LocalPart.enPlace <> Place.ON_MOTOR_RULLER AndAlso LocalPart.enPlace <> Place.ON_TABLE Then
bIsWorking = True
End If
Next
If bIsWorking Then
objProj.enStatus = StatusProj.WORKING
Else
objProj.enStatus = StatusProj.LOADING
End If
Next
' se esiste attivo il magazzino del primo progetto caricato
If Map.refUnloadingAreaVM.ListPart.Count > 0 Then
Dim CurrWarehouse As WarehouseVM = Map.refUnloadingAreaVM.GetWarehouse(Map.refUnloadingAreaVM.ListPart(0).enWarehouse)
If Not IsNothing(CurrWarehouse) Then Map.refUnloadingAreaVM.SetActiveWarehouse(CurrWarehouse.Id)
'CurrWarehouse.SetState(States.AVAILABLE)
'CurrWarehouse.NotifyPropertyChanged("IsEnabled")
End If
OutLogProcess("GetListOfPart() -> Recuperato i progetti: PartList" & sVal & ".ini")
Return True
End Function
#End Region ' METHODS
End Class