|
|
|
@@ -31,6 +31,13 @@ Public Class NestingTabVM
|
|
|
|
|
Private m_ptPrev As Point3d
|
|
|
|
|
Private m_vtTotMove As Vector3d
|
|
|
|
|
Private m_dSnapDist As Double = 0
|
|
|
|
|
' Gestione rotazione pezzi in fase di Drag
|
|
|
|
|
Private m_bKeyCtrlPressed As Boolean = False
|
|
|
|
|
Private m_bKeyLeftShiftPressed As Boolean = False
|
|
|
|
|
Private m_dAngTotal As Double = 0
|
|
|
|
|
Private m_dStartAng As Double = 0
|
|
|
|
|
Private m_bStartRot As Boolean = False
|
|
|
|
|
Private m_bStartMove As Boolean = False
|
|
|
|
|
' Abilitazioni TrfData e CsvData
|
|
|
|
|
Private m_bTrfData As Boolean = False
|
|
|
|
|
Private m_bCsvData As Boolean = False
|
|
|
|
@@ -151,7 +158,7 @@ Public Class NestingTabVM
|
|
|
|
|
End Get
|
|
|
|
|
Set(value As Visibility)
|
|
|
|
|
m_CsvData_Visibility = value
|
|
|
|
|
NotifyPropertyChanged( "CsvData_Visibility")
|
|
|
|
|
NotifyPropertyChanged("CsvData_Visibility")
|
|
|
|
|
End Set
|
|
|
|
|
End Property
|
|
|
|
|
|
|
|
|
@@ -270,7 +277,7 @@ Public Class NestingTabVM
|
|
|
|
|
|
|
|
|
|
Friend Function InitNesting() As Boolean
|
|
|
|
|
' Se previsto, abilito bottone VeinMatching
|
|
|
|
|
If Not IsNothing( OmagOFFICEMap.refMainWindowVM.VeinMatchingWnd) Then
|
|
|
|
|
If Not IsNothing(OmagOFFICEMap.refMainWindowVM.VeinMatchingWnd) Then
|
|
|
|
|
OmagOFFICEMap.refVeinMatchPanelVM.VeinMatchIsEnabled = True
|
|
|
|
|
End If
|
|
|
|
|
' Abilitazione TrfData
|
|
|
|
@@ -280,7 +287,7 @@ Public Class NestingTabVM
|
|
|
|
|
m_bCsvData = Not m_bTrfData And
|
|
|
|
|
(GetMainPrivateProfileInt(S_COMPO, K_CSVDATA, 0) <> 0)
|
|
|
|
|
' Se previsto, abilito bottone CsvData
|
|
|
|
|
CsvData_Visibility = If( m_bCsvData, Visibility.Visible, Visibility.Collapsed)
|
|
|
|
|
CsvData_Visibility = If(m_bCsvData, Visibility.Visible, Visibility.Collapsed)
|
|
|
|
|
' Imposto il corretto contesto
|
|
|
|
|
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx())
|
|
|
|
|
' aggiorno dati del grezzo
|
|
|
|
@@ -358,7 +365,7 @@ Public Class NestingTabVM
|
|
|
|
|
|
|
|
|
|
Private Sub AutomaticInsert()
|
|
|
|
|
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx())
|
|
|
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage( EgtMsg( 90340)) ' Nesting Automatico in corso
|
|
|
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(90340)) ' Nesting Automatico in corso
|
|
|
|
|
Dim bWrongTrf As Boolean = False
|
|
|
|
|
Dim vParts As New List(Of Integer)
|
|
|
|
|
' Ciclo di pre-inserimento in tavola dei pezzi selezionati
|
|
|
|
@@ -376,7 +383,7 @@ Public Class NestingTabVM
|
|
|
|
|
End If
|
|
|
|
|
' Lo preparo in tavola, se possibile
|
|
|
|
|
If PreInsertOnePart(nId) Then
|
|
|
|
|
vParts.Add( nId)
|
|
|
|
|
vParts.Add(nId)
|
|
|
|
|
Else
|
|
|
|
|
EgtSetStatus(nId, GDB_ST.ON_)
|
|
|
|
|
VeinMatching.OnDeselectPart(nId)
|
|
|
|
@@ -391,12 +398,12 @@ Public Class NestingTabVM
|
|
|
|
|
Dim bAligned As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_NEST_ALIGNED, 0, CurrentMachine.sMachIniFile) <> 0)
|
|
|
|
|
EnableReferenceRegion(bAligned)
|
|
|
|
|
' Eseguo nesting automatico
|
|
|
|
|
Dim bOpimizeOnX As Boolean = ( GetMainPrivateProfileInt( S_NEST, K_AUTOMATICOPTIMIZE, 2) = 1)
|
|
|
|
|
Dim bOpimizeOnX As Boolean = (GetMainPrivateProfileInt(S_NEST, K_AUTOMATICOPTIMIZE, 2) = 1)
|
|
|
|
|
Dim bGuillotineMode As Boolean = bAligned
|
|
|
|
|
Dim nAutomaticMaxTime As Integer = GetMainPrivateProfileInt( S_NEST, K_AUTOMATICMAXTIME, 20)
|
|
|
|
|
Dim dPartTime As Double = If( bGuillotineMode, 1.0, 0.5)
|
|
|
|
|
Dim nMaxTime As Integer = Math.Min( CInt( 2 + dPartTime * vParts.Count()), nAutomaticMaxTime)
|
|
|
|
|
EgtAutomaticPackParts( vParts, bOpimizeOnX, CurrentMachine.bReducedCut, bGuillotineMode, nMaxTime)
|
|
|
|
|
Dim nAutomaticMaxTime As Integer = GetMainPrivateProfileInt(S_NEST, K_AUTOMATICMAXTIME, 20)
|
|
|
|
|
Dim dPartTime As Double = If(bGuillotineMode, 1.0, 0.5)
|
|
|
|
|
Dim nMaxTime As Integer = Math.Min(CInt(2 + dPartTime * vParts.Count()), nAutomaticMaxTime)
|
|
|
|
|
EgtAutomaticPackParts(vParts, bOpimizeOnX, CurrentMachine.bReducedCut, bGuillotineMode, nMaxTime)
|
|
|
|
|
' Sistemo i pezzi
|
|
|
|
|
For Each nPartId As Integer In vParts
|
|
|
|
|
' se pezzo inserito
|
|
|
|
@@ -404,11 +411,11 @@ Public Class NestingTabVM
|
|
|
|
|
VeinMatching.OnInsertPartInRaw(nPartId)
|
|
|
|
|
' Eventuale aggiunta solido per taglio da sotto
|
|
|
|
|
UpdateSolidForDrip(nPartId)
|
|
|
|
|
' altrimenti rifiutato
|
|
|
|
|
else
|
|
|
|
|
' altrimenti rifiutato
|
|
|
|
|
Else
|
|
|
|
|
' Ripristino lo stato originale
|
|
|
|
|
PreRemoveOnePart( Math.Abs( nPartId))
|
|
|
|
|
VeinMatching.OnDeselectPart( Math.Abs( nPartId))
|
|
|
|
|
PreRemoveOnePart(Math.Abs(nPartId))
|
|
|
|
|
VeinMatching.OnDeselectPart(Math.Abs(nPartId))
|
|
|
|
|
End If
|
|
|
|
|
Next
|
|
|
|
|
' Aggiorno flag selezionati
|
|
|
|
@@ -423,6 +430,93 @@ Public Class NestingTabVM
|
|
|
|
|
End If
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
Private Sub VerifyMove()
|
|
|
|
|
If m_bVerify Then
|
|
|
|
|
' Determino cosa verificare
|
|
|
|
|
Dim nMoveId = If(m_nIdToSel <> GDB_ID.NULL, m_nIdToSel, GDB_ID.SEL)
|
|
|
|
|
' Aggiorno regioni per nesting
|
|
|
|
|
UpdateNestRegions()
|
|
|
|
|
EnableReferenceRegion(False)
|
|
|
|
|
' Eseguo verifica
|
|
|
|
|
If VerifyTrfData(nMoveId) And EgtVerifyPart(nMoveId, CurrentMachine.bReducedCut) Then
|
|
|
|
|
EstCalc.ResetOrderMachiningFlag()
|
|
|
|
|
' Non superata riporto alla posizione iniziale
|
|
|
|
|
Else
|
|
|
|
|
If m_bFromParking Then
|
|
|
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
|
|
|
PreRemoveOnePart(nMoveId)
|
|
|
|
|
VeinMatching.OnRemovePartFromRaw(nMoveId)
|
|
|
|
|
Else
|
|
|
|
|
EgtMove(nMoveId, -m_vtTotMove)
|
|
|
|
|
' Eventuale notifica al VeinMatching
|
|
|
|
|
If nMoveId = GDB_ID.SEL Then
|
|
|
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
|
VeinMatching.OnMovePartInRaw(nId)
|
|
|
|
|
nId = EgtGetNextSelectedObj()
|
|
|
|
|
End While
|
|
|
|
|
Else
|
|
|
|
|
VeinMatching.OnMovePartInRaw(nMoveId)
|
|
|
|
|
End If
|
|
|
|
|
End If
|
|
|
|
|
'---------------------- COUNTER PART ----------------------
|
|
|
|
|
' solo se pezzo disposto in tavola
|
|
|
|
|
If m_bFromParking Then
|
|
|
|
|
Dim sRefGroup As String = String.Empty
|
|
|
|
|
If EgtGetInfo(nMoveId, INFO_REFGROUP, sRefGroup) Then
|
|
|
|
|
' accendo il layer che contiene il contatore (spento in fase di Drag)
|
|
|
|
|
Dim nCounterLayer As Integer = EgtGetFirstNameInGroup(nMoveId, INFO_COUNTERLY)
|
|
|
|
|
EgtSetStatus(nCounterLayer, GDB_ST.ON_)
|
|
|
|
|
' aggiorno il layer che indica il numero di pezzi in parcheggio
|
|
|
|
|
CountPartInFamily(sRefGroup)
|
|
|
|
|
End If
|
|
|
|
|
End If
|
|
|
|
|
'---------------------- COUNTER PART ----------------------
|
|
|
|
|
End If
|
|
|
|
|
m_bFromParking = False
|
|
|
|
|
End If
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
Private Sub VerifyRot()
|
|
|
|
|
' se comando Shift è stato attivato
|
|
|
|
|
If m_bKeyLeftShiftPressed Then
|
|
|
|
|
' Determino cosa verificare
|
|
|
|
|
Dim nMoveId = If(m_nIdToSel <> GDB_ID.NULL, m_nIdToSel, GDB_ID.SEL)
|
|
|
|
|
If Not EgtVerifyPart(nMoveId, CurrentMachine.bReducedCut) Then
|
|
|
|
|
Dim ptCen As Point3d
|
|
|
|
|
If Not EgtGetPartPartClusterCenterGlob(nMoveId, ptCen) Then Return
|
|
|
|
|
EgtRotate(nMoveId, ptCen, Vector3d.Z_AX(), -m_dAngTotal, GDB_RT.GLOB)
|
|
|
|
|
End If
|
|
|
|
|
End If
|
|
|
|
|
' resetto i valori
|
|
|
|
|
m_dStartAng = 0
|
|
|
|
|
m_dAngTotal = 0
|
|
|
|
|
m_bStartRot = False
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
' verifica che la rotazione sia ammessa
|
|
|
|
|
Private Function RotatePartInsideBond(dAngRotDeg As Double, nIdMove As Integer) As Boolean
|
|
|
|
|
' Verifico se ci sono dei pezzi bloccati in rotazione
|
|
|
|
|
Dim bLockedRot As Boolean = GetLockOnRotation(nIdMove)
|
|
|
|
|
' Se tutti i pezzi possono ruotare
|
|
|
|
|
If Not bLockedRot Then
|
|
|
|
|
' Calcolo il centro di rotazione come centro del cluster
|
|
|
|
|
Dim ptCen As Point3d
|
|
|
|
|
If Not EgtGetPartPartClusterCenterGlob(nIdMove, ptCen) Then Return False
|
|
|
|
|
' Aggiorno regioni per nesting
|
|
|
|
|
UpdateNestRegions()
|
|
|
|
|
EnableReferenceRegion(False)
|
|
|
|
|
' Verifico rotazione complessiva
|
|
|
|
|
EgtRotate(nIdMove, ptCen, Vector3d.Z_AX(), dAngRotDeg, GDB_RT.GLOB)
|
|
|
|
|
If EgtVerifyPart(nIdMove, CurrentMachine.bReducedCut) Then Return True
|
|
|
|
|
' Provo rotazione parziale (dopo aver annullato la complessiva)
|
|
|
|
|
EgtRotate(nIdMove, ptCen, Vector3d.Z_AX(), -dAngRotDeg, GDB_RT.GLOB)
|
|
|
|
|
Return EgtRotatePart(nIdMove, CurrentMachine.bReducedCut, ptCen, dAngRotDeg)
|
|
|
|
|
Else
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Private Function RotateCluster(ByVal dAngRotDeg As Double) As Boolean
|
|
|
|
|
' Se non ci sono pezzi selezionati, esco
|
|
|
|
|
If EgtGetSelectedObjCount() = 0 Then Return True
|
|
|
|
@@ -432,7 +526,7 @@ Public Class NestingTabVM
|
|
|
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
|
' Se pezzo con rotazione libera
|
|
|
|
|
If Not EgtExistsInfo( nId, INFO_PARTROT) Then
|
|
|
|
|
If Not EgtExistsInfo(nId, INFO_PARTROT) Then
|
|
|
|
|
' Calcolo il centro di rotazione come centro del pezzo
|
|
|
|
|
Dim ptCen As Point3d
|
|
|
|
|
If Not EgtGetPartPartClusterCenterGlob(nId, ptCen) Then Return False
|
|
|
|
@@ -466,40 +560,22 @@ Public Class NestingTabVM
|
|
|
|
|
nId = EgtGetNextSelectedObj()
|
|
|
|
|
End While
|
|
|
|
|
Return True
|
|
|
|
|
' Altrimenti li ruoto tenendo conto delle collisioni
|
|
|
|
|
' Altrimenti li ruoto tenendo conto delle collisioni
|
|
|
|
|
Else
|
|
|
|
|
' Verifico se ci sono dei pezzi bloccati in rotazione
|
|
|
|
|
Dim bLockedRot As Boolean = GetLockOnRotation( GDB_ID.SEL)
|
|
|
|
|
' Se tutti i pezzi possono ruotare
|
|
|
|
|
If Not bLockedRot Then
|
|
|
|
|
' Calcolo il centro di rotazione come centro del cluster
|
|
|
|
|
Dim ptCen As Point3d
|
|
|
|
|
If Not EgtGetPartPartClusterCenterGlob(GDB_ID.SEL, ptCen) Then Return False
|
|
|
|
|
' Aggiorno regioni per nesting
|
|
|
|
|
UpdateNestRegions()
|
|
|
|
|
EnableReferenceRegion(False)
|
|
|
|
|
' Verifico rotazione complessiva
|
|
|
|
|
EgtRotate(GDB_ID.SEL, ptCen, Vector3d.Z_AX(), dAngRotDeg, GDB_RT.GLOB)
|
|
|
|
|
If EgtVerifyPart(GDB_ID.SEL, CurrentMachine.bReducedCut) Then Return True
|
|
|
|
|
' Provo rotazione parziale (dopo aver annullato la complessiva)
|
|
|
|
|
EgtRotate(GDB_ID.SEL, ptCen, Vector3d.Z_AX(), -dAngRotDeg, GDB_RT.GLOB)
|
|
|
|
|
Return EgtRotatePart(GDB_ID.SEL, CurrentMachine.bReducedCut, ptCen, dAngRotDeg)
|
|
|
|
|
Else
|
|
|
|
|
Return False
|
|
|
|
|
End If
|
|
|
|
|
Return RotatePartInsideBond(dAngRotDeg, GDB_ID.SEL)
|
|
|
|
|
End If
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Private Function GetLockOnRotation( nPartId As Integer) As Boolean
|
|
|
|
|
Private Function GetLockOnRotation(nPartId As Integer) As Boolean
|
|
|
|
|
' Se singolo pezzo
|
|
|
|
|
If nPartId <> GDB_ID.SEL Then
|
|
|
|
|
Return EgtExistsInfo( nPartId, INFO_PARTROT)
|
|
|
|
|
' Altrimenti tutti i selezionati
|
|
|
|
|
Return EgtExistsInfo(nPartId, INFO_PARTROT)
|
|
|
|
|
' Altrimenti tutti i selezionati
|
|
|
|
|
Else
|
|
|
|
|
Dim bLockedRot As Boolean = False
|
|
|
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
|
If EgtExistsInfo( nId, INFO_PARTROT) Then
|
|
|
|
|
If EgtExistsInfo(nId, INFO_PARTROT) Then
|
|
|
|
|
bLockedRot = True
|
|
|
|
|
Exit While
|
|
|
|
|
End If
|
|
|
|
@@ -564,13 +640,13 @@ Public Class NestingTabVM
|
|
|
|
|
Return True
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Friend Function ExitNesting( bChange As Boolean) As Boolean
|
|
|
|
|
Friend Function ExitNesting(bChange As Boolean) As Boolean
|
|
|
|
|
If m_CsvImport_IsChecked Then
|
|
|
|
|
m_CsvImportWindow.Close()
|
|
|
|
|
m_CsvImportWindow = Nothing
|
|
|
|
|
End If
|
|
|
|
|
If bChange Then
|
|
|
|
|
OmagOFFICEMap.refVeinMatchPanelVM.SetVeinMatchIsChecked( False)
|
|
|
|
|
OmagOFFICEMap.refVeinMatchPanelVM.SetVeinMatchIsChecked(False)
|
|
|
|
|
OmagOFFICEMap.refVeinMatchPanelVM.VeinMatchIsEnabled = False
|
|
|
|
|
End If
|
|
|
|
|
Return True
|
|
|
|
@@ -1341,22 +1417,22 @@ Public Class NestingTabVM
|
|
|
|
|
If EgtGetSelectedObjCount() = 0 OrElse m_nPartPos <> PART_POS.OUT_TABLE Then Return
|
|
|
|
|
' Tolgo blocco rotazione sui pezzi selezionati
|
|
|
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
|
' Se rotazione bloccata, tolgo blocco e aggiorno info
|
|
|
|
|
If EgtExistsInfo( nId, INFO_PARTROT) Then
|
|
|
|
|
If EgtExistsInfo(nId, INFO_PARTROT) Then
|
|
|
|
|
' Rimuovo flag di rotazione bloccata
|
|
|
|
|
EgtRemoveInfo( nId, INFO_PARTROT)
|
|
|
|
|
EgtRemoveInfo(nId, INFO_PARTROT)
|
|
|
|
|
' Tolgo da info sul pezzo Codice
|
|
|
|
|
Dim nTextId As Integer = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nId, NAME_REGION))
|
|
|
|
|
Dim nTextId As Integer = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nId, NAME_REGION))
|
|
|
|
|
While nTextId <> GDB_ID.NULL
|
|
|
|
|
If EgtGetType( nTextId) = GDB_TY.EXT_TEXT Then
|
|
|
|
|
If EgtGetType(nTextId) = GDB_TY.EXT_TEXT Then
|
|
|
|
|
Dim sText As String = ""
|
|
|
|
|
EgtTextGetContent( nTextId, sText)
|
|
|
|
|
sText = sText.Replace( "<br/>(X)", "")
|
|
|
|
|
EgtModifyText( nTextId, sText)
|
|
|
|
|
EgtTextGetContent(nTextId, sText)
|
|
|
|
|
sText = sText.Replace("<br/>(X)", "")
|
|
|
|
|
EgtModifyText(nTextId, sText)
|
|
|
|
|
Exit While
|
|
|
|
|
End If
|
|
|
|
|
nTextId = EgtGetNext( nTextId)
|
|
|
|
|
nTextId = EgtGetNext(nTextId)
|
|
|
|
|
End While
|
|
|
|
|
End If
|
|
|
|
|
' Passo al successivo selezionato
|
|
|
|
@@ -1385,22 +1461,22 @@ Public Class NestingTabVM
|
|
|
|
|
If EgtGetSelectedObjCount() = 0 OrElse m_nPartPos <> PART_POS.OUT_TABLE Then Return
|
|
|
|
|
' Metto blocco rotazione sui pezzi selezionati
|
|
|
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
|
' Se rotazione libera, applico blocco e aggiorno info
|
|
|
|
|
If Not EgtExistsInfo( nId, INFO_PARTROT) Then
|
|
|
|
|
If Not EgtExistsInfo(nId, INFO_PARTROT) Then
|
|
|
|
|
' Imposto flag di rotazione bloccata
|
|
|
|
|
EgtSetInfo( nId, INFO_PARTROT, 0)
|
|
|
|
|
EgtSetInfo(nId, INFO_PARTROT, 0)
|
|
|
|
|
' Inserisco in info sul pezzo Codice
|
|
|
|
|
Dim nTextId As Integer = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nId, NAME_REGION))
|
|
|
|
|
Dim nTextId As Integer = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nId, NAME_REGION))
|
|
|
|
|
While nTextId <> GDB_ID.NULL
|
|
|
|
|
If EgtGetType( nTextId) = GDB_TY.EXT_TEXT Then
|
|
|
|
|
If EgtGetType(nTextId) = GDB_TY.EXT_TEXT Then
|
|
|
|
|
Dim sText As String = ""
|
|
|
|
|
EgtTextGetContent( nTextId, sText)
|
|
|
|
|
EgtTextGetContent(nTextId, sText)
|
|
|
|
|
sText &= "<br/>(X)"
|
|
|
|
|
EgtModifyText( nTextId, sText)
|
|
|
|
|
EgtModifyText(nTextId, sText)
|
|
|
|
|
Exit While
|
|
|
|
|
End If
|
|
|
|
|
nTextId = EgtGetNext( nTextId)
|
|
|
|
|
nTextId = EgtGetNext(nTextId)
|
|
|
|
|
End While
|
|
|
|
|
End If
|
|
|
|
|
' Passo al successivo selezionato
|
|
|
|
@@ -1436,7 +1512,7 @@ Public Class NestingTabVM
|
|
|
|
|
Dim bAlignMoved As Boolean = False
|
|
|
|
|
Dim bSnapMoved As Boolean = False
|
|
|
|
|
If m_bMagnetic Then
|
|
|
|
|
If Not GetLockOnRotation( GDB_ID.SEL) Then
|
|
|
|
|
If Not GetLockOnRotation(GDB_ID.SEL) Then
|
|
|
|
|
EgtAlignPartOnCollision(GDB_ID.SEL, CurrentMachine.bReducedCut, bAlignMoved)
|
|
|
|
|
End If
|
|
|
|
|
If m_dSnapDist > EPS_SMALL Then
|
|
|
|
@@ -1480,7 +1556,7 @@ Public Class NestingTabVM
|
|
|
|
|
Dim bAlignMoved As Boolean = False
|
|
|
|
|
Dim bSnapMoved As Boolean = False
|
|
|
|
|
If m_bMagnetic Then
|
|
|
|
|
If Not GetLockOnRotation( GDB_ID.SEL) Then
|
|
|
|
|
If Not GetLockOnRotation(GDB_ID.SEL) Then
|
|
|
|
|
EgtAlignPartOnCollision(GDB_ID.SEL, CurrentMachine.bReducedCut, bAlignMoved)
|
|
|
|
|
End If
|
|
|
|
|
If m_dSnapDist > EPS_SMALL Then
|
|
|
|
@@ -1524,7 +1600,7 @@ Public Class NestingTabVM
|
|
|
|
|
Dim bAlignMoved As Boolean = False
|
|
|
|
|
Dim bSnapMoved As Boolean = False
|
|
|
|
|
If m_bMagnetic Then
|
|
|
|
|
If Not GetLockOnRotation( GDB_ID.SEL) Then
|
|
|
|
|
If Not GetLockOnRotation(GDB_ID.SEL) Then
|
|
|
|
|
EgtAlignPartOnCollision(GDB_ID.SEL, CurrentMachine.bReducedCut, bAlignMoved)
|
|
|
|
|
End If
|
|
|
|
|
If m_dSnapDist > EPS_SMALL Then
|
|
|
|
@@ -1568,7 +1644,7 @@ Public Class NestingTabVM
|
|
|
|
|
Dim bAlignMoved As Boolean = False
|
|
|
|
|
Dim bSnapMoved As Boolean = False
|
|
|
|
|
If m_bMagnetic Then
|
|
|
|
|
If Not GetLockOnRotation( GDB_ID.SEL) Then
|
|
|
|
|
If Not GetLockOnRotation(GDB_ID.SEL) Then
|
|
|
|
|
EgtAlignPartOnCollision(GDB_ID.SEL, CurrentMachine.bReducedCut, bAlignMoved)
|
|
|
|
|
End If
|
|
|
|
|
If m_dSnapDist > EPS_SMALL Then
|
|
|
|
@@ -1656,7 +1732,7 @@ Public Class NestingTabVM
|
|
|
|
|
If CurrentMachine.bAutomatic And
|
|
|
|
|
OmagOFFICEMap.refMainWindowVM.MainWindowM.AutoNestOption() Then
|
|
|
|
|
AutomaticInsert()
|
|
|
|
|
' altrimenti inserimento standard
|
|
|
|
|
' altrimenti inserimento standard
|
|
|
|
|
Else
|
|
|
|
|
StandardInsert()
|
|
|
|
|
End If
|
|
|
|
@@ -1949,44 +2025,44 @@ Public Class NestingTabVM
|
|
|
|
|
' Deseleziono eventuali altri
|
|
|
|
|
If EgtGetNextSelectedObj() <> GDB_ID.NULL Then
|
|
|
|
|
EgtDeselectAll()
|
|
|
|
|
EgtSelectObj( nPartId)
|
|
|
|
|
EgtSelectObj(nPartId)
|
|
|
|
|
EgtDraw()
|
|
|
|
|
End If
|
|
|
|
|
' Recupero dati del pezzo
|
|
|
|
|
Dim sCsvOrder As String = "" : EgtGetInfo( nPartId, INFO_CSV_ORD, sCsvOrder)
|
|
|
|
|
Dim sCsvList As String = "" : EgtGetInfo( nPartId, INFO_CSV_DIST, sCsvList)
|
|
|
|
|
Dim sCsvName As String = "" : EgtGetInfo( nPartId, INFO_CSV_PART, sCsvName)
|
|
|
|
|
Dim sCsvOrder As String = "" : EgtGetInfo(nPartId, INFO_CSV_ORD, sCsvOrder)
|
|
|
|
|
Dim sCsvList As String = "" : EgtGetInfo(nPartId, INFO_CSV_DIST, sCsvList)
|
|
|
|
|
Dim sCsvName As String = "" : EgtGetInfo(nPartId, INFO_CSV_PART, sCsvName)
|
|
|
|
|
' Avvio dialogo modifica
|
|
|
|
|
Dim DlgCsvDataVM As New CompoCsvDataWindowVM()
|
|
|
|
|
Dim DlgCsvDataV As New CompoCsvDataWindowV(Application.Current.MainWindow, DlgCsvDataVM)
|
|
|
|
|
DlgCsvDataVM.SetData( sCsvOrder, sCsvList, sCsvName)
|
|
|
|
|
DlgCsvDataVM.SetData(sCsvOrder, sCsvList, sCsvName)
|
|
|
|
|
If DlgCsvDataV.ShowDialog() Then
|
|
|
|
|
' Recupero i nuovi dati
|
|
|
|
|
Dim sNewOrder As String = ""
|
|
|
|
|
Dim sNewList As String = ""
|
|
|
|
|
Dim sNewName As String = ""
|
|
|
|
|
DlgCsvDataVM.GetData( sNewOrder, sNewList, sNewName)
|
|
|
|
|
DlgCsvDataVM.GetData(sNewOrder, sNewList, sNewName)
|
|
|
|
|
' Assegno i nuovi dati
|
|
|
|
|
EgtSetInfo( nPartId, INFO_CSV_ORD, sNewOrder)
|
|
|
|
|
EgtSetInfo( nPartId, INFO_CSV_DIST, sNewList)
|
|
|
|
|
EgtSetInfo( nPartId, INFO_CSV_PART, sNewName)
|
|
|
|
|
EgtSetInfo(nPartId, INFO_CSV_ORD, sNewOrder)
|
|
|
|
|
EgtSetInfo(nPartId, INFO_CSV_DIST, sNewList)
|
|
|
|
|
EgtSetInfo(nPartId, INFO_CSV_PART, sNewName)
|
|
|
|
|
' Se necessario, modifico la scritta
|
|
|
|
|
If sNewName <> sCsvName Then
|
|
|
|
|
Dim nRegLayId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_REGION)
|
|
|
|
|
Dim nRegLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_REGION)
|
|
|
|
|
Dim nTextId = EgtGetFirstInGroup(nRegLayId)
|
|
|
|
|
While nTextId <> GDB_ID.NULL
|
|
|
|
|
If EgtGetType( nTextId) = GDB_TY.EXT_TEXT Then
|
|
|
|
|
If EgtGetType(nTextId) = GDB_TY.EXT_TEXT Then
|
|
|
|
|
Dim sText As String = String.Empty
|
|
|
|
|
EgtTextGetContent( nTextId, sText)
|
|
|
|
|
Dim nPos As Integer = sText.IndexOf( sCsvName)
|
|
|
|
|
EgtTextGetContent(nTextId, sText)
|
|
|
|
|
Dim nPos As Integer = sText.IndexOf(sCsvName)
|
|
|
|
|
Dim sNewText As String
|
|
|
|
|
If nPos <0 Then
|
|
|
|
|
sNewText= sNewName & "<br/>" & sText
|
|
|
|
|
If nPos < 0 Then
|
|
|
|
|
sNewText = sNewName & "<br/>" & sText
|
|
|
|
|
Else
|
|
|
|
|
sNewText = sText.Remove( nPos, sCsvName.Length()).Insert( nPos, sNewName)
|
|
|
|
|
sNewText = sText.Remove(nPos, sCsvName.Length()).Insert(nPos, sNewName)
|
|
|
|
|
End If
|
|
|
|
|
EgtModifyText( nTextId, sNewText)
|
|
|
|
|
VeinMatching.ModifyPartText( nPartId, sNewText)
|
|
|
|
|
EgtModifyText(nTextId, sNewText)
|
|
|
|
|
VeinMatching.ModifyPartText(nPartId, sNewText)
|
|
|
|
|
Exit While
|
|
|
|
|
End If
|
|
|
|
|
nTextId = EgtGetNext(nTextId)
|
|
|
|
@@ -2081,6 +2157,7 @@ Public Class NestingTabVM
|
|
|
|
|
m_bDrag = m_bDrag AndAlso EgtUnProjectPoint(e.Location, m_ptPrev)
|
|
|
|
|
m_bDragToStart = m_bDrag
|
|
|
|
|
m_bVerify = m_bDrag AndAlso (Keyboard.Modifiers And ModifierKeys.Shift) > 0
|
|
|
|
|
m_bKeyLeftShiftPressed = m_bVerify
|
|
|
|
|
m_vtTotMove = Vector3d.NULL()
|
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
@@ -2089,7 +2166,7 @@ Public Class NestingTabVM
|
|
|
|
|
If Not m_bDrag Or m_bDragging Then Return
|
|
|
|
|
' Se primo movimento di drag, verifico di aver superato la soglia di movimento in pixel
|
|
|
|
|
If m_bDragToStart Then
|
|
|
|
|
If Math.Abs(e.Location.X - m_locPrev.X) <m_nRestRadius And
|
|
|
|
|
If Math.Abs(e.Location.X - m_locPrev.X) < m_nRestRadius And
|
|
|
|
|
Math.Abs(e.Location.Y - m_locPrev.Y) < m_nRestRadius Then
|
|
|
|
|
Return
|
|
|
|
|
End If
|
|
|
|
@@ -2115,12 +2192,12 @@ Public Class NestingTabVM
|
|
|
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_NESTPAGEUC + 7), MSG_TYPE.WARNING)
|
|
|
|
|
End If
|
|
|
|
|
' Applico le lavorazioni al pezzo
|
|
|
|
|
Dim b3Curr As new BBox3d
|
|
|
|
|
EgtGetBBoxGlob( EgtGetFirstNameInGroup(nTestId, NAME_REGION), BBFLAG, b3Curr)
|
|
|
|
|
if Not EstCalc.PreInsertOnePart( nTestId) Then Return
|
|
|
|
|
Dim b3Ins As new BBox3d
|
|
|
|
|
EgtGetBBoxGlob( EgtGetFirstNameInGroup( nTestId, NAME_REGION), BBFLAG, b3Ins)
|
|
|
|
|
Dim vtDiff As new Vector3d( b3Curr.Min().x - b3Ins.Min().x, b3Curr.Min().y - b3Ins.Min().y, 0)
|
|
|
|
|
Dim b3Curr As New BBox3d
|
|
|
|
|
EgtGetBBoxGlob(EgtGetFirstNameInGroup(nTestId, NAME_REGION), BBFLAG, b3Curr)
|
|
|
|
|
If Not EstCalc.PreInsertOnePart(nTestId) Then Return
|
|
|
|
|
Dim b3Ins As New BBox3d
|
|
|
|
|
EgtGetBBoxGlob(EgtGetFirstNameInGroup(nTestId, NAME_REGION), BBFLAG, b3Ins)
|
|
|
|
|
Dim vtDiff As New Vector3d(b3Curr.Min().x - b3Ins.Min().x, b3Curr.Min().y - b3Ins.Min().y, 0)
|
|
|
|
|
EgtMove(nMoveId, vtDiff)
|
|
|
|
|
|
|
|
|
|
'---------------------- COUNTER PART ----------------------
|
|
|
|
@@ -2136,7 +2213,7 @@ Public Class NestingTabVM
|
|
|
|
|
'---------------------- COUNTER PART ----------------------
|
|
|
|
|
|
|
|
|
|
' Gestione VeinMatching
|
|
|
|
|
VeinMatching.OnInsertPartInRaw( nMoveId)
|
|
|
|
|
VeinMatching.OnInsertPartInRaw(nMoveId)
|
|
|
|
|
' Imposto stato
|
|
|
|
|
m_bVerify = True
|
|
|
|
|
m_bFromParking = True
|
|
|
|
@@ -2146,46 +2223,108 @@ Public Class NestingTabVM
|
|
|
|
|
' Ricavo il punto corrente in coordinate mondo
|
|
|
|
|
Dim ptCurr As Point3d
|
|
|
|
|
EgtUnProjectPoint(e.Location, ptCurr)
|
|
|
|
|
' Ricavo il vettore di movimento
|
|
|
|
|
Dim vtMove As Vector3d = ptCurr - m_ptPrev
|
|
|
|
|
' Muovo i pezzi selezionati di quanto possibile
|
|
|
|
|
If vtMove.SqLen() > EPS_SMALL * EPS_SMALL Then
|
|
|
|
|
' Se movimento con sola verifica finale
|
|
|
|
|
If m_bVerify Then
|
|
|
|
|
EgtMove(nMoveId, vtMove)
|
|
|
|
|
m_vtTotMove += vtMove
|
|
|
|
|
' altrimenti caso con verifica durante il movimento
|
|
|
|
|
Else
|
|
|
|
|
' Aggiorno regioni per nesting
|
|
|
|
|
UpdateNestRegions()
|
|
|
|
|
EnableReferenceRegion(False)
|
|
|
|
|
' muovo il pezzo
|
|
|
|
|
EgtMovePart(nMoveId, CurrentMachine.bReducedCut, vtMove)
|
|
|
|
|
EgtSaveCollInfo()
|
|
|
|
|
' se movimento risultante nullo, provo con movimento tangente
|
|
|
|
|
Dim bTgMoved As Boolean = False
|
|
|
|
|
If vtMove.IsSmall() Then
|
|
|
|
|
' riprovo con movimento tangente
|
|
|
|
|
Dim vtTgMove As Vector3d = ptCurr - m_ptPrev
|
|
|
|
|
EgtTgMovePartOnCollision(nMoveId, CurrentMachine.bReducedCut, vtTgMove)
|
|
|
|
|
bTgMoved = (Not vtTgMove.IsSmall())
|
|
|
|
|
End If
|
|
|
|
|
' se abilitato magnetico (allineamento + snap), lo provo
|
|
|
|
|
Dim bAlignMoved As Boolean = False
|
|
|
|
|
Dim bSnapMoved As Boolean = False
|
|
|
|
|
If m_bMagnetic Then
|
|
|
|
|
If Not GetLockOnRotation( nMoveId) Then
|
|
|
|
|
EgtAlignPartOnCollision(nMoveId, CurrentMachine.bReducedCut, bAlignMoved)
|
|
|
|
|
End If
|
|
|
|
|
If m_dSnapDist > EPS_SMALL Then
|
|
|
|
|
EgtRestoreCollInfo()
|
|
|
|
|
EgtMovePartToSnapPointOnCollision(nMoveId, CurrentMachine.bReducedCut, m_dSnapDist, bSnapMoved)
|
|
|
|
|
End If
|
|
|
|
|
End If
|
|
|
|
|
EstCalc.ResetOrderMachiningFlag()
|
|
|
|
|
|
|
|
|
|
' la rotazione è attivabile solo se premuto il tasto Ctrl (e non sono in parheggio)
|
|
|
|
|
m_bKeyCtrlPressed = m_bDrag AndAlso (Keyboard.Modifiers And ModifierKeys.Control) > 0
|
|
|
|
|
|
|
|
|
|
'-------------Inizio ROTAZIONE ----------------
|
|
|
|
|
If m_bKeyCtrlPressed AndAlso (Not m_bFromParking OrElse m_bKeyLeftShiftPressed) Then
|
|
|
|
|
' Calcolo il centro di rotazione come centro del cluster
|
|
|
|
|
Dim ptCen As Point3d
|
|
|
|
|
If Not EgtGetPartPartClusterCenterGlob(nMoveId, ptCen) Then Return
|
|
|
|
|
' definisco il vettore dal centro del pezzo alla posizione del cursore
|
|
|
|
|
Dim vtCurr As Vector3d = ptCurr - ptCen
|
|
|
|
|
Dim dLen, dHAng, dVAng As Double
|
|
|
|
|
' recupero l'angolo orizzontale del vettore
|
|
|
|
|
vtCurr.ToSpherical(dLen, dHAng, dVAng)
|
|
|
|
|
If Not m_bStartRot Then
|
|
|
|
|
m_dAngTotal = 0
|
|
|
|
|
' notifico una rotazione
|
|
|
|
|
m_bStartRot = True
|
|
|
|
|
m_dStartAng = dVAng
|
|
|
|
|
End If
|
|
|
|
|
EgtDraw()
|
|
|
|
|
' Eventuale notifica al VeinMatching
|
|
|
|
|
Dim dDeltaAng As Double = dVAng - m_dStartAng
|
|
|
|
|
' gestione del passaggio da 0° → 360° evitando mantenendo la visualizzazione fluida
|
|
|
|
|
If Math.Abs(dDeltaAng) > 90 Then
|
|
|
|
|
If m_dStartAng < 180 And dVAng > 180 Then
|
|
|
|
|
dDeltaAng = dVAng - 360 - m_dStartAng
|
|
|
|
|
ElseIf m_dStartAng > 180 And dVAng < 180 Then
|
|
|
|
|
dDeltaAng = dVAng - m_dStartAng + 360
|
|
|
|
|
End If
|
|
|
|
|
End If
|
|
|
|
|
' Rotazione del pezzo attorno al suo centro
|
|
|
|
|
If Math.Abs(dDeltaAng) > EPS_ANG_SMALL Then
|
|
|
|
|
' se il tasto Shift è premuto (disabilitato il controllo collisioni durante il Drag)
|
|
|
|
|
If m_bKeyLeftShiftPressed Then
|
|
|
|
|
EgtRotate(nMoveId, ptCen, Vector3d.Z_AX(), dDeltaAng, GDB_RT.GLOB)
|
|
|
|
|
m_dAngTotal += dDeltaAng
|
|
|
|
|
Else
|
|
|
|
|
' esegue la rotazione fino ad incontrare un altro pezzo
|
|
|
|
|
RotatePartInsideBond(dDeltaAng, nMoveId)
|
|
|
|
|
EstCalc.ResetOrderMachiningFlag()
|
|
|
|
|
' Eventuale notifica al VeinMatching
|
|
|
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
|
VeinMatching.OnMovePartInRaw(nId)
|
|
|
|
|
nId = EgtGetNextSelectedObj()
|
|
|
|
|
End While
|
|
|
|
|
End If
|
|
|
|
|
m_dStartAng = dVAng
|
|
|
|
|
End If
|
|
|
|
|
'-------------Fine ROTAZIONE ----------------
|
|
|
|
|
|
|
|
|
|
Else
|
|
|
|
|
' -------------Inizio TRASLAZIONE ---------------
|
|
|
|
|
' Ricavo il vettore di movimento
|
|
|
|
|
Dim vtMove As Vector3d = ptCurr - m_ptPrev
|
|
|
|
|
' Muovo i pezzi selezionati di quanto possibile
|
|
|
|
|
If vtMove.SqLen() > EPS_SMALL * EPS_SMALL Then
|
|
|
|
|
' notifico una traslazione
|
|
|
|
|
If Not m_bStartMove Then
|
|
|
|
|
m_bStartMove = True
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
' Se movimento con sola verifica finale (disabilitato il controllo collisioni durante il Drag)
|
|
|
|
|
If m_bVerify Then
|
|
|
|
|
EgtMove(nMoveId, vtMove)
|
|
|
|
|
m_vtTotMove += vtMove
|
|
|
|
|
' altrimenti caso con verifica durante il movimento
|
|
|
|
|
Else
|
|
|
|
|
' Aggiorno regioni per nesting
|
|
|
|
|
UpdateNestRegions()
|
|
|
|
|
EnableReferenceRegion(False)
|
|
|
|
|
' muovo il pezzo
|
|
|
|
|
EgtMovePart(nMoveId, CurrentMachine.bReducedCut, vtMove)
|
|
|
|
|
EgtSaveCollInfo()
|
|
|
|
|
' se movimento risultante nullo, provo con movimento tangente
|
|
|
|
|
Dim bTgMoved As Boolean = False
|
|
|
|
|
If vtMove.IsSmall() Then
|
|
|
|
|
' riprovo con movimento tangente
|
|
|
|
|
Dim vtTgMove As Vector3d = ptCurr - m_ptPrev
|
|
|
|
|
EgtTgMovePartOnCollision(nMoveId, CurrentMachine.bReducedCut, vtTgMove)
|
|
|
|
|
bTgMoved = (Not vtTgMove.IsSmall())
|
|
|
|
|
End If
|
|
|
|
|
' se abilitato magnetico (allineamento + snap), lo provo
|
|
|
|
|
Dim bAlignMoved As Boolean = False
|
|
|
|
|
Dim bSnapMoved As Boolean = False
|
|
|
|
|
If m_bMagnetic Then
|
|
|
|
|
If Not GetLockOnRotation(nMoveId) Then
|
|
|
|
|
EgtAlignPartOnCollision(nMoveId, CurrentMachine.bReducedCut, bAlignMoved)
|
|
|
|
|
End If
|
|
|
|
|
If m_dSnapDist > EPS_SMALL Then
|
|
|
|
|
EgtRestoreCollInfo()
|
|
|
|
|
EgtMovePartToSnapPointOnCollision(nMoveId, CurrentMachine.bReducedCut, m_dSnapDist, bSnapMoved)
|
|
|
|
|
End If
|
|
|
|
|
End If
|
|
|
|
|
EstCalc.ResetOrderMachiningFlag()
|
|
|
|
|
End If
|
|
|
|
|
' -------------Fine TRASLAZIONE ---------------
|
|
|
|
|
End If
|
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
EgtDraw()
|
|
|
|
|
' Eventuale notifica al VeinMatching
|
|
|
|
|
If m_bStartMove OrElse m_bStartRot Then
|
|
|
|
|
If nMoveId = GDB_ID.SEL Then
|
|
|
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
@@ -2225,48 +2364,31 @@ Public Class NestingTabVM
|
|
|
|
|
|
|
|
|
|
' Se eseguito drag
|
|
|
|
|
If Not m_bDragToStart Then
|
|
|
|
|
' Se movimento con sola verifica finale
|
|
|
|
|
If m_bVerify Then
|
|
|
|
|
' Determino cosa verificare
|
|
|
|
|
Dim nMoveId = If(m_nIdToSel <> GDB_ID.NULL, m_nIdToSel, GDB_ID.SEL)
|
|
|
|
|
' Aggiorno regioni per nesting
|
|
|
|
|
UpdateNestRegions()
|
|
|
|
|
EnableReferenceRegion(False)
|
|
|
|
|
' Eseguo verifica
|
|
|
|
|
If VerifyTrfData(nMoveId) And EgtVerifyPart(nMoveId, CurrentMachine.bReducedCut) Then
|
|
|
|
|
EstCalc.ResetOrderMachiningFlag()
|
|
|
|
|
' Non superata riporto alla posizione iniziale
|
|
|
|
|
' Se movimento con sola verifica finale ----- TRASLAZIONE
|
|
|
|
|
If Not m_bStartRot And m_bStartMove Then
|
|
|
|
|
VerifyMove()
|
|
|
|
|
' Se movimento con sola verifica finale ----- TRASLAZIONE + ROTAZIONE
|
|
|
|
|
ElseIf m_bStartRot And m_bStartMove Then
|
|
|
|
|
If Not m_bFromParking Then
|
|
|
|
|
VerifyRot()
|
|
|
|
|
Else
|
|
|
|
|
If m_bFromParking Then
|
|
|
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
|
|
|
PreRemoveOnePart(nMoveId)
|
|
|
|
|
VeinMatching.OnRemovePartFromRaw(nMoveId)
|
|
|
|
|
Else
|
|
|
|
|
EgtMove(nMoveId, -m_vtTotMove)
|
|
|
|
|
' Eventuale notifica al VeinMatching
|
|
|
|
|
If nMoveId = GDB_ID.SEL Then
|
|
|
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
|
|
|
While nId <> GDB_ID.NULL
|
|
|
|
|
VeinMatching.OnMovePartInRaw(nId)
|
|
|
|
|
nId = EgtGetNextSelectedObj()
|
|
|
|
|
End While
|
|
|
|
|
Else
|
|
|
|
|
VeinMatching.OnMovePartInRaw(nMoveId)
|
|
|
|
|
End If
|
|
|
|
|
End If
|
|
|
|
|
'---------------------- COUNTER PART ----------------------
|
|
|
|
|
Dim sRefGroup As String = String.Empty
|
|
|
|
|
If EgtGetInfo(nMoveId, INFO_REFGROUP, sRefGroup) Then
|
|
|
|
|
' accendo il layer che contiene il contatore (spento in fase di Drag)
|
|
|
|
|
Dim nCounterLayer As Integer = EgtGetFirstNameInGroup(nMoveId, INFO_COUNTERLY)
|
|
|
|
|
EgtSetStatus(nCounterLayer, GDB_ST.ON_)
|
|
|
|
|
' aggiorno il layer che indica il numero di pezzi in parcheggio
|
|
|
|
|
CountPartInFamily(sRefGroup)
|
|
|
|
|
End If
|
|
|
|
|
'---------------------- COUNTER PART ----------------------
|
|
|
|
|
' forzo il reset delle info di rotazione
|
|
|
|
|
m_dStartAng = 0
|
|
|
|
|
m_dAngTotal = 0
|
|
|
|
|
m_bStartRot = False
|
|
|
|
|
End If
|
|
|
|
|
VerifyMove()
|
|
|
|
|
' verifico se la posizione finale della rotazione è corretta ----- ROTAZIONE
|
|
|
|
|
ElseIf m_bStartRot And Not m_bStartMove Then
|
|
|
|
|
If m_bFromParking Then
|
|
|
|
|
VerifyMove()
|
|
|
|
|
' forzo il reset delle info di rotazione
|
|
|
|
|
m_dStartAng = 0
|
|
|
|
|
m_dAngTotal = 0
|
|
|
|
|
m_bStartRot = False
|
|
|
|
|
Else
|
|
|
|
|
VerifyRot()
|
|
|
|
|
End If
|
|
|
|
|
m_bFromParking = False
|
|
|
|
|
' altrimenti caso con verifica durante il movimento
|
|
|
|
|
Else
|
|
|
|
|
' Basta reset alla fine
|
|
|
|
|
End If
|
|
|
|
@@ -2320,7 +2442,7 @@ Public Class NestingTabVM
|
|
|
|
|
' Con CANC cancello i pezzi selezionati
|
|
|
|
|
If e.KeyData = System.Windows.Forms.Keys.Delete Then
|
|
|
|
|
RemovePart()
|
|
|
|
|
' Con INS eseguo inserimento dei pezzi selezionati in VeinMatching
|
|
|
|
|
' Con INS eseguo inserimento dei pezzi selezionati in VeinMatching
|
|
|
|
|
ElseIf e.KeyData = System.Windows.Forms.Keys.Insert Then
|
|
|
|
|
' Vettore dei pezzi selezionati (l'inserimento di un pezzo in VM cancella la selezione)
|
|
|
|
|
Dim vSel As New List(Of Integer)
|
|
|
|
|