From d0192bfaa6ed2128ea993a00c79bd2d62f7153a1 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 10 Dec 2018 07:57:49 +0000 Subject: [PATCH] EgtCAM5 1.9l1 : - migliorate icone della TopBar e di esecuzione script - aggiunti a opzioni fattori di scala per import Dxf, Stl e immagini - aggiunte a opzioni dimensioni immagini di export. --- Constants/ConstIni.vb | 3 + EgtCAM5.vbproj | 3 + MachinePanel/MachinePanelV.xaml | 4 +- MachinePanel/MachinePanelVM.vb | 5 + MainWindow/MainWindowVM.vb | 18 +- My Project/AssemblyInfo.vb | 4 +- OptionsWindow/OptionModule.vb | 79 +++++--- OptionsWindow/OptionWindowV.xaml | 58 +++++- OptionsWindow/OptionWindowVM.vb | 227 +++++++++++++++++----- Project/ProjectVM.vb | 7 +- Resources/MachinePanel/MachineOptions.png | Bin 0 -> 2381 bytes Resources/TopCommandBar/Exec.png | Bin 973 -> 949 bytes Resources/TopCommandBar/Export.png | Bin 903 -> 603 bytes Resources/TopCommandBar/Import.png | Bin 901 -> 671 bytes Resources/TopCommandBar/Insert.png | Bin 853 -> 676 bytes Resources/TopCommandBar/New.png | Bin 538 -> 537 bytes Resources/TopCommandBar/Open.png | Bin 711 -> 623 bytes Resources/TopCommandBar/Options.png | Bin 2381 -> 2708 bytes Resources/TopCommandBar/SaveAs.png | Bin 973 -> 751 bytes 19 files changed, 305 insertions(+), 103 deletions(-) create mode 100644 Resources/MachinePanel/MachineOptions.png diff --git a/Constants/ConstIni.vb b/Constants/ConstIni.vb index 060d7cf..075de4e 100644 --- a/Constants/ConstIni.vb +++ b/Constants/ConstIni.vb @@ -86,6 +86,9 @@ Module ConstIni Public Const K_MAJLNCOLOR As String = "MajLnColor" Public Const S_IMPORT As String = "Import" + Public Const K_DXFSCALE As String = "DxfScale" + Public Const K_STLSCALE As String = "StlScale" + Public Const K_IMGSCALE As String = "ImgScale" Public Const K_CNCFLAG As String = "CncFlag" Public Const K_BTLFLAG As String = "BtlFlag" diff --git a/EgtCAM5.vbproj b/EgtCAM5.vbproj index c50bd1a..57cbc48 100644 --- a/EgtCAM5.vbproj +++ b/EgtCAM5.vbproj @@ -702,6 +702,9 @@ + + + IF "$(PlatformName)"=="x86" IF "$(ConfigurationName)" == "Release" copy $(TargetPath) c:\EgtProg\EgtCAM5\EgtCAM5R32.exe diff --git a/MachinePanel/MachinePanelV.xaml b/MachinePanel/MachinePanelV.xaml index aba046d..a96df76 100644 --- a/MachinePanel/MachinePanelV.xaml +++ b/MachinePanel/MachinePanelV.xaml @@ -7,8 +7,8 @@ Style="{StaticResource GridViewPanelButton}" Width="55" Content="{Binding ToolDBMsg}"/> diff --git a/MachinePanel/MachinePanelVM.vb b/MachinePanel/MachinePanelVM.vb index 85d0b2c..d5d9e43 100644 --- a/MachinePanel/MachinePanelVM.vb +++ b/MachinePanel/MachinePanelVM.vb @@ -37,6 +37,11 @@ Public Class MachinePanelVM Return EgtMsg(MSG_MAINWINDOW + 4) End Get End Property + Public ReadOnly Property MachOptionsToolTip As String + Get + Return EgtMsg(MSG_MAINWINDOW + 8) + End Get + End Property #End Region ' ToolTip diff --git a/MainWindow/MainWindowVM.vb b/MainWindow/MainWindowVM.vb index 4ba7077..19baca3 100644 --- a/MainWindow/MainWindowVM.vb +++ b/MainWindow/MainWindowVM.vb @@ -339,26 +339,10 @@ Public Class MainWindowVM If GetPrivateProfileString(S_GENERAL, K_MESSAGESDIR, "", sMsgDir) = 0 Then sMsgDir = m_sConfigDir End If - ' Leggo elenco lingue disponibili da file ini - Dim nIndex As Integer = 1 - Dim ReadLanguage As Language = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex) - While Not IsNothing(ReadLanguage) - OptionModule.m_LanguageList.Add(ReadLanguage) - nIndex += 1 - ReadLanguage = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex) - End While ' Inizializzo OptionModule OptionModule.InitOptionModule() ' Leggo file messaggi - Dim sMsgName As String = String.Empty - GetPrivateProfileString(S_GENERAL, K_MESSAGES, "", sMsgName) - Dim sMsgFilePath As String = sMsgDir & "\EgalTechIta.txt" - For Each Language In OptionModule.m_LanguageList - If Language.Name = sMsgName Then - OptionModule.m_SelectedLanguage = Language - sMsgFilePath = sMsgDir & "\" & Language.FilePath - End If - Next + Dim sMsgFilePath As String = sMsgDir & "\" & OptionModule.m_SelectedLanguage.FilePath If Not EgtLoadMessages(sMsgFilePath) Then EgtOutLog("Error in EgtLoadMessages") End If diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index dc9162c..f273084 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -70,5 +70,5 @@ Imports System.Windows ' by using the '*' as shown below: ' - - + + diff --git a/OptionsWindow/OptionModule.vb b/OptionsWindow/OptionModule.vb index de96c14..a496cba 100644 --- a/OptionsWindow/OptionModule.vb +++ b/OptionsWindow/OptionModule.vb @@ -6,8 +6,22 @@ Friend Module OptionModule ' Parametri che contengono lista delle lingue disponibili e lingua selezionata Friend m_LanguageList As New ObservableCollection(Of Language) Friend m_SelectedLanguage As Language + ' Colori di sfondo della vista e della griglia + Friend m_TopSceneBackground As Color3d + Friend m_BotSceneBackground As Color3d + Friend m_GridColor As Color3d + ' Flag per visualizzazione smussata delle superfici + Friend m_bTriMeshSmoothed As Boolean + + ' Colore di default in disegno + Friend m_DefMaterialColor As Color3d + ' Tolleranza geometrica + Friend m_dGeometryTolerance As Double ' Parametri per import + Friend m_dDxfScaleFactor As Double + Friend m_dStlScaleFactor As Double + Friend m_dImgScaleFactor As Double ' Parametri per export Friend m_nImgWidth As Integer @@ -23,22 +37,52 @@ Friend Module OptionModule Friend m_SelGeomSawFinishing As SceneSelModeOpt Friend m_SelGeomGenMachining As SceneSelModeOpt Friend m_SelGeomChiseling As SceneSelModeOpt - - ' Tolleranza geometrica - Friend m_GeometryTolerance As Double - ' Variabile che indica se quando viene creata una nuova operazione di lavorazione deve essere aggiunta in fondo - ' alla fase o subito dopo la lavorazione selezionata + ' Flag per aggiungere una nuova lavorazione alla fine della fase o subito dopo la lavorazione selezionata Friend m_bNewMachiningIsLastOne As Boolean ' Variabile che indica se usare lo script per calcolare automaticamente la disposizione quando si passa in lavorazione Friend m_bUseDispositionScript As Boolean - Friend m_TopSceneBackground As Color3d - Friend m_BotSceneBackground As Color3d - Friend m_GridColor As Color3d - Friend m_DefMaterialColor As Color3d - ' inizializzazione lettura variabili ad inizio programma Friend Sub InitOptionModule() + ' Leggo elenco lingue disponibili da file ini + Dim nIndex As Integer = 1 + Dim ReadLanguage As Language = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex) + While Not IsNothing(ReadLanguage) + OptionModule.m_LanguageList.Add(ReadLanguage) + nIndex += 1 + ReadLanguage = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex) + End While + ' Inizializzo la lingua corrente + Dim sMsgName As String = String.Empty + GetPrivateProfileString(S_GENERAL, K_MESSAGES, "", sMsgName) + For Each Language In OptionModule.m_LanguageList + If Language.Name = sMsgName Then + OptionModule.m_SelectedLanguage = Language + Exit For + End If + Next + ' Inizializzo variabili colori di sfondo scena, griglia + Dim BackTopColor As New Color3d(192, 192, 192) + GetPrivateProfileColor(S_SCENE, K_BACKTOP, BackTopColor) + m_TopSceneBackground = BackTopColor + Dim BackBotColor As New Color3d(BackTopColor) + GetPrivateProfileColor(S_SCENE, K_BACKBOTTOM, BackBotColor) + m_BotSceneBackground = BackBotColor + Dim GridColor As New Color3d(0, 0, 0) + GetPrivateProfileColor(S_GRID, K_MINLNCOLOR, GridColor) + m_GridColor = GridColor + ' Inizializzo flag visualizzazione smussata delle superfici + m_bTriMeshSmoothed = GetPrivateProfileInt(S_SCENE, K_SHOWTRIAADV, 1) <> 0 + ' Inizio colore di default in disegno + Dim DefColor As New Color3d(0, 0, 0) + GetPrivateProfileColor(S_GEOMDB, K_DEFAULTCOLOR, DefColor) + m_DefMaterialColor = DefColor + ' Inizializzo tolleranza geometrica + m_dGeometryTolerance = GetPrivateProfileDouble(S_GEOMDB, K_SURFTMTOLER, 0.05) + ' Inizializzo variabili per import + m_dDxfScaleFactor = GetPrivateProfileDouble(S_IMPORT, K_DXFSCALE, 1) + m_dStlScaleFactor = GetPrivateProfileDouble(S_IMPORT, K_STLSCALE, 1) + m_dImgScaleFactor = GetPrivateProfileDouble(S_IMPORT, K_IMGSCALE, 1) ' Inizializzo variabili per export m_nImgWidth = GetPrivateProfileInt(S_EXPORT, K_IMGWIDTH, 400) m_nImgHeight = GetPrivateProfileInt(S_EXPORT, K_IMGHEIGHT, 300) @@ -62,25 +106,10 @@ Friend Module OptionModule m_SelGeomGenMachining = If(Temp < 0 Or Temp > 3, SceneSelModeOpt.PARTCURVESANDSURFACES, DirectCast(Temp, SceneSelModeOpt)) Temp = GetPrivateProfileInt(S_MACH, K_SELGEOMCHISELING, -1) m_SelGeomChiseling = If(Temp < 0 Or Temp > 3, SceneSelModeOpt.PARTCURVESANDSURFACES, DirectCast(Temp, SceneSelModeOpt)) - ' Inizializzo tolleranza geometrica - m_GeometryTolerance = GetPrivateProfileDouble(S_GEOMDB, K_SURFTMTOLER, 0.05) ' Inizializzo variabile che indica posizione nuova operazione di lavorazione m_bNewMachiningIsLastOne = If(GetPrivateProfileInt(S_OPTIONS, K_NEWMACHININGISLASTONE, 0) <> 0, True, False) ' Inizializzo variabile che indica se usare script di disposizione m_bUseDispositionScript = If(GetPrivateProfileInt(S_OPTIONS, K_USEDISPOSITIONSCRIPT, 0) <> 0, True, False) - ' Inizializzo variabili colori di sfondo scena, griglia e materiale default - Dim BackTopColor As New Color3d(192, 192, 192) - GetPrivateProfileColor(S_SCENE, K_BACKTOP, BackTopColor) - Dim BackBotColor As New Color3d(BackTopColor) - GetPrivateProfileColor(S_SCENE, K_BACKBOTTOM, BackBotColor) - Dim DefColor As New Color3d(0, 0, 0) - GetPrivateProfileColor(S_GEOMDB, K_DEFAULTCOLOR, DefColor) - Dim GridColor As New Color3d(0, 0, 0) - GetPrivateProfileColor(S_GRID, K_MINLNCOLOR, GridColor) - m_TopSceneBackground = BackTopColor - m_BotSceneBackground = BackBotColor - m_GridColor = GridColor - m_DefMaterialColor = DefColor End Sub End Module diff --git a/OptionsWindow/OptionWindowV.xaml b/OptionsWindow/OptionWindowV.xaml index 1020df4..16db635 100644 --- a/OptionsWindow/OptionWindowV.xaml +++ b/OptionsWindow/OptionWindowV.xaml @@ -50,6 +50,24 @@ Command="{Binding GridColor_Command}" Style="{StaticResource EgtCAM5_InputButton}"/> + + + + + + + + + + + + + + + + @@ -57,10 +75,6 @@ Command="{Binding DefMaterialColor_Command}" Style="{StaticResource EgtCAM5_InputButton}"/> - - - - @@ -70,6 +84,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OptionsWindow/OptionWindowVM.vb b/OptionsWindow/OptionWindowVM.vb index b3b4151..782a42f 100644 --- a/OptionsWindow/OptionWindowVM.vb +++ b/OptionsWindow/OptionWindowVM.vb @@ -92,35 +92,35 @@ Public Class OptionWindowVM Public Property GeometryTolerance As String Get - Return LenToString(m_GeometryTolerance, 5) + Return LenToString(OptionModule.m_dGeometryTolerance, 5) End Get Set(value As String) Dim dVal As Double = 0 If StringToLen(value, dVal) AndAlso dVal > 0 Then - m_GeometryTolerance = dVal - Map.refProjectVM.GetController.SetSurfTmTolerance(m_GeometryTolerance) - WritePrivateProfileString(S_GEOMDB, K_SURFTMTOLER, DoubleToString(m_GeometryTolerance, 5)) + OptionModule.m_dGeometryTolerance = dVal + Map.refProjectVM.GetController.SetSurfTmTolerance(OptionModule.m_dGeometryTolerance) + WritePrivateProfileString(S_GEOMDB, K_SURFTMTOLER, DoubleToString(OptionModule.m_dGeometryTolerance, 5)) End If End Set End Property Public Property NewMachiningIsLastOne As Boolean Get - Return m_bNewMachiningIsLastOne + Return OptionModule.m_bNewMachiningIsLastOne End Get Set(value As Boolean) - m_bNewMachiningIsLastOne = value - WritePrivateProfileString(S_OPTIONS, K_NEWMACHININGISLASTONE, If(value, 1, 0).ToString) + OptionModule.m_bNewMachiningIsLastOne = value + WritePrivateProfileString(S_OPTIONS, K_NEWMACHININGISLASTONE, If(value, "1", "0")) End Set End Property Public Property UseDispositionScript As Boolean Get - Return m_bUseDispositionScript + Return OptionModule.m_bUseDispositionScript End Get Set(value As Boolean) - m_bUseDispositionScript = value - WritePrivateProfileString(S_OPTIONS, K_USEDISPOSITIONSCRIPT, If(value, 1, 0).ToString) + OptionModule.m_bUseDispositionScript = value + WritePrivateProfileString(S_OPTIONS, K_USEDISPOSITIONSCRIPT, If(value, "1", "0")) End Set End Property @@ -160,6 +160,88 @@ Public Class OptionWindowVM End Get End Property + Public Property SmoothTriMesh As Boolean + Get + Return OptionModule.m_bTriMeshSmoothed + End Get + Set(value As Boolean) + OptionModule.m_bTriMeshSmoothed = value + WritePrivateProfileString(S_SCENE, K_SHOWTRIAADV, If(value, "1", "0")) + EgtSetShowTriaAdv(value) + End Set + End Property + + Public Property DxfScaleFactor As String + Get + Return LenToString(OptionModule.m_dDxfScaleFactor, 5) + End Get + Set(value As String) + Dim dVal As Double = 0 + If StringToLen(value, dVal) AndAlso dVal > 0 Then + OptionModule.m_dDxfScaleFactor = dVal + WritePrivateProfileString(S_IMPORT, K_DXFSCALE, DoubleToString(OptionModule.m_dDxfScaleFactor, 5)) + Map.refProjectVM.GetController().SetScaleForDxfImport(OptionModule.m_dDxfScaleFactor) + End If + End Set + End Property + + Public Property StlScaleFactor As String + Get + Return LenToString(OptionModule.m_dStlScaleFactor, 5) + End Get + Set(value As String) + Dim dVal As Double = 0 + If StringToLen(value, dVal) AndAlso dVal > 0 Then + OptionModule.m_dStlScaleFactor = dVal + WritePrivateProfileString(S_IMPORT, K_STLSCALE, DoubleToString(OptionModule.m_dStlScaleFactor, 5)) + Map.refProjectVM.GetController().SetScaleForStlImport(OptionModule.m_dStlScaleFactor) + End If + End Set + End Property + + Public Property ImageScaleFactor As String + Get + Return LenToString(OptionModule.m_dImgScaleFactor, 5) + End Get + Set(value As String) + Dim dVal As Double = 0 + If StringToLen(value, dVal) AndAlso dVal > 0 Then + OptionModule.m_dImgScaleFactor = dVal + WritePrivateProfileString(S_IMPORT, K_IMGSCALE, DoubleToString(OptionModule.m_dImgScaleFactor, 5)) + Map.refProjectVM.GetController().SetScaleForImageImport(OptionModule.m_dImgScaleFactor) + End If + End Set + End Property + + Public Property ImageWidth As String + Get + Return OptionModule.m_nImgWidth.ToString() + End Get + Set(value As String) + Dim nVal As Integer = 0 + If Integer.TryParse(value, nVal) AndAlso nVal > 0 Then + OptionModule.m_nImgWidth = nVal + WritePrivateProfileString(S_EXPORT, K_IMGWIDTH, OptionModule.m_nImgWidth.ToString()) + Map.refProjectVM.GetController().SetDefaultForImageExport(OptionModule.m_nImgWidth, OptionModule.m_nImgHeight) + End If + End Set + End Property + + Public Property ImageHeight As String + Get + Return OptionModule.m_nImgHeight.ToString() + End Get + Set(value As String) + Dim nVal As Integer = 0 + If Integer.TryParse(value, nVal) AndAlso nVal > 0 Then + OptionModule.m_nImgHeight = nVal + WritePrivateProfileString(S_EXPORT, K_IMGHEIGHT, OptionModule.m_nImgHeight.ToString()) + Map.refProjectVM.GetController().SetDefaultForImageExport(OptionModule.m_nImgWidth, OptionModule.m_nImgHeight) + End If + End Set + End Property + + ' Definizione comandi Private m_cmdCloseOptions As ICommand Private m_cmdTopSceneBackground As ICommand @@ -180,16 +262,6 @@ Public Class OptionWindowVM Return EgtMsg(MSG_OPTIONPAGE + 14) End Get End Property - Public ReadOnly Property CADMsg As String - Get - Return EgtMsg(MSG_OPTIONPAGE + 15) - End Get - End Property - Public ReadOnly Property CAMMsg As String - Get - Return EgtMsg(MSG_OPTIONPAGE + 16) - End Get - End Property Public ReadOnly Property CurrentLanguageMsg As String Get @@ -201,6 +273,90 @@ Public Class OptionWindowVM Return EgtMsg(MSG_OPTIONPAGE + 2) End Get End Property + Public ReadOnly Property TopSceneBackgroundMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 10) + End Get + End Property + Public ReadOnly Property BotSceneBackgroundMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 11) + End Get + End Property + Public ReadOnly Property GridColorMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 17) + End Get + End Property + Public ReadOnly Property SmoothTriMeshMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 18) + End Get + End Property + + Public ReadOnly Property CADMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 15) + End Get + End Property + Public ReadOnly Property GeometryToleranceMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 13) + End Get + End Property + Public ReadOnly Property DefMaterialColorMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 12) + End Get + End Property + + Public ReadOnly Property ImportMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 19) + End Get + End Property + Public ReadOnly Property DxfScaleFactorMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 20) + End Get + End Property + Public ReadOnly Property StlScaleFactorMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 21) + End Get + End Property + Public ReadOnly Property ImageScaleFactorMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 22) + End Get + End Property + + Public ReadOnly Property ExportMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 23) + End Get + End Property + Public ReadOnly Property ImageMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 24) + End Get + End Property + Public ReadOnly Property ImageWidthMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 25) + End Get + End Property + Public ReadOnly Property ImageHeightMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 26) + End Get + End Property + + Public ReadOnly Property CAMMsg As String + Get + Return EgtMsg(MSG_OPTIONPAGE + 16) + End Get + End Property Public ReadOnly Property MachiningSelGeomMsg As String Get Return EgtMsg(MSG_OPTIONPAGE + 6) @@ -236,48 +392,17 @@ Public Class OptionWindowVM Return EgtMsg(MSG_MACHININGSDBPAGE + 9) End Get End Property - - Public ReadOnly Property GeometryToleranceMsg As String - Get - Return EgtMsg(MSG_OPTIONPAGE + 13) - End Get - End Property Public ReadOnly Property NewMachiningPosMsg As String Get Return EgtMsg(MSG_OPTIONPAGE + 7) End Get End Property - Public ReadOnly Property UseDispositionScriptMsg As String Get Return EgtMsg(MSG_OPTIONPAGE + 8) End Get End Property - Public ReadOnly Property TopSceneBackgroundMsg As String - Get - Return EgtMsg(MSG_OPTIONPAGE + 10) - End Get - End Property - - Public ReadOnly Property BotSceneBackgroundMsg As String - Get - Return EgtMsg(MSG_OPTIONPAGE + 11) - End Get - End Property - - Public ReadOnly Property GridColorMsg As String - Get - Return EgtMsg(MSG_OPTIONPAGE + 17) - End Get - End Property - - Public ReadOnly Property DefMaterialColorMsg As String - Get - Return EgtMsg(MSG_OPTIONPAGE + 12) - End Get - End Property - #End Region #Region "COMMANDS" diff --git a/Project/ProjectVM.vb b/Project/ProjectVM.vb index 241b243..5f87623 100644 --- a/Project/ProjectVM.vb +++ b/Project/ProjectVM.vb @@ -258,8 +258,7 @@ Public Class ProjectVM MessageBoxButton.OK, MessageBoxImage.Warning) End If End If - Dim dSurfTmToler As Double = GetPrivateProfileDouble(S_GEOMDB, K_SURFTMTOLER, 0.05) - m_Controller.SetSurfTmTolerance(dSurfTmToler) + m_Controller.SetSurfTmTolerance(OptionModule.m_dGeometryTolerance) m_Controller.SetUseCustomColors(True, S_SCENE, K_CUSTOMCOLORS) ' imposto unità di misura per interfaccia utente IniFile.m_bMmUnits = (GetPrivateProfileInt(S_SCENE, K_MMUNITS, 1) <> 0) @@ -305,6 +304,10 @@ Public Class ProjectVM ' Imposto stato filtro selezione m_ProjectScene.GetObjFilterForSel(m_bSelZeroDim, m_bSelCurve, m_bSelSurf, m_bSelVolume, m_bSelExtra) m_Controller.MouseSetObjFilterForSelect(m_bSelZeroDim, m_bSelCurve, m_bSelSurf, m_bSelVolume, m_bSelExtra) + ' Imposto default per import + m_Controller.SetScaleForDxfImport(OptionModule.m_dDxfScaleFactor) + m_Controller.SetScaleForStlImport(OptionModule.m_dStlScaleFactor) + m_Controller.SetScaleForImageImport(OptionModule.m_dImgScaleFactor) ' Imposto default per export m_Controller.SetDefaultForImageExport(OptionModule.m_nImgWidth, OptionModule.m_nImgHeight) End Sub diff --git a/Resources/MachinePanel/MachineOptions.png b/Resources/MachinePanel/MachineOptions.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb84bbce86dc5c047a597e9952657f3c421f940 GIT binary patch literal 2381 zcmV-T39|NyP)&q+D$gs9HtAs6hl&;z7WQ1yqQNQK@Hyh(w|h1L7GaDu;+7U=%|{Eq{2R6{FC2 zQ=nQEY)k2}yY=_TmJGwp?96nhTar%lGCQ4l-+S+S-|_pt?=>T%@9MkyuHJNw9#!n~ z`vV0Pb1E~FeVgU;4`W#FX^N&_rWs}m`Z&(og=6wAm)l)N(aa`?)7gR6>2gy$c|pk2 z>Jtcta-A;s5%O(U1C8GqmR-j4Lg87(0A3I;b-G+X%NNtt+!XbRRzJ6!TC3KFG|+2= zloXyV65zmuk83T4G>#X>D*F`|k7KawNA>&hPg$8$W=}H#`aGupgpUYOL>_}|X6LM0&9 zhxNqTN(0S5*-|XMiAj##@;j7WOBQWVw+sh7TVNUNDQ$r`fz0p}yJp)+T$Q0SwbC z7Tntx{(zKYb}S&oiC{#F+3_HilWb!^c1~WTD;P4`D2jfyJ3AAU!g-)mXOijf*(n7R zO{&0gh&J8baS=FOAhSV98-lcrwlN_uFaLT|Qb03RsTvy#TW4_Gm>`N1ZDRtgdWi`s z_{}QJ)d{zPD>+I}2ss}65!i0D%7S&5K*&%#7?>f?=4iL}#b!uk>m-oE@-z@man=5WDh-o~y+BJ*gZs5Re9&K#bM422oht zZBT=wMkd1x!n72s-ZC?2RTMp=Y+(R=u^W>)W&$<-iXG|pxH&m_IiU5g872TZ7TU#x zklC;n(lEbU$;$IaxnT=-nT#T9Y*PiIX9$h=n9T{oSgpWfOve#`!u_zIYO{<7nw?{- zQN#dKtkn&uPvA`?FSRj|o1#a;Xnn58-7k>k_xxDYKMEIAJGgL&SI4jW@XbmKMU`YWr6ClG z2zE%ob7~b}NW^RSy$$VC4KUI_N#bRw9g@KD{31It$g?ff5%wCOyW9>YxZTvxMh<|P z$|pp^+1qeyH$xO&zy+1LNY9AI3zKKVjKo)vyJ(ha=fy3W_Jp2RhjPGb4!zc#S1`jJ)RRYa{aS=T^)o_Twr@27$Qs z2*7p&+7>4p2cEeI^eRK)NNGwvfsUTWJsz*2oM55|Qmr8gwUu)hxH5Y4gAmtrKnf~M#u3E&H_B<~<{)T# z2~^<_bp50;6h%(~o=*_u$#VSIv@imb-h5g<&f~q@bR;Q?wMLkLMamPTe-IQZ&l-b4 zi)~-8sxNjrTTlDQ;qaKuFlDs0wRuj@1_%3VRH^>Pcz-1x`=MP4AXOx*DhWkJW8Cv@ zyTjjOQV)k=z4R;dMn; zsM>ZWfctOg9DQ43kdYUX)Rq<} zu;{PgEvAw}OP4#uB8J0mJgdS0Qu|w<*!6bUf$0jEe$pPmXwKAu@=qoTxI6Om2Y7mf z5zv29M%zt}#6o`;EC1(6)>;tc{D%AAS|}3>n01o56E5caSdxVTid+eGDoGm?Frnv@6*|<;0vLeT!a3&* z^5NUvIyr*R;V#o3bg3Pbg!oRDbuf*{V%`(lP6-w9p*)b00000NkvXXu0mjfsKS2a literal 0 HcmV?d00001 diff --git a/Resources/TopCommandBar/Exec.png b/Resources/TopCommandBar/Exec.png index 649bab6a584ace54abe1d253e60bd0d377e6e3bb..eebded4249c373777f48151f4e0f34382c5bd6a5 100644 GIT binary patch delta 927 zcmV;Q17Q5k2ek)~B!2;OQb$4nuFf3k00004XF*Lt006O%3;baP00009a7bBm000XT z000XT0n*)m`~Uy|8FWQhbW?9;ba!ELWdLwtX>N2bZe?^JG%heMGBNQWX_Wu~10_jB zK~z{r&6mw?5>XV#c@&<&^bvdnR<65o=L5KK>&Cd~N*5-YXn!|0CT=9LE*cU|G(l^V z3jN|^hOdDEMv9dbI_>rRZ#mP;6_G${~tTBZ^TYicuqq zQ6q{`BZ{*Sdv-TLY!E48k5I!`yoa8U;$}edw}Eb>tlTMb~Ouu3fHq z&cN~N%JH1bYP;Gc-J}0sU>(N{PCDkzz zMTQdKQ0rv)#3;bUU<&%(>1If%bn*tLLzbG;kte-NR4ZB&=JH)W5`0INLe@`=4 zZk2uGj9F4WMic=Bq7UgLNLp}|&`=lMso+fA_J8X$&eXXXQ)-s$i=HX->ANtKgK?%{ zh|B~{)?^t^-$$2%BOv z(>gls_UXbM9Z+y^_r2f$ph~T>KCpmI&3yNbP7CwjeSi`KQv%)gipCNDpmul(Q`4pd zT7TCsw<-g~aSr5@>X?Y42_+esr?6vQ*TdnjN=6u(xq5D=sn>JtFwf%i6re=X4U zidDKg+L$wmj+#7!ftUA2IyMlby98^$*3d0>t-R;HH!3vga; zL3Ostcd&TQbzFZiIY-7TW>Rni?o$?b4KZchp^CQ;JrCn|#^KQ^3x>}%AwMP8Cji$o zj`76t#(&jJO6f!L*t4ivLo#JPEGIb|wzG|BHH#F*CT@DpIK~r4F@u7yd8f?oW6x8@ zqGn3Ava&;^a9((V2L%^_s2Ei$8BZMIsqi(DVjGZsh{v9%%pYS)Yl^Bcb^fuc-WX3D z;(6n1B_&^pjgiJ?K&&9ch$)fM z)Ln5K^_OT+;cF#Dah1{`-&{1tK&*e#hV*BbF!N(sezq@+tMIjwlHx@zqp?$Kv1#WF zu69{a*j|Ha$5&7MXXm5}Un?o8Q508d8KuJ?Tl%?-`ram_Kfi*;k#5g@#uG=1wHLlt zQh(Ns)N-d*wY-MeqI-nD&y4n9!Ek7cT@x<|(9;}*4DFd1;0IEI3m0IS@>~kY9 zzN|*MwGLR>+{+lpc;dL{tgQw>zhs8v2i2b9+H(AcDpjnT+!s|Cm>u>B!1at{yw@0G z3EGsPB6{J$UgK>X7rH#H51am`@;Vvgh_=-1<8I3 ZFaX-Yxld0caYz6F002ovPDHLkV1i~O!(;#e diff --git a/Resources/TopCommandBar/Export.png b/Resources/TopCommandBar/Export.png index e37b0af7086c9f9cce97f4797e7f8b1b8a7ef6c1..78ee3c7c3bfa18f6a62763d944e13243aaff3285 100644 GIT binary patch delta 541 zcmV+&0^h(%%Sl8*R9Hvtm%&N`Q51&f0Rn}dLkN0++V&1Xn`o=McJ&A?+q8(< zg+x)15k$BsLI|lSiYPM;b+plRtVMLX|I{7E;n-rF;YhUjaDV)r``>S_12fkkqM?Hg zrC~#9*iafal!gtZVMEaEcH@f42#Is^0yYE~*lOGFca@H%sap11Pzp7>rF+neer{gC zh5&<5kl1)6jmiR($(yvYbwjy}Dxp_p!yy$*?KxsYBXw|Ir`60oon4!PQYXot?+b?& zw?{@w2`!ErJ%3`dQa?hd_KL|#d4x1tEHWwU)#hb@7V=4HvE+ymjnwjS?RO!cj2HZ# z7>$K51(KO(O6MEBOngge{4$!zq^35Xocp66oRq&KRH^+d%lW%5OYOdJQpj;Jp-bU@ zDmQGJ*(tl_9Gq0{p+(u-rh86kQn*@(;dp+#;4qyoxPKFAI4P_WR#=}Csub=S9Peg} zG`Dn0>qjMbA`K^nJaQ>K>G8z>mjZuI$`A6;q>5&zt&6-;c%_9HC)JOzq~huU{IZs- zJ4IfpAcP_X)W9*lqcNNIhg!K$bsPvtsn5Z7Ga87YKryRG4ai{oK1tY68a9-M4W(g2 fY1mK}G8Vo7-*7jAEw12u00000NkvXXu0mjfTxa*y delta 843 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 HDWM4f+ngm) delta 807 zcmV+?1K9ke1=R+SBnkm@Qb$4nuFf3kks%v@6951U69E94oEQKA0_sUbK~z{r?Ui3h zQ&Akpe{=56HC>9aG7KwwNFvOXBJs}%qL z=gKpGjF$?qSS*7)B@SS|(**Bxh(;p_+h;9}OYNx`E3A28R_$rnx{unj5Zqzkrrrg#K&$^|gs0#LhqT)#wF+ zG9DaWVP-K=ysxyKMWrU2`oQ6I@v4}3JPsa@2dq{r`2BufT_z9++-+%TxydDeiIE7k zKY;gLwii%TD$@2EqC@ZD*N4YYxrIM0ffVlQ%p80?bKlpEV)R_lK8Nt$_4);QNTm** zINjhnd>IBFU4)K(KftaOUT2h{F$Fqqd>)G@GV@r{4%smz_YG6oA zh+r7P3rp!nF0B|6(*J3`5FwR+(i}S=JmP~|=Nzw;MlxlAxkVVFISbIaMM7ALA9lHv ztr|uKUO;1g&TCczqmwqss?f*fir5T}bW{kDw@=xMUvuW4wC>yk-%~DiP^jq7j#MfZ zoPt_=kgL*JY26BRcw&+m>FF+&8vpcW{jHl=-8vG&p$VfhZ4rIKlTZAFBu(pgHtC{J_AVCdV1FkfjQAEA`G7;)^~MSoj5 z)H+pz=UnRK906I(lY diff --git a/Resources/TopCommandBar/New.png b/Resources/TopCommandBar/New.png index 78a5a0b370a7195a57b7a80d2d0a714b7e701a0d..6b1d93e4b480ae09b4a48c232e53f676f47dd791 100644 GIT binary patch delta 511 zcmVh(%mPtfGR9HvtlD|vCKorMY zth4`txQUy8h`2epIXTyLF7E?LMhNleU`x}mw zod8ybAdmOujOF*T_zVAyc!d;oZeJlYS8CMYA!0}>{!A3f;`97<4j9F?I*(vWVrKpF z1_!L}x5QfgaepB5rE5{xbyzVBK2wc4(>ueJ1W7%2dp7I`ruFuDvbb~a30b!vBxb>@ zn*wrh#1o-ciNQ{VEr~c%vm004;`u9yl~D{OU>*3T;94JSNyL%Dj28~xB{9qQ2n3Gx z!Inf^DU2dkfr_0a!pOh6iX72n&xK7u%&6((ll&o8n!eITbe~=egICsn#P*=UnBqk002ovPDHLkV1f+9 B;^hDU delta 512 zcmV+b0{{J)1eyepB!3BTNLh0L01FcU01FcV0GgZ_0000PbVXQnQ*UN;cVTj606}DL zVr3vnZDD6+Qe|Oed2z{QJOBUzr%6OXRCwBA{Qv(y!(anU41*AiI%-HeiUptK@;g5j zfK&n*=6;A&VV{63AW*nNp)1~M2QLqM1W@h**^XMj`({s|tABbhIlcvY$N*@00?c!X zHtGRD2dM+O4nRHwK8N9T)c2piRY3H`YcCnj+;~ouV@xz88T7TpLCkol>6Y_3I>3dG<2oq5P!(tkY?aP|AfAN&&_YIUVjCL7|=1GXuJS)&_iH|ZTQgd@nAr5pSF@{ ze&5FPpO78aAFQYVjLruGRwU?Zh~4@4^S3>+!+=q_V4%yX1Yqa{lm;6wfB5X6O5670lgjd;mnzFBmn9bHBe$vuA8m{wH;*-#bg65RT1ih z)a^H)k1yMDg{n~#<)c$TNDbrY_|&MQMuMXN0t^6UI-YgGKbn{T00001sn1@8oqB#|)~e-Qux3lRZ-WM7d0000?uMObuGZ)S9NVRB^vaA9d~bS`dX zbRaY?FfKAN@gQlH0005(Nkl?yq2E`l`@EOh3h=f!{fM$v6t1 z9}kR-m-618D4)-le-gb|^tp+^$atxjM~?~y{L0o*81p2|T5L}IF2cxoDgBMF9h2er zh_5ac`u#NibLY^kNH8+J)cZk$3I>D9HC7D=nQ<~qUsJXDnP^rd7@1zme>@t#I#+)& z9At*^+xCFwM1zrqm%3UCU!8Y09}Y^EzPfD-t)My4U}So!e^>X0at>6$L1vtdkaBcW z7Mc?cMy8kY-JhrB>bAP*3C%!YWO}Jf`=Gj;DS(5LrLWF-pB!ig0wdE)?TyvIL1yTy zTWzHxGy{Q=?GBZn?)R6#L1q|V?ggD64~)z?UjO#jtNXC$sO1*AKWvPrGWvRA-Z=9=! P00000NkvXXu0mjfPka-p delta 664 zcmV;J0%!g21jhxCBnkm@Qb$4nuFf3kks%v@6951U69E94oEQKA0$fQ%K~z{r?Ug@h z6Hy$;zlmpZp@>A(9^b+D*YrW{Lpy=GtglH8pLTHg~=&ziQIt-g~`b)8RhLz3=Zh-iP12`(41cZEQ7yblp;a z_)@a?Qi11?`l>d)Q!-*rIX;otrpzff3HuZRw5;L3cZ$~)w|l})4P4VdM8fz5(Vc`|A<*L@RW6{S=Bp482oQ7kZ5=RBDKSa850> zB%rD)X2)M|NXTLQi&8T4)=i482&GElLqLU%gi?+w-pPJPw&%f{3`JMO6Fs6KGdzHU zv8vC^1J2QHS1>}6i%`nm7RL1FmvEa`vP?`Wuq`AhauG|lv>{~wpyVBPbdz1TjgJ($ z2&K%?L9|BM1l$15(OEX$Qxqb9l$yzmq2s_3C2u%K$A02>C<@_9g?7f(VCfqr@8o7- zUc76(q9}wbWvRQ{_eBeoys=mgU~T~>MJc!w{ppSKqiR?=LUG;L?B83=XBP|exO%zY yNKsh`SE^YEU-V|+OUdF($>K}N;!DW^`~lEl-X~yEiM9X$002ovPDHK)LSTY10YeP{ diff --git a/Resources/TopCommandBar/Options.png b/Resources/TopCommandBar/Options.png index 6fb84bbce86dc5c047a597e9952657f3c421f940..f69979d8abb8d3770badddc1671f39c63dbca33e 100644 GIT binary patch delta 2700 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 delta 928 zcmV;R17G~_1Xn8PUfLb)g|j3fq`}HR74PXk_eJ6 zA(drpvX&;c`H>%`>+a5u>wZl0-o6c&ncaCiZCi)^!Jm2mH_Pzb|NEL@R8@ul4VGMg z|10uRwB)5|FmP+zRRD3aL32Nxv}`4G$SLa;6@ZaOt0(W#k*N(bO^Aop*Sf}m8_7F6q+Ar zJ8N`tbiW7_Za0X9g?Nbnl&lP&qf!E15CF94S+=8?^je2XYJD?CTE<9{1a0kq?eRnt zLlsL9is%=T8B|ikzA%i=ZIVn6$8q4E`k}35(y>MC@wkkynLxEABtTn(v(!d1Jxf1> z&~w~@r7)VL^NEKfabBM)&+eAsk)z;R4X2DH#s(K2P9{~%)m=vtdZ;Q@Q^3OQ!*-}H zVPW2vetscFTq|&~Yj?b2nqc#PfC~yLBz%viQdCm+S|t!|4BQy=!Cb^#3K3ae2Y0XY zx0v&RR>2}6d&76IhKGUi05H)QbO|aBN7~0~Zx*C77&MIM_W;Nt(vcqOIrUzNzyV%` z%Akw`wavhjJRwiSX6DV$&Wt8HVq!6XgOTNn&Y8DOJoH-#XpC6NeR$SmHRE_N-kZ-8xc9 z4R+KDVRWo)WhlhJ^+gp2YFlAfwRR?|D$`JFzfZb!7;c`3Wv|?`&Bpex1Y$D!0$K3I zjDKhXuf6ASETbx6)rWF_%U?4Iw4MDJX||H9RnQ*tCEm37-S@A_+3L%Lyc8{YDLMdt z0a0dTn(-lF{Qv*}07*qoM6N<$fQG&L8C5q%ZqxW(2;n zuMpC5p_L1%As?fu%