Files
omagoffice/DxfImportWindow/DxfImportWindowVM.vb
T
2024-02-14 18:57:19 +01:00

1239 lines
45 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_sCad2dName As String
Private m_sCad2dPath As String
Private m_nButton As Integer = 1
Public ReadOnly Property nButton As Integer
Get
Return m_nButton
End Get
End Property
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 Or m_FiloTop_IsChecked Or m_Engrave_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
PartData_Visibility = Visibility.Collapsed
OrderList_Visibility = Visibility.Collapsed
OkIsEnabled = False
Else
' Rimuovo regioni per percorsi interni
RemoveSelectRegions()
m_SideEntityControlVM.Close()
Open_IsEnabled = True
Type_IsEnabled = True
Measure_IsEnabled = True
PartData_Visibility = Visibility.Visible
OrderList_Visibility = Visibility.Visible
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_FiloTop_IsChecked As Boolean
Public Property FiloTop_IsChecked As Boolean
Get
Return m_FiloTop_IsChecked
End Get
Set(value As Boolean)
If m_SideAngle_IsChecked Or m_Drip_IsChecked Or m_UnderDrill_IsChecked Or m_Engrave_IsChecked Then Return
m_FiloTop_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à FiloTop
m_SideEntityControlVM = New SideEntityControlVM(SideEntityControlVM.CallingWindowOpt.DXFIMPORT,
DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene,
SideEntityControlVM.ModeOpt.FILOTOP)
SideEntityControl = New SideEntityControlV(m_SideEntityControlVM)
SideEntityControl = New SideEntityControlV(m_SideEntityControlVM)
Open_IsEnabled = False
Type_IsEnabled = False
Measure_IsEnabled = False
PartData_Visibility = Visibility.Collapsed
OrderList_Visibility = Visibility.Collapsed
OkIsEnabled = False
Else
' Rimuovo regioni per percorsi interni
RemoveSelectRegions()
m_SideEntityControlVM.Close()
Open_IsEnabled = True
Type_IsEnabled = True
Measure_IsEnabled = True
PartData_Visibility = Visibility.Visible
OrderList_Visibility = Visibility.Visible
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("FiloTop_IsChecked")
EgtZoom(ZM.ALL)
End Set
End Property
Private m_Engrave_IsChecked As Boolean
Public Property Engrave_IsChecked As Boolean
Get
Return m_Engrave_IsChecked
End Get
Set(value As Boolean)
If m_Drip_IsChecked Or m_UnderDrill_IsChecked Or m_FiloTop_IsChecked Or m_SideAngle_IsChecked Then Return
m_Engrave_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.ENGRAVE)
SideEntityControl = New SideEntityControlV(m_SideEntityControlVM)
Open_IsEnabled = False
Type_IsEnabled = False
Measure_IsEnabled = False
PartData_Visibility = Visibility.Collapsed
OrderList_Visibility = Visibility.Collapsed
OkIsEnabled = False
Else
' Rimuovo regioni per percorsi interni
RemoveSelectRegions()
m_SideEntityControlVM.Close()
Open_IsEnabled = True
Type_IsEnabled = True
Measure_IsEnabled = True
PartData_Visibility = Visibility.Visible
OrderList_Visibility = Visibility.Visible
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("EngraveIsChecked")
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 Or m_FiloTop_IsChecked Or m_Engrave_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
PartData_Visibility = Visibility.Collapsed
OrderList_Visibility = Visibility.Collapsed
OkIsEnabled = False
Else
m_SideEntityControlVM.Close()
Open_IsEnabled = True
Type_IsEnabled = True
Measure_IsEnabled = True
PartData_Visibility = Visibility.Visible
OrderList_Visibility = Visibility.Visible
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 Or m_FiloTop_IsChecked Or m_Engrave_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
PartData_Visibility = Visibility.Collapsed
OrderList_Visibility = Visibility.Collapsed
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
PartData_Visibility = Visibility.Visible
OrderList_Visibility = Visibility.Visible
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 = 1
Public Property PartNum As String
Get
Return m_PartNum.ToString()
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
Private m_TopIsChecked As Boolean = False
Public Property TopIsChecked As Boolean
Get
Return m_TopIsChecked
End Get
Set(value As Boolean)
m_TopIsChecked = value
End Set
End Property
Private m_PartData_Visibility As Visibility = Visibility.Collapsed
Public Property PartData_Visibility As Visibility
Get
Return m_PartData_Visibility
End Get
Set(value As Visibility)
m_PartData_Visibility = value
NotifyPropertyChanged("PartData_Visibility")
End Set
End Property
Private m_sOrder As String = ""
Public Property Order As String
Get
Return m_sOrder
End Get
Set(value As String)
m_sOrder = value
NotifyPropertyChanged("Order")
End Set
End Property
Private m_sList As String = ""
Public Property List As String
Get
Return m_sList
End Get
Set(value As String)
m_sList = value
NotifyPropertyChanged("List")
End Set
End Property
Private m_bEnableOrderList As Boolean = False
Private m_OrderList_Visibility As Visibility = Visibility.Collapsed
Public Property OrderList_Visibility As Visibility
Get
Return m_OrderList_Visibility
End Get
Set(value As Visibility)
m_OrderList_Visibility = If( m_bEnableOrderList, value, Visibility.Collapsed)
NotifyPropertyChanged("OrderList_Visibility")
End Set
End Property
Private m_Cad2d_IsVisible As Visibility
Public Property Cad2d_IsVisible As Visibility
Get
Return m_Cad2d_IsVisible
End Get
Set(value As Visibility)
m_Cad2d_IsVisible = value
NotifyPropertyChanged("m_Cad2d_IsVisible")
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 EngraveMsg As String
Get
Return EgtMsg(90397)
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 OrderMsg As String
Get
Return EgtMsg( 90467) ' Ordine
End Get
End Property
Public ReadOnly Property ListMsg As String
Get
Return EgtMsg( 90468) ' Distinta
End Get
End Property
Public ReadOnly Property TopMsg As String
Get
Return EgtMsg( 90384) ' Indica lato sopra
End Get
End Property
Public ReadOnly Property PartNumMsg As String
Get
Return EgtMsg( 90465) ' Quantità
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
Public ReadOnly Property Cad2dMsg As String
Get
Return "Cad2d"
End Get
End Property
Public ReadOnly Property FiloTopMsg As String
Get
Return EgtMsg(90400) ' FiloTop
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
Private m_cmdCad2dBtn As ICommand
#End Region ' FIELDS & PROPERTIES
#Region "CONSTRUCTOR"
Sub New()
' Avvio l'inizializzazione della mappa passandogli il riferimento al DxfImportWindowVM
DxfImportWindowMap.BeginInit(Me)
' impostazioni per Cad2d
GetMainPrivateProfileString(S_CAD2D, K_CAD2D_NAME, "", m_sCad2dName)
GetMainPrivateProfileString(S_CAD2D, K_CAD2D_EXEPATH, "", m_sCad2dPath)
If My.Computer.FileSystem.FileExists(m_sCad2dPath) Then
m_nButton = 2
Cad2d_IsVisible = Visibility.Visible
Else
m_nButton = 1
Cad2d_IsVisible = Visibility.Collapsed
End If
' imposto importazione TRF
m_bEnableTrf = (OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.TRF_IMPORT))
' imposto abilitazione Ordine e Distinta in import DXF
m_bEnableOrderList = (GetMainPrivateProfileInt(S_COMPO, K_CSVDATA, 0) <> 0)
' 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
' Riporto al piano tutte le superifici
EgtSelectAll()
EgtScale(GDB_ID.SEL, Frame3d.GLOB, 1, 1, 0)
EgtDeselectAll()
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
' identificativo univoico del gruppo di pezzi, se più di un pezzo
Dim sGUICode As New List(Of String)
' Scrivo testi per nesting
SideEntityControlVM.WriteSideAngleForNest(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
' Imposto riferimento sul centro geometrico di ogni pezzo
VeinMatching.SetRefOnAllParts()
' Eventuale spostamento dei pezzi per stare nell'area valida
If Not VeinMatching.PutAllPartsOnValidPosition() Then
' Ingombro dei pezzi DXF troppo grande per VeinMatching
OmagOFFICEMap.refStatusBarVM.SetOutputMessage( EgtMsg( 91608), 5, MSG_TYPE.WARNING)
EgtOutLog( "Warning : Dxf parts BoundingBox too big for VeinMatching")
End If
' Eventuale pulizia VeinMatching
Dim bVmClear As Boolean = ( GetMainPrivateProfileInt(S_VEINMATCHING, K_VEINMA_CLEARONNEWDXF, 1) <> 0)
If bVmClear Then 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()
' creo il riferimento
If m_PartNum > 1 Then
' per ogni pezze del file DXF creo un gruppo
Dim nIdTemp As Integer = EgtGetFirstPart()
While nIdTemp <> GDB_ID.NULL
Dim sPreGuid As String = CreatePreGuidCode(nIdTemp)
sGUICode.Add(sPreGuid & System.Guid.NewGuid.ToString)
nIdTemp = EgtGetNextPart(nIdTemp)
End While
End If
' 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)
Dim FirstOfImport As Integer = EgtGetNextPart(nFirst2Id)
Dim Index As Integer = 1
While FirstOfImport <> GDB_ID.NULL And Index <= sGUICode.Count
If Not String.IsNullOrEmpty(sGUICode(Index - 1)) Then
EgtSetInfo(FirstOfImport, INFO_REFGROUP, sGUICode(Index - 1))
Index += 1
Else
Exit While
End If
FirstOfImport = EgtGetNextPart(FirstOfImport)
End While
nFirst2Id = If(nFirst2Id <> GDB_ID.NULL, EgtGetNextPart(nFirst2Id), EgtGetFirstPart())
Next
nFirstId = If(nFirstId <> GDB_ID.NULL, EgtGetNextPart(nFirstId), EgtGetFirstPart())
' 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)
' Se file origine Dxf o Nge
If m_nFileType = FT.DXF Or m_nFileType = FT.NGE Then
' Eventuale testo per indicare il sopra
If TopIsChecked Then
AddTopToPartRegion( nRegId)
End If
' Se richiesti, inserisco dati Ordine, Distinta, Nome, Origine
If m_bEnableOrderList Then
' Cerco il nome del pezzo
Dim sName As String = ""
EgtGetName( nId, sName)
' Recupero il box del pezzo
Dim b3Reg As New BBox3d : EgtGetBBox( nRegId, GDB_BB.IGNORE_TEXT + GDB_BB.IGNORE_DIM, b3Reg)
' Aggiungo info equivalenti a CSV
EgtSetInfo(nId, INFO_CSV_PART, sName)
EgtSetInfo(nId, INFO_CSV_ORD, Order)
EgtSetInfo(nId, INFO_CSV_DIST, List)
EgtSetInfo(nId, INFO_CSV_MAT, CurrentMachine.CurrMat.sName)
EgtSetInfo(nId, INFO_CSV_V1, b3Reg.DimX())
EgtSetInfo(nId, INFO_CSV_V2, b3Reg.DimY())
End If
End If
' Imposto colore testi
EstCalc.SetTextColor( nRegId)
' Imposto path di provenienza
EgtSetInfo(nId, INFO_SOU_PATH, m_sFilePath)
' Lo rendo visibile
EgtSetStatus(nId, GDB_ST.ON_)
' Eventuale inserimento pezzo in VeinMatching (prima del parcheggio per conservare la posizione originale)
VeinMatching.AddPart(nId)
' 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() Or FiloTop_IsChecked Or Engrave_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 Or FiloTop_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.White
Case MSG_TYPE.WARNING
m_MsgColor = Brushes.Gold
Case MSG_TYPE.ERROR_
m_MsgColor = Brushes.Red
End Select
NotifyPropertyChanged("MsgColor")
End Sub
' metodo utilizzato per definire il colore dei pezzi DXF importati
Private Sub ColorRegion(nCtx As Integer)
' Leggo dati corrispondenza colore
Dim InsertColor As Color3d = CompoColor(IniFile.m_sIniFile)
' Imposto contesto corrente
EgtSetCurrentContext(nCtx)
' Ciclo sui pezzi
Dim PartId As Integer = EgtGetFirstPart()
While PartId <> GDB_ID.NULL
' Ciclo sui layer delle regioni
Dim RegionId As Integer = EgtGetFirstNameInGroup(PartId, NAME_REGION)
While RegionId <> GDB_ID.NULL
EgtSetColor(RegionId, InsertColor)
' Ciclo sulle regioni
Dim EntId As Integer = EgtGetFirstInGroup(RegionId)
While EntId <> GDB_ID.NULL
If EgtGetType(EntId) = GDB_TY.SRF_FRGN Then EgtSetColor(EntId, InsertColor)
EntId = EgtGetNext(EntId)
End While
RegionId = EgtGetNextName(PartId, NAME_REGION)
End While
' passo al pezzo successico
PartId = EgtGetNextPart(PartId)
End While
' Aggiorno scritte per angoli sui lati
'WriteSideAngleForNest(nCtx)
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
PartData_Visibility = Visibility.Visible
OrderList_Visibility = Visibility.Visible
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
' Se prevista gestione colore->incisioni
If GetPrivateProfileInt(S_COLORTOENGRAVE, K_CTE_ENABLE, 0, IniFile.m_sIniFile) <> 0 Then
SideEntityControlVM.ColorToEngrave(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
End If
ColorRegion(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
' 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 = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption( KEY_OPT.UNDER_CUT) And
Not String.IsNullOrWhiteSpace( CurrentMachine.sCurrDripSaw)
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
' Se prevista gestione colore->incisioni
If GetPrivateProfileInt(S_COLORTOENGRAVE, K_CTE_ENABLE, 0, IniFile.m_sIniFile) <> 0 Then
SideEntityControlVM.ColorToEngrave(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
End If
ColorRegion(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
' 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 = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption( KEY_OPT.UNDER_CUT) And
Not String.IsNullOrWhiteSpace( CurrentMachine.sCurrDripSaw)
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
' Se prevista gestione colore->incisioni
If GetPrivateProfileInt(S_COLORTOENGRAVE, K_CTE_ENABLE, 0, IniFile.m_sIniFile) <> 0 Then
SideEntityControlVM.ColorToEngrave(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
End If
ColorRegion(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
' 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 = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption( KEY_OPT.UNDER_CUT) And
Not String.IsNullOrWhiteSpace( CurrentMachine.sCurrDripSaw)
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
#Region "Cad2dCommand"
' Returns a command that manage the MainWindow_Unloaded command
Public ReadOnly Property Cad2dBtnCommand() As ICommand
Get
If m_cmdCad2dBtn Is Nothing Then
m_cmdCad2dBtn = New Command(AddressOf Cad2dBtn)
End If
Return m_cmdCad2dBtn
End Get
End Property
Public Sub Cad2dBtn()
Dim ProcsCad2d As Process() = Process.GetProcessesByName(m_sCad2dName)
If ProcsCad2d.Length() > 0 Then
ShowWindow(ProcsCad2d(0).MainWindowHandle, 3)
Else
Try
Process.Start(m_sCad2dPath)
Catch ex As Exception
EgtOutLog(ex.ToString)
End Try
End If
End Sub
#End Region ' Cad2dCommand
#End Region ' COMMANDS
End Class