Files
egtstone3d/SceneButton/SceneButtonVM.vb
T
2025-02-05 17:32:10 +01:00

600 lines
18 KiB
VB.net

Imports EgtUILib
Imports EgtWPFLib5
Public Class SceneButtonVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Public Shared m_nIndexList As Integer = 0
Public Shared m_nIndexList_1 As Integer = 0
Public Shared m_nIndexList_2 As Integer = 0
Private m_TopListBtn As New List(Of SceneBtn)
Public Property TopListBtn As List(Of SceneBtn)
Get
Return m_TopListBtn
End Get
Set(value As List(Of SceneBtn))
m_TopListBtn = value
End Set
End Property
Private m_LeftListBtn As New List(Of SceneBtn)
Public Property LeftListBtn As List(Of SceneBtn)
Get
Return m_LeftListBtn
End Get
Set(value As List(Of SceneBtn))
m_LeftListBtn = value
End Set
End Property
Private m_RightListBtn As New List(Of SceneBtn)
Public Property RightListBtn As List(Of SceneBtn)
Get
Return m_RightListBtn
End Get
Set(value As List(Of SceneBtn))
m_RightListBtn = value
End Set
End Property
Private m_BottomListBtn As New List(Of SceneBtn)
Public Property BottomListBtn As List(Of SceneBtn)
Get
Return m_BottomListBtn
End Get
Set(value As List(Of SceneBtn))
m_BottomListBtn = value
End Set
End Property
Private m_BottomCenterListBtn As New List(Of SceneBtn)
Public Property BottomCenterListBtn As List(Of SceneBtn)
Get
Return m_BottomCenterListBtn
End Get
Set(value As List(Of SceneBtn))
m_BottomCenterListBtn = value
End Set
End Property
Private m_TopPanelListGroupBtn As New List(Of GroupSceneBtn)
Public Property TopPanelListGroupBtn As List(Of GroupSceneBtn)
Get
Return m_TopPanelListGroupBtn
End Get
Set(value As List(Of GroupSceneBtn))
m_TopPanelListGroupBtn = value
End Set
End Property
Friend Enum TopPanel As Integer
TOP_PANEL = 0
TOP_PANEL_1 = 1
End Enum
Private m_SelSelTopPanel As TopPanel = TopPanel.TOP_PANEL
Public Property SelTopPanel As Integer
Get
Return m_SelSelTopPanel
End Get
Set(value As Integer)
m_SelSelTopPanel = value
End Set
End Property
Friend Sub SetSelTopPanel(TopOtion As TopPanel)
m_SelSelTopPanel = TopOtion
NotifyPropertyChanged(NameOf(SelTopPanel))
End Sub
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
Map.SetRefSceneButtonVM(Me)
LoadButtons()
LoadGroupButtons()
End Sub
#End Region ' Constructor
#Region "METHODS"
''' <summary>
''' Funzione che carica i bottoni
''' </summary>
Private Sub LoadButtons()
SetButtonsLocation(TOPLIST_BTN, m_TopListBtn)
SetButtonsLocation(LEFTLIST_BTN, m_LeftListBtn)
SetButtonsLocation(RIGHTLIST_BTN, m_RightListBtn)
SetButtonsLocation(BOTTOMLIST_BTN, m_BottomListBtn)
SetButtonsLocation(BOTTOMCENTERLIST_BTN, m_BottomCenterListBtn)
End Sub
Private Sub LoadGroupButtons()
Dim Index As Integer = 1
Dim SubTitle As String = String.Empty
Dim sKeyTitle As String = TOPPANELLIST_BTN & "_" & Index.ToString()
While GetMainPrivateProfileString(sKeyTitle, ConstEgtStone3D.SUBTITLE, "", SubTitle) > 0
SetGroupButtonsLocation(sKeyTitle, m_TopPanelListGroupBtn)
Index += 1
sKeyTitle = TOPPANELLIST_BTN & "_" & Index.ToString()
End While
End Sub
''' <summary>
''' Funzione che permette di posizionare i bottoni letti da file ini
''' </summary>
''' <param name="PositionList"></param>
''' <param name="ListBtn"></param>
Private Sub SetButtonsLocation(PositionList As String, ListBtn As List(Of SceneBtn))
Dim Index As Integer = 1
Dim sBtnString As String = String.Empty
While GetMainPrivateProfileString(PositionList, "Btn_" & Index.ToString, "", sBtnString) > 0
Dim sItems As String() = Split(sBtnString, ",")
If sItems.Count < 3 Then
' Errore di configurazione comando: mancano dei parametri
EgtOutLog("")
Else
Dim nType As Integer = 0
If sItems(0) = "Button" Then
' Button
ListBtn.Add(New _Button(sItems(1), sItems(2), sItems(3)))
ElseIf sItems(0) = "ToggleButton" Then
' ToggelButton
ListBtn.Add(New _ToggleButton(sItems(1), sItems(2), sItems(3)))
ElseIf sItems(0) = "ButtonComboBox" And sItems.Count >= 4 Then
' Button che apre una combo box
ListBtn.Add(New _ButtonComboBox(sItems(1), sItems(2), sItems(3), sItems(4)))
End If
End If
Index += 1
sBtnString = String.Empty
End While
End Sub
Private Sub SetGroupButtonsLocation(PositionList As String, ListGroupBtn As List(Of GroupSceneBtn))
Dim LocalListSceneBtn As New List(Of SceneBtn)
Dim SubTitle As String = String.Empty
Dim Title As String = String.Empty
SetButtonsLocation(PositionList, LocalListSceneBtn)
GetMainPrivateProfileString(PositionList, ConstEgtStone3D.SUBTITLE, "", SubTitle)
Title = SplitSubTitle(SubTitle)
ListGroupBtn.Add(New GroupSceneBtn(LocalListSceneBtn, Title))
End Sub
Public Function IsTgBtnChecked(Flag As String) As Boolean
' cerco il bottone con il flag richiesto
Dim Btn As _ToggleButton = GetButton(Flag)
Dim bIsChecked As Boolean = False
If Not IsNothing(Btn) Then bIsChecked = Btn.IsChecked
' restituisco la sua proprietà IsChecked
Return bIsChecked
End Function
Public Function GetButton(Flag As String) As SceneBtn
' cerco il bottone con il flag richiesto
Dim Btn As SceneBtn = m_BottomListBtn.FirstOrDefault(Function(x) x.Flag = Flag)
If Not IsNothing(Btn) Then Return Btn
Btn = m_RightListBtn.FirstOrDefault(Function(x) x.Flag = Flag)
If Not IsNothing(Btn) Then Return Btn
Btn = m_TopListBtn.FirstOrDefault(Function(x) x.Flag = Flag)
If Not IsNothing(Btn) Then Return Btn
Btn = m_LeftListBtn.FirstOrDefault(Function(x) x.Flag = Flag)
If Not IsNothing(Btn) Then Return Btn
Btn = m_BottomCenterListBtn.FirstOrDefault(Function(x) x.Flag = Flag)
Return Btn
End Function
Private Function SplitSubTitle(SubTitle As String) As String
Dim subTitleList As String() = SubTitle.Split("/"c)
For IndexTitle As Integer = 0 To subTitleList.Count - 1
If IsNumeric(subTitleList(IndexTitle)) AndAlso Not EgtMsg(subTitleList(IndexTitle)).StartsWith("Msg") Then
Return EgtMsg(subTitleList(IndexTitle))
Else
Return subTitleList(IndexTitle + 1)
End If
Next
Return String.Empty
End Function
#End Region ' Methods
End Class
Public Class GroupSceneBtn
#Region "FIELDS & PROPERTIES"
Private m_SubTitle As String
Public Property SubTitle As String
Get
Return m_SubTitle
End Get
Set(value As String)
m_SubTitle = value
End Set
End Property
Private m_TopPanelListBtn As New List(Of SceneBtn)
Public Property TopPanelListBtn As List(Of SceneBtn)
Get
Return m_TopPanelListBtn
End Get
Set(value As List(Of SceneBtn))
m_TopPanelListBtn = value
End Set
End Property
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(TopPanelListBtn As List(Of SceneBtn), sSubTitle As String)
m_TopPanelListBtn = TopPanelListBtn
m_SubTitle = sSubTitle
End Sub
#End Region ' Constructor
End Class
Public Class SceneBtn
Inherits VMBase
#Region "FIELDS & PROPETIES"
Private m_Name As String = String.Empty
Public Property Name As String
Get
Return m_Name
End Get
Set(value As String)
m_Name = value
End Set
End Property
Private m_Img As String = String.Empty
Public Property Img As String
Get
Return m_Img
End Get
Set(value As String)
m_Img = value
End Set
End Property
Private m_Flag As String = String.Empty
Public Property Flag As String
Get
Return m_Flag
End Get
Set(value As String)
m_Flag = value
End Set
End Property
Private m_IsEnabled As Boolean = True
Public Property IsEnabled As Boolean
Get
Return m_IsEnabled
End Get
Set(value As Boolean)
m_IsEnabled = value
End Set
End Property
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(_Name As String, _Img As String, _Flag As String)
m_Name = _Name
m_Img = Map.refMainWindowVM.MainWindowM.sResourcesDir & "\" & _Img
m_Flag = _Flag
End Sub
#End Region ' Constructor
#Region "COMMANDS"
#Region "CmdBtn"
Private m_CmdBtn As ICommand
Public ReadOnly Property CmdBtn As ICommand
Get
If m_CmdBtn Is Nothing Then
m_CmdBtn = New Command(AddressOf MethodBtn)
End If
Return m_CmdBtn
End Get
End Property
Private Sub MethodBtn()
SceneCmd.Exec(m_Flag)
End Sub
#End Region ' CmdBtn
#End Region ' Commands
End Class
Public Class _Button
Inherits SceneBtn
#Region "CONSTRUCTOR"
Sub New(_Name As String, _Img As String, _Flag As String)
MyBase.New(_Name, _Img, _Flag)
End Sub
#End Region ' Constructor
End Class
Public Class _ToggleButton
Inherits SceneBtn
#Region "FIELDS & PROPERTIES"
Private m_IsChecked As Boolean = False
Public Property IsChecked As Boolean
Get
Return m_IsChecked
End Get
Set(value As Boolean)
m_IsChecked = value
NotifyPropertyChanged(NameOf(IsChecked))
End Set
End Property
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(_Name As String, _Img As String, _Flag As String)
MyBase.New(_Name, _Img, _Flag)
End Sub
#End Region ' Constructor
End Class
Public Class _ButtonComboBox
Inherits SceneBtn
#Region "FIELDS & PROPERTIES"
Private m_SourceList As New List(Of String)
Public Property SourceList As List(Of String)
Get
Return m_SourceList
End Get
Set(value As List(Of String))
m_SourceList = value
End Set
End Property
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(_Name As String, _Img As String, _Flag As String, _PrototypeList As String)
MyBase.New(_Name, _Img, _Flag)
'conversione da _PrototypeList a _List ''''' da implementare
m_SourceList = New List(Of String)({"Becca", "Bacca", "Bionda", "Mora"})
'm_SourceList = _List
End Sub
#End Region ' Constructor
End Class
Module SceneCmd
#Region "METHODS"
Public Sub Exec(Flag)
Dim nVeinCtx As Integer = Map.refSceneHostVM.MainScene.GetCtx()
Select Case Flag
Case EGT_AUTOPAIR
EgtSetCurrentContext(nVeinCtx)
EgtLuaSetGlobIntVar("ASS.nVeinCtx", nVeinCtx)
EgtLuaCallFunction("ASS.PairAll")
Case EGT_UNPAIR
SolidManagerM.Unpair(Map.refSceneHostVM.m_nIdPart)
Case EGT_PAIR
Map.refSceneButtonV.LoadPairUC()
Case EGT_RESET_INTERS
SolidManagerM.ResetInters()
Case EGT_ROTATE
Map.refSceneButtonV.LoadRotateUC()
Case EGT_MOVE
Map.refSceneButtonV.LoadMoveUC()
Case EGT_UNDO
Undo()
Case EGT_REDO
Redo()
Case EGT_SEL_TYPE
Map.refSceneButtonV.MenuSelType.IsOpen = True
Case EGT_IMPORT_LOOP
'ImportLoop()
EgtInsertFile("D:\Temp\marmo\Vein3D\Loops.nge")
Case EGT_CREATE_SOLID_LOOP
SolidManagerM.CreateSolidFromLoops(Map.refSceneHostVM.m_nIdPart)
Case EGT_PANEL
Map.refSceneButtonV.LoadPanelUC()
Map.refSceneHostVM.m_SelType = GDB_TY.CRV_LINE
SolidManagerM.ShowLoopEdges()
Case "ExportProject"
ExportProjectNge()
Case "Delete"
SolidManagerM.Delete(Map.refSceneHostVM.m_nIdPart)
Case "Rettangolo"
Map.refSceneButtonV.LoadParametricCompoUC("Rettangolo" & ".lua")
Case "Poligono"
Map.refSceneButtonV.LoadParametricCompoUC("Poligono" & ".lua")
Case Else
Dim x As Boolean = False
End Select
End Sub
Friend Sub Undo()
' se con questa operazione torno all'inizio disattivo il bottone undo
SolidManagerM.UndoEvent()
SolidManagerM.ManageUndoRedo()
EgtDraw()
End Sub
Friend Sub Redo()
' se con questa operazione ho finito la storia disponibile disattivo il bottone redo
SolidManagerM.RedoEvent()
SolidManagerM.ManageUndoRedo()
EgtDraw()
End Sub
''' <summary>
''' Funzione che permette di importare un file nge
''' </summary>
Private Sub ImportLoop()
Dim ImportDialog As New EgtManageFileDialogV(Application.Current.MainWindow, New EgtManageFileDialogVM()) With {
.Title = EgtMsg(91127), ' Importa
.Filter = "nge files (*.nge)|*.nge",
.FilterIndex = 1,
.InitialDirectory = "C:\EgtData\EgtStone3D\Temp",
.Mode = 1
}
If Not ImportDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then Return
If String.IsNullOrEmpty(ImportDialog.FileName) Then Return
Dim sFilePath As String = ImportDialog.FileName
EgtInsertFile(sFilePath)
' rinomino il part aggiungendo un UUID
Dim nPart As Integer = EgtGetLastPart()
Dim sName As String = String.Empty
EgtGetName(nPart, sName)
Dim sUUID As String = ""
EgtLuaCallFunction("TOOL.GetNewUUID")
EgtLuaGetGlobStringVar("TOOL.UUID", sUUID)
If sName <> String.Empty Then
sName = sUUID & "_" & sName
Else
sName = sUUID & "_ImportedLoop"
End If
EgtSetName(nPart, sName)
Dim nRefLay As Integer = EgtCreateGroup(nPart)
EgtSetName(nRefLay, "Ref")
End Sub
Public Sub EnableActionButtons()
'If (m_nIdPart = GDB_ID.NULL) Then Return
''abilito i bottoni che possono eseguire delle azioni
'Dim PartSolidSel As PartSolid = GetPartSolid(m_nIdPart)
'If Not IsNothing(PartSolidSel) And PartSolidSel.IsPaired() Then
' UnpairBtn.IsEnabled = True
' ExplodeBtn.IsEnabled = True
' ExplodeNormalsBtn.IsEnabled = True
'End If
End Sub
Public Sub DisableActionButtons()
''disabilito tutti i bottoni che eseguono azioni sul pezzo selezionato
'UnpairBtn.IsEnabled = False
'ExplodeBtn.IsEnabled = False
'ExplodeNormalsBtn.IsEnabled = False
End Sub
Public Function DeselectAll() As Boolean
Dim bDeselected As Boolean = True
Dim nOriId As Integer = GDB_ID.NULL
For Each PartSolidSel In m_PartSolidList
'' deseleziono nel nesting
'EgtGetInfo(PartSolidSel.PartId, KEY_ORI_ID, nOriId)
'If EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx()) AndAlso EgtExistsObj(nOriId) Then
' If Not (OmagOFFICEMap.refNestingTabVM.DeselectPart(nOriId, False)) Then
' bDeselected = False
' End If
'End If
EgtSetCurrentContext(m_nVeinCtx)
PartSolidSel.DeselectPart()
Next
Map.refSceneHostVM.m_nIdPart = GDB_ID.NULL
DisableActionButtons()
Return bDeselected
End Function
Public Sub AddPanel(nId As Integer)
Dim PanelVM As PanelVM = DirectCast(Map.refSceneButtonV.m_PanelUC.DataContext, PanelVM)
PanelVM.AddPanel(nId)
End Sub
Public Sub ExportProjectNge()
' creo una copia del contesto corrente
Dim sSavePath As String = "C:\\EgtData\\EgtStone3D\\Temp\\export.nge"
EgtSaveFile(sSavePath, 2)
Dim nTempContext As Integer = EgtInitContext()
' setto il contesto temporaneo come corrente
EgtSetCurrentContext(nTempContext)
EgtOpenFile(sSavePath)
Dim nPart As Integer = EgtGetFirstPart()
Dim HorizontalOffset As Double = 0
While nPart <> GDB_ID.NULL
Dim nNextPart As Integer = EgtGetNext(nPart)
Dim sName As String = String.Empty
EgtGetName(nPart, sName)
If sName = "SOLID" Then
EgtErase(nPart)
Else
' accendo il part e il layer della regione
EgtSetStatus(nPart, GDB_ST.ON_)
Dim nRefLay As Integer = EgtGetFirstNameInGroup(nPart, "Region")
EgtSetStatus(nRefLay, GDB_ST.ON_)
' riporto il part nell'origine
EgtChangeGroupFrame(nPart, New Frame3d())
' lo posizione affiancato agli altri
Dim vtMove As New Vector3d(HorizontalOffset, 0, 0)
EgtMove(nPart, vtMove, GDB_RT.GLOB)
Dim BBox As New BBox3d
EgtGetBBoxGlob(nPart, 0, BBox)
HorizontalOffset += BBox.DimX + 5
End If
nPart = nNextPart
End While
Dim nInfoLay As Integer = EgtCreateGroup(GDB_ID.ROOT)
EgtSetLevel(nInfoLay, GDB_LV.SYSTEM)
EgtSetName(nInfoLay, "EgtStone3D")
EgtSaveFile(sSavePath, 2)
' reimposto il contesto della scena principale e cancello il contesto temporaneo
EgtSetCurrentContext(SolidManagerM.m_nVeinCtx)
EgtDeleteContext(nTempContext)
End Sub
#End Region ' Methods
End Module
Public Class SplitConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim dValue As Double = CDbl(value)
Dim sParam() As String = DirectCast(parameter, TextBlock).Text.Split("_"c)
Dim dParam As Double = CDbl(Map.refSceneButtonVM.TopPanelListGroupBtn(CInt(sParam(1))).TopPanelListBtn.Count()) + 1
Return (Math.Floor(dParam / 2)) * 35
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException
End Function
End Class