diff --git a/EgtBEAMWALL.Core/MachGroupPanel/MyMachGroupVM.vb b/EgtBEAMWALL.Core/MachGroupPanel/MyMachGroupVM.vb index 3973b9a5..4cf8c755 100644 --- a/EgtBEAMWALL.Core/MachGroupPanel/MyMachGroupVM.vb +++ b/EgtBEAMWALL.Core/MachGroupPanel/MyMachGroupVM.vb @@ -435,11 +435,176 @@ Public MustInherit Class MyMachGroupVM ' resetto stato per MachGroup nProduction_State = ItemState.ND m_SupervisorId = "" + ' sblocco duplo di tutti i part + For Each Part In PartVMList + Dim nPartId As Integer = Part.nPartId + ' verifico tipo di progetto + Dim nBtlInfoId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, BTLINFO) + Dim nBWType As Integer = 0 + EgtGetInfo(nBtlInfoId, BTL_GEN_PROJTYPE, nBWType) + Dim bTotIsModified As Boolean = False + ' verifico se c'é PRID sugli outline + Dim nPRId As Integer = 1 + Dim nOutlineLayer As Integer = EgtGetFirstNameInGroup(nPartId, OUTLINE) + If nOutlineLayer <> GDB_ID.NULL Then + Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer) + While nOutlineId <> GDB_ID.NULL + ' verifico che sia feature + If EgtExistsInfo(nOutlineId, MGR_FTR_PRC) Then + If EgtExistsInfo(nOutlineId, MGR_FTR_PRID) Then + nOutlineId = EgtGetNext(nOutlineId) + Continue While + Else + EgtSetInfo(nOutlineId, MGR_FTR_PRID, nPRId) + nPRId += 1 + End If + End If + nOutlineId = EgtGetNext(nOutlineId) + End While + End If + bTotIsModified = True + Dim DuploList As New List(Of Integer) + EgtDuploList(nPartId, DuploList) + Dim DuploArray() As Integer + Dim RotArray(DuploList.Count) As Integer + Dim FlipArray(DuploList.Count) As Integer + Dim QArray(DuploList.Count) As Dictionary(Of String, Dictionary(Of String, String)) + DuploArray = DuploList.ToArray() + ' recupero ROT (gradi) e FLIP (0/1) per non perderli + For Duploindex = 0 To DuploArray.Length - 1 + EgtGetInfo(DuploArray(Duploindex), MGR_PRT_ROT, RotArray(Duploindex)) + EgtGetInfo(DuploArray(Duploindex), MGR_PRT_FLIP, FlipArray(Duploindex)) + If nBWType = BWType.WALL Then + ' salvo parametri Q + QArray(Duploindex) = New Dictionary(Of String, Dictionary(Of String, String)) + ' ciclo sugli outline + nOutlineLayer = EgtGetFirstNameInGroup(DuploArray(Duploindex), OUTLINE) + If nOutlineLayer <> GDB_ID.NULL Then + Dim nGlobPRId As Integer = 1 + Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer) + While nOutlineId <> GDB_ID.NULL + ' verifico che sia feature + Dim nPRC As Integer + If EgtGetInfo(nOutlineId, MGR_FTR_PRC, nPRC) Then + nPRId = 0 + If Not EgtGetInfo(nOutlineId, MGR_FTR_PRID, nPRId) Then + EgtSetInfo(nOutlineId, MGR_FTR_PRID, nGlobPRId) + nPRId = nGlobPRId + nGlobPRId += 1 + End If + Dim sKey As String = nPRId & "." & nPRC + QArray(Duploindex).Add(sKey, New Dictionary(Of String, String)) + For QIndex = 1 To 10 + Dim QKey As String = "Q" & QIndex.ToString("D2") + Dim QValue As Integer = 0 + If EgtGetInfo(nOutlineId, QKey, QValue) Then + QArray(Duploindex)(sKey).Add(QKey, QValue) + End If + Next + End If + nOutlineId = EgtGetNext(nOutlineId) + End While + End If + ' ciclo sulle feature + Dim nFeatureLayer As Integer = EgtGetFirstNameInGroup(DuploArray(Duploindex), PROCESSINGS) + If nFeatureLayer <> GDB_ID.NULL Then + Dim nFeatureId As Integer = EgtGetFirstInGroup(nFeatureLayer) + While nFeatureId <> GDB_ID.NULL + ' verifico che sia feature + Dim nPRC As Integer + If EgtGetInfo(nFeatureId, MGR_FTR_PRC, nPRC) Then + nPRId = 0 + EgtGetInfo(nFeatureId, MGR_FTR_PRID, nPRId) + Dim sKey As String = nPRId & "." & nPRC + QArray(Duploindex).Add(sKey, New Dictionary(Of String, String)) + For QIndex = 1 To 10 + Dim QKey As String = "Q" & QIndex.ToString("D2") + Dim QValue As Integer = 0 + If EgtGetInfo(nFeatureId, QKey, QValue) Then + QArray(Duploindex)(sKey).Add(QKey, QValue) + End If + Next + End If + nFeatureId = EgtGetNext(nFeatureId) + End While + End If + End If + Next + ' sblocco Duplo + EgtDuploResetLocked(nPartId) + ' recupero flip e rot dell'originale + Dim dRotated As Double + Dim dInverted As Double + Dim dRotAng As Double + Dim dFlipAng As Double + EgtGetInfo(nPartId, BTL_PRT_ROTATED, dRotated) + EgtGetInfo(nPartId, BTL_PRT_INVERTED, dInverted) + ' ripristino i valori di ROT e FLIP + For Duploindex = 0 To DuploArray.Length - 1 + ' recupero box del pezzo + Dim b3Part As New BBox3d + EgtGetBBoxGlob(nPartId, GDB_BB.STANDARD, b3Part) + ' faccio flip e rotazione rispetto all'originale che ha sovrascritto posizione del duplo + dRotAng = RotArray(Duploindex) - dRotated + EgtRotate(DuploArray(Duploindex), b3Part.Center, -Vector3d.Z_AX, dRotAng) + dFlipAng = FlipArray(Duploindex) * 180.0 - dInverted + EgtRotate(DuploArray(Duploindex), b3Part.Center, Vector3d.X_AX, dFlipAng) + EgtSetInfo(DuploArray(Duploindex), MGR_PRT_ROT, RotArray(Duploindex)) + EgtSetInfo(DuploArray(Duploindex), MGR_PRT_FLIP, FlipArray(Duploindex)) + If nBWType = BWType.WALL Then + ' ciclo sugli outline + nOutlineLayer = EgtGetFirstNameInGroup(DuploArray(Duploindex), OUTLINE) + If nOutlineLayer <> GDB_ID.NULL Then + Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer) + While nOutlineId <> GDB_ID.NULL + ' verifico che sia feature + Dim nPRC As Integer + If EgtGetInfo(nOutlineId, MGR_FTR_PRC, nPRC) Then + nPRId = 0 + EgtGetInfo(nOutlineId, MGR_FTR_PRID, nPRId) + Dim sKey As String = nPRId & "." & nPRC + ' ripristino parametri Q + If QArray(Duploindex).ContainsKey(sKey) Then + For Each QPar In QArray(Duploindex)(sKey) + EgtSetInfo(nOutlineId, QPar.Key, QPar.Value) + Next + End If + End If + nOutlineId = EgtGetNext(nOutlineId) + End While + End If + ' ciclo sulle feature + Dim nFeatureLayer As Integer = EgtGetFirstNameInGroup(DuploArray(Duploindex), PROCESSINGS) + If nFeatureLayer <> GDB_ID.NULL Then + Dim nFeatureId As Integer = EgtGetFirstInGroup(nFeatureLayer) + While nFeatureId <> GDB_ID.NULL + ' verifico che sia feature + Dim nPRC As Integer + If EgtGetInfo(nFeatureId, MGR_FTR_PRC, nPRC) Then + nPRId = 0 + EgtGetInfo(nFeatureId, MGR_FTR_PRID, nPRId) + Dim sKey As String = nPRId & "." & nPRC + ' ripristino parametri Q + If QArray(Duploindex).ContainsKey(sKey) Then + For Each QPar In QArray(Duploindex)(sKey) + EgtSetInfo(nFeatureId, QPar.Key, QPar.Value) + Next + End If + End If + nFeatureId = EgtGetNext(nFeatureId) + End While + End If + End If + Next + If bTotIsModified Then + Dim CurrFilePath As String = "" + EgtGetCurrFilePath(CurrFilePath) + EgtSaveFile(CurrFilePath, NGE.CMPTEXT) + End If + Next ' resetto stato per tutti i Part For Each Part In PartVMList Part.nProduction_State = ItemState.ND - ' sblocco i duplo - EgtDuploResetLocked(Part.nPartId) Part.NotifyPropertyChanged(NameOf(Part.Background)) Next NotifyPropertyChanged(NameOf(IsReadOnly)) diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLViewModel/BTLPartVM.vb b/EgtBEAMWALL.ViewerOptimizer/BTLViewModel/BTLPartVM.vb index f7c2d2e9..c130ef60 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLViewModel/BTLPartVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/BTLViewModel/BTLPartVM.vb @@ -66,6 +66,26 @@ Public Class BTLPartVM If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM OrElse Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL Then If dBtlW <> m_BTLPartM.dBtlW OrElse dBtlH <> m_BTLPartM.dBtlH OrElse dBtlL <> m_BTLPartM.dBtlL Then + ' se pezzo gia' in produzione + Dim DuploList As New List(Of Integer) + EgtDuploList(m_BTLPartM.nPartId, DuploList) + Dim bDuploInProduction As Boolean = False + For Each DuploId In DuploList + Dim nSwapItem As Integer = GDB_ID.NULL + If EgtGetInfo(DuploId, "!LST", nSwapItem) AndAlso nSwapItem > 0 Then + Dim nMachgroupId As Integer = EgtGetParent(EgtGetParent(EgtGetParent(nSwapItem))) + Dim MachGroupModel = DbControllers.m_MachGroupController.FindByMachGroupId(Map.refProjManagerVM.CurrProj.nProdId, nMachgroupId) + If MachGroupModel.State > ItemState.ND Then + bDuploInProduction = True + Exit For + End If + End If + Next + If bDuploInProduction Then + MessageBox.Show("Impossible change dimension because already in production!", "", MessageBoxButton.OK, MessageBoxImage.Exclamation) + Return False + End If + ' lo impedisco ' avviso che tutti i pezzi verranno tolti dai grezzi e chiedo di confermare If MessageBox.Show(String.Format(EgtMsg(61851), nDuploCount), EgtMsg(15003), MessageBoxButton.YesNo, MessageBoxImage.Information) = MessageBoxResult.Yes Then MyMachGroupPanelM.DuploSetToDelete(m_BTLPartM.nPartId) diff --git a/EgtBEAMWALL.ViewerOptimizer/MachGroupPanel/PartVM.vb b/EgtBEAMWALL.ViewerOptimizer/MachGroupPanel/PartVM.vb index c355ceee..72672a7c 100644 --- a/EgtBEAMWALL.ViewerOptimizer/MachGroupPanel/PartVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/MachGroupPanel/PartVM.vb @@ -338,6 +338,176 @@ Public Class PartVM PartM.SetProductionState(PartModel.State) PartM.dtStartTime = PartModel.DtStart PartM.dtEndTime = PartModel.DtEnd + ' verifico se bloccare o sbloccare duplo + Dim bLocked As Boolean = True + EgtDuploGetLocked(nPartId, bLocked) + If (PartModel.State <= ItemState.ND And bLocked) Then + ' verifico tipo di progetto + Dim nBtlInfoId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, BTLINFO) + Dim nBWType As Integer = 0 + EgtGetInfo(nBtlInfoId, BTL_GEN_PROJTYPE, nBWType) + Dim bTotIsModified As Boolean = False + ' verifico se c'é PRID sugli outline + Dim nPRId As Integer = 1 + Dim nOutlineLayer As Integer = EgtGetFirstNameInGroup(nPartId, OUTLINE) + If nOutlineLayer <> GDB_ID.NULL Then + Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer) + While nOutlineId <> GDB_ID.NULL + ' verifico che sia feature + If EgtExistsInfo(nOutlineId, MGR_FTR_PRC) Then + If EgtExistsInfo(nOutlineId, MGR_FTR_PRID) Then + nOutlineId = EgtGetNext(nOutlineId) + Continue While + Else + EgtSetInfo(nOutlineId, MGR_FTR_PRID, nPRId) + nPRId += 1 + End If + End If + nOutlineId = EgtGetNext(nOutlineId) + End While + End If + bTotIsModified = True + Dim DuploList As New List(Of Integer) + EgtDuploList(nPartId, DuploList) + Dim DuploArray() As Integer + Dim RotArray(DuploList.Count) As Integer + Dim FlipArray(DuploList.Count) As Integer + Dim QArray(DuploList.Count) As Dictionary(Of String, Dictionary(Of String, String)) + DuploArray = DuploList.ToArray() + ' recupero ROT (gradi) e FLIP (0/1) per non perderli + For Duploindex = 0 To DuploArray.Length - 1 + EgtGetInfo(DuploArray(Duploindex), MGR_PRT_ROT, RotArray(Duploindex)) + EgtGetInfo(DuploArray(Duploindex), MGR_PRT_FLIP, FlipArray(Duploindex)) + If nBWType = BWType.WALL Then + ' salvo parametri Q + QArray(Duploindex) = New Dictionary(Of String, Dictionary(Of String, String)) + ' ciclo sugli outline + nOutlineLayer = EgtGetFirstNameInGroup(DuploArray(Duploindex), OUTLINE) + If nOutlineLayer <> GDB_ID.NULL Then + Dim nGlobPRId As Integer = 1 + Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer) + While nOutlineId <> GDB_ID.NULL + ' verifico che sia feature + Dim nPRC As Integer + If EgtGetInfo(nOutlineId, MGR_FTR_PRC, nPRC) Then + nPRId = 0 + If Not EgtGetInfo(nOutlineId, MGR_FTR_PRID, nPRId) Then + EgtSetInfo(nOutlineId, MGR_FTR_PRID, nGlobPRId) + nPRId = nGlobPRId + nGlobPRId += 1 + End If + Dim sKey As String = nPRId & "." & nPRC + QArray(Duploindex).Add(sKey, New Dictionary(Of String, String)) + For QIndex = 1 To 10 + Dim QKey As String = "Q" & QIndex.ToString("D2") + Dim QValue As Integer = 0 + If EgtGetInfo(nOutlineId, QKey, QValue) Then + QArray(Duploindex)(sKey).Add(QKey, QValue) + End If + Next + End If + nOutlineId = EgtGetNext(nOutlineId) + End While + End If + ' ciclo sulle feature + Dim nFeatureLayer As Integer = EgtGetFirstNameInGroup(DuploArray(Duploindex), PROCESSINGS) + If nFeatureLayer <> GDB_ID.NULL Then + Dim nFeatureId As Integer = EgtGetFirstInGroup(nFeatureLayer) + While nFeatureId <> GDB_ID.NULL + ' verifico che sia feature + Dim nPRC As Integer + If EgtGetInfo(nFeatureId, MGR_FTR_PRC, nPRC) Then + nPRId = 0 + EgtGetInfo(nFeatureId, MGR_FTR_PRID, nPRId) + Dim sKey As String = nPRId & "." & nPRC + QArray(Duploindex).Add(sKey, New Dictionary(Of String, String)) + For QIndex = 1 To 10 + Dim QKey As String = "Q" & QIndex.ToString("D2") + Dim QValue As Integer = 0 + If EgtGetInfo(nFeatureId, QKey, QValue) Then + QArray(Duploindex)(sKey).Add(QKey, QValue) + End If + Next + End If + nFeatureId = EgtGetNext(nFeatureId) + End While + End If + End If + Next + ' sblocco Duplo + EgtDuploResetLocked(nPartId) + ' recupero flip e rot dell'originale + Dim dRotated As Double + Dim dInverted As Double + Dim dRotAng As Double + Dim dFlipAng As Double + EgtGetInfo(nPartId, BTL_PRT_ROTATED, dRotated) + EgtGetInfo(nPartId, BTL_PRT_INVERTED, dInverted) + ' ripristino i valori di ROT e FLIP + For Duploindex = 0 To DuploArray.Length - 1 + ' recupero box del pezzo + Dim b3Part As New BBox3d + EgtGetBBoxGlob(nPartId, GDB_BB.STANDARD, b3Part) + ' faccio flip e rotazione rispetto all'originale che ha sovrascritto posizione del duplo + dRotAng = RotArray(Duploindex) - dRotated + EgtRotate(DuploArray(Duploindex), b3Part.Center, -Vector3d.Z_AX, dRotAng) + dFlipAng = FlipArray(Duploindex) * 180.0 - dInverted + EgtRotate(DuploArray(Duploindex), b3Part.Center, Vector3d.X_AX, dFlipAng) + EgtSetInfo(DuploArray(Duploindex), MGR_PRT_ROT, RotArray(Duploindex)) + EgtSetInfo(DuploArray(Duploindex), MGR_PRT_FLIP, FlipArray(Duploindex)) + If nBWType = BWType.WALL Then + ' ciclo sugli outline + nOutlineLayer = EgtGetFirstNameInGroup(DuploArray(Duploindex), OUTLINE) + If nOutlineLayer <> GDB_ID.NULL Then + Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer) + While nOutlineId <> GDB_ID.NULL + ' verifico che sia feature + Dim nPRC As Integer + If EgtGetInfo(nOutlineId, MGR_FTR_PRC, nPRC) Then + nPRId = 0 + EgtGetInfo(nOutlineId, MGR_FTR_PRID, nPRId) + Dim sKey As String = nPRId & "." & nPRC + ' ripristino parametri Q + If QArray(Duploindex).ContainsKey(sKey) Then + For Each QPar In QArray(Duploindex)(sKey) + EgtSetInfo(nOutlineId, QPar.Key, QPar.Value) + Next + End If + End If + nOutlineId = EgtGetNext(nOutlineId) + End While + End If + ' ciclo sulle feature + Dim nFeatureLayer As Integer = EgtGetFirstNameInGroup(DuploArray(Duploindex), PROCESSINGS) + If nFeatureLayer <> GDB_ID.NULL Then + Dim nFeatureId As Integer = EgtGetFirstInGroup(nFeatureLayer) + While nFeatureId <> GDB_ID.NULL + ' verifico che sia feature + Dim nPRC As Integer + If EgtGetInfo(nFeatureId, MGR_FTR_PRC, nPRC) Then + nPRId = 0 + EgtGetInfo(nFeatureId, MGR_FTR_PRID, nPRId) + Dim sKey As String = nPRId & "." & nPRC + ' ripristino parametri Q + If QArray(Duploindex).ContainsKey(sKey) Then + For Each QPar In QArray(Duploindex)(sKey) + EgtSetInfo(nFeatureId, QPar.Key, QPar.Value) + Next + End If + End If + nFeatureId = EgtGetNext(nFeatureId) + End While + End If + End If + Next + If bTotIsModified Then + Dim CurrFilePath As String = "" + EgtGetCurrFilePath(CurrFilePath) + EgtSaveFile(CurrFilePath, NGE.CMPTEXT) + End If + ElseIf (PartModel.State > ItemState.ND And Not bLocked) Then + EgtDuploSetLocked(nPartId) + End If End If End Sub