38f034a675
- aggiunta gestione import Dxf - migliorie pezzi in parcheggio tra più macchinate.
436 lines
13 KiB
VB.net
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
|