Files
omagoffice/DxfImportWindow/DxfImportWindowVM.vb
T
Dario Sassi f08e04f2b8 OmagOffice 2.1g2 :
- gestione testi su pezzi da colore configurato da utente
- aggiunta possibilità di spostare i pezzi sulla tavola alla fine delle lavorazioni ( da INI macchina [RawMove] FinalMove=1).
2019-07-05 16:01:31 +00:00

871 lines
30 KiB
VB.net

Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Public Class DxfImportWindowVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
' Costante per formato TRF
Private Const FT_TRF As Integer = 51
' Dati file corrente
Private m_sFilePath As String = String.Empty
Private m_nFileType As Integer = FT.NULL
Private m_bEnableTrf As Boolean = False
Private m_Open_IsEnabled As Boolean = True
Public Property Open_IsEnabled As Boolean
Get
Return m_Open_IsEnabled
End Get
Set(value As Boolean)
m_Open_IsEnabled = value
NotifyPropertyChanged("Open_IsEnabled")
End Set
End Property
Private m_Type_IsEnabled As Boolean = False
Public Property Type_IsEnabled As Boolean
Get
Return m_Type_IsEnabled
End Get
Set(value As Boolean)
m_Type_IsEnabled = value
NotifyPropertyChanged("Type_IsEnabled")
End Set
End Property
Private m_Measure_IsEnabled As Boolean = False
Public Property Measure_IsEnabled As Boolean
Get
Return m_Measure_IsEnabled
End Get
Set(value As Boolean)
m_Measure_IsEnabled = value
NotifyPropertyChanged("Measure_IsEnabled")
End Set
End Property
Private m_OkIsEnabled As Boolean = False
Public Property OkIsEnabled As Boolean
Get
Return m_OkIsEnabled
End Get
Set(value As Boolean)
m_OkIsEnabled = value
NotifyPropertyChanged("OkIsEnabled")
End Set
End Property
Private m_UseRegionIsEnabled As Boolean = False
Public Property UseRegionIsEnabled As Boolean
Get
Return m_UseRegionIsEnabled
End Get
Set(value As Boolean)
m_UseRegionIsEnabled = value
NotifyPropertyChanged("UseRegionIsEnabled")
End Set
End Property
Private m_UseLayerIsEnabled As Boolean = False
Public Property UseLayerIsEnabled As Boolean
Get
Return m_UseLayerIsEnabled
End Get
Set(value As Boolean)
m_UseLayerIsEnabled = value
NotifyPropertyChanged("UseLayerIsEnabled")
End Set
End Property
Private m_UseClosedCurveIsEnabled As Boolean = False
Public Property UseClosedCurveIsEnabled As Boolean
Get
Return m_UseClosedCurveIsEnabled
End Get
Set(value As Boolean)
m_UseClosedCurveIsEnabled = value
NotifyPropertyChanged("UseClosedCurveIsEnabled")
End Set
End Property
Private m_ResetIsEnabled As Boolean = False
Public Property ResetIsEnabled As Boolean
Get
Return m_ResetIsEnabled
End Get
Set(value As Boolean)
m_ResetIsEnabled = value
NotifyPropertyChanged("ResetIsEnabled")
End Set
End Property
Private m_SideEntityControlVM As SideEntityControlVM
Private m_SideEntityControl As UserControl
Public Property SideEntityControl As UserControl
Get
Return m_SideEntityControl
End Get
Set(value As UserControl)
m_SideEntityControl = value
NotifyPropertyChanged("SideEntityControl")
End Set
End Property
Private m_SideEntity_IsEnabled As Boolean = False
Public Property SideEntity_IsEnabled As Boolean
Get
Return m_SideEntity_IsEnabled
End Get
Set(value As Boolean)
m_SideEntity_IsEnabled = value
NotifyPropertyChanged("SideEntity_IsEnabled")
End Set
End Property
Private m_SideAngle_IsChecked As Boolean
Public Property SideAngle_IsChecked As Boolean
Get
Return m_SideAngle_IsChecked
End Get
Set(value As Boolean)
If m_Drip_IsChecked Or m_UnderDrill_IsChecked Then Return
m_SideAngle_IsChecked = value
If value Then
' Aggiungo regioni per percorsi interni
AdjustSelectRegions()
' Messaggio di selezione contorno
SetOutputMessage(EgtMsg(MSG_DRAWPAGEUC + 6), MSG_TYPE.INFO) ' Selezionare un contorno
' Imposto modalità sideangle
m_SideEntityControlVM = New SideEntityControlVM(SideEntityControlVM.CallingWindowOpt.DXFIMPORT,
DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene,
SideEntityControlVM.ModeOpt.SIDEANGLE)
SideEntityControl = New SideEntityControlV(m_SideEntityControlVM)
Open_IsEnabled = False
Type_IsEnabled = False
Measure_IsEnabled = False
OkIsEnabled = False
Else
' Rimuovo regioni per percorsi interni
RemoveSelectRegions()
m_SideEntityControlVM.Close()
Open_IsEnabled = True
Type_IsEnabled = True
Measure_IsEnabled = True
OkIsEnabled = True
m_SideEntityControlVM = Nothing
SideEntityControl = Nothing
' Elimino scritte angoli per input e inserisco quelle definitive
SideEntityControlVM.WriteSideAngleForNest(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
' Deseleziono tutto
DxfImportWindowMap.refDxfImportSceneHostV.Deselect()
' Pulisco area messaggi
ClearOutputMessage()
End If
NotifyPropertyChanged("SideAngle_IsChecked")
EgtZoom(ZM.ALL)
End Set
End Property
Private m_Drip_IsChecked As Boolean
Public Property Drip_IsChecked As Boolean
Get
Return m_Drip_IsChecked
End Get
Set(value As Boolean)
If m_SideAngle_IsChecked Or m_UnderDrill_IsChecked Then Return
m_Drip_IsChecked = value
If value Then
' Messaggio di selezione contorno
SetOutputMessage(EgtMsg(MSG_DRAWPAGEUC + 6), MSG_TYPE.INFO) ' Selezionare un contorno
' Imposto modalità drip
m_SideEntityControlVM = New SideEntityControlVM(SideEntityControlVM.CallingWindowOpt.DXFIMPORT,
DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene,
SideEntityControlVM.ModeOpt.DRIP)
SideEntityControl = New SideEntityControlV(m_SideEntityControlVM)
Open_IsEnabled = False
Type_IsEnabled = False
Measure_IsEnabled = False
OkIsEnabled = False
Else
m_SideEntityControlVM.Close()
Open_IsEnabled = True
Type_IsEnabled = True
Measure_IsEnabled = True
OkIsEnabled = True
m_SideEntityControlVM = Nothing
SideEntityControl = Nothing
' Elimino scritte angoli per input e inserisco quelle definitive
SideEntityControlVM.WriteSideAngleForNest(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
' Deseleziono tutto
DxfImportWindowMap.refDxfImportSceneHostV.Deselect()
' Pulisco area messaggi
ClearOutputMessage()
End If
NotifyPropertyChanged("Drip_IsChecked")
EgtZoom(ZM.ALL)
End Set
End Property
Private m_UnderDrill_IsChecked As Boolean
Public Property UnderDrill_IsChecked As Boolean
Get
Return m_UnderDrill_IsChecked
End Get
Set(value As Boolean)
If m_SideAngle_IsChecked Or m_Drip_IsChecked Then Return
m_UnderDrill_IsChecked = value
If value Then
' Aggiungo regioni di selezione per percorsi interni
AdjustSelectRegions()
' Disabilito SideAngleBtn, DripCutBtn e unità di misura
Open_IsEnabled = False
Type_IsEnabled = False
Measure_IsEnabled = False
OkIsEnabled = False
' Disabilito bottone reset
ResetIsEnabled = False
' Messaggio di selezione da effettuare
SetOutputMessage(EgtMsg(MSG_DRAWPAGEUC + 15), MSG_TYPE.INFO) ' Selezionare uno o più fori
' Imposto modalità fori da sotto
SideEntityControl = New UnderDrillControlV(New UnderDrillControlVM(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene))
Else
' Rimuovo regioni per percorsi interni
RemoveSelectRegions()
SideEntityControl = Nothing
' Deseleziono eventuali pezzi rimasti selezionati
DxfImportWindowMap.refDxfImportSceneHostV.SelectedPart = GDB_ID.NULL
DxfImportWindowMap.refDxfImportSceneHostV.SelectedLayer = GDB_ID.NULL
EgtDeselectAll()
' Elimino regioni di selezione per percorsi interni
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
' Se layer con regioni di selezione dei percorsi interni non definito ...
Dim nSelRegId As Integer = EgtGetFirstNameInGroup(nPartId, SELECT_REGION_LAYER)
EgtErase(nSelRegId)
' Passo al pezzo successivo
nPartId = EgtGetNextPart(nPartId)
End While
' Riabilito SideAngleBtn, DripCutBtn e unità di misura
Open_IsEnabled = True
Type_IsEnabled = True
Measure_IsEnabled = True
OkIsEnabled = True
' Riabilito bottone reset
ResetIsEnabled = True
' Pulisco area messaggi
ClearOutputMessage()
End If
NotifyPropertyChanged("UnderDrill_IsChecked")
EgtZoom(ZM.ALL)
End Set
End Property
Private m_Drip_IsEnabled As Boolean
Public Property Drip_IsEnabled As Boolean
Get
Return m_Drip_IsEnabled
End Get
Set(value As Boolean)
m_Drip_IsEnabled = value
NotifyPropertyChanged("Drip_IsEnabled")
End Set
End Property
Private m_MmIsChecked As Boolean = EgtUiUnitsAreMM()
Public Property MmIsChecked As Boolean
Get
Return m_MmIsChecked
End Get
Set(value As Boolean)
If value <> m_MmIsChecked Then
m_MmIsChecked = value
If Not String.IsNullOrWhiteSpace(m_sFilePath) Then
LoadCurrFile()
End If
End If
End Set
End Property
Public ReadOnly Property InchIsChecked As Boolean
Get
Return Not m_MmIsChecked
End Get
End Property
Private m_PartNum As Integer
Public Property PartNum As String
Get
Return m_PartNum
End Get
Set(value As String)
Dim TempPartNum As Integer = 0
StringToInt(value, TempPartNum)
m_PartNum = Math.Min(Math.Max(1, TempPartNum), 50)
NotifyPropertyChanged("PartNum")
End Set
End Property
Private m_OutputMessage As String
Public Property OutputMessage As String
Get
Return m_OutputMessage
End Get
Set(value As String)
m_OutputMessage = value
NotifyPropertyChanged("OutputMessage")
End Set
End Property
Private m_MsgColor As Brush = Brushes.Black
Public Property MsgColor As Brush
Get
Return m_MsgColor
End Get
Set(value As Brush)
m_MsgColor = value
NotifyPropertyChanged("MsgColor")
End Set
End Property
#Region "Messages"
Public ReadOnly Property TitleMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 13)
End Get
End Property
Public ReadOnly Property OpenDxfMsg As String
Get
Return "Open"
End Get
End Property
Public ReadOnly Property TypeMsg As String
Get
Return "Metodo"
End Get
End Property
Public ReadOnly Property SideAngleMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 7)
End Get
End Property
Public ReadOnly Property DripMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 8)
End Get
End Property
Public ReadOnly Property UnderDrillMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 14) 'Foro da sotto
End Get
End Property
Public ReadOnly Property UseLayerMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 1)
End Get
End Property
Public ReadOnly Property UseClosedCurveMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 6)
End Get
End Property
Public ReadOnly Property UseRegionMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 2)
End Get
End Property
Public ReadOnly Property ResetMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 3)
End Get
End Property
Public ReadOnly Property MeasureUnitMsg As String
Get
Return EgtMsg(MSG_OPTIONSPAGEUC + 3)
End Get
End Property
Public ReadOnly Property MmMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 4)
End Get
End Property
Public ReadOnly Property InchMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 5)
End Get
End Property
Public ReadOnly Property PartNumMsg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 15)
End Get
End Property
Public ReadOnly Property OkMsg As String
Get
Return "Ok"
End Get
End Property
Public ReadOnly Property CancelMsg As String
Get
Return "Cancel"
End Get
End Property
#End Region ' Messages
' Definizione comandi
Private m_cmdOpenDxf As ICommand
Private m_cmdUseLayer As ICommand
Private m_cmdUseClosedCurve As ICommand
Private m_cmdUseRegion As ICommand
Private m_cmdReset As ICommand
#End Region ' FIELDS & PROPERTIES
#Region "CONSTRUCTOR"
Sub New()
' Avvio l'inizializzazione della mappa passandogli il riferimento al DxfImportWindowVM
DxfImportWindowMap.BeginInit(Me)
' imposto importazione TRF
m_bEnableTrf = (OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.TRF_IMPORT))
' imposto quantità
m_PartNum = 1
NotifyPropertyChanged("PartNum")
End Sub
#End Region ' CONSTRUCTOR
#Region "METHODS"
Private Function LoadCurrFile() As Boolean
' Pulisco il DB geometrico locale
EgtNewFile()
' Riconoscimento tipo
m_nFileType = EgtGetFileType(m_sFilePath)
If m_nFileType = FT.NULL And m_bEnableTrf And Path.GetExtension(m_sFilePath).ToUpper() = ".TRF" Then m_nFileType = FT_TRF
Select Case m_nFileType
Case FT.DXF
' recupero unità di misura del file
Dim dScale As Double = If(m_MmIsChecked, ONEMM, ONEINCH)
' Importo file DXF
If Not EgtImportDxf(m_sFilePath, dScale) Then Return False
Case FT.NGE
' Carico Nge
If Not EgtOpenFile(m_sFilePath) Then Return False
' Filtro Nge
EstProject.FilterNge()
Case FT_TRF
' Carico Trf
If Not ImportTrf(m_sFilePath) Then Return False
Case Else
Return False
End Select
' se formato DXF o NGE
If m_nFileType = FT.DXF Or m_nFileType = FT.NGE Then
' Aggiorno stato visualizzazione bottoni
UseRegionIsEnabled = True
UseLayerIsEnabled = True
UseClosedCurveIsEnabled = True
ResetIsEnabled = False
Measure_IsEnabled = (m_nFileType = FT.DXF)
OkIsEnabled = False
SideEntity_IsEnabled = False
Drip_IsEnabled = False
ElseIf m_nFileType = FT_TRF Then
UseRegionIsEnabled = False
UseLayerIsEnabled = False
UseClosedCurveIsEnabled = False
ResetIsEnabled = False
Measure_IsEnabled = False
OkIsEnabled = True
SideEntity_IsEnabled = False
Drip_IsEnabled = False
End If
' Eseguo zoom
EgtZoom(ZM.ALL)
Return True
End Function
Private Function ImportTrf(sPath As String) As Boolean
' Definizione variabili
EgtLuaCreateGlobTable("TRF")
EgtLuaSetGlobStringVar("TRF.FILE", sPath)
' Path script da eseguire
Dim sLuaPath = OmagOFFICEMap.refMainWindowVM.MainWindowM.sTrfAutoDir & "\TrfRead.lua"
' Esecuzione
Dim nErr As Integer = 999
If EgtLuaExecFile(sLuaPath) AndAlso
EgtLuaExecLine("TRF.Read()") Then
' Verifica stato di errore
EgtLuaGetGlobIntVar("TRF.ERR", nErr)
End If
If nErr <> 0 Then EgtOutLog("Error in TrfRead : " & nErr.ToString())
EgtLuaResetGlobVar("TRF")
Return (nErr = 0)
End Function
Friend Sub LoadFlatParts()
' Cancello regioni di selezione dai pezzi
Dim PartId As Integer = EgtGetFirstPart()
While PartId <> GDB_ID.NULL
EgtErase(EgtGetFirstNameInGroup(PartId, SELECT_REGION_LAYER))
PartId = EgtGetNextPart(PartId)
End While
' Scrivo testi per nesting
SideEntityControlVM.WriteSideAngleForNest(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
' Imposto riferimento sul centro geometrico di ogni pezzo
VeinMatching.SetRefOnAllParts()
' Eventuale pulizia VeinMatching
VeinMatching.Clear()
' Salvo tutti i pezzi in un file temporaneo
Dim sTmpFile As String = OmagOFFICEMap.refMainWindowVM.MainWindowM.sTempDir & "\FlatPart" & ".Nge"
If Not EgtSaveFile(sTmpFile, NGE.BIN) Then Return
' Passo al contesto principale
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx())
' Recupero flag per inserimento diretto in grezzo (altrimenti in parcheggio)
Dim bDirect As Boolean = (GetMainPrivateProfileInt(S_NEST, K_DIRECT, 0) <> 0)
' Elimino eventuali precedenti pezzi vuoti
EgtEraseEmptyParts()
' Inserisco i pezzi nell'ambiente principale e recupero Id primo pezzo inserito
Dim nFirstId As Integer = EgtGetLastPart()
For nInd As Integer = 1 To m_PartNum
Dim nFirst2Id As Integer = EgtGetLastPart()
EgtInsertFile(sTmpFile)
nFirst2Id = If(nFirst2Id <> GDB_ID.NULL, EgtGetNextPart(nFirst2Id), EgtGetFirstPart())
' Eventuale inserimento pezzi in VeinMatching
VeinMatching.AddParts(sTmpFile, nFirst2Id)
Next
nFirstId = If(nFirstId <> GDB_ID.NULL, EgtGetNextPart(nFirstId), EgtGetFirstPart())
' Eventuale inserimento pezzi in VeinMatching
VeinMatching.AddParts(sTmpFile, nFirstId)
' Cancello il file
If My.Computer.FileSystem.FileExists(sTmpFile) Then
My.Computer.FileSystem.DeleteFile(sTmpFile)
End If
' Nascondo tutti i pezzi inseriti (per evitare interferenze con pezzi in fase di parcheggio)
Dim nId As Integer = nFirstId
While nId <> GDB_ID.NULL
EgtSetStatus(nId, GDB_ST.OFF)
' Passo al pezzo successivo
nId = EgtGetNextPart(nId)
End While
' Ciclo sui pezzi inseriti
nId = nFirstId
While nId <> GDB_ID.NULL
' lo salvo come Id originale
EgtSetInfo(nId, KEY_ORI_ID, nId)
' Muovo la regione in Z per evitare problemi in visualizzazione
Dim nRegId = EgtGetFirstNameInGroup(nId, NAME_REGION)
EgtMove(nRegId, New Vector3d(0, 0, DELTAZ_REG), GDB_RT.GLOB)
' Imposto colore testi
EstCalc.SetTextColor( nRegId)
' Inserisco in parcheggio
EstCalc.StoreOnePart(nId, True)
' Recupero Id di pezzo successivo
Dim nNextId As Integer = EgtGetNextPart(nId)
' Se richiesto posizionamento diretto, lo eseguo
If bDirect Then
If EstCalc.InsertOnePart(nId, CurrentMachine.bAligned, CurrentMachine.bReducedCut) Then
' Eventuale notifica al VeinMatching
VeinMatching.OnInsertPartInRaw(nId)
End If
End If
' Passo al pezzo successivo
nId = nNextId
End While
' Eventuale aggiornamento VeinMatching
VeinMatching.ZoomAll()
' Aggiorno ambiente principale
EgtZoom(ZM.ALL)
End Sub
Friend Function VerifyIfSelectPart() As Boolean
' Solo se in modalità angoli o gocciolatoio su lati esterni
Return (SideAngle_IsChecked Or Drip_IsChecked)
End Function
Friend Sub SelectedPartChanged()
' Se sono in modalità inclinazioni o gocciolatoio calcolo lati inclinabili e creo testi
If SideAngle_IsChecked() Or Drip_IsChecked() Then
m_SideEntityControlVM.ReLoadSideAnglePage(SideEntityControlVM.CallingWindowOpt.DXFIMPORT)
End If
End Sub
Private Function AdjustSelectRegions() As Boolean
' Ciclo sui pezzi
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
' Se layer con regioni di selezione dei percorsi interni non definito ...
Dim nSelRegId As Integer = EgtGetFirstNameInGroup(nPartId, SELECT_REGION_LAYER)
If nSelRegId = GDB_ID.NULL Then
' Creo layer per regioni di selezione
nSelRegId = EgtCreateGroup(nPartId)
EgtSetName(nSelRegId, SELECT_REGION_LAYER)
RegionFromGroup(nPartId, nSelRegId, NAME_INLOOP)
RegionFromGroup(nPartId, nSelRegId, NAME_UNDERDRILL)
End If
' Passo al pezzo successivo
nPartId = EgtGetNextPart(nPartId)
End While
Return True
End Function
Private Function RemoveSelectRegions() As Boolean
' Ciclo sui pezzi
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
' Se layer con regioni di selezione dei percorsi interni non definito ...
Dim nSelRegId As Integer = EgtGetFirstNameInGroup(nPartId, SELECT_REGION_LAYER)
EgtErase(nSelRegId)
' Passo al pezzo successivo
nPartId = EgtGetNextPart(nPartId)
End While
Return True
End Function
Private Sub RegionFromGroup(nPartId As Integer, nSelRegId As Integer, GroupName As String)
' Ciclo sui percorsi interni chiusi
Dim nIntLayId As Integer = EgtGetFirstNameInGroup(nPartId, GroupName)
While nIntLayId <> GDB_ID.NULL
' Recupero gli identificatori delle curve che formano il loop
Dim vCrvId As New List(Of Integer)
Dim nCrvId As Integer = EgtGetFirstInGroup(nIntLayId)
While nCrvId <> GDB_ID.NULL
Dim nType As Integer = EgtGetType(nCrvId)
If (UnderDrill_IsChecked And nType = GDB_TY.CRV_ARC) Or (SideAngle_IsChecked And (nType = GDB_TY.CRV_LINE Or nType = GDB_TY.CRV_ARC Or nType = GDB_TY.CRV_COMPO)) Then
vCrvId.Add(nCrvId)
End If
nCrvId = EgtGetNext(nCrvId)
End While
' Creo curva chiusa
Dim nLoopId As Integer = EgtCreateCurveCompoByReorder(nSelRegId, vCrvId.Count(), vCrvId.ToArray(), Point3d.ORIG(), False)
EgtInvertCurve(nLoopId)
' Creo superficie
Dim nRegId As Integer = EgtCreateSurfFlatRegion(nSelRegId, nLoopId)
EgtSetName(nRegId, nIntLayId.ToString())
EgtSetInfo(nRegId, "ID", nIntLayId)
EgtSetColor(nRegId, New Color3d(0, 255, 0, 25))
EgtErase(nLoopId)
If GroupName = NAME_UNDERDRILL Then
EgtSelectObj(nRegId)
EgtSelectObj(nIntLayId)
End If
' Passo al successivo layer interno
nIntLayId = EgtGetNextName(nIntLayId, GroupName)
End While
End Sub
Friend Overloads Sub SetOutputMessage(sMessage As String, Optional nMsgType As MSG_TYPE = MSG_TYPE.INFO)
SetMsgColor(nMsgType)
m_OutputMessage = sMessage
NotifyPropertyChanged("OutputMessage")
End Sub
Friend Sub ClearOutputMessage()
m_MsgColor = Brushes.Black
NotifyPropertyChanged("MsgColor")
m_OutputMessage = String.Empty
NotifyPropertyChanged("OutputMessage")
End Sub
Private Sub SetMsgColor(nMsgType As MSG_TYPE)
Select Case nMsgType
Case MSG_TYPE.INFO
m_MsgColor = Brushes.Black
Case MSG_TYPE.WARNING
m_MsgColor = Brushes.SaddleBrown
Case MSG_TYPE.ERROR_
m_MsgColor = Brushes.Red
End Select
NotifyPropertyChanged("MsgColor")
End Sub
#End Region ' METHODS
#Region "COMMANDS"
#Region "OpenDxfCommand"
Public ReadOnly Property OpenDxfCommand As ICommand
Get
If m_cmdOpenDxf Is Nothing Then
m_cmdOpenDxf = New Command(AddressOf OpenDxf)
End If
Return m_cmdOpenDxf
End Get
End Property
Public Sub OpenDxf(ByVal param As Object)
' Scelgo file da importare
Dim DxfDlg As New Microsoft.Win32.OpenFileDialog()
DxfDlg.Title = "Open"
Dim sFilter As String = "Dxf file(*.dxf)|*.dxf|"
If m_bEnableTrf Then sFilter &= "Trf file(*.trf)|*.trf|"
sFilter &= "New geometry EgalTech(*.nge)|*.nge"
DxfDlg.Filter = sFilter
DxfDlg.FilterIndex = 1
GetMainPrivateProfileString(S_FLATPARTS, K_FLPCURRDIR, "", DxfDlg.InitialDirectory)
If Not Directory.Exists(DxfDlg.InitialDirectory) Then DxfDlg.InitialDirectory = ""
If Not DxfDlg.ShowDialog() Then Return
' Assegno path del file
m_sFilePath = DxfDlg.FileName
' Salvo nuovo direttorio corrente per DXF
WriteMainPrivateProfileString(S_FLATPARTS, K_FLPCURRDIR, Path.GetDirectoryName(m_sFilePath))
' Carico il file
LoadCurrFile()
Type_IsEnabled = True
End Sub
#End Region ' OpenDxfCommand
#Region "UseRegionCommand"
Public ReadOnly Property UseRegionCommand As ICommand
Get
If m_cmdUseRegion Is Nothing Then
m_cmdUseRegion = New Command(AddressOf UseRegion)
End If
Return m_cmdUseRegion
End Get
End Property
Public Sub UseRegion(ByVal param As Object)
' Creo i pezzi
Dim nType As Integer = If(m_nFileType = FT.NGE, FPC_TYPE.NGE, FPC_TYPE.REGION)
Dim dToler As Double = GetPrivateProfileDouble(S_FLATPARTS, K_FLPTOLERANCE, 0.1, IniFile.m_sIniFile)
EgtCreateAdjustFlatParts(nType, dToler)
' Se prevista gestione colore->angolo di fianco
If GetPrivateProfileInt(S_COLORTOSIDEANG, K_CTSA_ENABLE, 0, IniFile.m_sIniFile) <> 0 Then
SideEntityControlVM.ColorToSideAngle(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
End If
' Eseguo zoom
EgtZoom(ZM.ALL)
' disabilito bottoni UseLayer e UseRegion, abilito bottoni Reset e Insert
UseRegionIsEnabled = False
UseLayerIsEnabled = False
UseClosedCurveIsEnabled = False
ResetIsEnabled = True
OkIsEnabled = True
' abilito bottone angoli su lati esterni
SideEntity_IsEnabled = True
Drip_IsEnabled = True
End Sub
#End Region ' UseRegionCommand
#Region "UseLayerCommand"
Public ReadOnly Property UseLayerCommand As ICommand
Get
If m_cmdUseLayer Is Nothing Then
m_cmdUseLayer = New Command(AddressOf UseLayer)
End If
Return m_cmdUseLayer
End Get
End Property
Public Sub UseLayer(ByVal param As Object)
' Creo i pezzi
Dim nType As Integer = If(m_nFileType = FT.NGE, FPC_TYPE.NGE, FPC_TYPE.LAYER)
Dim dToler As Double = GetPrivateProfileDouble(S_FLATPARTS, K_FLPTOLERANCE, 0.1, IniFile.m_sIniFile)
EgtCreateAdjustFlatParts(nType, dToler)
' Se prevista gestione colore->angolo di fianco
If GetPrivateProfileInt(S_COLORTOSIDEANG, K_CTSA_ENABLE, 0, IniFile.m_sIniFile) <> 0 Then
SideEntityControlVM.ColorToSideAngle(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
End If
' Eseguo zoom
EgtZoom(ZM.ALL)
' disabilito bottoni UseLayer. UseRegion e UseClosedCurve, abilito bottoni Reset e Insert
UseRegionIsEnabled = False
UseLayerIsEnabled = False
UseClosedCurveIsEnabled = False
ResetIsEnabled = True
OkIsEnabled = True
' abilito bottone angoli su lati esterni
SideEntity_IsEnabled = True
Drip_IsEnabled = True
End Sub
#End Region ' UseLayerCommand
#Region "UseClosedCurveCommand"
Public ReadOnly Property UseClosedCurveCommand As ICommand
Get
If m_cmdUseClosedCurve Is Nothing Then
m_cmdUseClosedCurve = New Command(AddressOf UseClosedCurve)
End If
Return m_cmdUseClosedCurve
End Get
End Property
Public Sub UseClosedCurve(ByVal param As Object)
' Creo i pezzi
Dim nType As Integer = If(m_nFileType = FT.NGE, FPC_TYPE.NGE, FPC_TYPE.CLOSEDCURVE)
Dim dToler As Double = GetPrivateProfileDouble(S_FLATPARTS, K_FLPTOLERANCE, 0.1, IniFile.m_sIniFile)
EgtCreateAdjustFlatParts(nType, dToler)
' Se prevista gestione colore->angolo di fianco
If GetPrivateProfileInt(S_COLORTOSIDEANG, K_CTSA_ENABLE, 0, IniFile.m_sIniFile) <> 0 Then
SideEntityControlVM.ColorToSideAngle(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
End If
' Eseguo zoom
EgtZoom(ZM.ALL)
' disabilito bottoni UseLayer e UseRegion, abilito bottoni Reset e Insert
UseRegionIsEnabled = False
UseLayerIsEnabled = False
UseClosedCurveIsEnabled = False
ResetIsEnabled = True
OkIsEnabled = True
' abilito bottone angoli su lati esterni
SideEntity_IsEnabled = True
Drip_IsEnabled = True
End Sub
#End Region ' UseClosedCurveCommand
#Region "ResetCommand"
Public ReadOnly Property ResetCommand As ICommand
Get
If m_cmdReset Is Nothing Then
m_cmdReset = New Command(AddressOf Reset)
End If
Return m_cmdReset
End Get
End Property
Public Sub Reset(ByVal param As Object)
' Ricarico file corrente
LoadCurrFile()
' abilito bottone angoli su lati esterni
SideEntity_IsEnabled = False
Drip_IsEnabled = False
End Sub
#End Region ' ResetCommand
#End Region ' COMMANDS
End Class