diff --git a/EgtCAM5.vbproj b/EgtCAM5.vbproj index ee494ca..9e32b64 100644 --- a/EgtCAM5.vbproj +++ b/EgtCAM5.vbproj @@ -304,6 +304,7 @@ + ToolsDbView.xaml diff --git a/MainWindow/MainWindow.xaml b/MainWindow/MainWindow.xaml index a0ab718..e78a6b7 100644 --- a/MainWindow/MainWindow.xaml +++ b/MainWindow/MainWindow.xaml @@ -10,6 +10,7 @@ BorderBrush="{StaticResource EgaltechBlue1}" BorderThickness="2" MinHeight="600" MinWidth="800" WindowStyle="None" ResizeMode="NoResize" AboutBoxCommand="{Binding AboutBoxCommand}" + AllowDrop="True" Drop="MainWindow_Drop" CloseCommand="{Binding CloseApplicationCommand,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"> diff --git a/MainWindow/MainWindow.xaml.vb b/MainWindow/MainWindow.xaml.vb index eaf275e..10bbcdf 100644 --- a/MainWindow/MainWindow.xaml.vb +++ b/MainWindow/MainWindow.xaml.vb @@ -10,4 +10,18 @@ Class MainWindow WinPosToWindow(Me, WinPos) End Sub + Private Sub MainWindow_Drop(sender As Object, e As DragEventArgs) + ' Se drag di file + If e.Data.GetDataPresent(DataFormats.FileDrop) Then + ' Attivo il programma + Me.Activate() + ' Recupero l'array di stringhe con i nomi del file + Dim sFiles() As String = DirectCast(e.Data.GetData(DataFormats.FileDrop), String()) + ' Apro il primo come file standard + If EgtCAM5Map.refProjectVM.OpenStdFile(sFiles(0)) Then Return + ' Riprovo come file descrizione porta + EgtCAM5Map.refProjectVM.OpenDoorFile(sFiles(0)) + End If + End Sub + End Class diff --git a/MainWindow/MainWindowViewModel.vb b/MainWindow/MainWindowViewModel.vb index e79c29b..1cff3ff 100644 --- a/MainWindow/MainWindowViewModel.vb +++ b/MainWindow/MainWindowViewModel.vb @@ -290,9 +290,7 @@ Namespace EgtCAM5 ''' Method that initialize EgalTech environment ''' Private Sub InitializeEgtEnvironment() - '' Abilito drag and drop - 'Me.AllowDrop = True - '' Title + ' Title Application.Msn.NotifyColleagues(Application.EMITTITLE) ' Impostazione path radice per i dati m_sDataRoot = System.AppDomain.CurrentDomain.BaseDirectory @@ -398,7 +396,6 @@ Namespace EgtCAM5 End If ' Info su opzioni chiave EgtOutLog("KeyOptions : " & bKey.ToString() & " " & IniFile.m_nKeyOptions.ToString()) - End Sub ''' diff --git a/ProjectPage/ProjectViewModel.vb b/ProjectPage/ProjectViewModel.vb index eeaa2fd..3e6f0cc 100644 --- a/ProjectPage/ProjectViewModel.vb +++ b/ProjectPage/ProjectViewModel.vb @@ -318,20 +318,18 @@ Namespace EgtCAM5 ' Se file ddf, gestione creazione porta con Doors If sExt = ".ddf" Then ' Se manca direttorio uso quello di default - If String.IsNullOrWhiteSpace(IO.Path.GetDirectoryName(sFile)) Then + If String.IsNullOrWhiteSpace(Path.GetDirectoryName(sFile)) Then Dim sDefDir As String = String.Empty GetPrivateProfileString(S_DOORS, K_DDFDEFAULTDIR, "", sDefDir) sFile = sDefDir & "\" & sFile End If ' Ricoscimento flag Dim nFlag As Integer = 0 - If Environment.GetCommandLineArgs.Count() > 2 Then Int32.TryParse(Environment.GetCommandLineArgs(2), nFlag) + If Environment.GetCommandLineArgs.Count() > 2 Then Integer.TryParse(Environment.GetCommandLineArgs(2), nFlag) Dim bNcGen As Boolean = (nFlag >= 1) Dim bExit As Boolean = (nFlag >= 2) ' Esecuzione - CreateDoors(sFile, bNcGen, bExit) - EgtZoom(ZM.ALL) - Application.Msn.NotifyColleagues(Application.EMITTITLE) + OpenDoorFile(sFile, bNcGen, bExit) ' Se richiesta uscita immediata If bExit Then Application.Msn.NotifyColleagues(Application.CLOSEAPPLICATIONCOMMAND) Return @@ -343,7 +341,7 @@ Namespace EgtCAM5 If Environment.GetCommandLineArgs.Count() > 2 Then sMachine = Environment.GetCommandLineArgs(2) ' Recupero flag Dim nFlag As Integer = 0 - If Environment.GetCommandLineArgs.Count() > 3 Then Int32.TryParse(Environment.GetCommandLineArgs(3), nFlag) + If Environment.GetCommandLineArgs.Count() > 3 Then Integer.TryParse(Environment.GetCommandLineArgs(3), nFlag) Dim bTest As Boolean = (nFlag = 0) ' Esecuzione UpdateTools(sFile, sMachine, bTest) @@ -352,16 +350,32 @@ Namespace EgtCAM5 Return End If ' Altrimenti gestione file standard + OpenStdFile(sFile) + End Sub + + Friend Function OpenStdFile(sFile As String) As Boolean Dim nFileType As Integer = EgtGetFileType(sFile) Select Case nFileType Case FT.NGE, FT.NFE - m_Controller.OpenProject(sFile, False) + Return m_Controller.OpenProject(sFile, False) Case FT.DXF, FT.STL, FT.CNC, FT.CSF, FT.BTL - m_Controller.ImportProject(sFile, False) + Return m_Controller.ImportProject(sFile, False) Case FT.TSC, FT.LUA - m_Controller.Exec(sFile, False) + Return m_Controller.Exec(sFile, False) End Select - End Sub + Return False + End Function + + Friend Function OpenDoorFile(sFile As String, Optional bNcGen As Boolean = False, Optional bBatch As Boolean = False) As Boolean + ' Formato descrizione porte + If Path.GetExtension(sFile).ToLower() = ".ddf" Then + CreateDoors(sFile, bNcGen, bBatch) + EgtZoom(ZM.ALL) + Application.Msn.NotifyColleagues(Application.EMITTITLE) + Return True + End If + Return False + End Function Private Sub EmitTitle() ' nome file @@ -1249,7 +1263,7 @@ Namespace EgtCAM5 Private Sub OnNewProject(ByVal sender As Object, ByVal bOk As Boolean) Handles m_Controller.OnNewProject EgtZoom(ZM.ALL) If Not bOk Then - MessageBox.Show(EgtMsg(10002), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error on new file - Error + MessageBox.Show(Application.Current.MainWindow, EgtMsg(10002), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error on new file - Error End If End Sub @@ -1265,7 +1279,7 @@ Namespace EgtCAM5 Else IniFile.m_MruFiles.Remove(sFile) Dim sMsg As String = EgtMsg(10003) & " '" & sFile & "'" 'Error opening file - MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error + MessageBox.Show(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) 'Error End If End Sub @@ -1283,7 +1297,7 @@ Namespace EgtCAM5 Else IniFile.m_MruFiles.Remove(sFile) Dim sMsg As String = EgtMsg(10004) & " '" & sFile & "'" 'Error saving file - MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error + MessageBox.Show(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End Sub @@ -1297,7 +1311,7 @@ Namespace EgtCAM5 Else IniFile.m_MruFiles.Remove(sFile) Dim sMsg As String = EgtMsg(10004) & " '" & sFile & "'" 'Error saving file - MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error + MessageBox.Show(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End Sub @@ -1312,7 +1326,7 @@ Namespace EgtCAM5 nFlag = 0 End If Else - MessageBox.Show(EgtMsg(10005), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' File type unknown - Error + MessageBox.Show(Application.Current.MainWindow, EgtMsg(10005), EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' File type unknown - Error End If End Sub @@ -1321,7 +1335,7 @@ Namespace EgtCAM5 WritePrivateProfileString(S_GENERAL, K_LASTIMPDIR, Path.GetDirectoryName(sFile)) If Not bOk Then Dim sMsg As String = EgtMsg(10006) & " '" & sFile & "'" 'Error importing file - MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error + MessageBox.Show(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End Sub @@ -1332,7 +1346,7 @@ Namespace EgtCAM5 WritePrivateProfileString(S_GENERAL, K_LASTEXPDIR, Path.GetDirectoryName(sFile)) If Not bOk Then Dim sMsg As String = EgtMsg(10007) & " '" & sFile & "'" 'Error exporting file - MessageBox.Show(sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error + MessageBox.Show(Application.Current.MainWindow, sMsg, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If End Sub @@ -1352,7 +1366,7 @@ Namespace EgtCAM5 If m_bScriptInMru Then IniFile.m_MruScripts.Add(sFile) Else If m_bScriptInMru Then IniFile.m_MruScripts.Remove(sFile) - MessageBox.Show(sError, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error + MessageBox.Show(Application.Current.MainWindow, sError, EgtMsg(10001), MessageBoxButton.OK, MessageBoxImage.Error) ' Error End If ' Disabilito progress e bottone stop Application.Msn.NotifyColleagues(Application.NOTIFYSTATUSPROGRESS, 0) diff --git a/ToolsDbWindow/ToolDraw.vb b/ToolsDbWindow/ToolDraw.vb new file mode 100644 index 0000000..302032e --- /dev/null +++ b/ToolsDbWindow/ToolDraw.vb @@ -0,0 +1,172 @@ +Imports System.Globalization +Imports EgtUILib + + +Module ToolDraw + + ' Dati generali + Friend nToolContext As Integer = 0 + Friend nError As Integer = 0 + ' Dati utensile + Friend sHeadName As String = "" + Friend sExitName As String = "" + Friend nType As Integer = MCH_TY.NONE + Friend dTotLen As Double = 0 + Friend dLen As Double = 0 + Friend dTotDiam As Double = 0 + Friend dDiam As Double = 0 + Friend dThick As Double = 0 + Friend dMaxMat As Double = 0 + Friend dSideAng As Double = 0 + Friend dCornRad As Double = 0 + + Friend Function Create() As Boolean + ' Reset stato di errore + nError = 0 + ' Verifico esistenza creatore utensili + If Not LoadToolMaker() Then Return False + ' Recupero nome eventuale portautensile + Dim sToolHolder As String = GetToolHolderPath() + ' Assegno i dati utensile a seconda del tipo + Select Case nType + Case MCH_TY.DRILL_STD, MCH_TY.DRILL_LONG, MCH_TY.CHISEL_STD + ' imposto dati utensile + EgtLuaSetGlobStringVar("TOOL.TOOLHOLDER", sToolHolder) + EgtLuaSetGlobNumVar("TOOL.TOTLEN", dTotLen) + EgtLuaSetGlobNumVar("TOOL.LEN", dLen) + EgtLuaSetGlobNumVar("TOOL.DIAM", dDiam) + EgtLuaSetGlobNumVar("TOOL.MAXMAT", dMaxMat) + Case MCH_TY.SAW_STD, MCH_TY.SAW_FLAT + ' imposto dati utensile + EgtLuaSetGlobStringVar("TOOL.TOOLHOLDER", sToolHolder) + EgtLuaSetGlobNumVar("TOOL.LEN", dLen) + EgtLuaSetGlobNumVar("TOOL.DIAM", dDiam) + Dim dCore As Double = If(dLen >= dThick, dThick - 1, 2 * dLen - dThick) + EgtLuaSetGlobNumVar("TOOL.CORE", dCore) + EgtLuaSetGlobNumVar("TOOL.THICK", dThick) + EgtLuaSetGlobNumVar("TOOL.MAXMAT", dMaxMat) + Case MCH_TY.MILL_STD, MCH_TY.MILL_NOTIP + ' imposto dati utensile + EgtLuaSetGlobStringVar("TOOL.TOOLHOLDER", sToolHolder) + EgtLuaSetGlobNumVar("TOOL.TOTLEN", dTotLen) + EgtLuaSetGlobNumVar("TOOL.LEN", dLen) + EgtLuaSetGlobNumVar("TOOL.TOTDIAM", dTotDiam) + EgtLuaSetGlobNumVar("TOOL.DIAM", dDiam) + EgtLuaSetGlobNumVar("TOOL.MAXMAT", dMaxMat) + EgtLuaSetGlobNumVar("TOOL.HEIGHT", dThick) + EgtLuaSetGlobNumVar("TOOL.SIDEANG", dSideAng) + EgtLuaSetGlobNumVar("TOOL.CORNRAD", dCornRad) + Case Else + nError = 999 + Return False + End Select + ' passo all'ambiente di disegno dell'utensile + EgtSetCurrentContext(nToolContext) + ' eseguo creazione utensile + EgtLuaCallFunction("CreateTool") + ' recupero errore + Dim nErr As Integer = 999 + EgtLuaGetGlobIntVar("TOOL.ERR", nErr) + nError = nErr + Return (nError = 0) + End Function + + Private Function LoadToolMaker() As Boolean + Dim sMaker As String = String.Empty + EgtUILib.GetPrivateProfileString(S_TOOLS, ConvertTypeToString(nType), "", sMaker, IniFile.m_sCurrMachIniFilePath) + If String.IsNullOrWhiteSpace(sMaker) Then + nError = 1 + Return False + End If + ' Acquisisce solo il file lua, ma meglio impostare contesto disegno utensili (se ci sono chiamate...) + EgtSetCurrentContext(nToolContext) + If Not EgtLuaExecFile(IniFile.m_sToolMakersDir & "\" & sMaker) Then + nError = 2 + Return False + End If + Return True + End Function + + Private Function ConvertTypeToString(Type As Integer) As String + Select Case Type + Case MCH_TY.DRILL_STD, MCH_TY.DRILL_LONG + Return K_DRILLMAKER + Case MCH_TY.SAW_STD, MCH_TY.SAW_FLAT + Return K_SAWBLADEMAKER + Case MCH_TY.MILL_STD, MCH_TY.MILL_NOTIP + Return K_MILLMAKER + Case MCH_TY.MORTISE_STD + Return K_MORTISEMAKER + Case MCH_TY.CHISEL_STD + Return K_CHISELMAKER + Case MCH_TY.COMPO + Return Nothing + End Select + Return Nothing + End Function + + Private Function GetToolHolderPath() As String + Dim sHolder As String = String.Empty + If Not IsNothing(sHeadName) Then + Dim sTempExit As String = String.Empty + Dim nExit As Integer + If Integer.TryParse(sExitName, NumberStyles.Integer, CultureInfo.InvariantCulture, nExit) Then + sTempExit = sExitName + Else + sTempExit = "1" + End If + If nType = MCH_TY.SAW_STD Then + EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, sHeadName & "." & sTempExit & ":SAW_STD", "", sHolder, IniFile.m_sCurrMachIniFilePath) + ElseIf nType = MCH_TY.SAW_FLAT Then + EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, sHeadName & "." & sTempExit & ":SAW_FLAT", "", sHolder, IniFile.m_sCurrMachIniFilePath) + End If + If String.IsNullOrEmpty(sHolder) Then + EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, sHeadName & "." & sTempExit, "", sHolder, IniFile.m_sCurrMachIniFilePath) + End If + End If + If String.IsNullOrWhiteSpace(sHolder) Then + Return String.Empty + Else + Dim sHolderPath As String = String.Empty + EgtSetCurrentContext(IniFile.m_ProjectSceneContext) + EgtTdbGetToolHolderDir(sHolderPath) + sHolderPath += "\" & sHolder + Return sHolderPath + End If + End Function + + Friend Function Save(sName As String) As Boolean + ' Verifico sia di tipo costruibile + If nType <> MCH_TY.DRILL_STD And nType <> MCH_TY.DRILL_LONG And + nType <> MCH_TY.SAW_STD And nType <> MCH_TY.SAW_FLAT And + nType <> MCH_TY.MILL_STD And nType <> MCH_TY.MILL_NOTIP And + nType <> MCH_TY.CHISEL_STD Then + Return False + End If + ' Path del file da salvare + EgtSetCurrentContext(IniFile.m_ProjectSceneContext) + Dim sPath As String = String.Empty + EgtTdbGetToolDir(sPath) + sPath = sPath & "\" & sName + ' passo all'ambiente di disegno dell'utensile + EgtSetCurrentContext(nToolContext) + ' nascondo layer ausiliario + Dim nAuxId As Integer = GDB_ID.NULL + nAuxId = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(GDB_ID.ROOT), "AUX") + EgtSetStatus(nAuxId, GDB_ST.OFF) + ' se lama devo ruotare -90 deg attorno a Z+ + If nType = MCH_TY.SAW_STD Or nType = MCH_TY.SAW_FLAT Then + EgtRotate(EgtGetFirstGroupInGroup(GDB_ID.ROOT), Point3d.ORIG(), Vector3d.Z_AX(), -90, GDB_RT.GLOB) + End If + ' salvo il modello + Dim bOk As Boolean = EgtSaveFile(sPath, NGE.CMPTEXT) + ' eseguo controrotazione per lama + If nType = MCH_TY.SAW_STD Or nType = MCH_TY.SAW_FLAT Then + EgtRotate(EgtGetFirstGroupInGroup(GDB_ID.ROOT), Point3d.ORIG(), Vector3d.Z_AX(), 90, GDB_RT.GLOB) + End If + ' ripristino visualizzazione layer aux + EgtSetStatus(nAuxId, GDB_ST.ON_) + Return bOk + End Function + +End Module diff --git a/ToolsDbWindow/ToolTreeView.vb b/ToolsDbWindow/ToolTreeView.vb index 0a0ac6a..7900b7c 100644 --- a/ToolsDbWindow/ToolTreeView.vb +++ b/ToolsDbWindow/ToolTreeView.vb @@ -1194,21 +1194,16 @@ Public Class ToolTreeViewItem #Region "ToolSceneUpdate" ' Variabili che segnalano errori nel disegno dell'utensile - Dim m_bToolMakerError As Boolean = False - Dim m_bDrawNameExistError As Boolean = False - Dim m_bDrawNameError As Boolean = False Dim m_nDrawingError As Integer = 0 Private Sub UpdateSceneToolDraw() ' Azzero errori - m_bToolMakerError = False - m_bDrawNameError = False - m_bDrawNameExistError = False m_nDrawingError = 0 - ' Verifico proprietà draw + ' Se utensile con disegno automatico If String.IsNullOrEmpty(m_Draw) OrElse IsUUID(Path.GetFileNameWithoutExtension(m_Draw)) Then CreateToolDraw() + ' altrimenti utensile con disegno assegnato Else EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) If Path.GetExtension(m_Draw).ToLower = ".nge" Then @@ -1217,14 +1212,14 @@ Public Class ToolTreeViewItem EgtZoom(ZM.ALL) Else ' Errore - m_bDrawNameExistError = True + m_nDrawingError = 6 EgtNewFile() EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL) End If Else ' Errore - m_bDrawNameError = True + m_nDrawingError = 5 EgtNewFile() EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL) @@ -1239,184 +1234,47 @@ Public Class ToolTreeViewItem m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid And (IsModified Or NewTool), True) End If - End Sub Private Sub CreateToolDraw() - ' Carico il relativo ToolHolder - Dim ToolHolder As String = String.Empty - ToolHolder = LoadToolHolder() - If Not LoadToolMaker() OrElse Not CreateToolDraw(ToolHolder) Then - EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) - EgtNewFile() - End If + ' Imposto dati per creazione utensile + ToolDraw.nToolContext = IniFile.m_ToolsDbSceneContext + ToolDraw.sHeadName = m_SelectedHead.HName + ToolDraw.sExitName = m_SelectedExit + ToolDraw.nType = m_Type + StringToLen(m_TotLen, ToolDraw.dTotLen) + StringToLen(m_Len, ToolDraw.dLen) + StringToLen(m_TotDiam, ToolDraw.dTotDiam) + StringToLen(m_Diam, ToolDraw.dDiam) + StringToLen(m_Thick, ToolDraw.dThick) + StringToLen(m_MaxMat, ToolDraw.dMaxMat) + StringToDouble(m_SideAng, ToolDraw.dSideAng) + StringToLen(m_CornRad, ToolDraw.dCornRad) + ' Creo il disegno dell'utensile + ToolDraw.Create() + m_nDrawingError = ToolDraw.nError EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) + If m_nDrawingError <> 0 Then + EgtNewFile() + m_Draw = String.Empty + End If ' Aggiorno visualizzazione EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL) End Sub - ''' - ''' Mathod that load the toolholder for the current tool (based on his head), or return an empty string - ''' - Private Function LoadToolHolder() As String - Dim sHolder As String = String.Empty - If Not IsNothing(m_SelectedHead) Then - Dim TempExit As String = String.Empty - If CInt(m_SelectedExit) > 0 Then - TempExit = m_SelectedExit - Else - TempExit = "1" - End If - If Type = MCH_TY.SAW_STD Then - EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, SelectedHead.HName & "." & TempExit & ":SAW_STD", "", sHolder, IniFile.m_sCurrMachIniFilePath) - ElseIf Type = MCH_TY.SAW_FLAT Then - EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, SelectedHead.HName & "." & TempExit & ":SAW_FLAT", "", sHolder, IniFile.m_sCurrMachIniFilePath) - End If - If String.IsNullOrEmpty(sHolder) Then - EgtUILib.GetPrivateProfileString(S_TOOLHOLDER, SelectedHead.HName & "." & TempExit, "", sHolder, IniFile.m_sCurrMachIniFilePath) - End If - End If - If String.IsNullOrWhiteSpace(sHolder) Then - Return String.Empty - Else - Dim sHolderPath As String = String.Empty - EgtSetCurrentContext(IniFile.m_ProjectSceneContext) - EgtTdbGetToolHolderDir(sHolderPath) - sHolderPath += "\" & sHolder - Return sHolderPath - End If - End Function - - Private Function LoadToolMaker() As Boolean - Dim sMaker As String = String.Empty - EgtUILib.GetPrivateProfileString(S_TOOLS, ConvertTypeToString(Type), "", sMaker, IniFile.m_sCurrMachIniFilePath) - If String.IsNullOrWhiteSpace(sMaker) Then m_bToolMakerError = True - ' Acquisisce solo il file lua, ma meglio impostare contesto disegno utensili (se ci sono chiamate...) - EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) - Return EgtLuaExecFile(IniFile.m_sToolMakersDir & "\" & sMaker) - End Function - - Private Function ConvertTypeToString(Type As Integer) As String - Select Case Type - Case MCH_TY.DRILL_STD, MCH_TY.DRILL_LONG - Return K_DRILLMAKER - Case MCH_TY.SAW_STD, MCH_TY.SAW_FLAT - Return K_SAWBLADEMAKER - Case MCH_TY.MILL_STD, MCH_TY.MILL_NOTIP - Return K_MILLMAKER - Case MCH_TY.MORTISE_STD - Return K_MORTISEMAKER - Case MCH_TY.CHISEL_STD - Return K_CHISELMAKER - Case MCH_TY.COMPO - Return Nothing - End Select - Return Nothing - End Function - - Private Function CreateToolDraw(ToolHolder As String) As Boolean - Dim dTotLen As Double = 0 - Dim dLen As Double = 0 - Dim dTotDiam As Double = 0 - Dim dDiam As Double = 0 - Dim dThick As Double = 0 - Dim dMaxMat As Double = 0 - Dim dSideAng As Double = 0 - Dim dCornRad As Double = 0 - StringToLen(m_TotLen, dTotLen) - StringToLen(m_Len, dLen) - StringToLen(m_TotDiam, dTotDiam) - StringToLen(m_Diam, dDiam) - StringToLen(m_Thick, dThick) - StringToLen(m_MaxMat, dMaxMat) - StringToDouble(m_SideAng, dSideAng) - StringToLen(m_CornRad, dCornRad) - Select Case Type - Case MCH_TY.DRILL_STD, MCH_TY.DRILL_LONG, MCH_TY.CHISEL_STD - ' imposto dati utensile - EgtLuaSetGlobStringVar("TOOL.TOOLHOLDER", ToolHolder) - EgtLuaSetGlobNumVar("TOOL.TOTLEN", dTotLen) - EgtLuaSetGlobNumVar("TOOL.LEN", dLen) - EgtLuaSetGlobNumVar("TOOL.DIAM", dDiam) - EgtLuaSetGlobNumVar("TOOL.MAXMAT", dMaxMat) - Case MCH_TY.SAW_STD, MCH_TY.SAW_FLAT - ' imposto dati utensile - EgtLuaSetGlobStringVar("TOOL.TOOLHOLDER", ToolHolder) - EgtLuaSetGlobNumVar("TOOL.LEN", dLen) - EgtLuaSetGlobNumVar("TOOL.DIAM", dDiam) - Dim dCore As Double = If(dLen >= dThick, dThick - 1, 2 * dLen - dThick) - EgtLuaSetGlobNumVar("TOOL.CORE", dCore) - EgtLuaSetGlobNumVar("TOOL.THICK", dThick) - EgtLuaSetGlobNumVar("TOOL.MAXMAT", dMaxMat) - Case MCH_TY.MILL_STD, MCH_TY.MILL_NOTIP - ' imposto dati utensile - EgtLuaSetGlobStringVar("TOOL.TOOLHOLDER", ToolHolder) - EgtLuaSetGlobNumVar("TOOL.TOTLEN", dTotLen) - EgtLuaSetGlobNumVar("TOOL.LEN", dLen) - EgtLuaSetGlobNumVar("TOOL.TOTDIAM", dTotDiam) - EgtLuaSetGlobNumVar("TOOL.DIAM", dDiam) - EgtLuaSetGlobNumVar("TOOL.MAXMAT", dMaxMat) - EgtLuaSetGlobNumVar("TOOL.HEIGHT", dThick) - EgtLuaSetGlobNumVar("TOOL.SIDEANG", dSideAng) - EgtLuaSetGlobNumVar("TOOL.CORNRAD", dCornRad) - Case Else - m_nDrawingError = 999 - m_Draw = String.Empty - Return False - End Select - ' passo all'ambiente di disegno dell'utensile - EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) - ' eseguo creazione utensile - EgtLuaCallFunction("CreateTool") - ' recupero errore - Dim nErr As Integer = 999 - EgtLuaGetGlobIntVar("TOOL.ERR", nErr) - m_nDrawingError = nErr - If m_nDrawingError <> 0 Then m_Draw = String.Empty - If m_nDrawingError = 0 Then m_Draw = m_Uuid & ".nge" - Return (nErr = 0) - End Function - Friend Function SaveToolDraw() As Boolean - If m_Type = MCH_TY.DRILL_STD Or m_Type = MCH_TY.DRILL_LONG Or - m_Type = MCH_TY.SAW_STD Or m_Type = MCH_TY.SAW_FLAT Or - m_Type = MCH_TY.MILL_STD Or m_Type = MCH_TY.MILL_NOTIP Or - m_Type = MCH_TY.CHISEL_STD Then - ' nome e direttorio del file da salvare - EgtSetCurrentContext(IniFile.m_ProjectSceneContext) - Dim sDrawName As String = Uuid - sDrawName = sDrawName & ".nge" - Dim sPath As String = String.Empty - EgtTdbGetToolDir(sPath) - sPath = sPath & "\" & sDrawName - ' passo all'ambiente di disegno dell'utensile - EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) - ' nascondo layer ausiliario - Dim nAuxId As Integer = GDB_ID.NULL - nAuxId = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(GDB_ID.ROOT), "AUX") - EgtSetStatus(nAuxId, GDB_ST.OFF) - ' se lama devo ruotare -90 deg attorno a Z+ - If m_Type = MCH_TY.SAW_STD Or m_Type = MCH_TY.SAW_FLAT Then - EgtRotate(EgtGetFirstGroupInGroup(GDB_ID.ROOT), Point3d.ORIG(), Vector3d.Z_AX(), -90, GDB_RT.GLOB) - End If - ' salvo il modello - Dim z = EgtGetCurrentContext() - Dim bOk As Boolean = EgtSaveFile(sPath, NGE.CMPTEXT) - Dim e = EgtGetCurrentContext() - ' eseguo controrotazione per lama - If m_Type = MCH_TY.SAW_STD Or m_Type = MCH_TY.SAW_FLAT Then - EgtRotate(EgtGetFirstGroupInGroup(GDB_ID.ROOT), Point3d.ORIG(), Vector3d.Z_AX(), 90, GDB_RT.GLOB) - End If - ' ripristino visualizzazione layer aux - EgtSetStatus(nAuxId, GDB_ST.ON_) - ' salvo nome del disegno utensile - EgtSetCurrentContext(IniFile.m_ProjectSceneContext) - EgtTdbSetCurrToolParam(MCH_TP.DRAW, sDrawName) - EgtTdbSaveCurrTool() - Return bOk - End If - Return False + ' Imposto dati per salvataggio utensile + ToolDraw.nToolContext = IniFile.m_ToolsDbSceneContext + ToolDraw.nType = m_Type + ' Eseguo salvataggio + Dim sName As String = Uuid & ".nge" + If Not ToolDraw.Save(sName) Then Return False + ' Salvo nome del disegno utensile + EgtSetCurrentContext(IniFile.m_ProjectSceneContext) + EgtTdbSetCurrToolParam(MCH_TP.DRAW, sName) + EgtTdbSaveCurrTool() + Return True End Function #End Region ' ToolSceneUpdate @@ -1797,46 +1655,39 @@ Public Class ToolTreeViewItem Private Function ValidateDraw() As Boolean m_DrawError = String.Empty - If m_bDrawNameError Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 2) - End If - If m_bDrawNameExistError Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 3) - End If - If m_bToolMakerError Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 4) - End If - If m_nDrawingError = 12 Then + If m_nDrawingError = 5 Then + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 2) ' Il file deve essere .nge + ElseIf m_nDrawingError = 6 Then + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 3) ' Il file non esiste + ElseIf m_nDrawingError = 1 Or m_nDrawingError = 2 Then + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 4) ' Non esiste il ToolMaker per questo tipo di utensile + ElseIf m_nDrawingError = 12 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 21) ' Utensile troppo corto con il portautensile ElseIf m_nDrawingError = 13 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 31) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 31) ' Lo Spessore deve essere differente da 0 ElseIf m_nDrawingError = 14 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 32) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 32) ' L'Angolo di Lato deve essere inferiore di 90 ElseIf m_nDrawingError = 15 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 33) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 33) ' L'Angolo di Lato deve essere maggiore di -90 ElseIf m_nDrawingError = 16 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 35) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 35) ' Raggio Corner ha un valore troppo grande ElseIf m_nDrawingError = 17 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 36) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 36) ' Lo Spessore ha un valore troppo piccolo rispetto al Raggio Corne ElseIf m_nDrawingError = 18 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 37) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 37) ' Il diametro risultante supera il Diametro Totale ElseIf m_nDrawingError = 19 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 38) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 38) ' Il diametro risultante è minore di 0 ElseIf m_nDrawingError = 20 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 39) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 39) ' Il diametro stelo risultante è minore o uguale a 0 ElseIf m_nDrawingError = 21 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 40) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 40) ' Il Massimo Materiale deve essere più grande del Raggio Corner ElseIf m_nDrawingError = 22 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 34) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 34) ' La Lunghezza Totale deve essere maggiore di Lunghezza + Spessore ElseIf m_nDrawingError <> 0 Then - m_DrawError = EgtMsg(MSG_TOOLSERRORS + 5) + m_DrawError = EgtMsg(MSG_TOOLSERRORS + 5) ' Impossibile creare l'utensile con questi parametri End If NotifyPropertyChanged("DrawErrorMsg") - If String.IsNullOrEmpty(m_DrawError) Then - Return True - Else - Return False - End If + Return String.IsNullOrEmpty(m_DrawError) End Function Private Function ValidateSelectedHead() As Boolean diff --git a/ToolsDbWindow/ToolsUpdate.vb b/ToolsDbWindow/ToolsUpdate.vb index 719ef41..a26ea01 100644 --- a/ToolsDbWindow/ToolsUpdate.vb +++ b/ToolsDbWindow/ToolsUpdate.vb @@ -101,6 +101,8 @@ Module ToolsUpdate Private Function ExecUpdate(ByRef vCldTool As List(Of CldTool), bTest As Boolean, ByRef sInfo As String) As Boolean ' Classe di confronto Dim ToolComp As New CldToolComparer + ' Leggo direttorio toolmakers + GetPrivateProfileString(S_MACH, K_TOOLMAKERSDIR, "", IniFile.m_sToolMakersDir) ' Ciclo su tutti gli utensili nel DB Const ALL_TOOLS As Integer = MCH_TF.DRILLBIT + MCH_TF.SAWBLADE + MCH_TF.MILL + MCH_TF.MORTISE + MCH_TF.CHISEL + MCH_TF.COMPO Dim sName As String = String.Empty @@ -145,6 +147,23 @@ Module ToolsUpdate Else EgtTdbSetCurrToolParam(MCH_TP.MAXMAT, dMaxMat + dDeltaL) End If + ' Se non esiste il disegno dell'utensile o modificato + Dim sDrawStat As String = "Ok" + Dim sDraw As String = String.Empty + EgtTdbGetCurrToolParam(MCH_TP.DRAW, sDraw) + Dim sPath As String = String.Empty + EgtTdbGetToolDir(sPath) + sPath = sPath & "\" & sDraw + If Not bTest And (EgtTdbIsCurrToolModified() OrElse Not File.Exists(sPath)) Then + ' Se disegno automatico, lo aggiorno + If IsUUID(Path.GetFileNameWithoutExtension(sDraw)) Then + If ExecToolDraw(sDraw) Then + sDrawStat = "Modified" + Else + sDrawStat = "Editing Error" + End If + End If + End If ' Se non è test salvo modifiche utensile If Not bTest Then EgtTdbSaveCurrTool() ' informazioni @@ -152,7 +171,8 @@ Module ToolsUpdate " L=" & dLen.ToString("F3", CultureInfo.InvariantCulture) & " D=" & dDiam.ToString("F3", CultureInfo.InvariantCulture) & " NewL=" & vCldTool(nI).dLen.ToString("F3", CultureInfo.InvariantCulture) & - " NewD=" & vCldTool(nI).dDiam.ToString("F3", CultureInfo.InvariantCulture) + " NewD=" & vCldTool(nI).dDiam.ToString("F3", CultureInfo.InvariantCulture) & + " Draw=" & sDrawStat sInfo &= sOut & vbCrLf EgtOutLog(sOut) Else @@ -172,6 +192,36 @@ Module ToolsUpdate Return True End Function + Private Function ExecToolDraw(sName As String) As Boolean + ' Recupero dati dell'utensile corrente + EgtTdbGetCurrToolParam(MCH_TP.HEAD, ToolDraw.sHeadName) + Dim nExit As Integer = 0 + EgtTdbGetCurrToolParam(MCH_TP.EXIT_, nExit) + ToolDraw.sExitName = nExit.ToString() + EgtTdbGetCurrToolParam(MCH_TP.EXIT_, nExit) + EgtTdbGetCurrToolParam(MCH_TP.TYPE, ToolDraw.nType) + EgtTdbGetCurrToolParam(MCH_TP.TOTLEN, ToolDraw.dTotLen) + EgtTdbGetCurrToolParam(MCH_TP.LEN, ToolDraw.dLen) + EgtTdbGetCurrToolParam(MCH_TP.TOTDIAM, ToolDraw.dTotDiam) + EgtTdbGetCurrToolParam(MCH_TP.DIAM, ToolDraw.dDiam) + EgtTdbGetCurrToolParam(MCH_TP.THICK, ToolDraw.dThick) + EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, ToolDraw.dMaxMat) + EgtTdbGetCurrToolParam(MCH_TP.SIDEANG, ToolDraw.dSideAng) + EgtTdbGetCurrToolParam(MCH_TP.CORNRAD, ToolDraw.dCornRad) + ' Creo contesto temporaneo per disegno utensile + Dim nTempCtx As Integer = EgtInitContext() + If nTempCtx = 0 Then Return False + ToolDraw.nToolContext = nTempCtx + ' Creo il disegno dell'utensile + If Not ToolDraw.Create() Then Return False + ' Salvo il disegno dell'utensile + Dim bOk As Boolean = ToolDraw.Save(sName) + ' Cancello il contesto temporaneo e ripristino quello di progetto + EgtDeleteContext(nTempCtx) + EgtSetCurrentContext(IniFile.m_ProjectSceneContext) + Return bOk + End Function + Private Function ToolTypeToString(nType As Integer) As String Select Case nType Case MCH_TY.DRILL_STD