EgtCAM5 :

- Aggiornamento attrezzaggio con lettura nuovi Lua.
This commit is contained in:
Emmanuele Sassi
2017-01-18 09:42:22 +00:00
parent 20c238d096
commit 893dda5b6a
4 changed files with 496 additions and 203 deletions
+67
View File
@@ -614,6 +614,50 @@
</Setter>
</Style>
<Style x:Key="EgtCAM5_SetUpToggleButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
<Setter Property="Background" Value="{StaticResource Button.Static.Background}"/>
<Setter Property="BorderBrush" Value="{StaticResource Button.Static.Border}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Margin" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border x:Name="border" CornerRadius="3" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="Button.IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.MouseOver.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.MouseOver.Border}"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Pressed.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
</Trigger>
<Trigger Property="IsChecked" Value="true">
<Setter Property="Background" TargetName="border" Value="{Binding ExitBtnBackgroundCol}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Pressed.Border}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.Background}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.Border}"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Button.Disabled.Foreground}"/>
<Setter Property="OpacityMask" Value="#54707070"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="ExpanderStyle" TargetType="{x:Type Expander}" BasedOn="{StaticResource {x:Type Expander}}">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Background" Value="Transparent"/>
@@ -815,4 +859,27 @@
<!-- ______________________________________________________________________________________________________________________________________________ -->
<!-- ItemsControl with Horizontal ScrollViewer -->
<Style x:Key="HorizontalScrollViewerItemsControlStyle" TargetType="{x:Type ItemsControl}">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ItemsControl}">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled" CanContentScroll="True">
<ItemsPresenter/>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- ______________________________________________________________________________________________________________________________________________ -->
</ResourceDictionary>
+3
View File
@@ -7,6 +7,9 @@ Public Module IniFile
Friend m_LastSubEntityId As Integer
Friend EgaltechBlue1 As New SolidColorBrush(Color.FromArgb(255, 77, 132, 196))
Friend EgaltechGreen As New SolidColorBrush(Color.FromArgb(255, 0, 255, 0))
Friend EgaltechRed As New SolidColorBrush(Color.FromArgb(255, 255, 0, 0))
Friend EgaltechYellow As New SolidColorBrush(Color.FromArgb(255, 255, 255, 0))
Friend ReferenceContactColRed As New Color3d(255, 0, 0)
Friend ReferenceContactColGreen As New Color3d(0, 255, 0)
+76 -64
View File
@@ -3,7 +3,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EgtCAM5"
xmlns:EgtWPFLib5="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5"
Title="{Binding Title}" Icon="/Resources/EgtCAM5.ico"
Title="{Binding TitleMsg}" Icon="/Resources/EgtCAM5.ico"
TitleBarBrush="{StaticResource EgaltechBlue1}"
BorderBrush="{StaticResource EgaltechBlue1}"
WindowStyle="None" ResizeMode="NoResize" TitleBarHeight="30" IsResizable="False"
@@ -23,9 +23,10 @@
</Grid.RowDefinitions>
<UniformGrid Columns="3">
<Button Content="Apply" Command="{Binding ApplyCommand}" Height="30"/>
<Button Content="Archive" Command="{Binding ArchiveCommand}"/>
<Button Content="Retrieves" Command="{Binding RetrievesCommand}"/>
<Button Content="{Binding ApplyMsg}" Command="{Binding ApplyCommand}" Height="30"/>
<Button Content="{Binding ArchiveMsg}" Command="{Binding ArchiveCommand}"/>
<Button Content="{Binding RetrievesMsg}" Command="{Binding RetrievesCommand}"
CommandParameter="{Binding SelectedItem,ElementName=ToolsTreeView}"/>
</UniformGrid>
<TreeView Grid.Row="1" Name="ToolsTreeView" ItemsSource="{Binding ToolsList}">
@@ -33,7 +34,6 @@
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<!--<Setter Property="IsEnabled" Value="{Binding IsEnabled, Mode=TwoWay}" />-->
</Style>
</TreeView.ItemContainerStyle>
@@ -76,71 +76,83 @@
</Grid>
<ItemsControl Grid.Column="1" ItemsSource="{Binding PositionGroupList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding TcPosImage}" MaxWidth="300"/>
<ItemsControl Grid.Column="1" ItemsSource="{Binding PositionList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<ItemsControl Grid.Column="1" ItemsSource="{Binding PositionGroupList}"
Style="{StaticResource HorizontalScrollViewerItemsControlStyle}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding TcPos}"/>
<ItemsControl Grid.Column="1" ItemsSource="{Binding ExitToolAssociationList}"
HorizontalAlignment="Left">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<!--<WrapPanel Orientation="Horizontal" MaxWidth="200"/>-->
<UniformGrid />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="10,0,0,5">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<ItemsControl Grid.Column="1" ItemsSource="{Binding PositionList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<ToggleButton Content="{Binding ExitPar}"
CommandParameter="{Binding SelectedItem,ElementName=ToolsTreeView}"
IsChecked="{Binding IsOccupied}" Height="25" Width="25" Margin="0,0,0,5"
Command="{Binding SetUpToolCommand}"
IsEnabled="{Binding IsValidPosition}">
</ToggleButton>
<Border Grid.Row="1" BorderBrush="{StaticResource EgaltechBlue1}"
BorderThickness="1">
<TextBlock Text="{Binding Tool.Name}" Margin="3"/>
</Border>
<TextBlock Text="{Binding TcPos}"/>
<ItemsControl Grid.Column="1" ItemsSource="{Binding ExitToolAssociationList}"
HorizontalAlignment="Left">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<!--<WrapPanel Orientation="Horizontal" MaxWidth="200"/>-->
<UniformGrid />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="10,0,0,5">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ToggleButton Content="{Binding ExitPar}"
CommandParameter="{Binding SelectedItem,ElementName=ToolsTreeView}"
IsChecked="{Binding IsOccupied}" Height="25" Width="25" Margin="0,0,0,5"
Command="{Binding SetUpToolCommand}"
IsEnabled="{Binding IsEnabledPos}"
Background="{Binding ExitBtnBackgroundCol}"
Style="{StaticResource EgtCAM5_SetUpToggleButton}"/>
<Border Grid.Row="1" BorderBrush="{StaticResource EgaltechBlue1}"
BorderThickness="1">
<TextBlock Text="{Binding Tool.Name}" Margin="3"/>
</Border>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Grid>
</EgtWPFLib5:EgtCustomWindow>
+350 -139
View File
@@ -36,16 +36,38 @@ Namespace EgtCAM5
End Set
End Property
'' Lista delle posizioni
'Private m_PositionList As New ObservableCollection(Of Position)
'Public Property PositionList As ObservableCollection(Of Position)
' Get
' Return m_PositionList
' End Get
' Set(value As ObservableCollection(Of Position))
' m_PositionList = value
' End Set
'End Property
Public ReadOnly Property TcPosImage As String
Get
Dim sImagePath As String = IniFile.m_sMachinesRoot & "\" & IniFile.m_sMachineName & "\SetUp\TcPosImage.png"
Return If(File.Exists(sImagePath), sImagePath, String.Empty)
End Get
End Property
#Region "Messages"
Public ReadOnly Property TitleMsg As String
Get
Return EgtMsg(MSG_SETUP + 1)
End Get
End Property
Public ReadOnly Property ApplyMsg As String
Get
Return EgtMsg(MSG_SETUP + 2)
End Get
End Property
Public ReadOnly Property ArchiveMsg As String
Get
Return EgtMsg(MSG_SETUP + 3)
End Get
End Property
Public ReadOnly Property RetrievesMsg As String
Get
Return EgtMsg(MSG_SETUP + 4)
End Get
End Property
#End Region
' Definizione comandi
Private m_cmdApply As ICommand
@@ -54,16 +76,25 @@ Namespace EgtCAM5
Private m_cmdCloseSetUp As ICommand
Sub New()
ExitToolAssociation.sh_ToolsList = m_ToolsList
LoadMachineTools()
LoadMachinePositions()
' rendo accessibile la lista posizioni agliutensili per poterle attivare e disattivare
' rendo accessibile la lista posizioni a famiglie ed utensili per poterle attivare e disattivare
' (probabilmente da cambiare passandogli il riferimento alla creazione dell'utensile per non avere parametro shared)
FamilyToolItem.m_PositionGroupList = m_PositionGroupList
ToolItem.m_PositionGroupList = m_PositionGroupList
' rendo accessibile le liste utensili e posizioni alle uscite
ExitToolAssociation.sh_ToolsList = m_ToolsList
ExitToolAssociation.sh_PositionGroupList = m_PositionGroupList
' carico Lua che contiene le funzioni per ottenere le posizioni valide dell'utensile selezionato,
' e testa e uscita dell'utensile attrezzato
EgtLuaExecFile(IniFile.m_sCurrMachScriptsDirPath & "\" & SETUP_LUA)
' carico lista utensili
LoadMachineTools()
' carico lista posizioni
LoadMachinePositions()
' Se esiste almeno una famiglia di utensili, la seleziono
If ToolsList.Count > 0 Then
ToolsList(0).IsSelected = True
ToolsList(0).NotifyPropertyChanged("IsSelected")
End If
End Sub
''' <summary>
@@ -123,12 +154,6 @@ Namespace EgtCAM5
End While
End If
Next
' Se esiste almeno una famiglia di utensili, la seleziono
If ToolsList.Count > 0 Then
ToolsList(0).IsSelected = True
ToolsList(0).NotifyPropertyChanged("IsSelected")
End If
End Sub
''' <summary>
@@ -173,24 +198,42 @@ Namespace EgtCAM5
Exit For
End If
Next
If Not bFound Then
' ne genero uno nuovo dalla configurazione nel file ini della macchina
Dim sTcPos As String = String.Empty
Dim sHead As String = String.Empty
Dim nGroup As Integer = 0
Dim Index = 1
While GetPrivateProfileSetUpPosition(S_SETUP, K_POS & Index, sTcPos, sHead, nGroup)
' se l'indice del gruppo è valido
If VerifyIndexValidity(nGroup) Then
m_PositionGroupList(nGroup - 1).PositionList.Add(New Position(sTcPos, sHead, EgtGetHeadExitCount(sHead)))
End If
Dim sGroup As String = String.Empty
Dim nErr As Double = 0
Dim Index As Integer = 1
While CreateStdPosFromPosIndex(Index)
Index += 1
End While
End If
End Sub
' Funzione che dato l'indice di una posizione, la crea secondo il modello standard presente nello script Lua
Private Function CreateStdPosFromPosIndex(Index As Integer) As Boolean
Dim sTcPos As String = String.Empty
Dim sHead As String = String.Empty
Dim sGroup As String = String.Empty
Dim nErr As Double = 0
EgtLuaSetGlobNumVar("STU.INDEX", Index)
EgtLuaCallFunction("STU.GetTcPosHeadGroupFromPos")
' Leggo variabili
EgtLuaGetGlobStringVar("STU.TCPOS", sTcPos)
EgtLuaGetGlobStringVar("STU.HEAD", sHead)
EgtLuaGetGlobStringVar("STU.GROUP", sGroup)
EgtLuaGetGlobNumVar("STU.ERR", nErr)
' se l'indice del gruppo è valido
Dim nGroup As Integer = If(Integer.TryParse(sGroup.Trim("G"c), nGroup), nGroup, 0)
If VerifyIndexValidity(CInt(nGroup)) Then
m_PositionGroupList(CInt(nGroup) - 1).PositionList.Add(New Position(sTcPos, sHead, EgtGetHeadExitCount(sHead)))
End If
If nErr = 0 Then Return True
Return False
End Function
' Funzione che verifica che l'indice del gruppo sia valido, esista, e nel caso non esistesse aggiunge i gruppi necessari
Private Function VerifyIndexValidity(nGroupIndex As Integer) As Boolean
' verifico che l'indice del gruppo sia valido
@@ -285,43 +328,42 @@ Namespace EgtCAM5
End If
' non è presente la H, quindi la recupero dal modello delle posizioni nel file MachIni
Else
Dim nFakeGroup As Integer
GetPrivateProfileSetUpPosition(S_SETUP, K_POS & nIndex, sTcPos, sHead, nFakeGroup)
EgtGetHeadExitCount(sHead)
m_PositionGroupList(nGroup - 1).PositionList.Add(New Position(sTcPos, sHead, EgtGetHeadExitCount(sHead)))
CreateStdPosFromPosIndex(nIndex)
End If
End If
End Sub
' Funzione che data una T restituisce il gruppo a cui appartiene
Private Function GetGroupFromTcPos(TcPos As String, ByRef nPositionGroup As Integer) As Boolean
Dim sTcPos As String = String.Empty
Dim sHead As String = String.Empty
Dim nGroup As Integer = 0
Dim Index = 1
While GetPrivateProfileSetUpPosition(S_SETUP, K_POS & Index, sTcPos, sHead, nGroup)
If sTcPos = TcPos Then
nPositionGroup = nGroup
Return True
End If
Index += 1
End While
Private Function GetGroupFromTcPos(sTcPos As String, ByRef nGroup As Integer) As Boolean
Dim sGroup As String = String.Empty
Dim nErr As Double = 0
EgtLuaSetGlobStringVar("STU.TCPOS", sTcPos)
EgtLuaCallFunction("STU.GetGroupFromTcPos")
' Leggo variabili
EgtLuaGetGlobStringVar("STU.GROUP", sGroup)
EgtLuaGetGlobNumVar("STU.ERR", nErr)
If nErr = 0 Then
nGroup = If(Integer.TryParse(sGroup.Trim("G"c), nGroup), nGroup, 0)
Return True
End If
nGroup = 0
Return False
End Function
Private Function GetPositionFromTcPos(TcPos As String, ByRef nPosition As Integer) As Boolean
Dim sTcPos As String = String.Empty
Dim sHead As String = String.Empty
Dim nGroup As Integer = -1
Dim Index = 1
While GetPrivateProfileSetUpPosition(S_SETUP, K_POS & Index, sTcPos, sHead, nGroup)
If sTcPos = TcPos Then
nPosition = Index
Return True
End If
Index += 1
End While
Private Function GetPositionFromTcPos(sTcPos As String, ByRef nPosIndex As Integer) As Boolean
Dim sPosition As String = String.Empty
Dim nErr As Double = 0
EgtLuaSetGlobStringVar("STU.TCPOS", sTcPos)
EgtLuaCallFunction("STU.GetPosFromTcPos")
' Leggo variabili
EgtLuaGetGlobStringVar("STU.POS", sPosition)
EgtLuaGetGlobNumVar("STU.ERR", nErr)
If nErr = 0 Then
nPosIndex = If(Integer.TryParse(sPosition.Replace("Pos", ""), nPosIndex), nPosIndex, -1)
Return If(nPosIndex >= 0, True, False)
End If
nPosIndex = -1
Return False
End Function
@@ -475,7 +517,23 @@ Namespace EgtCAM5
ReadPositionString(IniIndex, sPosition)
IniIndex += 1
End While
' verifico se disabilitare questa posizione in base all'utensile correntemente selezionato
If Not TypeOf param Is ToolItem Then
' disabilito tutte le uscite tranne quelle occupate
For GroupIndex = 0 To m_PositionGroupList.Count - 1
For PosIndex = 0 To m_PositionGroupList(GroupIndex).PositionList.Count - 1
m_PositionGroupList(GroupIndex).PositionList(PosIndex).SetNotValidPos()
Next
Next
Else
Dim SelTool As ToolItem = DirectCast(param, ToolItem)
' abilito e disabilito tutte le uscite in base all'utensile selezionato
For GroupIndex = 0 To m_PositionGroupList.Count - 1
For PosIndex = 0 To m_PositionGroupList(GroupIndex).PositionList.Count - 1
m_PositionGroupList(GroupIndex).PositionList(PosIndex).SetIsValidPosFromTool(SelTool.Uuid)
Next
Next
End If
End Sub
#End Region ' RetrievesCommand
@@ -542,6 +600,8 @@ End Class
Public Class Position
Private Const INVALIDPOS As String = ""
Private m_TcPos As String
Public Property TcPos As String
Get
@@ -578,11 +638,130 @@ Public Class Position
End Set
End Property
#Region "METHODS"
Friend Sub SetIsValidPosFromTool(TUuid As String)
EgtLuaSetGlobStringVar("STU.TUUID", TUuid)
EgtLuaSetGlobStringVar("STU.TCPOS", m_TcPos)
EgtLuaCallFunction("STU.GetValidHeadExitForPos")
' Leggo variabili
Dim sHead As String = String.Empty
EgtLuaGetGlobStringVar("STU.HEAD", sHead)
Dim nExit As Double = 0
EgtLuaGetGlobNumVar("STU.EXIT", nExit)
Dim nErr As Double = 0
EgtLuaGetGlobNumVar("STU.ERR", nErr)
If nErr <> 0 Then
' disattivo tutte le uscite tranne quelle attrezzate
For ExitIndex = 0 To ExitToolAssociationList.Count - 1
If ExitToolAssociationList(ExitIndex).IsOccupied Then
ExitToolAssociationList(ExitIndex).IsEnabledPos = True
ExitToolAssociationList(ExitIndex).IsValidPos = False
Else
ExitToolAssociationList(ExitIndex).IsEnabledPos = False
End If
Next
Dim sToolName As String = String.Empty
EgtTdbGetToolFromUUID(TUuid, sToolName)
EgtOutLog("Error in setup! Tool:" & sToolName & " TcPos: " & m_TcPos)
Return
End If
' verifico se la posizione è libera o c'è un utensile attrezzato
Dim PosIsOccupied As Boolean = False
For ExitIndex = 0 To ExitToolAssociationList.Count - 1
If ExitToolAssociationList(ExitIndex).IsOccupied Then
PosIsOccupied = True
Exit For
End If
Next
' se la posizione non è valida, disattivo tutte le uscite tranne quelle attrezzate
If sHead = INVALIDPOS Then
For ExitIndex = 0 To ExitToolAssociationList.Count - 1
If ExitToolAssociationList(ExitIndex).IsOccupied Then
ExitToolAssociationList(ExitIndex).IsEnabledPos = True
ExitToolAssociationList(ExitIndex).IsValidPos = False
Else
ExitToolAssociationList(ExitIndex).IsEnabledPos = False
End If
Next
' altrimenti, se la posizione nell'attrezzaggio è vuota
ElseIf Not PosIsOccupied Then
' se l'uscita restituita esiste
If ExitToolAssociationList.Count >= nExit Then
' disattivo tutte le uscite tranne quella restituita
For ExitIndex = 0 To ExitToolAssociationList.Count - 1
If ExitIndex + 1 = nExit Then
ExitToolAssociationList(ExitIndex).IsEnabledPos = True
ExitToolAssociationList(ExitIndex).IsValidPos = True
Else
ExitToolAssociationList(ExitIndex).IsEnabledPos = False
End If
Next
' altrimenti lascio attiva solo la prima uscita
Else
ExitToolAssociationList(0).IsEnabledPos = True
For ExitIndex = 1 To ExitToolAssociationList.Count - 1
ExitToolAssociationList(ExitIndex).IsEnabledPos = False
Next
End If
' altrimenti, se le teste coincidono
ElseIf sHead = Head Then
' se l'uscita restituita è libera la attivo e disattivo tutte le altre non occupate
If Not ExitToolAssociationList(CInt(nExit) - 1).IsOccupied Then
For ExitIndex = 0 To ExitToolAssociationList.Count - 1
If ExitIndex = nExit - 1 Then
ExitToolAssociationList(ExitIndex).IsEnabledPos = True
ExitToolAssociationList(ExitIndex).IsValidPos = True
ElseIf ExitToolAssociationList(ExitIndex).IsOccupied Then
ExitToolAssociationList(ExitIndex).IsValidPos = False
Else
ExitToolAssociationList(ExitIndex).IsEnabledPos = False
End If
Next
' altrimenti le disattivo tutte tranne quelle occupate
Else
For ExitIndex = 0 To ExitToolAssociationList.Count - 1
If ExitToolAssociationList(ExitIndex).IsOccupied Then
ExitToolAssociationList(ExitIndex).IsEnabledPos = True
If ExitIndex = CInt(nExit) - 1 Then
ExitToolAssociationList(ExitIndex).IsValidPos = True
Else
ExitToolAssociationList(ExitIndex).IsValidPos = False
End If
Else
ExitToolAssociationList(ExitIndex).IsEnabledPos = False
End If
Next
End If
' altrimenti le disattivo tutte
Else
For ExitIndex = 0 To ExitToolAssociationList.Count - 1
ExitToolAssociationList(ExitIndex).IsEnabledPos = False
Next
End If
End Sub
Friend Sub SetNotValidPos()
' le disattivo tutte tranne quelle occupate
For ExitIndex = 0 To ExitToolAssociationList.Count - 1
If ExitToolAssociationList(ExitIndex).IsOccupied Then
ExitToolAssociationList(ExitIndex).IsEnabledPos = True
ExitToolAssociationList(ExitIndex).IsValidPos = Nothing
Else
ExitToolAssociationList(ExitIndex).IsEnabledPos = False
End If
Next
End Sub
#End Region ' Methods
Sub New(TcPos As String, Head As String, ExitNum As Integer)
Me.TcPos = TcPos
Me.Head = Head
For ExitIndex = 1 To ExitNum
ExitToolAssociationList.Add(New ExitToolAssociation(ExitIndex.ToString))
ExitToolAssociationList.Add(New ExitToolAssociation(ExitIndex.ToString, Me))
Next
End Sub
@@ -591,7 +770,12 @@ End Class
Public Class ExitToolAssociation
Implements INotifyPropertyChanged
' Riferimento alla lista utensili
Friend Shared sh_ToolsList As ObservableCollection(Of FamilyToolItem)
' riferimento alla lista posizioni
Friend Shared sh_PositionGroupList As ObservableCollection(Of PositionGroup)
' Riferimento alla posizione di questa uscita
Private m_MyPos As Position
Private m_IsOccupied As Boolean
''' <summary>
@@ -609,22 +793,48 @@ Public Class ExitToolAssociation
End Set
End Property
Private m_IsValidPosition As Boolean
Private m_IsEnabledPos As Boolean
''' <summary>
''' Property that read and write to the tool's database the Exit
''' </summary>
Public Property IsValidPosition As Boolean
Public Property IsEnabledPos As Boolean
Get
Return m_IsValidPosition
Return m_IsEnabledPos
End Get
Set(value As Boolean)
If value <> m_IsValidPosition Then
m_IsValidPosition = value
NotifyPropertyChanged("IsValidPosition")
If value <> m_IsEnabledPos Then
m_IsEnabledPos = value
NotifyPropertyChanged("IsEnabledPos")
End If
End Set
End Property
Private m_IsValidPos As Boolean?
''' <summary>
''' Property that read and write to the tool's database the Exit
''' </summary>
Public Property IsValidPos As Boolean?
Get
Return m_IsValidPos
End Get
Set(value As Boolean?)
m_IsValidPos = value
NotifyPropertyChanged("ExitBtnBackgroundCol")
End Set
End Property
Public ReadOnly Property ExitBtnBackgroundCol As SolidColorBrush
Get
If IsNothing(m_IsValidPos) Then
Return New SolidColorBrush(Color.FromArgb(255, 221, 221, 221))
ElseIf m_IsValidPos Then
Return EgaltechGreen
Else
Return EgaltechYellow
End If
End Get
End Property
Private m_Exit As String
''' <summary>
''' Property that read and write to the tool's database the Exit
@@ -659,8 +869,9 @@ Public Class ExitToolAssociation
#Region "CONSTRUCTORS"
Sub New(ExitPar As String)
Sub New(ExitPar As String, MyPos As Position)
Me.ExitPar = ExitPar
m_MyPos = MyPos
End Sub
#End Region ' Constructors
@@ -693,6 +904,37 @@ Public Class ExitToolAssociation
Return
End If
Dim SelTool As ToolItem = DirectCast(param, ToolItem)
' verifico se devo cambiare la testa
EgtLuaSetGlobStringVar("STU.TUUID", SelTool.Uuid)
EgtLuaSetGlobStringVar("STU.TCPOS", m_MyPos.TcPos)
EgtLuaCallFunction("STU.GetValidHeadExitForPos")
' Leggo variabili
Dim sHead As String = String.Empty
EgtLuaGetGlobStringVar("STU.HEAD", sHead)
Dim nExit As Double = 0
EgtLuaGetGlobNumVar("STU.EXIT", nExit)
Dim nErr As Double = 0
EgtLuaGetGlobNumVar("STU.ERR", nErr)
If nErr <> 0 Then
Dim sToolName As String = String.Empty
EgtTdbGetToolFromUUID(SelTool.Uuid, sToolName)
EgtOutLog("Error in setup! Tool:" & sToolName & " TcPos: " & m_MyPos.TcPos)
Return
End If
' se la testa restituita coincide con quella della posizione
If Not m_MyPos.Head = sHead Then
m_MyPos.Head = sHead
For ExitIndex = m_MyPos.ExitToolAssociationList.Count To EgtGetHeadExitCount(sHead)
m_MyPos.ExitToolAssociationList.Add(New ExitToolAssociation(ExitIndex.ToString, m_MyPos))
Next
For ExitIndex = EgtGetHeadExitCount(sHead) To m_MyPos.ExitToolAssociationList.Count
m_MyPos.ExitToolAssociationList.RemoveAt(ExitIndex - 1)
Next
End If
' lo aggiungo alla posizione di attrezzaggio
Tool = SelTool
IsOccupied = True
@@ -707,10 +949,33 @@ Public Class ExitToolAssociation
' lo rimetto nella lista utensili
For Index = 0 To sh_ToolsList.Count - 1
If (Tool.Type And sh_ToolsList(Index).Type) > 0 Then
sh_ToolsList(Index).Items.Add(Tool)
' creo una copia della lista di utensili della famiglia
Dim TempList As New List(Of String)
Dim ToolIndex As Integer
For ToolIndex = 0 To sh_ToolsList(Index).Items.Count - 1
TempList.Add(sh_ToolsList(Index).Items(ToolIndex).Name)
Next
' aggiungo l'utensile da inserire
TempList.Add(Tool.Name)
' riordino la lista
TempList.Sort()
' ricavo l'indice dell'utensile inserito
ToolIndex = TempList.IndexOf(Tool.Name)
' lo inserisco nel posto giusto
sh_ToolsList(Index).Items.Insert(ToolIndex, Tool)
' espando la famiglia in cui l'ho mezzo
sh_ToolsList(Index).IsExpanded = True
Exit For
End If
Next
' abilito e disabilito tutte le uscite in base all'utensile selezionato
For GroupIndex = 0 To sh_PositionGroupList.Count - 1
For PosIndex = 0 To sh_PositionGroupList(GroupIndex).PositionList.Count - 1
sh_PositionGroupList(GroupIndex).PositionList(PosIndex).SetIsValidPosFromTool(Tool.Uuid)
Next
Next
' e lo tolgo dalla posizione di attrezzaggio
Tool = Nothing
IsOccupied = False
@@ -732,6 +997,9 @@ End Class
Public Class FamilyToolItem
Inherits InheritableTreeViewItem
' riferimento alla lista posizioni
Friend Shared m_PositionGroupList As ObservableCollection(Of PositionGroup)
Public Overrides Property IsSelected As Boolean
Get
Return m_IsSelected
@@ -739,6 +1007,14 @@ Public Class FamilyToolItem
Set(value As Boolean)
If (value <> m_IsSelected) Then
m_IsSelected = value
If value Then
' disabilito tutte le uscite tranne quelle occupate
For GroupIndex = 0 To m_PositionGroupList.Count - 1
For PosIndex = 0 To m_PositionGroupList(GroupIndex).PositionList.Count - 1
m_PositionGroupList(GroupIndex).PositionList(PosIndex).SetNotValidPos()
Next
Next
End If
End If
End Set
End Property
@@ -789,11 +1065,9 @@ End Class
Public Class ToolItem
Inherits InheritableTreeViewItem
' riferimento alle posizioni
' riferimento alla lista posizioni
Friend Shared m_PositionGroupList As ObservableCollection(Of PositionGroup)
Private Const INVALIDPOS As String = ""
Public Overrides Property IsSelected As Boolean
Get
Return m_IsSelected
@@ -801,77 +1075,14 @@ Public Class ToolItem
Set(value As Boolean)
If (value <> m_IsSelected) Then
m_IsSelected = value
For GroupIndex = 0 To m_PositionGroupList.Count - 1
For PosIndex = 0 To m_PositionGroupList(GroupIndex).PositionList.Count - 1
EgtLuaSetGlobStringVar("STU.TUUID", Uuid)
EgtLuaSetGlobStringVar("STU.TCPOS", m_PositionGroupList(GroupIndex).PositionList(PosIndex).TcPos)
EgtLuaCallFunction("STU.GetPosHeadExit")
' Leggo variabili
Dim sHead As String = String.Empty
EgtLuaGetGlobStringVar("STU.HEAD", sHead)
Dim nExit As Double = 0
EgtLuaGetGlobNumVar("STU.EXIT", nExit)
' verifico se la posizione è libera o c'è un utensile attrezzato
Dim PosIsOccupied As Boolean = False
For ExitIndex = 0 To m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList.Count - 1
If m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsOccupied Then
PosIsOccupied = True
Exit For
End If
If value Then
' abilito e disabilito tutte le uscite in base all'utensile selezionato
For GroupIndex = 0 To m_PositionGroupList.Count - 1
For PosIndex = 0 To m_PositionGroupList(GroupIndex).PositionList.Count - 1
m_PositionGroupList(GroupIndex).PositionList(PosIndex).SetIsValidPosFromTool(Uuid)
Next
' se la posizione non è valida, disattivo tutte le uscite tranne quelle attrezzate
If sHead = INVALIDPOS Then
For ExitIndex = 0 To m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList.Count - 1
If Not m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsOccupied Then
m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsValidPosition = False
End If
Next
' altrimenti, se la posizione nell'attrezzaggio è vuota
ElseIf Not PosIsOccupied Then
' se l'uscita restituita esiste
If m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList.Count >= nExit Then
' disattivo tutte le uscite tranne quella restituita
For ExitIndex = 0 To m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList.Count - 1
If ExitIndex + 1 = nExit Then
m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsValidPosition = True
Else
m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsValidPosition = False
End If
Next
' altrimenti lascio attiva solo la prima uscita
Else
m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(0).IsValidPosition = True
For ExitIndex = 1 To m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList.Count - 1
m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsValidPosition = False
Next
End If
' altrimenti, se le teste coincidono
ElseIf sHead = m_PositionGroupList(GroupIndex).PositionList(PosIndex).Head Then
' se l'uscita restituita è libera la attivo e disattivo tutte le altre
If Not m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(nExit - 1).IsOccupied Then
For ExitIndex = 1 To m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList.Count - 1
If ExitIndex = nExit - 1 Then
m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsValidPosition = True
Else
m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsValidPosition = False
End If
Next
' altrimenti le disattivo tutte
Else
For ExitIndex = 1 To m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList.Count - 1
m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsValidPosition = False
Next
End If
' altrimenti le disattivo tutte
Else
For ExitIndex = 1 To m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList.Count - 1
m_PositionGroupList(GroupIndex).PositionList(PosIndex).ExitToolAssociationList(ExitIndex).IsValidPosition = False
Next
End If
Next
Next
End If
End If
End Set
End Property