Imports EgtUILib Public Class RotateVM Inherits SceneUserControlVM #Region "FIELDS & PROPERTIES" Private m_MsgList As New List(Of String)({TopBar_Msg0, TopBar_Msg1, TopBar_Msg2}) Public ReadOnly Property MsgList As List(Of String) Get Return m_MsgList End Get End Property Private m_bAxisSelected As Boolean = False Public Property bAxisSelected As Boolean Get Return m_bAxisSelected End Get Set(value As Boolean) m_bAxisSelected = value If m_bAxisSelected Then AdvanceStage() End Set End Property Private m_Stage As RotateStage = RotateStage.SelectPart Private Property Stage As RotateStage Get Return m_Stage End Get Set(value As RotateStage) m_Stage = value DirectCast(ParamList(0), _TextBlockParam).MsgValue = MsgList(m_Stage) If m_Stage = RotateStage.SelectAxis Then ShowAxis() If m_Stage = RotateStage.InsertAngle Then DirectCast(ParamList(1), _TextBoxParam).IsEnabled = True ChangeTextColor() End Set End Property #Region "Messages" Public ReadOnly Property TopBar_Msg0 As String Get Return EgtMsg(110024) ' Seleziona il pezzo da ruotare End Get End Property Public ReadOnly Property TopBar_Msg1 As String Get Return EgtMsg(110005) ' Seleziona l'asse di rotazione End Get End Property Public ReadOnly Property TopBar_Msg2 As String Get Return EgtMsg(110022) ' Inserisci l'angolo di rotazione End Get End Property Public ReadOnly Property Testo_Msg As String Get Return EgtMsg(110006) ' Angolo End Get End Property #End Region ' Messages #End Region ' Fields & Properties #Region "CONSTRUCTOR" Public Sub New() MyBase.New() Title = EGT_ROTATE.ToUpper() ' Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent(). 'comincio a contare le operazioni temporanee per poterle poi salvare nella eventualmente nella storia Map.refSceneHostVM.m_nTransfNum = 0 ' setto le variabili di salvataggio per le operazioni temporanee Dim bSave As Boolean = False If EgtLuaSetGlobBoolVar("ASS.bSaveHist", bSave) Then AssLog("ASS.bSaveHist = " & bSave.ToString) Dim bSaveTemp As Boolean = True If EgtLuaSetGlobBoolVar("ASS.bSaveTemp", bSaveTemp) Then AssLog("ASS.bSaveTemp = " & bSaveTemp.ToString) LoadParamList() Stage = If(Map.refSceneHostVM.m_nIdPart = GDB_ID.NULL, RotateStage.SelectPart, RotateStage.SelectAxis) End Sub #End Region ' Constructor #Region "METHODS" Public Overrides Sub LoadParamList() AddGenericParam(New _TextBlockParam("Messaggio", MsgList(Stage), ParamType.STR)) ' Angolo AddGenericParam(New _TextBoxParam(EgtMsg(110006), 0, ParamType.DOUB, Visibility.Visible, False)) End Sub Public Sub AdvanceStage() Stage += 1 End Sub Public Function AtStage() Return Stage End Function Private Sub ShowAxis() Dim PartSolidSel As PartSolidM = SolidManagerM.GetPartSolid(Map.refSceneHostVM.m_nIdPart) If IsNothing(PartSolidSel) Then Return PartSolidSel.ShowAxis() End Sub Public Overrides Sub Conferma() If Not Map.refSceneHostVM.m_bRotated Then AngText_Changed() Close() End Sub Public Overrides Sub ShowPreview() AngText_Changed() End Sub Public Overrides Sub Annulla() ' faccio il reset del rotate If Map.refSceneHostVM.m_bRotated Then SolidManagerM.ResetRotation(True, True) End If Close() End Sub Private Sub Close() SolidManagerM.ResetOperationMarks(Map.refSceneHostVM.m_nIdPart) EgtDraw() Dim Btn As SceneBtn = Map.refSceneButtonVM.GetButton(EGT_ROTATE) If TypeOf (Btn) Is _ToggleButton Then DirectCast(Btn, _ToggleButton).IsChecked = False Else EgtOutLog("CONFIG ERR: Il pulsante di Rotate è stato definito come Button anziché ToggleButton") End If ' setto le variabili di salvataggio per le operazioni temporanee Dim bSave As Boolean = True If EgtLuaSetGlobBoolVar("ASS.bSaveHist", bSave) Then AssLog("ASS.bSaveHist = " & bSave.ToString) Dim bSaveTemp As Boolean = False If EgtLuaSetGlobBoolVar("ASS.bSaveTemp", bSaveTemp) Then AssLog("ASS.bSaveTemp = " & bSaveTemp.ToString) Map.refSceneHostVM.m_bRotated = False Map.refSceneHostVM.m_dAngRot = 0 Map.refSceneButtonVM.RemoveUC(Map.refSceneButtonVM.m_RotateUC) SolidManagerM.ManageUndoRedo() End Sub Public Sub AngText_Changed() Dim Btn As SceneBtn = Map.refSceneButtonVM.GetButton(EGT_ROTATE) If TypeOf (Btn) Is _ToggleButton Then If Not DirectCast(Btn, _ToggleButton).IsChecked Then Return Else EgtOutLog("CONFIG ERR: Il pulsante di Rotate è stato definito come Button anziché ToggleButton") Return End If Dim nId As Integer = Map.refSceneHostVM.m_nIdPart If nId = GDB_ID.NULL Then Return Dim sAng As String = DirectCast(ParamList(1), _TextBoxParam).sValue If String.IsNullOrEmpty(sAng) Then Return If Not IsNumeric(sAng) Then Return Dim dAng As Double = CDbl(sAng) If dAng <> 0 Then If Map.refSceneHostVM.m_dAngRot <> 0 Then ResetRotation(False, False) End If Dim PartSolidIdSel = SolidManagerM.GetPartSolid(nId) Dim vtDir As Vector3d Dim ptStart As Point3d If PartSolidIdSel.nIdLineAxisRotate = GDB_ID.NULL Then Return EgtStartPoint(PartSolidIdSel.nIdLineAxisRotate, GDB_ID.ROOT, ptStart) EgtStartVector(PartSolidIdSel.nIdLineAxisRotate, GDB_ID.ROOT, vtDir) SolidManagerM.Rotate(nId, ptStart, vtDir, dAng, False, True) Map.refSceneHostVM.m_bRotated = True Map.refSceneHostVM.m_dAngRot = dAng End If EgtDraw() End Sub #End Region ' Methods End Class