Files
omagoffice/DxfImportWindow/DxfImportWindowVM.vb
T
Dario Sassi 38f034a675 OmagOFFICE :
- aggiunta gestione import Dxf
- migliorie pezzi in parcheggio tra più macchinate.
2017-04-18 06:29:06 +00:00

436 lines
13 KiB
VB.net

Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Public Class DxfImportWindowVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
' Dati file corrente
Private m_sFilePath As String = String.Empty
Private m_nFileType As Integer = FT.NULL
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_SideAngleIsEnabled As Boolean = False
Public Property SideAngleIsEnabled As Boolean
Get
Return m_SideAngleIsEnabled
End Get
Set(value As Boolean)
m_SideAngleIsEnabled = value
NotifyPropertyChanged("SideAngleIsEnabled")
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
LoadCurrFile()
End If
End Set
End Property
Public ReadOnly Property InchIsChecked As Boolean
Get
Return Not m_MmIsChecked
End Get
End Property
#Region "Messages"
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 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 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_cmdSideAngle As ICommand
Private m_cmdUseLayer As ICommand
Private m_cmdUseClosedCurve As ICommand
Private m_cmdUseRegion As ICommand
Private m_cmdReset As ICommand
Private m_cmdOk As ICommand
Private m_cmdCancel As ICommand
#End Region ' FIELDS & PROPERTIES
#Region "METHODS"
Private Function LoadCurrFile() As Boolean
' Pulisco il DB geometrico locale
EgtNewFile()
' Riconoscimento tipo
m_nFileType = EgtGetFileType(m_sFilePath)
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()
End Select
' Aggiorno stato visualizzazione bottoni
UseRegionIsEnabled = True
UseLayerIsEnabled = True
UseClosedCurveIsEnabled = True
ResetIsEnabled = False
OkIsEnabled = False
SideAngleIsEnabled = False
' Eseguo zoom
EgtZoom(ZM.ALL)
Return True
End Function
Friend Sub LoadFlatParts()
' Scrivo testi per nesting
'm_SideAngleUC.WriteSideAngleForNest(ImportScene.GetCtx())
' Imposto riferimento sul centro geometrico di ogni pezzo
'VeinMatching.SetRefOnAllParts(ImportScene.GetCtx())
' Eventuale pulizia VeinMatching
'VeinMatching.Clear()
' Vettore nomi file temporanei
Dim sTmpFiles As New ArrayList()
' Ciclo di salvataggio dei pezzi
Dim nId As Integer = EgtGetFirstPart()
While nId <> GDB_ID.NULL
' Esporto il pezzo in un file temporaneo
Dim sTmpFile As String = OmagOFFICEMap.refMainWindowVM.MainWindowM.sTempDir & "\FlatPart" & nId & ".Nge"
sTmpFiles.Add(sTmpFile)
If Not EgtSaveObjToFile(nId, sTmpFile, NGE.BIN) Then
Return
End If
' Passo al pezzo successivo
nId = EgtGetNextPart(nId)
End While
' Passo al contesto principale
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostV.OmagOFFICEScene.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()
' Ciclo di caricamento dei pezzi
For Each sTmpfile As String In sTmpFiles
If My.Computer.FileSystem.FileExists(sTmpfile) Then
' Inserisco il pezzo nell'ambiente principale
EgtInsertFile(sTmpfile)
' Ne recupero l'Id
Dim nId2 As Integer = EgtGetLastPart()
' lo salvo come Id originale
EgtSetInfo(nId2, KEY_ORI_ID, nId2)
' Muovo la regione in Z per evitare problemi in visualizzazione
Dim nRegId = EgtGetFirstNameInGroup(nId2, NAME_REGION)
EgtMove(nRegId, New Vector3d(0, 0, DELTAZ_REG), GDB_RT.GLOB)
' Inserisco in parcheggio
EstCalc.StoreOnePart(nId2, True)
' Eventuale inserimento pezzo in VeinMatching
'VeinMatching.AddPart(sTmpfile, nId2)
' Se richiesto posizionamento diretto, lo eseguo
If bDirect Then
EstCalc.InsertOnePart(nId2, CurrentMachine.bAligned, CurrentMachine.bReducedCut)
End If
' Cancello il file
My.Computer.FileSystem.DeleteFile(sTmpfile)
End If
Next
' Eventuale aggiornamento VeinMatching
'VeinMatching.ZoomAll()
' Aggiorno ambiente principale
EgtZoom(ZM.ALL)
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"
DxfDlg.Filter = "Dxf file(*.dxf)|*.dxf" &
"|New geometry EgalTech(*.nge)|*.nge"
DxfDlg.FilterIndex = 1
GetMainPrivateProfileString(S_FLATPARTS, K_FLPCURRDIR, "", 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()
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)
EgtCreateFlatParts(nType)
AdjustFlatParts()
' 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
SideAngleIsEnabled = 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)
EgtCreateFlatParts(nType)
EstProject.AdjustFlatParts()
' 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
SideAngleIsEnabled = 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)
EgtCreateFlatParts(nType)
AdjustFlatParts()
' 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
SideAngleIsEnabled = 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()
End Sub
#End Region ' ResetCommand
#Region "SideAngleCommand"
Public ReadOnly Property SideAngleCommand As ICommand
Get
If m_cmdSideAngle Is Nothing Then
m_cmdSideAngle = New Command(AddressOf SideAngle)
End If
Return m_cmdSideAngle
End Get
End Property
Public Sub SideAngle(ByVal param As Object)
End Sub
#End Region ' SideAngleCommand
#End Region ' COMMANDS
End Class