Compare commits

...

65 Commits

Author SHA1 Message Date
NicolaP 753ff7b4f1 Recupero dimensione corrente orgetto per stampa 2023-02-09 09:49:04 +01:00
NicolaP 1edfe486cb Migliorato rapporto di stsampa immagini 2023-02-08 19:36:09 +01:00
NicolaP 7190993f11 Aggiunto bottone per stampa layout corrente 2023-02-08 18:13:12 +01:00
NicolaP 249289144f Merge branch 'master' into develop 2023-02-08 14:51:06 +01:00
NicolaP 36ee5e4352 Cambio versione 2.5b1 2023-02-03 16:32:25 +01:00
NicolaP 147099b702 Merge branch 'develop' 2023-02-03 16:29:01 +01:00
NicolaP dd81384bb8 Migliorata gestione rotazione in park 2023-01-30 15:38:13 +01:00
NicolaP 9cf61d691d Gestione rotazione pezzi con Drag 2023-01-20 12:24:10 +01:00
NicolaP 358c5df390 Merge remote-tracking branch 'origin/HEAD' 2023-01-18 18:09:32 +01:00
NicolaP ccaec9af5a Merge branch 'develop' 2023-01-18 18:04:12 +01:00
NicolaP 1dbecd0083 Gestione allungamento tagli curvi 2023-01-18 18:03:57 +01:00
DarioS 11c6f95378 OmagOFFICE :
- aggiornamento info programma.
2023-01-18 09:17:16 +01:00
NicolaP 3604a85cc1 Merge branch 'develop' 2023-01-05 18:58:40 +01:00
NicolaP 3aaaa0fcb6 Lettura StarEndModifyOnIntCorner da file macchina, ver 2.5a1 2023-01-05 18:58:04 +01:00
NicolaP 52da2bc2c9 Merge branch 'develop' 2022-12-07 19:55:29 +01:00
NicolaP 4de476907f Migliorata gestione ventose 2022-12-07 19:55:06 +01:00
NicolaP 07bcb7479b Merge branch 'master' into develop 2022-11-09 10:32:11 +01:00
NicolaP 92818aafd4 Cambio versione 2.4k1 2022-11-09 10:31:37 +01:00
NicolaP f4326b27b7 Merge branch 'develop' 2022-11-09 10:29:46 +01:00
NicolaP 1f4a0afd75 Merge commit '565ba3c7564c5c4610b99ac1b6460b627f3a7708' into develop 2022-11-07 18:19:27 +01:00
NicolaP 565ba3c756 Gestione primo Engrave inclinato 2022-11-07 18:19:11 +01:00
NicolaP 7ab4e56594 Merge branch 'Features/StartEnd_Modify_On_Internal_Corner' into develop 2022-11-07 17:16:11 +01:00
NicolaP 697fb4c730 Gestioena modifica tagli su angoli interni 2022-11-07 17:09:47 +01:00
NicolaP 4f5804206d Merge branch 'master' into develop 2022-10-24 09:48:15 +02:00
NicolaP 58828cf846 Merge branch 'master' of https://gitlab.steamware.net/egaltech/omagoffice 2022-10-24 09:47:44 +02:00
NicolaP 36138ec459 Merge branch 'develop' 2022-10-24 09:43:54 +02:00
NicolaP 7fc49b0d1d Merge branch 'master' into develop 2022-10-24 09:39:13 +02:00
NicolaP cf9379272c Merge branch 'develop' 2022-10-24 09:38:49 +02:00
NicolaP cd6714752e Cambio versione 2.4j1 2022-10-24 09:37:48 +02:00
DarioS 4c62410c20 OmagOFFICE 2.4j1 :
- ricompilazione con cambio versione.
2022-10-24 08:48:12 +02:00
NicolaP b017fef2b9 Merge branch 'develop' 2022-10-17 14:39:17 +02:00
NicolaP 17785afc20 Merge branch 'Features/Manage_Raw' into develop 2022-10-17 14:39:04 +02:00
NicolaP 62953c981e Correzione creazione nuovo grezzo in macchina 2022-10-17 14:36:08 +02:00
NicolaP c3a3057420 Merge branch 'master' into develop 2022-10-06 16:15:58 +02:00
NicolaP 8fa7b6188c Cambio versione: 2.4i4 2022-10-06 13:05:43 +02:00
NicolaP f3770dfc7c Eliinazione caratteri speciali da perocrosi file 2022-10-06 11:11:43 +02:00
NicolaP 1358cef04a Merge branch 'develop' 2022-10-05 19:57:08 +02:00
NicolaP e0fe4d9444 Migliorata abilitazione bottoni gruppi di lavoro 2022-10-05 19:39:48 +02:00
NicolaP 05186db728 Merge remote-tracking branch 'origin/HEAD' into develop 2022-10-05 10:17:32 +02:00
DarioS 5b21559e56 OmagOFFICE 2.4i3 :
- modifiche per gestione multidirettori di base delle macchine.
2022-10-04 11:16:17 +02:00
NicolaP 13a774429e Merge branch 'develop' 2022-09-19 15:08:51 +02:00
NicolaP bde6c38733 Migliorata gestione lavorazioni con ponticelli 2022-09-19 15:08:35 +02:00
NicolaP e3beaf2aa3 Merge branch 'develop' 2022-09-15 12:10:23 +02:00
NicolaP deb8b34402 Gestione eliminazione Pezzi/Ponticelli, migliorata gestione reset ponticelli 2022-09-15 12:10:03 +02:00
NicolaP 49311579ec Merge branch 'develop' 2022-09-15 11:27:01 +02:00
NicolaP 589b7211ab Migliorata gestione selezione lati per ponticelli 2022-09-15 11:26:14 +02:00
NicolaP 892806d32a Merge remote-tracking branch 'origin/master' into develop 2022-09-15 11:21:12 +02:00
DarioS 914a89014e OmagOFFICE :
- aggiunte altre info per Bridges.
2022-09-14 10:11:55 +02:00
NicolaP 3043a717d3 Merge branch 'develop' 2022-09-13 15:40:13 +02:00
NicolaP 8a3b52e082 Migliorato caricamento direttori macchine 2022-09-13 15:39:52 +02:00
NicolaP f4126dba7a Reset Bridges se muovo grezzo 2022-09-13 15:32:07 +02:00
NicolaP 6009db35cd Merge branch 'develop' 2022-09-13 12:08:32 +02:00
NicolaP 4a42374891 Migliorata gestione Bridges 2022-09-13 12:08:05 +02:00
NicolaP 64c6a6cf9b Merge remote-tracking branch 'origin/master' into develop 2022-09-13 11:36:27 +02:00
DarioS d1a8f033db OmagOFFICE 2.4i2 :
- prime modifiche per direttori multipli di base delle macchine.
2022-09-13 08:59:25 +02:00
NicolaP a6be019b32 Merge branch 'Features/Manage_MachinesDir' into develop 2022-09-12 17:27:09 +02:00
NicolaP f2a777a226 Correzione gestione alzatine/frontalini 2022-09-06 11:53:08 +02:00
NicolaP 2e0979a618 Merge branch 'Features/Waterjet_Bridges' into develop 2022-09-05 17:37:05 +02:00
NicolaP bd33450bb0 Gestione comando Canc e Escape per interrompere 2022-08-31 18:07:55 +02:00
NicolaP fa0ebe1503 Utilizzo costanti per Bridge 2022-08-31 17:49:19 +02:00
NicolaP d33a976d3b Gestione costruzione ponticelli WJ 2022-08-31 17:41:28 +02:00
NicolaP ebe0c84e1f Merge commit '090e930a0febd976d4c9e2f135c61b71c9898d5b' into develop 2022-08-24 12:37:34 +02:00
DarioS 090e930a0f OmagOFFICE 2.4g1 :
- cambio di versione.
2022-08-11 10:45:51 +02:00
DarioS c95fb50006 Merge branch 'master' of https://gitlab.steamware.net/egaltech/OmagOFFICE 2022-08-02 10:01:50 +02:00
DarioS f4a8edd421 Merge branch 'develop' of https://gitlab.steamware.net/egaltech/OmagOFFICE 2022-08-02 08:34:10 +02:00
27 changed files with 1247 additions and 257 deletions
+2
View File
@@ -104,6 +104,7 @@ Module ConstIni
Public Const K_ENGRAVENUMBER2 As String = "EngraveNumber2" Public Const K_ENGRAVENUMBER2 As String = "EngraveNumber2"
Public Const K_ENGRAVEDEPTH As String = "EngraveDepth" Public Const K_ENGRAVEDEPTH As String = "EngraveDepth"
Public Const K_ENGRAVESHORT As String = "EngraveShort" Public Const K_ENGRAVESHORT As String = "EngraveShort"
Public Const K_ENGRAVEANGLE As String = "EngraveAngle"
Public Const K_ENGRAVEDEPTH2 As String = "EngraveDepth2" Public Const K_ENGRAVEDEPTH2 As String = "EngraveDepth2"
Public Const K_DRIPOFFSET As String = "DripOffset" Public Const K_DRIPOFFSET As String = "DripOffset"
Public Const K_DRIPOFFSET2 As String = "DripOffset2" Public Const K_DRIPOFFSET2 As String = "DripOffset2"
@@ -125,6 +126,7 @@ Module ConstIni
Public Const K_AUTOMATICOPTIMIZE As String = "AutomaticOptimize" Public Const K_AUTOMATICOPTIMIZE As String = "AutomaticOptimize"
Public Const K_AUTOMATICMAXTIME As String = "AutomaticMaxTime" Public Const K_AUTOMATICMAXTIME As String = "AutomaticMaxTime"
Public Const K_DRAGRECTANGLE As String = "DragRectangle" Public Const K_DRAGRECTANGLE As String = "DragRectangle"
Public Const K_STARTENDMODIFYONINTCORNER As String = "StartEndModifyOnIntCorner"
Public Const S_SPLIT As String = "Split" Public Const S_SPLIT As String = "Split"
Public Const K_MOVE_LEV As String = "MoveLevel" Public Const K_MOVE_LEV As String = "MoveLevel"
+8
View File
@@ -149,6 +149,14 @@ Friend Module CamAuto
Return bOk Return bOk
End Function End Function
Friend Function ResetAllBridges() As Boolean
Dim bOk As Boolean = True
Dim nMachGroup As Integer = EgtGetCurrMachGroup()
Dim nBridgesGroup As Integer = EgtGetFirstNameInGroup(nMachGroup, "Bridges")
bOk = EgtErase(nBridgesGroup)
Return bOk
End Function
' verifico che il contorno passato non sia stato separato ' verifico che il contorno passato non sia stato separato
Friend Function VerifyOutLoopIsClosed(nIdLayerOutLoop As Integer) As Boolean Friend Function VerifyOutLoopIsClosed(nIdLayerOutLoop As Integer) As Boolean
Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop) Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop)
+5
View File
@@ -158,6 +158,8 @@ Module ConstMach
Public Const NAME_UNDERDRILL As String = "UnderDrill" Public Const NAME_UNDERDRILL As String = "UnderDrill"
' Nome layer preview ' Nome layer preview
Public Const NAME_PREVIEW As String = "PV" Public Const NAME_PREVIEW As String = "PV"
Public Const NAME_BRIDGES As String = "Bridges"
Public Const NAME_BRIDGESLINE As String = "BridgeLine"
' Info in layer contorno interno per FiloTop ' Info in layer contorno interno per FiloTop
Public Const INFO_FILOTOP As String = "FiloTop" Public Const INFO_FILOTOP As String = "FiloTop"
Public Const INFO_ROUNDOFF As String = "RoundOff" Public Const INFO_ROUNDOFF As String = "RoundOff"
@@ -324,6 +326,9 @@ Module ConstMach
Public Function COL_MCH_DRIPCUT() As Color3d Public Function COL_MCH_DRIPCUT() As Color3d
Return New Color3d(255, 0, 165) Return New Color3d(255, 0, 165)
End Function End Function
Public Function COL_MCH_ONENGRAVE_ANG() As Color3d
Return New Color3d(255, 255, 100)
End Function
Public Function COL_MCH_DRIPFREE() As Color3d Public Function COL_MCH_DRIPFREE() As Color3d
Return New Color3d(192, 0, 128) Return New Color3d(192, 0, 128)
End Function End Function
+1 -1
View File
@@ -1418,7 +1418,7 @@ Friend Property sCurrMillNoTip As String
' recupro dalla lista delle macchine l'oggetto associato al nome indicato ' recupro dalla lista delle macchine l'oggetto associato al nome indicato
Public Sub GetMachineClass(sMachineName As String) Public Sub GetMachineClass(sMachineName As String)
For Each Item In OmagOFFICEMap.refMachinePanelVM.MachineList For Each Item In OmagOFFICEMap.refMachinePanelVM.MachineList
If Item.Name = sMachineName Then If string.Compare(Item.Name, sMachineName, True) = 0 Then
OmagOFFICEMap.refMachinePanelVM.SelectedMachine = Item OmagOFFICEMap.refMachinePanelVM.SelectedMachine = Item
Exit For Exit For
End If End If
+6 -5
View File
@@ -92,11 +92,12 @@ Public Module SplitAuto
Mach.m_dStartFreeLen = FREELEN_INF + 1 Mach.m_dStartFreeLen = FREELEN_INF + 1
Mach.m_dEndFreeLen = FREELEN_INF + 1 Mach.m_dEndFreeLen = FREELEN_INF + 1
Dim nEntId, nSub As Integer Dim nEntId, nSub As Integer
If EgtGetMachiningGeometry( 0, nEntId, nSub) Then If EgtGetMachiningGeometry(0, nEntId, nSub) Then
If EgtGetType( nEntId) = GDB_TY.CRV_ARC OrElse EgtGetType( nEntId) = GDB_TY.CRV_COMPO Then Mach.m_bIsLine = False ' EgtGetType( nEntId) = GDB_TY.CRV_ARC OrElse
EgtGetInfo( nEntId, If( Not Mach.m_bInvert, INFO_PREVANG, INFO_NEXTANG), Mach.m_dPrevAng) If EgtGetType(nEntId) = GDB_TY.CRV_COMPO Then Mach.m_bIsLine = False
EgtGetInfo( nEntId, If( Not Mach.m_bInvert, INFO_NEXTANG, INFO_PREVANG), Mach.m_dNextAng) EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_PREVANG, INFO_NEXTANG), Mach.m_dPrevAng)
EgtGetInfo( nEntId, If( Not Mach.m_bInvert, INFO_START_FREELEN, INFO_END_FREELEN), Mach.m_dStartFreeLen) EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_NEXTANG, INFO_PREVANG), Mach.m_dNextAng)
EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_START_FREELEN, INFO_END_FREELEN), Mach.m_dStartFreeLen)
EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_END_FREELEN, INFO_START_FREELEN), Mach.m_dEndFreeLen) EgtGetInfo(nEntId, If(Not Mach.m_bInvert, INFO_END_FREELEN, INFO_START_FREELEN), Mach.m_dEndFreeLen)
Mach.m_bEnableInvert = GetEnableInvert(nEntId) Mach.m_bEnableInvert = GetEnableInvert(nEntId)
EgtMidVector(nEntId, GDB_ID.ROOT, Mach.m_vtDir) EgtMidVector(nEntId, GDB_ID.ROOT, Mach.m_vtDir)
+10 -3
View File
@@ -444,15 +444,14 @@ Module VacuumCups
Dim dLen, dAngVertDeg, dAngOrizzDeg As Double Dim dLen, dAngVertDeg, dAngOrizzDeg As Double
frMinRect.VersX().ToSpherical(dLen, dAngVertDeg, dAngOrizzDeg) frMinRect.VersX().ToSpherical(dLen, dAngVertDeg, dAngOrizzDeg)
dRotAngDeg = dAngOrizzDeg dRotAngDeg = dAngOrizzDeg
If b3Vac.DimY() > b3Vac.DimX() + EPS_SMALL Then dRotAngDeg -= 90
Dim dPreferredRot As Double = m_dPreferredRot Dim dPreferredRot As Double = m_dPreferredRot
If bRotateVacuumNearExtraStrokeX And (Math.Abs(dRotAngDeg - 90) < 45 Or Math.Abs(dRotAngDeg - 270) < 45) Then If bRotateVacuumNearExtraStrokeX And Not IsHorizontal(dAngOrizzDeg) Then
If frMinRect.Orig().x < b3Tab.Center().x Then If frMinRect.Orig().x < b3Tab.Center().x Then
dPreferredRot = m_dPrefVertRotXMinus dPreferredRot = m_dPrefVertRotXMinus
Else Else
dPreferredRot = m_dPrefVertRotXPlus dPreferredRot = m_dPrefVertRotXPlus
End If End If
ElseIf bRotateVacuumNearExtraStrokeY And (Math.Abs(dRotAngDeg - 90) > 45 Or Math.Abs(dRotAngDeg - 270) > 45) Then ElseIf bRotateVacuumNearExtraStrokeY And IsHorizontal(dAngOrizzDeg) Then
' se l'orientemanto è orizzontale e la macchina è stata abilitata ' se l'orientemanto è orizzontale e la macchina è stata abilitata
If frMinRect.Orig().y < b3Tab.Center().y Then If frMinRect.Orig().y < b3Tab.Center().y Then
dPreferredRot = m_dPrefVertRotYPlus dPreferredRot = m_dPrefVertRotYPlus
@@ -460,6 +459,7 @@ Module VacuumCups
dPreferredRot = m_dPrefVertRotYMinus dPreferredRot = m_dPrefVertRotYMinus
End If End If
End If End If
If b3Vac.DimY() > b3Vac.DimX() + EPS_SMALL Then dRotAngDeg -= 90
Dim dAngDelta As Double = If( Math.Abs( b3Vac.DimY() - b3Vac.DimX()) < 10 * EPS_SMALL, 90, 180) Dim dAngDelta As Double = If( Math.Abs( b3Vac.DimY() - b3Vac.DimX()) < 10 * EPS_SMALL, 90, 180)
While dRotAngDeg - dPreferredRot >= dAngDelta / 2 While dRotAngDeg - dPreferredRot >= dAngDelta / 2
dRotAngDeg -= dAngDelta dRotAngDeg -= dAngDelta
@@ -530,6 +530,13 @@ Module VacuumCups
Return dDist Return dDist
End Function End Function
Private Function IsHorizontal(dDegAng As Double) As Boolean
If (Math.Abs(dDegAng) > 45 And Math.Abs(dDegAng) < 135) Or (Math.Abs(dDegAng) > 225 And Math.Abs(dDegAng) < 315) Then
Return False
End If
Return True
End Function
' assegante le posizioni del centro delle ventose e l'angolo di posizionamento orizzontale verifica che la posizione sia raggiungibile ' assegante le posizioni del centro delle ventose e l'angolo di posizionamento orizzontale verifica che la posizione sia raggiungibile
Public Function VerifyOutOfStrokes(ptRef As Point3d, dRotAngDeg As Double) As Integer Public Function VerifyOutOfStrokes(ptRef As Point3d, dRotAngDeg As Double) As Integer
Dim dX, dY, dZ As Double Dim dX, dY, dZ As Double
+7
View File
@@ -29,6 +29,13 @@ Public Class VeinMatchingWindow
Private m_locPrev As System.Drawing.Point Private m_locPrev As System.Drawing.Point
Private m_ptPrev As Point3d Private m_ptPrev As Point3d
Private m_ptCen As Point3d Private m_ptCen As Point3d
' 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
Private Sub Window_Initialized(sender As Object, e As EventArgs) Private Sub Window_Initialized(sender As Object, e As EventArgs)
' Assegnazione scena all'host e posizionamento nella PlacePageGrid ' Assegnazione scena all'host e posizionamento nella PlacePageGrid
+14
View File
@@ -0,0 +1,14 @@
<EgtFloating:EgtFloatingPanel x:Class="PrintPanelV"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:EgtFloating="clr-namespace:EgtWPFLib5.EgtFloating;assembly=EgtWPFLib5"
IsTopDockable="True" IsBottomDockable="False" IsLeftDockable="False"
IsRightDockable="False" Style="{StaticResource ToolBar_EgtFloatingPanel}">
<Button ToolTip="{Binding PrintToolTip}"
Style="{StaticResource ToolBar_Button}"
Command="{Binding PrintCommand}">
<Image Source="/Resources/InstrumentPanel/Print.png" Stretch="Uniform"/>
</Button>
</EgtFloating:EgtFloatingPanel>
+3
View File
@@ -0,0 +1,3 @@
Public Class PrintPanelV
End Class
+84
View File
@@ -0,0 +1,84 @@
Imports EgtUILib
Imports EgtWPFLib5
Public Class PrintPanelVM
' Definizione comandi
Private m_cmdPrint As ICommand
Public ReadOnly Property PrintToolTip As String
Get
Return "Print shading" & vbCrLf & "Print hidden line (Shift)"
End Get
End Property
#Region "PrintCommand"
Public ReadOnly Property PrintCommand As ICommand
Get
If m_cmdPrint Is Nothing Then
m_cmdPrint = New Command(AddressOf Print)
End If
Return m_cmdPrint
End Get
End Property
Public Sub Print(ByVal param As Object)
Dim SM_Select As SM = SM.SHADING
If (Keyboard.Modifiers And ModifierKeys.Shift) > 0 Then
SM_Select = SM.HIDDENLINE
EgtSetLineAttribs(3)
End If
Dim printDlg As New PrintDialog
Dim sPath = OmagOFFICEMap.refMainWindowVM.MainWindowM.sTempDir & "\Image.png"
If printDlg.ShowDialog() Then
' Recupero le dimensioni dell'area di stampa
Dim dW As Double = printDlg.PrintableAreaWidth
Dim dH As Double = printDlg.PrintableAreaHeight
Try
' Creo l'immagine da allegare
' EgtZoom(ZM.ALL, True)
' Prendo l'immagine per la stampa
Dim colWhite As New Color3d(255, 255, 255)
Dim nImgW As Integer = GetWidthDimProjectV()
Dim nImgH As Integer = GetHeightDimProjectV()
If Not EgtGetImage(SM_Select, colWhite, colWhite, nImgW, nImgH, sPath) Then
' Error in creating the print image
EgtOutLog(EgtMsg(50181))
EgtSetLineAttribs(1)
Return
End If
EgtSetLineAttribs(1)
'Metodo complesso di stampa che permette di rilasciare il file :
'carico la bitmap e la metto in uno stream in memoria
Dim stream As System.IO.Stream = New System.IO.MemoryStream()
Dim bitmap As System.Drawing.Bitmap = New System.Drawing.Bitmap(sPath)
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png)
bitmap.Dispose()
' la sposto in una BitmapImage
Dim bitImage As New System.Windows.Media.Imaging.BitmapImage()
bitImage.BeginInit()
bitImage.StreamSource = stream
bitImage.EndInit()
' la sposto in un Visual Control
Dim tmpImg As New Image
tmpImg.BeginInit()
tmpImg.Source = bitImage
'tmpImg.Margin = New Thickness(-100)
tmpImg.Stretch = Stretch.Uniform
' ruoto a seconda dell'aspetto della pagina
'If (dH > dW And nImgH < nImgW) Or (dH < dW And nImgH > nImgW) Then
' tmpImg.LayoutTransform = New RotateTransform(-90)
'End If
tmpImg.EndInit()
' eseguo la stampa
printDlg.PrintVisual(tmpImg, "Parts Layout")
Catch
' Rrror in executing print
EgtOutLog(EgtMsg(50182))
End Try
End If
End Sub
#End Region ' PrintCommand
End Class
+7 -14
View File
@@ -95,26 +95,19 @@ Public Class MyMachinePanelVM
OmagOFFICEMap.SetRefMachinePanelVM(Me) OmagOFFICEMap.SetRefMachinePanelVM(Me)
' recupero cartella radice delle macchine ' recupero cartella radice delle macchine
m_sMachinesRoot = OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot m_sMachinesRoot = OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot
' trasformo l'elenco dei direttori macchina in una stringa del tipo "..\Dir1\Example01|..\Dir2\|Example02"
Dim sMchRoots As String = m_sMachinesRoot
'' Carica macchine da cartella delle macchine
'For Each MachDir In OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRootList
' sMchRoots &= MachDir & "|"
'Next
'' rimuovo dalla stringa l'ultimo carattere inserito
'sMchRoots = sMchRoots.Remove(sMchRoots.Length - 1, 1)
' procedo ad inizializzare la classe carico la lista "MachineList" che visualizzo per l'inserimento di nuvoi MachGroup
Machine.MachineListInit(sMchRoots, MachineList)
' Inizializzo valori visibilità parametri Db utensili e lavorazioni
OmagOFFICETMDbParamVisibility.Init()
End Sub End Sub
#End Region ' CONSTRUCTOR #End Region ' CONSTRUCTOR
#Region "METHODS" #Region "METHODS"
Public Sub Init( sMchRoots As String)
' procedo ad inizializzare la classe carico la lista "MachineList" che visualizzo per l'inserimento di nuovi MachGroup
Machine.MachineListInit(sMchRoots, MachineList)
' Inizializzo valori visibilità parametri Db utensili e lavorazioni
OmagOFFICETMDbParamVisibility.Init()
End Sub
''' <summary> ''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand. ''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary> ''' </summary>
+9 -11
View File
@@ -184,13 +184,6 @@ Public Class MainWindowM
Directory.CreateDirectory(m_sBackUpDir) Directory.CreateDirectory(m_sBackUpDir)
' Impostazione path resources dir ' Impostazione path resources dir
m_sResourcesRoot = m_sDataRoot & "\" & RES_DIR m_sResourcesRoot = m_sDataRoot & "\" & RES_DIR
' Impostazione direttorio per le macchine
If GetMainPrivateProfileString(S_MACH, K_MACHINESDIR, "", m_sMachinesRoot) = 0 Then
m_sMachinesRoot = m_sDataRoot & "\" & MACHINES_DFL_DIR
End If
' carico eleco dei direttori
If Not String.IsNullOrEmpty(m_sMachinesRoot) Then m_sMachinesRootList.Add(m_sMachinesRoot)
Dim nIndexDir As Integer = 1 Dim nIndexDir As Integer = 1
Dim sCurrMachineDir As String = String.Empty Dim sCurrMachineDir As String = String.Empty
While GetMainPrivateProfileString(S_MACH, K_MACHINESDIR & nIndexDir.ToString, "", sCurrMachineDir) <> 0 While GetMainPrivateProfileString(S_MACH, K_MACHINESDIR & nIndexDir.ToString, "", sCurrMachineDir) <> 0
@@ -199,7 +192,12 @@ Public Class MainWindowM
End If End If
nIndexDir += 1 nIndexDir += 1
End While End While
' Impostazione direttorio (versioni precedenti 2.4i2) per le macchine
If GetMainPrivateProfileString(S_MACH, K_MACHINESDIR, "", m_sMachinesRoot) = 0 Then
m_sMachinesRoot = m_sDataRoot & "\" & MACHINES_DFL_DIR
End If
' Carico il direttorio nell'elenco dei direttori macchina
If Not String.IsNullOrEmpty(m_sMachinesRoot) Then m_sMachinesRootList.Add(m_sMachinesRoot)
' Impostazione direttorio per toolmakers ' Impostazione direttorio per toolmakers
If GetMainPrivateProfileString(S_MACH, K_TOOLMAKERSDIR, "", m_sToolMakersDir) = 0 Then If GetMainPrivateProfileString(S_MACH, K_TOOLMAKERSDIR, "", m_sToolMakersDir) = 0 Then
m_sToolMakersDir = m_sDataRoot & "\" & TOOLMAKERS_DFL_DIR m_sToolMakersDir = m_sDataRoot & "\" & TOOLMAKERS_DFL_DIR
@@ -225,8 +223,8 @@ Public Class MainWindowM
' Verifico abilitazione nesting automatico ' Verifico abilitazione nesting automatico
m_bAutoNestOption = Not String.IsNullOrWhiteSpace( sNestKey) m_bAutoNestOption = Not String.IsNullOrWhiteSpace( sNestKey)
' Recupero livello e opzioni della chiave ' Recupero livello e opzioni della chiave
Dim bKey As Boolean = EgtGetKeyLevel(9423, 2406, 1, m_nKeyLevel) And Dim bKey As Boolean = EgtGetKeyLevel(9423, 2502, 1, m_nKeyLevel) And
EgtGetKeyOptions(9423, 2406, 1, m_nKeyOptions) EgtGetKeyOptions(9423, 2502, 1, m_nKeyOptions)
' Verifico abilitazione prodotto ' Verifico abilitazione prodotto
Dim bProd As Boolean = GetKeyOption(KEY_OPT.OFFICE_BASE) Dim bProd As Boolean = GetKeyOption(KEY_OPT.OFFICE_BASE)
' Inizializzazione generale di EgtInterface ' Inizializzazione generale di EgtInterface
@@ -310,7 +308,7 @@ Public Class MainWindowM
' verifico che il nome da inserire non esista già in elenco ' verifico che il nome da inserire non esista già in elenco
Private Function VerifyMachineIsUnique(sMachDir As String) As Boolean Private Function VerifyMachineIsUnique(sMachDir As String) As Boolean
For Each sDir As String In m_sMachinesRootList For Each sDir As String In m_sMachinesRootList
If sDir.ToLower.Trim = sMachDir.ToLower.Trim Then If String.Compare( sDir.Trim().TrimEnd("\"c), sMachDir.Trim().TrimEnd("\"c), True) = 0 Then
Return False Return False
End If End If
Next Next
+3 -3
View File
@@ -30,7 +30,7 @@ Imports System.Windows
#End If #End If
<Assembly: AssemblyCompany("Egalware s.r.l.")> <Assembly: AssemblyCompany("Egalware s.r.l.")>
<Assembly: AssemblyProduct("OmagOFFICE")> <Assembly: AssemblyProduct("OmagOFFICE")>
<Assembly: AssemblyCopyright("Copyright © 2017-2022 by Egalware s.r.l.")> <Assembly: AssemblyCopyright("Copyright © 2017-2023 by Egalware s.r.l.")>
<Assembly: AssemblyTrademark("")> <Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(false)> <Assembly: ComVisible(false)>
'In order to begin building localizable applications, set 'In order to begin building localizable applications, set
@@ -69,6 +69,6 @@ Imports System.Windows
' by using the '*' as shown below: ' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("2.4.6.1")> <Assembly: AssemblyVersion("2.5.2.1")>
<Assembly: AssemblyFileVersion("2.4.6.1")> <Assembly: AssemblyFileVersion("2.5.2.1")>
+12 -5
View File
@@ -33,18 +33,22 @@ Public Class MyMachGroupPanelVM
Sub New() Sub New()
MyBase.New() MyBase.New()
' Recupero la macchina di default
Dim sDefaultMachine As String = String.Empty
GetMainPrivateProfileString(S_MACH, K_CURRMACH, "", sDefaultMachine)
' Creo riferimento a questa classe in OmagOFFICEMap ' Creo riferimento a questa classe in OmagOFFICEMap
OmagOFFICEMap.SetRefMachGroupPanelVM(Me) OmagOFFICEMap.SetRefMachGroupPanelVM(Me)
InitMachGroupPanel(True, OmagOFFICEMap.refMachinePanelVM.MachineList.ToList(), sDefaultMachine, BASE_MACH_GROUP & "1")
End Sub End Sub
#End Region ' CONSTRUCTOR #End Region ' CONSTRUCTOR
#Region "METHODS" #Region "METHODS"
Public Sub Init()
' Recupero la macchina di default
Dim sDefaultMachine As String = String.Empty
GetMainPrivateProfileString(S_MACH, K_CURRMACH, "", sDefaultMachine)
EgtSetCurrMachine(sDefaultMachine)
InitMachGroupPanel(True, OmagOFFICEMap.refMachinePanelVM.MachineList.ToList(), sDefaultMachine, BASE_MACH_GROUP & "1")
End Sub
Public Overrides Sub AddMachGroup() Public Overrides Sub AddMachGroup()
If NewMachGroup() Then If NewMachGroup() Then
' creo oggetto gruppo creato ' creo oggetto gruppo creato
@@ -70,7 +74,9 @@ Public Class MyMachGroupPanelVM
Dim sMachine As String = String.Empty Dim sMachine As String = String.Empty
EgtGetMachGroupName(nId, sName) EgtGetMachGroupName(nId, sName)
EgtGetMachGroupMachineName(nId, sMachine) EgtGetMachGroupMachineName(nId, sMachine)
MachGroupList.Add(New MyMachGroup(nId, sName, sMachine, EgtGetFirstNameInGroup(nId, "Opers"))) Dim NewMyMachGoup As MyMachGroup = New MyMachGroup(nId, sName, sMachine, EgtGetFirstNameInGroup(nId, "Opers"))
NewMyMachGoup.IsValid = VerifyMachExists(sMachine)
MachGroupList.Add(NewMyMachGoup)
If OmagOFFICEMap.refMainWindowVM.MainWindowM.m_SlabDB Then If OmagOFFICEMap.refMainWindowVM.MainWindowM.m_SlabDB Then
Dim sSlabNameDB As String = String.Empty Dim sSlabNameDB As String = String.Empty
EgtGetInfo(nId, INFO_SLABNAME, sSlabNameDB) EgtGetInfo(nId, INFO_SLABNAME, sSlabNameDB)
@@ -154,6 +160,7 @@ Public Class MyMachGroupPanelVM
' Imposto vista solo tavola ' Imposto vista solo tavola
EgtSetMachineLook(MCH_LOOK.TAB) EgtSetMachineLook(MCH_LOOK.TAB)
CurrentMachine.GetMachineClass(SelectedMachGroup.Machine) CurrentMachine.GetMachineClass(SelectedMachGroup.Machine)
If IsNothing(OmagOFFICEMap.refMachinePanelVM.SelectedMachine) Then Return False
OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot = Path.GetDirectoryName(OmagOFFICEMap.refMachinePanelVM.SelectedMachine.DirPath) OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot = Path.GetDirectoryName(OmagOFFICEMap.refMachinePanelVM.SelectedMachine.DirPath)
' Ricarico la macchina corrente ' Ricarico la macchina corrente
InitCurrentMachine(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, SelectedMachGroup.Machine, InitCurrentMachine(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, SelectedMachGroup.Machine,
+30 -3
View File
@@ -33,8 +33,15 @@ Public Class MySceneHostVM
' Recupero e imposto handle finestra principale ' Recupero e imposto handle finestra principale
Dim hMainWnd As IntPtr = New WindowInteropHelper(Application.Current.MainWindow).Handle Dim hMainWnd As IntPtr = New WindowInteropHelper(Application.Current.MainWindow).Handle
EgtSetMainWindowHandle(hMainWnd) EgtSetMainWindowHandle(hMainWnd)
' Recupero l'elenco dei direttori radice macchina come stringa del tipo "..\Dir1\Example01|..\Dir2\|Example02"
Dim sMchRoots As String = GetMachineBaseDirs()
' inizializzo gestore lavorazioni ' inizializzo gestore lavorazioni
EgtInitMachMgr(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, OmagOFFICEMap.refMainWindowVM.MainWindowM.sToolMakersDir) If Not EgtInitMachMgr(sMchRoots, OmagOFFICEMap.refMainWindowVM.MainWindowM.sToolMakersDir) Then
EgtOutLog("Error on loading machines roots: " & sMchRoots)
End If
' inizializzo gestione più macchine
OmagOFFICEMap.refMachinePanelVM.Init(sMchRoots)
OmagOFFICEMap.refMachGroupPanelVM.Init()
Return Return
End If End If
' Problemi ' Problemi
@@ -157,6 +164,21 @@ Public Class MySceneHostVM
MainScene.SetStatusNull() MainScene.SetStatusNull()
End Sub End Sub
Private Function GetMachineBaseDirs() As String
' Trasformo l'elenco dei direttori radice macchina in una stringa del tipo "..\Dir1\Example01|..\Dir2\|Example02"
Dim sMchRoots As String = ""
' Pulisco eventuali caratteri nascosti: origString.Replace(vbCr, "").Replace(vbLf, "")
For Each MachDir In OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRootList
MachDir = MachDir.Replace(vbCr, "").Replace(vbLf, "")
sMchRoots &= MachDir & "|"
Next
' rimuovo dalla stringa l'ultimo carattere "|" inserito
sMchRoots = sMchRoots.Remove(sMchRoots.Length - 1, 1)
If String.IsNullOrEmpty(sMchRoots) Then sMchRoots = OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot
EgtOutLog("Machine root list: " & sMchRoots)
Return sMchRoots
End Function
#End Region ' METHODS #End Region ' METHODS
#Region "ProjectManager" #Region "ProjectManager"
@@ -240,7 +262,9 @@ Public Class MySceneHostVM
' Creo un contesto separato con gestore lavorazioni per poter spezzettare il progetto ' Creo un contesto separato con gestore lavorazioni per poter spezzettare il progetto
Dim nCurrCtx As Integer = EgtGetCurrentContext() Dim nCurrCtx As Integer = EgtGetCurrentContext()
Dim nCtx As Integer = EgtInitContext() Dim nCtx As Integer = EgtInitContext()
EgtInitMachMgr(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, OmagOFFICEMap.refMainWindowVM.MainWindowM.sToolMakersDir) ' Recupero l'elenco dei direttori radice macchina come stringa del tipo "..\Dir1\Example01|..\Dir2\|Example02"
Dim sMchRoots As String = GetMachineBaseDirs()
EgtInitMachMgr(sMchRoots, OmagOFFICEMap.refMainWindowVM.MainWindowM.sToolMakersDir)
' Per ogni gruppo di lavoro ' Per ogni gruppo di lavoro
For Each nMchGrpId As Integer In vMchGrps For Each nMchGrpId As Integer In vMchGrps
' Carico il progetto ' Carico il progetto
@@ -408,7 +432,9 @@ Public Class MySceneHostVM
' Creo un contesto separato con gestore lavorazioni per poter spezzettare il progetto ' Creo un contesto separato con gestore lavorazioni per poter spezzettare il progetto
Dim nCurrCtx As Integer = EgtGetCurrentContext() Dim nCurrCtx As Integer = EgtGetCurrentContext()
Dim nCtx As Integer = EgtInitContext() Dim nCtx As Integer = EgtInitContext()
EgtInitMachMgr(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, OmagOFFICEMap.refMainWindowVM.MainWindowM.sToolMakersDir) ' Recupero l'elenco dei direttori radice macchina come stringa del tipo "..\Dir1\Example01|..\Dir2\|Example02"
Dim sMchRoots As String = GetMachineBaseDirs()
EgtInitMachMgr(sMchRoots, OmagOFFICEMap.refMainWindowVM.MainWindowM.sToolMakersDir)
' Per ogni gruppo di lavoro ' Per ogni gruppo di lavoro
For Each nMchGrpId As Integer In vMchGrps For Each nMchGrpId As Integer In vMchGrps
' Carico il progetto ' Carico il progetto
@@ -801,6 +827,7 @@ Public Class MySceneHostVM
Case OptionPanelVM.Tabs.NESTING Case OptionPanelVM.Tabs.NESTING
OmagOFFICEMap.refNestingTabVM.OnKeyDownScene(sender, e) OmagOFFICEMap.refNestingTabVM.OnKeyDownScene(sender, e)
Case OptionPanelVM.Tabs.MACHINING Case OptionPanelVM.Tabs.MACHINING
OmagOFFICEMap.refSplitModeVM.OnKeyDownScene(sender, e)
Case OptionPanelVM.Tabs.SIMUL Case OptionPanelVM.Tabs.SIMUL
End Select End Select
End Sub End Sub
+11
View File
@@ -213,7 +213,11 @@
<Compile Include="EgtStoneLib\VeinMatchingWindow.xaml.vb"> <Compile Include="EgtStoneLib\VeinMatchingWindow.xaml.vb">
<DependentUpon>VeinMatchingWindow.xaml</DependentUpon> <DependentUpon>VeinMatchingWindow.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="InstrumentPanel\PrintPanelV.xaml.vb">
<DependentUpon>PrintPanelV.xaml</DependentUpon>
</Compile>
<Compile Include="InstrumentPanel\MyInstrumentPanelVM.vb" /> <Compile Include="InstrumentPanel\MyInstrumentPanelVM.vb" />
<Compile Include="InstrumentPanel\PrintPanelVM.vb" />
<Compile Include="MachinePanel\MyMachinePanelVM.vb" /> <Compile Include="MachinePanel\MyMachinePanelVM.vb" />
<Compile Include="MyMachGroupPanel\MyMachGroupPanelVM.vb" /> <Compile Include="MyMachGroupPanel\MyMachGroupPanelVM.vb" />
<Compile Include="MachinePanel\MachinePanelV.xaml.vb"> <Compile Include="MachinePanel\MachinePanelV.xaml.vb">
@@ -389,6 +393,10 @@
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Include="InstrumentPanel\PrintPanelV.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="MachinePanel\MachinePanelV.xaml"> <Page Include="MachinePanel\MachinePanelV.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
@@ -691,6 +699,9 @@
<ItemGroup> <ItemGroup>
<Resource Include="Resources\TopCommandBar\DxfOut.png" /> <Resource Include="Resources\TopCommandBar\DxfOut.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Resource Include="Resources\InstrumentPanel\Print.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<PropertyGroup> <PropertyGroup>
<PostBuildEvent>IF "$(PlatformName)"=="x86" IF "$(ConfigurationName)" == "Release" copy $(TargetPath) c:\EgtProg\OmagOFFICE\OmagOFFICER32.exe <PostBuildEvent>IF "$(PlatformName)"=="x86" IF "$(ConfigurationName)" == "Release" copy $(TargetPath) c:\EgtProg\OmagOFFICE\OmagOFFICER32.exe
+32 -15
View File
@@ -69,23 +69,38 @@
<StackPanel> <StackPanel>
<UniformGrid Columns="3" Margin="0,0,0,5"> <UniformGrid Columns="3" Margin="0,0,0,5">
<Grid>
<Button Content="{Binding CutMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding CutCommand}"
Visibility="{Binding CutBtnVisibility}"
Margin="0,0,2.5,0"/>
<ToggleButton Grid.Row="0"
Content="{Binding BridgeMsg}"
Style="{StaticResource OptionPanel_ToggleWrapButton}"
IsChecked="{Binding BridgeBtn_IsChecked}"
Visibility="{Binding BridgeBtnVisibility}"
Margin="0,0,2.5,0" Padding="0"/>
</Grid>
<Button Content="{Binding CutMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding CutCommand}"
Visibility="{Binding CutBtnVisibility}"
Margin="0,0,2.5,0"/>
<Button Content="{Binding CutStartMsg}" <Button Content="{Binding CutStartMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}" Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding CutStartCommand}" Command="{Binding CutStartCommand}"
Visibility="{Binding CutStartBtnVisibility}" Visibility="{Binding CutStartBtnVisibility}"
Margin="2.5,0,2.5,0"/> Margin="2.5,0,2.5,0"/>
<Button Content="{Binding CutEndMsg}" <Grid>
Style="{StaticResource OptionPanel_TextWrapButton}" <Button Content="{Binding CutEndMsg}"
Command="{Binding CutEndCommand}" Style="{StaticResource OptionPanel_TextWrapButton}"
Visibility="{Binding CutEndBtnVisibility}" Command="{Binding CutEndCommand}"
Margin="2.5,0,0,0"/> Visibility="{Binding CutEndBtnVisibility}"
Margin="2.5,0,0,0"/>
<ToggleButton Grid.Row="0"
Content="{Binding BridgeDeleteMsg}"
Style="{StaticResource OptionPanel_ToggleWrapButton}"
IsChecked="{Binding BridgeDeleteBtn_IsChecked}"
Visibility="{Binding BridgeDeleteBtnVisibility}"
Margin="2.5,0,0,0" Padding="0"/>
</Grid>
</UniformGrid> </UniformGrid>
<Grid Visibility="{Binding AllExtRedVisibility}"> <Grid Visibility="{Binding AllExtRedVisibility}">
@@ -144,11 +159,13 @@
Command="{Binding OutCenEndCommand}" Command="{Binding OutCenEndCommand}"
Visibility="{Binding OutCenEndBtnVisibility}" Visibility="{Binding OutCenEndBtnVisibility}"
Margin="0,0,2.5,0" Padding="0"/> Margin="0,0,2.5,0" Padding="0"/>
<Button Content="{Binding AllOutEndMsg}" <Button Content="{Binding AllOutEndMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}" Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding AllOutEndCommand}" Command="{Binding AllOutEndCommand}"
Visibility="{Binding AllOutEndBtnVisibility}" Visibility="{Binding AllOutEndBtnVisibility}"
Margin="2.5,0,2.5,0"/> Margin="2.5,0,2.5,0"/>
<Button Content="{Binding AllCenEndMsg}" <Button Content="{Binding AllCenEndMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}" Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding AllCenEndCommand}" Command="{Binding AllCenEndCommand}"
+452 -7
View File
@@ -25,6 +25,20 @@ Public Class SplitModeVM
' verifico che le lavorazioni selezionate siano omogenee (con lo stesso utensile) ' verifico che le lavorazioni selezionate siano omogenee (con lo stesso utensile)
Private m_bAreHomogeneous As Boolean = False Private m_bAreHomogeneous As Boolean = False
' Id tagli WJ per generazione ponticelli tra due percorsi
Private m_nIdSelectedPartWJ_Srt As Integer = GDB_ID.NULL
Private m_nIdSelectedSideWJ_Srt As Integer = GDB_ID.NULL
Private m_nIdSelectedWaterJet_Srt As Integer = GDB_ID.NULL
Private m_nIdSelectedPartWJ_End As Integer = GDB_ID.NULL
Private m_nIdSelectedSideWJ_End As Integer = GDB_ID.NULL
Private m_nIdSelectedWaterJet_End As Integer = GDB_ID.NULL
' Id gruppo Bridges (Nuovo da versione 30/08/2022)
Private m_nIdBridgesGroup As Integer = GDB_ID.NULL
'Private m_nIdBridgeLineGroup As Integer = GDB_ID.NULL
Private m_nIdBridge As Integer = GDB_ID.NULL
Private m_ptSrtBridge As New Point3d
Private m_ptEndBridge As New Point3d
' Flag di pagina attiva ' Flag di pagina attiva
Private m_bActive As Boolean = False Private m_bActive As Boolean = False
' Drag ' Drag
@@ -34,6 +48,8 @@ Public Class SplitModeVM
Private m_bDragging As Boolean = False Private m_bDragging As Boolean = False
' Selected cut ' Selected cut
Private m_nSelected As Integer = GDB_ID.NULL Private m_nSelected As Integer = GDB_ID.NULL
' Abilita la mofica Inizio fine per i tagli interni sugli angoli
Private m_StartEndModifyOnIntCorner As Boolean = False
Private m_ItemList As New ObservableCollection(Of NameIdLsBxItem) Private m_ItemList As New ObservableCollection(Of NameIdLsBxItem)
Public ReadOnly Property ItemList As ObservableCollection(Of NameIdLsBxItem) Public ReadOnly Property ItemList As ObservableCollection(Of NameIdLsBxItem)
@@ -218,6 +234,52 @@ Public Class SplitModeVM
End Set End Set
End Property End Property
Private m_BridgeBtnVisibility As Visibility = Visibility.Hidden
Public Property BridgeBtnVisibility As Visibility
Get
Return m_BridgeBtnVisibility
End Get
Set(value As Visibility)
m_BridgeBtnVisibility = value
NotifyPropertyChanged(NameOf(BridgeBtnVisibility))
End Set
End Property
Private m_BridgeDeleteBtnVisibility As Visibility = Visibility.Hidden
Public Property BridgeDeleteBtnVisibility As Visibility
Get
Return m_BridgeDeleteBtnVisibility
End Get
Set(value As Visibility)
m_BridgeDeleteBtnVisibility = value
NotifyPropertyChanged(NameOf(BridgeDeleteBtnVisibility))
End Set
End Property
Private m_BridgeBtn_IsChecked As Boolean = False
Public Property BridgeBtn_IsChecked As Boolean
Get
Return m_BridgeBtn_IsChecked
End Get
Set(value As Boolean)
m_BridgeBtn_IsChecked = value
BridgeIsChecked()
NotifyPropertyChanged(NameOf(BridgeBtn_IsChecked))
End Set
End Property
Private m_BridgeDeleteBtn_IsChecked As Boolean = False
Public Property BridgeDeleteBtn_IsChecked As Boolean
Get
Return m_BridgeDeleteBtn_IsChecked
End Get
Set(value As Boolean)
m_BridgeDeleteBtn_IsChecked = value
BridgeDeleteIsChecked()
NotifyPropertyChanged(NameOf(BridgeDeleteBtn_IsChecked))
End Set
End Property
#Region "Messages" #Region "Messages"
Public ReadOnly Property OnOffMsg As String Public ReadOnly Property OnOffMsg As String
@@ -328,6 +390,18 @@ Public Class SplitModeVM
End Get End Get
End Property End Property
Public ReadOnly Property BridgeMsg As String
Get
Return "Bridge"
End Get
End Property
Public ReadOnly Property BridgeDeleteMsg As String
Get
Return "Delete Bridge"
End Get
End Property
#End Region ' Messages #End Region ' Messages
' Definizione comandi ' Definizione comandi
@@ -367,9 +441,16 @@ Public Class SplitModeVM
Friend Function InitSplitRaw() As Boolean Friend Function InitSplitRaw() As Boolean
m_bActive = True m_bActive = True
' aggiorno la visualizzazione dei comandi per generare i bridge
m_BridgeBtn_IsChecked = False
NotifyPropertyChanged(NameOf(BridgeBtn_IsChecked))
m_BridgeDeleteBtn_IsChecked = False
NotifyPropertyChanged(NameOf(BridgeDeleteBtn_IsChecked))
'm_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC 'm_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
m_nDragInd = -1 m_nDragInd = -1
m_nDragType = 0 m_nDragType = 0
' verifico se è abilitata la possibiltà di allungare i lati interni
m_StartEndModifyOnIntCorner = (GetPrivateProfileInt(S_NEST, K_STARTENDMODIFYONINTCORNER, 0, sMachIniFile) <> 0)
' Nascondo eventuali pezzi in parcheggio ' Nascondo eventuali pezzi in parcheggio
EstCalc.HideParkedParts() EstCalc.HideParkedParts()
' Nascondo eventuale contorno da foto ' Nascondo eventuale contorno da foto
@@ -433,6 +514,9 @@ Public Class SplitModeVM
Friend Function ExitSplitRaw(Optional bTrueExit As Boolean = True) As Boolean Friend Function ExitSplitRaw(Optional bTrueExit As Boolean = True) As Boolean
m_bActive = False m_bActive = False
' eventualmente interrompo la creazione dei ponticelli
DeselectWJBridgesPart()
' Rimuovo evidenziazione e numeri ' Rimuovo evidenziazione e numeri
RemoveMarkAndNumbers() RemoveMarkAndNumbers()
' Ripristino colori lavorazioni ' Ripristino colori lavorazioni
@@ -777,6 +861,21 @@ Public Class SplitModeVM
AllReduceBtnVisibility = Visibility.Visible AllReduceBtnVisibility = Visibility.Visible
End If End If
' gestione bottone per generazione ponticelli
If Type = MCH_OY.WATERJETTING Then
' siccome la stessa posizione è occupata da due comandi sovrapposti
If CutBtnVisibility = Visibility.Hidden Then
BridgeBtnVisibility = Visibility.Visible
BridgeDeleteBtnVisibility = Visibility.Visible
Else
BridgeBtnVisibility = Visibility.Hidden
BridgeDeleteBtnVisibility = Visibility.Hidden
End If
Else
BridgeBtnVisibility = Visibility.Hidden
BridgeDeleteBtnVisibility = Visibility.Hidden
End If
End Sub End Sub
Private Function ModifyOtherLeadIn(nI As Integer, nLiOthType As Integer) As Boolean Private Function ModifyOtherLeadIn(nI As Integer, nLiOthType As Integer) As Boolean
@@ -1041,6 +1140,45 @@ Public Class SplitModeVM
EgtSetInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_EAL, dOrigUsal) EgtSetInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_EAL, dOrigUsal)
End Sub End Sub
Private Sub BridgeIsChecked()
' eventualmente spengo il comando per eliminare i ponticelli
If m_BridgeDeleteBtn_IsChecked Then
m_BridgeDeleteBtn_IsChecked = False
NotifyPropertyChanged(NameOf(BridgeDeleteBtn_IsChecked))
End If
' se deseleziono resetto tutte le variabili
If Not m_BridgeBtn_IsChecked Then
' se sono in fase di creazione di un ponticello interrompo
DeselectWJBridgesPart()
Return
End If
' recuoero il gruppo di lavorazione corrente
Dim nIdCurrMachGroup As Integer = EgtGetCurrMachGroup()
' creo il gruppo per i ponticelli
Dim sNameGroup As String = NAME_BRIDGES
Dim nId As Integer = EgtGetFirstNameInGroup(nIdCurrMachGroup, sNameGroup)
If nId <> GDB_ID.NULL Then
m_nIdBridgesGroup = nId
End If
' se non lo trovo allora lo creo
If nId = GDB_ID.NULL Then
m_nIdBridgesGroup = EgtCreateGroup(nIdCurrMachGroup)
EgtSetName(m_nIdBridgesGroup, NAME_BRIDGES)
End If
End Sub
Private Sub BridgeDeleteIsChecked()
' eventualmente spengo il comando per inserire i ponticelli
If m_BridgeBtn_IsChecked Then
m_BridgeBtn_IsChecked = False
NotifyPropertyChanged(NameOf(BridgeBtn_IsChecked))
End If
If Not m_BridgeDeleteBtn_IsChecked Then
DeselectWJBridgesPart()
End If
End Sub
#End Region ' METHODS #End Region ' METHODS
#Region "COMMANDS" #Region "COMMANDS"
@@ -1833,10 +1971,27 @@ Public Class SplitModeVM
Dim bRepeat As Boolean = False Dim bRepeat As Boolean = False
Do Do
' Se c'è limite alla lunghezza libera
If m_MachiningList(nI).m_dStartFreeLen < FREELEN_INF Then
' se abilitati i controlli sugli allungamenti dei lati interni
If Not m_StartEndModifyOnIntCorner Then
' Recupero sicurezza in corner interno
Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, CurrentMachine.sMachIniFile), 10 * EPS_SMALL)
' Recupero lunghezza baffo del taglio
Dim nPvId As Integer = GDB_ID.NULL
EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId)
Dim dDT As Double = 0
EgtGetInfo(EgtGetFirstGroupInGroup(nPvId), "DT", dDT)
dUsal = Math.Min(dUsal, m_MachiningList(nI).m_dStartFreeLen - dDT - dCornerSafety)
End If
End If
EgtSetCurrMachining(nOperId) EgtSetCurrMachining(nOperId)
Dim dAddLen As Double = 0 Dim dAddLen As Double = 0
EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen) EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen)
If dAddLen - dOrigUsal < -10 * EPS_SMALL Then Return ' verifico che non sia sull'angolo interno (altrimenti vieto la modifica)
If Not m_StartEndModifyOnIntCorner And (dAddLen - dOrigUsal < -10 * EPS_SMALL) Then
Return
End If
EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen + dUsal - dOrigUsal) EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen + dUsal - dOrigUsal)
EgtSetInfo(nOperId, INFO_MCH_USER_SAL, dUsal) EgtSetInfo(nOperId, INFO_MCH_USER_SAL, dUsal)
UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True)
@@ -1996,10 +2151,24 @@ Public Class SplitModeVM
End If End If
Dim bRepeat As Boolean = False Dim bRepeat As Boolean = False
Do Do
' Se c'è limite alla lunghezza libera
If m_MachiningList(nI).m_dEndFreeLen < FREELEN_INF Then
' se abilitati i controlli sugli allungamenti dei lati interni
If Not m_StartEndModifyOnIntCorner Then
' Recupero sicurezza in corner interno
Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, CurrentMachine.sMachIniFile), 10 * EPS_SMALL)
' Recupero lunghezza baffo del taglio
Dim nPvId As Integer = GDB_ID.NULL
EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId)
Dim dDT As Double = 0
EgtGetInfo(EgtGetFirstGroupInGroup(nPvId), "DT", dDT)
dUeal = Math.Min(dUeal, m_MachiningList(nI).m_dEndFreeLen - dDT - dCornerSafety)
End If
End If
EgtSetCurrMachining(nOperId) EgtSetCurrMachining(nOperId)
Dim dAddLen As Double = 0 Dim dAddLen As Double = 0
EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen) EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen)
If dAddLen - dOrigUeal < -10 * EPS_SMALL Then If Not m_StartEndModifyOnIntCorner And (dAddLen - dOrigUeal < -10 * EPS_SMALL) Then
Return Return
End If End If
EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen + dUeal - dOrigUeal) EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen + dUeal - dOrigUeal)
@@ -2138,8 +2307,6 @@ Public Class SplitModeVM
#Region "InvertCommand" #Region "InvertCommand"
#End Region ' InvertComman
Public ReadOnly Property InvertCommand As ICommand Public ReadOnly Property InvertCommand As ICommand
Get Get
If m_cmdInvert Is Nothing Then If m_cmdInvert Is Nothing Then
@@ -2196,10 +2363,248 @@ Public Class SplitModeVM
Next Next
End Sub End Sub
#End Region ' InvertComman
#End Region ' COMMANDS #End Region ' COMMANDS
#Region "EVENTS" #Region "EVENTS"
#Region "BRIDGE"
Private Sub OnMyMouseDownSceneBridges(sender As Object, e As System.Windows.Forms.MouseEventArgs,
ByVal IsFirst As Boolean,
ByRef m_nIdSelectedSideWJ As Integer,
ByRef m_nIdSelectedWaterJet As Integer,
ByRef nIdParentPart As Integer)
' Acquisisco punto da disegno
Dim CurrPoint As New Point3d
EgtUnProjectPoint(e.Location, CurrPoint)
' Verifico se selezionato indicativo di pezzo
EgtSetObjFilterForSelWin(False, True, False, False, False)
Dim nSelMy As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSelMy)
Dim nIdMy As Integer = EgtGetFirstObjInSelWin()
While nIdMy <> GDB_ID.NULL
Dim sLayer As String = String.Empty
' layer di origine
Dim nIdParent As Integer = EgtGetParent(nIdMy)
' recupero il nome del Layer
EgtGetName(nIdParent, sLayer)
' solo se il nome del layer è quello associato ad un lato esterno allora procedo con l'evidenziazione
If sLayer = NAME_OUTLOOP Then
If (EgtGetType(nIdMy) = GDB_TY.CRV_ARC OrElse EgtGetType(nIdMy) = GDB_TY.CRV_COMPO OrElse EgtGetType(nIdMy) = GDB_TY.CRV_LINE) AndAlso VerifySideIsAcceptable(nIdMy) Then
If m_nIdSelectedSideWJ <> GDB_ID.NULL Or m_nIdSelectedSideWJ = nIdMy Then
EgtDeselectObj(m_nIdSelectedSideWJ)
End If
' recupero il gruppo della lavorazione associata
nIdParentPart = EgtGetParent(nIdParent)
' se non esiste almeno 1 Preview di tipo WaterJet
If IsWaterJetting(nIdMy) Then
m_nIdSelectedSideWJ = nIdMy
' recupero il punto più vicino alla curva passata
If IsFirst Then
EgtNearPoint(nIdMy, CurrPoint, GDB_RT.GLOB, m_ptSrtBridge)
Else
' prima di confermare verifico che non ci siano interferenze
EgtNearPoint(nIdMy, CurrPoint, GDB_RT.GLOB, m_ptEndBridge)
EgtModifyCurveEndPoint(m_nIdBridge, m_ptEndBridge, GDB_RT.GLOB)
If VerifyInterference(m_nIdBridge) Then
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
EgtSetInfo(m_nIdBridge, "PartStart", m_nIdSelectedPartWJ_Srt)
EgtSetInfo(m_nIdBridge, "EntStart", m_nIdSelectedSideWJ_Srt)
EgtSetInfo(m_nIdBridge, "PartEnd", m_nIdSelectedPartWJ_End)
EgtSetInfo(m_nIdBridge, "EntEnd", m_nIdSelectedSideWJ_End)
EgtSetInfo(m_nIdBridge, "Ph", EgtGetCurrPhase())
' Ricalcolo tutte le lavorazioni
Dim nWarn As Integer = 0
ResetAllMachinings(nWarn)
Else
' attendo la selezione di un punto valido
m_nIdSelectedSideWJ = GDB_ID.NULL
m_nIdSelectedWaterJet = GDB_ID.NULL
nIdParentPart = GDB_ID.NULL
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
OmagOFFICEMap.refStatusBarVM.SetOutputMessage("Bridge intersects part", 3, MSG_TYPE.ERROR_)
Return
End If
End If
' salvo il valore del PreView evidenziato
EgtSetMark(nIdParentPart)
' EgtSetMark(nIdWJ)
EgtSelectObj(nIdMy)
EgtDraw()
Exit While
End If
End If
End If
nIdMy = EgtGetNextObjInSelWin()
End While
End Sub
Private Sub OnMyMouseDownSceneBridgesDelete(sender As Object, e As System.Windows.Forms.MouseEventArgs)
' Acquisisco punto da disegno
Dim CurrPoint As New Point3d
EgtUnProjectPoint(e.Location, CurrPoint)
' Verifico se selezionato indicativo di pezzo
EgtSetObjFilterForSelWin(False, True, False, False, False)
Dim nSelMy As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSelMy)
Dim nIdMy As Integer = EgtGetFirstObjInSelWin()
While nIdMy <> GDB_ID.NULL
Dim sGroupName As String = String.Empty
Dim sSelName As String = String.Empty
' gruppo di appartenenza
Dim nIdParent As Integer = EgtGetParent(nIdMy)
' recupero il nome del gruppo di appartenenza
EgtGetName(nIdParent, sGroupName)
' recupero il nome dell'oggetto selezionato
EgtGetName(nIdMy, sSelName)
If sGroupName.Contains(NAME_BRIDGES) AndAlso sSelName.Contains(NAME_BRIDGESLINE) Then
EgtErase(nIdMy)
EgtDraw()
' Ricalcolo tutte le lavorazioni
Dim nWarn As Integer = 0
ResetAllMachinings(nWarn)
Return
End If
nIdMy = EgtGetNextObjInSelWin()
End While
End Sub
Private Sub OnMyMouseMoveSceneBridges(ptCurr As Point3d)
ptCurr.z = m_ptSrtBridge.z
' rappresento il egmento
If m_nIdBridge = GDB_ID.NULL Then
m_nIdBridge = EgtCreateLine(m_nIdBridgesGroup, m_ptSrtBridge, ptCurr, GDB_RT.GLOB)
' assegno un nome alla linea
EgtSetName(m_nIdBridge, NAME_BRIDGESLINE)
End If
EgtModifyCurveEndPoint(m_nIdBridge, ptCurr, GDB_RT.GLOB)
EgtDraw()
End Sub
Private Function VerifyInterference(nIdBridge As Integer) As Boolean
' prima di procedere alla verifica accorco il segmento (solo per sicurezza) 10 * EPS_SMALL
Dim dLen As Double
EgtCurveLength(nIdBridge, dLen)
If dLen > 21 AndAlso Not EgtCurveIsClosed(nIdBridge) Then
EgtTrimCurveEndAtLen(nIdBridge, dLen - 10 * EPS_SMALL)
EgtTrimCurveStartAtLen(nIdBridge, 10 * EPS_SMALL)
End If
' EgtSaveFile("c:\EgtData\OmagOFFICE\Temp\Bridge.nge", NGE.BIN)
Dim nIdPart As Integer = GDB_ID.NULL
nIdPart = EgtGetFirstPartInRawPart(GetCurrentRaw())
While nIdPart <> GDB_ID.NULL
Dim nIdRegion As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_REGION)
Dim nIdSurf As Integer = EgtGetFirstInGroup(nIdRegion)
While nIdSurf <> GDB_ID.NULL
If EgtGetType(nIdSurf) = GDB_TY.SRF_FRGN Then
' se la linea bridge interseca la superficie allora restitusco false
If EgtCurveWithRegionClassify(nIdBridge, nIdSurf) <> CREGC.OUT Then
EgtExtendCurveStartByLen(nIdBridge, 10 * EPS_SMALL)
Return False
End If
Exit While
End If
End While
nIdPart = EgtGetNextPartInRawPart(nIdPart)
End While
Return True
End Function
Private Function VerifySideIsAcceptable(nMyId As Integer) As Boolean
Dim dVal As Double = 0
' verifico che l'entità selezionata non contenga questi parametri
If EgtGetInfo(nMyId, INFO_SIDE_ANGLE2, dVal) Then
If dVal <> 0 Then
Return False
End If
End If
If EgtGetInfo(nMyId, INFO_SIDE_ANGLE, dVal) Then
If dVal <> 0 Then
Return False
End If
End If
If EgtGetInfo(nMyId, INFO_ORIG_SIDE_ANGLE, dVal) Then
If dVal <> 0 Then
Return False
End If
End If
' altrimenti l'entità è accettabile
Return True
End Function
' verifico che il lato selezionato appartenga ad una lavorazione di tipo Waterjet
Private Function IsWaterJetting(nMyId As Integer) As Boolean
' verifico che sul lato indicato sia impostato un taglio di tipo WaterJet
Dim nMchId As Integer = GDB_ID.NULL
For nInd As Integer = 0 To m_MachiningList.Count() - 1
nMchId = m_MachiningList(nInd).m_nId
Dim nMachiningType As Integer = EgtGetOperationType(m_MachiningList(nInd).m_nId)
If nMachiningType = MCH_MY.WATERJETTING Then
EgtSetCurrMachining(nMchId)
Dim nIndex As Integer = 0
Dim nIdSide As Integer = GDB_ID.NULL
Dim nSub As Integer = GDB_ID.NULL
While EgtGetMachiningGeometry(nIndex, nIdSide, nSub)
If nIdSide = nMyId Then
Return True
End If
nIndex += 1
End While
End If
Next
Return False
End Function
Private Sub RefreshMachList()
For nI As Integer = 0 To m_MachiningList.Count() - 1
' cancello tutti gli indici di lavorazione presenti nel disegno
Dim nNbrId As Integer = GDB_ID.NULL
EgtErase(m_MachiningList(nI).m_nNbrId)
EgtRemoveInfo(m_MachiningList(nI).m_nId, "NbrId")
Next
' Preparo la lista delle lavorazioni
CalculateSplitMachList(m_nCurrPhase, m_MachiningList)
' Aggiorno visualizzazione delle lavorazioni
For nI As Integer = 0 To m_MachiningList.Count() - 1
' sistemo colore
ColorMachining(m_MachiningList(nI))
' assegno nuova numerazione
NumberDirectionMachining(nI)
' conto il numero di tipi di lavorazioni
CountMachiningType(m_MachiningList(nI), m_nCountSawing, m_nCountWaterjetting, m_nCountOtherMachining)
Next
' aggiorno grafica
ShowMachiningList()
' aggiorno la visualizzazione
EgtDraw()
End Sub
Private Sub DeselectWJBridgesPart()
' se in fase di definzione di un ponticello lo elimino
If m_nIdSelectedSideWJ_Srt <> GDB_ID.NULL And m_nIdSelectedSideWJ_End = GDB_ID.NULL And m_nIdBridge <> GDB_ID.NULL Then
EgtErase(EgtGetParent(m_nIdBridge))
End If
m_nIdBridge = GDB_ID.NULL
EgtResetMark(m_nIdSelectedPartWJ_Srt)
m_nIdSelectedPartWJ_Srt = GDB_ID.NULL
EgtDeselectObj(m_nIdSelectedSideWJ_Srt)
m_nIdSelectedSideWJ_Srt = GDB_ID.NULL
m_nIdSelectedWaterJet_Srt = GDB_ID.NULL
EgtResetMark(m_nIdSelectedPartWJ_End)
m_nIdSelectedPartWJ_End = GDB_ID.NULL
EgtDeselectObj(m_nIdSelectedSideWJ_End)
m_nIdSelectedSideWJ_End = GDB_ID.NULL
m_nIdSelectedWaterJet_End = GDB_ID.NULL
EgtDraw()
End Sub
#End Region ' Bridge
Friend Sub OnMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Friend Sub OnMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs)
' Verifico di essere il gestore attivo e non in modalità sola visualizzazione ' Verifico di essere il gestore attivo e non in modalità sola visualizzazione
If Not m_bActive OrElse OmagOFFICEMap.refMachiningTabVM.IsShow Then Return If Not m_bActive OrElse OmagOFFICEMap.refMachiningTabVM.IsShow Then Return
@@ -2208,6 +2613,31 @@ Public Class SplitModeVM
Not OmagOFFICEMap.refSceneHostVM.MainScene.IsStatusNull() Then Not OmagOFFICEMap.refSceneHostVM.MainScene.IsStatusNull() Then
Return Return
End If End If
' definizione dei ponticelli
If m_BridgeBtn_IsChecked Then
If m_nIdSelectedPartWJ_Srt = GDB_ID.NULL Then
OnMyMouseDownSceneBridges(sender, e, True, m_nIdSelectedSideWJ_Srt, m_nIdSelectedWaterJet_Srt, m_nIdSelectedPartWJ_Srt)
Else
OnMyMouseDownSceneBridges(sender, e, False, m_nIdSelectedSideWJ_End, m_nIdSelectedWaterJet_End, m_nIdSelectedPartWJ_End)
' aggiorno la visualizzazione delle lavorazioni e la lista
RefreshMachList()
End If
' se entrambi i pezzi sono stati definiti allora procedo alla deselezione
If m_nIdSelectedPartWJ_Srt <> GDB_ID.NULL And m_nIdSelectedPartWJ_End <> GDB_ID.NULL Then
DeselectWJBridgesPart()
End If
Return
End If
' eliminazione dei ponticelli
If m_BridgeDeleteBtn_IsChecked Then
OnMyMouseDownSceneBridgesDelete(sender, e)
' aggiorno la visualizzazione delle lavorazioni e la lista
RefreshMachList()
Return
End If
' Reset drag ' Reset drag
m_nDragInd = -1 m_nDragInd = -1
m_nDragType = 0 m_nDragType = 0
@@ -2296,13 +2726,22 @@ Public Class SplitModeVM
Friend Sub OnMyMouseMoveScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Friend Sub OnMyMouseMoveScene(sender As Object, e As System.Windows.Forms.MouseEventArgs)
' Verifico di essere il gestore attivo e non in modalità sola visualizzazione ' Verifico di essere il gestore attivo e non in modalità sola visualizzazione
If Not m_bActive OrElse OmagOFFICEMap.refMachiningTabVM.IsShow Then Return If Not m_bActive OrElse OmagOFFICEMap.refMachiningTabVM.IsShow Then Return
' Ricavo il punto corrente in coordinate mondo
Dim ptCurr As Point3d
EgtUnProjectPoint(e.Location, ptCurr)
' definizione dei ponticelli
If m_BridgeBtn_IsChecked Then
If m_nIdSelectedPartWJ_Srt <> GDB_ID.NULL Then
OnMyMouseMoveSceneBridges(ptCurr)
End If
Return
End If
' Se drag non abilitato o in corso ' Se drag non abilitato o in corso
If m_nDragInd = -1L Or m_bDragging Then Return If m_nDragInd = -1L Or m_bDragging Then Return
m_bDragging = True m_bDragging = True
Dim nOperId As Integer = m_MachiningList(m_nDragInd).m_nId Dim nOperId As Integer = m_MachiningList(m_nDragInd).m_nId
' Ricavo il punto corrente in coordinate mondo
Dim ptCurr As Point3d
EgtUnProjectPoint(e.Location, ptCurr)
' Ricavo il vettore di movimento e la variazione di lunghezza ' Ricavo il vettore di movimento e la variazione di lunghezza
Dim vtMove As Vector3d = ptCurr - m_ptDragPrev Dim vtMove As Vector3d = ptCurr - m_ptDragPrev
Dim dDelta = vtMove * m_MachiningList(m_nDragInd).m_vtDir Dim dDelta = vtMove * m_MachiningList(m_nDragInd).m_vtDir
@@ -2391,6 +2830,12 @@ Public Class SplitModeVM
End If End If
End Sub End Sub
Friend Sub OnKeyDownScene(sender As Object, e As System.Windows.Forms.KeyEventArgs)
' Con CANC cancello i pezzi selezionati
If (e.KeyData = System.Windows.Forms.Keys.Delete Or e.KeyData = System.Windows.Forms.Keys.Escape) And (m_BridgeBtn_IsChecked Or m_BridgeDeleteBtn_IsChecked) Then
DeselectWJBridgesPart()
End If
End Sub
#End Region ' EVENTS #End Region ' EVENTS
'----------------------------------------------------------------------------------------------- '-----------------------------------------------------------------------------------------------
+340 -167
View File
@@ -31,6 +31,13 @@ Public Class NestingTabVM
Private m_ptPrev As Point3d Private m_ptPrev As Point3d
Private m_vtTotMove As Vector3d Private m_vtTotMove As Vector3d
Private m_dSnapDist As Double = 0 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 ' Abilitazioni TrfData e CsvData
Private m_bTrfData As Boolean = False Private m_bTrfData As Boolean = False
Private m_bCsvData As Boolean = False Private m_bCsvData As Boolean = False
@@ -151,7 +158,7 @@ Public Class NestingTabVM
End Get End Get
Set(value As Visibility) Set(value As Visibility)
m_CsvData_Visibility = value m_CsvData_Visibility = value
NotifyPropertyChanged( "CsvData_Visibility") NotifyPropertyChanged("CsvData_Visibility")
End Set End Set
End Property End Property
@@ -270,7 +277,7 @@ Public Class NestingTabVM
Friend Function InitNesting() As Boolean Friend Function InitNesting() As Boolean
' Se previsto, abilito bottone VeinMatching ' Se previsto, abilito bottone VeinMatching
If Not IsNothing( OmagOFFICEMap.refMainWindowVM.VeinMatchingWnd) Then If Not IsNothing(OmagOFFICEMap.refMainWindowVM.VeinMatchingWnd) Then
OmagOFFICEMap.refVeinMatchPanelVM.VeinMatchIsEnabled = True OmagOFFICEMap.refVeinMatchPanelVM.VeinMatchIsEnabled = True
End If End If
' Abilitazione TrfData ' Abilitazione TrfData
@@ -280,7 +287,7 @@ Public Class NestingTabVM
m_bCsvData = Not m_bTrfData And m_bCsvData = Not m_bTrfData And
(GetMainPrivateProfileInt(S_COMPO, K_CSVDATA, 0) <> 0) (GetMainPrivateProfileInt(S_COMPO, K_CSVDATA, 0) <> 0)
' Se previsto, abilito bottone CsvData ' 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 ' Imposto il corretto contesto
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx()) EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx())
' aggiorno dati del grezzo ' aggiorno dati del grezzo
@@ -358,7 +365,7 @@ Public Class NestingTabVM
Private Sub AutomaticInsert() Private Sub AutomaticInsert()
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx()) 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 bWrongTrf As Boolean = False
Dim vParts As New List(Of Integer) Dim vParts As New List(Of Integer)
' Ciclo di pre-inserimento in tavola dei pezzi selezionati ' Ciclo di pre-inserimento in tavola dei pezzi selezionati
@@ -376,7 +383,7 @@ Public Class NestingTabVM
End If End If
' Lo preparo in tavola, se possibile ' Lo preparo in tavola, se possibile
If PreInsertOnePart(nId) Then If PreInsertOnePart(nId) Then
vParts.Add( nId) vParts.Add(nId)
Else Else
EgtSetStatus(nId, GDB_ST.ON_) EgtSetStatus(nId, GDB_ST.ON_)
VeinMatching.OnDeselectPart(nId) 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) Dim bAligned As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_NEST_ALIGNED, 0, CurrentMachine.sMachIniFile) <> 0)
EnableReferenceRegion(bAligned) EnableReferenceRegion(bAligned)
' Eseguo nesting automatico ' 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 bGuillotineMode As Boolean = bAligned
Dim nAutomaticMaxTime As Integer = GetMainPrivateProfileInt( S_NEST, K_AUTOMATICMAXTIME, 20) Dim nAutomaticMaxTime As Integer = GetMainPrivateProfileInt(S_NEST, K_AUTOMATICMAXTIME, 20)
Dim dPartTime As Double = If( bGuillotineMode, 1.0, 0.5) Dim dPartTime As Double = If(bGuillotineMode, 1.0, 0.5)
Dim nMaxTime As Integer = Math.Min( CInt( 2 + dPartTime * vParts.Count()), nAutomaticMaxTime) Dim nMaxTime As Integer = Math.Min(CInt(2 + dPartTime * vParts.Count()), nAutomaticMaxTime)
EgtAutomaticPackParts( vParts, bOpimizeOnX, CurrentMachine.bReducedCut, bGuillotineMode, nMaxTime) EgtAutomaticPackParts(vParts, bOpimizeOnX, CurrentMachine.bReducedCut, bGuillotineMode, nMaxTime)
' Sistemo i pezzi ' Sistemo i pezzi
For Each nPartId As Integer In vParts For Each nPartId As Integer In vParts
' se pezzo inserito ' se pezzo inserito
@@ -404,11 +411,11 @@ Public Class NestingTabVM
VeinMatching.OnInsertPartInRaw(nPartId) VeinMatching.OnInsertPartInRaw(nPartId)
' Eventuale aggiunta solido per taglio da sotto ' Eventuale aggiunta solido per taglio da sotto
UpdateSolidForDrip(nPartId) UpdateSolidForDrip(nPartId)
' altrimenti rifiutato ' altrimenti rifiutato
else Else
' Ripristino lo stato originale ' Ripristino lo stato originale
PreRemoveOnePart( Math.Abs( nPartId)) PreRemoveOnePart(Math.Abs(nPartId))
VeinMatching.OnDeselectPart( Math.Abs( nPartId)) VeinMatching.OnDeselectPart(Math.Abs(nPartId))
End If End If
Next Next
' Aggiorno flag selezionati ' Aggiorno flag selezionati
@@ -423,6 +430,93 @@ Public Class NestingTabVM
End If End If
End Sub 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 Private Function RotateCluster(ByVal dAngRotDeg As Double) As Boolean
' Se non ci sono pezzi selezionati, esco ' Se non ci sono pezzi selezionati, esco
If EgtGetSelectedObjCount() = 0 Then Return True If EgtGetSelectedObjCount() = 0 Then Return True
@@ -432,7 +526,7 @@ Public Class NestingTabVM
Dim nId As Integer = EgtGetFirstSelectedObj() Dim nId As Integer = EgtGetFirstSelectedObj()
While nId <> GDB_ID.NULL While nId <> GDB_ID.NULL
' Se pezzo con rotazione libera ' 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 ' Calcolo il centro di rotazione come centro del pezzo
Dim ptCen As Point3d Dim ptCen As Point3d
If Not EgtGetPartPartClusterCenterGlob(nId, ptCen) Then Return False If Not EgtGetPartPartClusterCenterGlob(nId, ptCen) Then Return False
@@ -466,40 +560,22 @@ Public Class NestingTabVM
nId = EgtGetNextSelectedObj() nId = EgtGetNextSelectedObj()
End While End While
Return True Return True
' Altrimenti li ruoto tenendo conto delle collisioni ' Altrimenti li ruoto tenendo conto delle collisioni
Else Else
' Verifico se ci sono dei pezzi bloccati in rotazione Return RotatePartInsideBond(dAngRotDeg, GDB_ID.SEL)
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
End If End If
End Function End Function
Private Function GetLockOnRotation( nPartId As Integer) As Boolean Private Function GetLockOnRotation(nPartId As Integer) As Boolean
' Se singolo pezzo ' Se singolo pezzo
If nPartId <> GDB_ID.SEL Then If nPartId <> GDB_ID.SEL Then
Return EgtExistsInfo( nPartId, INFO_PARTROT) Return EgtExistsInfo(nPartId, INFO_PARTROT)
' Altrimenti tutti i selezionati ' Altrimenti tutti i selezionati
Else Else
Dim bLockedRot As Boolean = False Dim bLockedRot As Boolean = False
Dim nId As Integer = EgtGetFirstSelectedObj() Dim nId As Integer = EgtGetFirstSelectedObj()
While nId <> GDB_ID.NULL While nId <> GDB_ID.NULL
If EgtExistsInfo( nId, INFO_PARTROT) Then If EgtExistsInfo(nId, INFO_PARTROT) Then
bLockedRot = True bLockedRot = True
Exit While Exit While
End If End If
@@ -564,13 +640,13 @@ Public Class NestingTabVM
Return True Return True
End Function End Function
Friend Function ExitNesting( bChange As Boolean) As Boolean Friend Function ExitNesting(bChange As Boolean) As Boolean
If m_CsvImport_IsChecked Then If m_CsvImport_IsChecked Then
m_CsvImportWindow.Close() m_CsvImportWindow.Close()
m_CsvImportWindow = Nothing m_CsvImportWindow = Nothing
End If End If
If bChange Then If bChange Then
OmagOFFICEMap.refVeinMatchPanelVM.SetVeinMatchIsChecked( False) OmagOFFICEMap.refVeinMatchPanelVM.SetVeinMatchIsChecked(False)
OmagOFFICEMap.refVeinMatchPanelVM.VeinMatchIsEnabled = False OmagOFFICEMap.refVeinMatchPanelVM.VeinMatchIsEnabled = False
End If End If
Return True Return True
@@ -1343,20 +1419,20 @@ Public Class NestingTabVM
Dim nId As Integer = EgtGetFirstSelectedObj() Dim nId As Integer = EgtGetFirstSelectedObj()
While nId <> GDB_ID.NULL While nId <> GDB_ID.NULL
' Se rotazione bloccata, tolgo blocco e aggiorno info ' 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 ' Rimuovo flag di rotazione bloccata
EgtRemoveInfo( nId, INFO_PARTROT) EgtRemoveInfo(nId, INFO_PARTROT)
' Tolgo da info sul pezzo Codice ' 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 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 = "" Dim sText As String = ""
EgtTextGetContent( nTextId, sText) EgtTextGetContent(nTextId, sText)
sText = sText.Replace( "<br/>(X)", "") sText = sText.Replace("<br/>(X)", "")
EgtModifyText( nTextId, sText) EgtModifyText(nTextId, sText)
Exit While Exit While
End If End If
nTextId = EgtGetNext( nTextId) nTextId = EgtGetNext(nTextId)
End While End While
End If End If
' Passo al successivo selezionato ' Passo al successivo selezionato
@@ -1387,20 +1463,20 @@ Public Class NestingTabVM
Dim nId As Integer = EgtGetFirstSelectedObj() Dim nId As Integer = EgtGetFirstSelectedObj()
While nId <> GDB_ID.NULL While nId <> GDB_ID.NULL
' Se rotazione libera, applico blocco e aggiorno info ' 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 ' Imposto flag di rotazione bloccata
EgtSetInfo( nId, INFO_PARTROT, 0) EgtSetInfo(nId, INFO_PARTROT, 0)
' Inserisco in info sul pezzo Codice ' 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 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 = "" Dim sText As String = ""
EgtTextGetContent( nTextId, sText) EgtTextGetContent(nTextId, sText)
sText &= "<br/>(X)" sText &= "<br/>(X)"
EgtModifyText( nTextId, sText) EgtModifyText(nTextId, sText)
Exit While Exit While
End If End If
nTextId = EgtGetNext( nTextId) nTextId = EgtGetNext(nTextId)
End While End While
End If End If
' Passo al successivo selezionato ' Passo al successivo selezionato
@@ -1436,7 +1512,7 @@ Public Class NestingTabVM
Dim bAlignMoved As Boolean = False Dim bAlignMoved As Boolean = False
Dim bSnapMoved As Boolean = False Dim bSnapMoved As Boolean = False
If m_bMagnetic Then 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) EgtAlignPartOnCollision(GDB_ID.SEL, CurrentMachine.bReducedCut, bAlignMoved)
End If End If
If m_dSnapDist > EPS_SMALL Then If m_dSnapDist > EPS_SMALL Then
@@ -1480,7 +1556,7 @@ Public Class NestingTabVM
Dim bAlignMoved As Boolean = False Dim bAlignMoved As Boolean = False
Dim bSnapMoved As Boolean = False Dim bSnapMoved As Boolean = False
If m_bMagnetic Then 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) EgtAlignPartOnCollision(GDB_ID.SEL, CurrentMachine.bReducedCut, bAlignMoved)
End If End If
If m_dSnapDist > EPS_SMALL Then If m_dSnapDist > EPS_SMALL Then
@@ -1524,7 +1600,7 @@ Public Class NestingTabVM
Dim bAlignMoved As Boolean = False Dim bAlignMoved As Boolean = False
Dim bSnapMoved As Boolean = False Dim bSnapMoved As Boolean = False
If m_bMagnetic Then 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) EgtAlignPartOnCollision(GDB_ID.SEL, CurrentMachine.bReducedCut, bAlignMoved)
End If End If
If m_dSnapDist > EPS_SMALL Then If m_dSnapDist > EPS_SMALL Then
@@ -1568,7 +1644,7 @@ Public Class NestingTabVM
Dim bAlignMoved As Boolean = False Dim bAlignMoved As Boolean = False
Dim bSnapMoved As Boolean = False Dim bSnapMoved As Boolean = False
If m_bMagnetic Then 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) EgtAlignPartOnCollision(GDB_ID.SEL, CurrentMachine.bReducedCut, bAlignMoved)
End If End If
If m_dSnapDist > EPS_SMALL Then If m_dSnapDist > EPS_SMALL Then
@@ -1656,7 +1732,7 @@ Public Class NestingTabVM
If CurrentMachine.bAutomatic And If CurrentMachine.bAutomatic And
OmagOFFICEMap.refMainWindowVM.MainWindowM.AutoNestOption() Then OmagOFFICEMap.refMainWindowVM.MainWindowM.AutoNestOption() Then
AutomaticInsert() AutomaticInsert()
' altrimenti inserimento standard ' altrimenti inserimento standard
Else Else
StandardInsert() StandardInsert()
End If End If
@@ -1744,6 +1820,10 @@ Public Class NestingTabVM
' Ciclo di cancellazione dei pezzi selezionati ' Ciclo di cancellazione dei pezzi selezionati
nId = EgtGetFirstSelectedObj() nId = EgtGetFirstSelectedObj()
While nId <> GDB_ID.NULL While nId <> GDB_ID.NULL
'' elimino eventuali ponticelli associati al pezzo: non è gestito il movimento del pezzo
'DeleteBridgeAssociated(nId)
' se è stato eseguito il Drag allora cancello tutti i ponticelli
ResetAllBridges()
' Recupero indice del successivo ' Recupero indice del successivo
Dim nNextId = EgtGetNextSelectedObj() Dim nNextId = EgtGetNextSelectedObj()
' Se abilitata cancellazione in ogni caso o pezzo non da Csv ' Se abilitata cancellazione in ogni caso o pezzo non da Csv
@@ -1785,6 +1865,47 @@ Public Class NestingTabVM
VeinMatching.Draw() VeinMatching.Draw()
End Sub End Sub
Private Sub DeleteBridgeAssociated(nMyId As Integer)
' verifico se esistono dei ponticelli associati al pezzo indicato
' recuoero il gruppo di lavorazione corrente
Dim nIdCurrMachGroup As Integer = EgtGetCurrMachGroup()
' creo il gruppo per i ponticelli
Dim sNameGroup As String = NAME_BRIDGES
Dim nIdBridgesGroup As Integer = EgtGetFirstNameInGroup(nIdCurrMachGroup, sNameGroup)
If nIdBridgesGroup <> GDB_ID.NULL Then
' carico la prima entità del gruppo BRIDGES
Dim nIdBridgeLine As Integer = GDB_ID.NULL
nIdBridgeLine = EgtGetFirstNameInGroup(nIdBridgesGroup, NAME_BRIDGESLINE)
' ciclo su tutte le entità
While nIdBridgeLine <> GDB_ID.NULL
Dim nNextBridgeLine As Integer = GDB_ID.NULL
Dim nIdPart As Integer = GDB_ID.NULL
If EgtGetInfo(nIdBridgeLine, "PartStart", nIdPart) Then
If nIdPart = nMyId Then
nNextBridgeLine = EgtGetNext(nIdBridgeLine)
' il ponticello deve essere eliminato
EgtErase(nIdBridgeLine)
nIdBridgeLine = nNextBridgeLine
' riparto dall'inizio del ciclo
Continue While
End If
End If
If EgtGetInfo(nIdBridgeLine, "PartEnd", nIdPart) Then
If nIdPart = nMyId Then
nNextBridgeLine = EgtGetNext(nIdBridgeLine)
' il ponticello deve essere eliminato
EgtErase(nIdBridgeLine)
nIdBridgeLine = nNextBridgeLine
' riparto dall'inizio del ciclo
Continue While
End If
End If
' il BridgeLine corrente non contiene riferimeti al pezzo da eliminare
nIdBridgeLine = EgtGetNext(nIdBridgeLine)
End While
End If
End Sub
#End Region ' RemovePartCommand #End Region ' RemovePartCommand
#Region "SelectAllCommand" #Region "SelectAllCommand"
@@ -1871,6 +1992,8 @@ Public Class NestingTabVM
ResetAllSplitCurv() ResetAllSplitCurv()
' cancello tutti i punti di inizio (Waterjet) ' cancello tutti i punti di inizio (Waterjet)
ResetAllStartCurv() ResetAllStartCurv()
' cancello tutti i ponticelli disegnati
ResetAllBridges()
' Cancello tutte le lavorazioni ' Cancello tutte le lavorazioni
CamAuto.EraseMachinings(GDB_ID.NULL) CamAuto.EraseMachinings(GDB_ID.NULL)
' Reinserisco tutte le lavorazioni piane ' Reinserisco tutte le lavorazioni piane
@@ -1902,44 +2025,44 @@ Public Class NestingTabVM
' Deseleziono eventuali altri ' Deseleziono eventuali altri
If EgtGetNextSelectedObj() <> GDB_ID.NULL Then If EgtGetNextSelectedObj() <> GDB_ID.NULL Then
EgtDeselectAll() EgtDeselectAll()
EgtSelectObj( nPartId) EgtSelectObj(nPartId)
EgtDraw() EgtDraw()
End If End If
' Recupero dati del pezzo ' Recupero dati del pezzo
Dim sCsvOrder As String = "" : EgtGetInfo( nPartId, INFO_CSV_ORD, sCsvOrder) Dim sCsvOrder As String = "" : EgtGetInfo(nPartId, INFO_CSV_ORD, sCsvOrder)
Dim sCsvList As String = "" : EgtGetInfo( nPartId, INFO_CSV_DIST, sCsvList) Dim sCsvList As String = "" : EgtGetInfo(nPartId, INFO_CSV_DIST, sCsvList)
Dim sCsvName As String = "" : EgtGetInfo( nPartId, INFO_CSV_PART, sCsvName) Dim sCsvName As String = "" : EgtGetInfo(nPartId, INFO_CSV_PART, sCsvName)
' Avvio dialogo modifica ' Avvio dialogo modifica
Dim DlgCsvDataVM As New CompoCsvDataWindowVM() Dim DlgCsvDataVM As New CompoCsvDataWindowVM()
Dim DlgCsvDataV As New CompoCsvDataWindowV(Application.Current.MainWindow, DlgCsvDataVM) Dim DlgCsvDataV As New CompoCsvDataWindowV(Application.Current.MainWindow, DlgCsvDataVM)
DlgCsvDataVM.SetData( sCsvOrder, sCsvList, sCsvName) DlgCsvDataVM.SetData(sCsvOrder, sCsvList, sCsvName)
If DlgCsvDataV.ShowDialog() Then If DlgCsvDataV.ShowDialog() Then
' Recupero i nuovi dati ' Recupero i nuovi dati
Dim sNewOrder As String = "" Dim sNewOrder As String = ""
Dim sNewList As String = "" Dim sNewList As String = ""
Dim sNewName As String = "" Dim sNewName As String = ""
DlgCsvDataVM.GetData( sNewOrder, sNewList, sNewName) DlgCsvDataVM.GetData(sNewOrder, sNewList, sNewName)
' Assegno i nuovi dati ' Assegno i nuovi dati
EgtSetInfo( nPartId, INFO_CSV_ORD, sNewOrder) EgtSetInfo(nPartId, INFO_CSV_ORD, sNewOrder)
EgtSetInfo( nPartId, INFO_CSV_DIST, sNewList) EgtSetInfo(nPartId, INFO_CSV_DIST, sNewList)
EgtSetInfo( nPartId, INFO_CSV_PART, sNewName) EgtSetInfo(nPartId, INFO_CSV_PART, sNewName)
' Se necessario, modifico la scritta ' Se necessario, modifico la scritta
If sNewName <> sCsvName Then If sNewName <> sCsvName Then
Dim nRegLayId As Integer = EgtGetFirstNameInGroup( nPartId, NAME_REGION) Dim nRegLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_REGION)
Dim nTextId = EgtGetFirstInGroup(nRegLayId) Dim nTextId = EgtGetFirstInGroup(nRegLayId)
While nTextId <> GDB_ID.NULL 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 Dim sText As String = String.Empty
EgtTextGetContent( nTextId, sText) EgtTextGetContent(nTextId, sText)
Dim nPos As Integer = sText.IndexOf( sCsvName) Dim nPos As Integer = sText.IndexOf(sCsvName)
Dim sNewText As String Dim sNewText As String
If nPos <0 Then If nPos < 0 Then
sNewText= sNewName & "<br/>" & sText sNewText = sNewName & "<br/>" & sText
Else Else
sNewText = sText.Remove( nPos, sCsvName.Length()).Insert( nPos, sNewName) sNewText = sText.Remove(nPos, sCsvName.Length()).Insert(nPos, sNewName)
End If End If
EgtModifyText( nTextId, sNewText) EgtModifyText(nTextId, sNewText)
VeinMatching.ModifyPartText( nPartId, sNewText) VeinMatching.ModifyPartText(nPartId, sNewText)
Exit While Exit While
End If End If
nTextId = EgtGetNext(nTextId) nTextId = EgtGetNext(nTextId)
@@ -2034,6 +2157,7 @@ Public Class NestingTabVM
m_bDrag = m_bDrag AndAlso EgtUnProjectPoint(e.Location, m_ptPrev) m_bDrag = m_bDrag AndAlso EgtUnProjectPoint(e.Location, m_ptPrev)
m_bDragToStart = m_bDrag m_bDragToStart = m_bDrag
m_bVerify = m_bDrag AndAlso (Keyboard.Modifiers And ModifierKeys.Shift) > 0 m_bVerify = m_bDrag AndAlso (Keyboard.Modifiers And ModifierKeys.Shift) > 0
m_bKeyLeftShiftPressed = m_bVerify
m_vtTotMove = Vector3d.NULL() m_vtTotMove = Vector3d.NULL()
End Sub End Sub
@@ -2042,7 +2166,7 @@ Public Class NestingTabVM
If Not m_bDrag Or m_bDragging Then Return If Not m_bDrag Or m_bDragging Then Return
' Se primo movimento di drag, verifico di aver superato la soglia di movimento in pixel ' Se primo movimento di drag, verifico di aver superato la soglia di movimento in pixel
If m_bDragToStart Then 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 Math.Abs(e.Location.Y - m_locPrev.Y) < m_nRestRadius Then
Return Return
End If End If
@@ -2068,12 +2192,12 @@ Public Class NestingTabVM
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_NESTPAGEUC + 7), MSG_TYPE.WARNING) OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_NESTPAGEUC + 7), MSG_TYPE.WARNING)
End If End If
' Applico le lavorazioni al pezzo ' Applico le lavorazioni al pezzo
Dim b3Curr As new BBox3d Dim b3Curr As New BBox3d
EgtGetBBoxGlob( EgtGetFirstNameInGroup(nTestId, NAME_REGION), BBFLAG, b3Curr) EgtGetBBoxGlob(EgtGetFirstNameInGroup(nTestId, NAME_REGION), BBFLAG, b3Curr)
if Not EstCalc.PreInsertOnePart( nTestId) Then Return If Not EstCalc.PreInsertOnePart(nTestId) Then Return
Dim b3Ins As new BBox3d Dim b3Ins As New BBox3d
EgtGetBBoxGlob( EgtGetFirstNameInGroup( nTestId, NAME_REGION), BBFLAG, b3Ins) 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 vtDiff As New Vector3d(b3Curr.Min().x - b3Ins.Min().x, b3Curr.Min().y - b3Ins.Min().y, 0)
EgtMove(nMoveId, vtDiff) EgtMove(nMoveId, vtDiff)
'---------------------- COUNTER PART ---------------------- '---------------------- COUNTER PART ----------------------
@@ -2089,7 +2213,7 @@ Public Class NestingTabVM
'---------------------- COUNTER PART ---------------------- '---------------------- COUNTER PART ----------------------
' Gestione VeinMatching ' Gestione VeinMatching
VeinMatching.OnInsertPartInRaw( nMoveId) VeinMatching.OnInsertPartInRaw(nMoveId)
' Imposto stato ' Imposto stato
m_bVerify = True m_bVerify = True
m_bFromParking = True m_bFromParking = True
@@ -2099,46 +2223,108 @@ Public Class NestingTabVM
' Ricavo il punto corrente in coordinate mondo ' Ricavo il punto corrente in coordinate mondo
Dim ptCurr As Point3d Dim ptCurr As Point3d
EgtUnProjectPoint(e.Location, ptCurr) EgtUnProjectPoint(e.Location, ptCurr)
' Ricavo il vettore di movimento
Dim vtMove As Vector3d = ptCurr - m_ptPrev ' la rotazione è attivabile solo se premuto il tasto Ctrl (e non sono in parheggio)
' Muovo i pezzi selezionati di quanto possibile m_bKeyCtrlPressed = m_bDrag AndAlso (Keyboard.Modifiers And ModifierKeys.Control) > 0
If vtMove.SqLen() > EPS_SMALL * EPS_SMALL Then
' Se movimento con sola verifica finale '-------------Inizio ROTAZIONE ----------------
If m_bVerify Then If m_bKeyCtrlPressed AndAlso (Not m_bFromParking OrElse m_bKeyLeftShiftPressed) Then
EgtMove(nMoveId, vtMove) ' Calcolo il centro di rotazione come centro del cluster
m_vtTotMove += vtMove Dim ptCen As Point3d
' altrimenti caso con verifica durante il movimento If Not EgtGetPartPartClusterCenterGlob(nMoveId, ptCen) Then Return
Else ' definisco il vettore dal centro del pezzo alla posizione del cursore
' Aggiorno regioni per nesting Dim vtCurr As Vector3d = ptCurr - ptCen
UpdateNestRegions() Dim dLen, dHAng, dVAng As Double
EnableReferenceRegion(False) ' recupero l'angolo orizzontale del vettore
' muovo il pezzo vtCurr.ToSpherical(dLen, dHAng, dVAng)
EgtMovePart(nMoveId, CurrentMachine.bReducedCut, vtMove) If Not m_bStartRot Then
EgtSaveCollInfo() m_dAngTotal = 0
' se movimento risultante nullo, provo con movimento tangente ' notifico una rotazione
Dim bTgMoved As Boolean = False m_bStartRot = True
If vtMove.IsSmall() Then m_dStartAng = dVAng
' 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 End If
EgtDraw() Dim dDeltaAng As Double = dVAng - m_dStartAng
' Eventuale notifica al VeinMatching ' 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 If nMoveId = GDB_ID.SEL Then
Dim nId As Integer = EgtGetFirstSelectedObj() Dim nId As Integer = EgtGetFirstSelectedObj()
While nId <> GDB_ID.NULL While nId <> GDB_ID.NULL
@@ -2153,6 +2339,10 @@ Public Class NestingTabVM
m_ptPrev = ptCurr m_ptPrev = ptCurr
' Terminata esecuzione di drag ' Terminata esecuzione di drag
m_bDragging = False m_bDragging = False
' se è stato eseguito il Drag allora cancello tutti i ponticelli
ResetAllBridges()
' non è gestito il movimento della lavorazione!
'DeleteBridgeAssociated(nMoveId)
End Sub End Sub
Friend Sub OnMouseUpScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Friend Sub OnMouseUpScene(sender As Object, e As System.Windows.Forms.MouseEventArgs)
@@ -2174,48 +2364,31 @@ Public Class NestingTabVM
' Se eseguito drag ' Se eseguito drag
If Not m_bDragToStart Then If Not m_bDragToStart Then
' Se movimento con sola verifica finale ' Se movimento con sola verifica finale ----- TRASLAZIONE
If m_bVerify Then If Not m_bStartRot And m_bStartMove Then
' Determino cosa verificare VerifyMove()
Dim nMoveId = If(m_nIdToSel <> GDB_ID.NULL, m_nIdToSel, GDB_ID.SEL) ' Se movimento con sola verifica finale ----- TRASLAZIONE + ROTAZIONE
' Aggiorno regioni per nesting ElseIf m_bStartRot And m_bStartMove Then
UpdateNestRegions() If Not m_bFromParking Then
EnableReferenceRegion(False) VerifyRot()
' Eseguo verifica
If VerifyTrfData(nMoveId) And EgtVerifyPart(nMoveId, CurrentMachine.bReducedCut) Then
EstCalc.ResetOrderMachiningFlag()
' Non superata riporto alla posizione iniziale
Else Else
If m_bFromParking Then ' forzo il reset delle info di rotazione
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage() m_dStartAng = 0
PreRemoveOnePart(nMoveId) m_dAngTotal = 0
VeinMatching.OnRemovePartFromRaw(nMoveId) m_bStartRot = False
Else End If
EgtMove(nMoveId, -m_vtTotMove) VerifyMove()
' Eventuale notifica al VeinMatching ' verifico se la posizione finale della rotazione è corretta ----- ROTAZIONE
If nMoveId = GDB_ID.SEL Then ElseIf m_bStartRot And Not m_bStartMove Then
Dim nId As Integer = EgtGetFirstSelectedObj() If m_bFromParking Then
While nId <> GDB_ID.NULL VerifyMove()
VeinMatching.OnMovePartInRaw(nId) ' forzo il reset delle info di rotazione
nId = EgtGetNextSelectedObj() m_dStartAng = 0
End While m_dAngTotal = 0
Else m_bStartRot = False
VeinMatching.OnMovePartInRaw(nMoveId) Else
End If VerifyRot()
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 ----------------------
End If End If
m_bFromParking = False
' altrimenti caso con verifica durante il movimento
Else Else
' Basta reset alla fine ' Basta reset alla fine
End If End If
@@ -2269,7 +2442,7 @@ Public Class NestingTabVM
' Con CANC cancello i pezzi selezionati ' Con CANC cancello i pezzi selezionati
If e.KeyData = System.Windows.Forms.Keys.Delete Then If e.KeyData = System.Windows.Forms.Keys.Delete Then
RemovePart() 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 ElseIf e.KeyData = System.Windows.Forms.Keys.Insert Then
' Vettore dei pezzi selezionati (l'inserimento di un pezzo in VM cancella la selezione) ' Vettore dei pezzi selezionati (l'inserimento di un pezzo in VM cancella la selezione)
Dim vSel As New List(Of Integer) Dim vSel As New List(Of Integer)
+8 -6
View File
@@ -1145,14 +1145,14 @@ Public Class RawPartTabVM
dRawWidth = m_dTableWidth - 2 * dRawKerf dRawWidth = m_dTableWidth - 2 * dRawKerf
End If End If
If dRawOffsX < dRawKerf Then dRawOffsX = dRawKerf If dRawOffsX < dRawKerf Then dRawOffsX = dRawKerf
If dRawOffsX + dRawLen + dRawKerf > m_dTableLength Then If dRawOffsX + dRawLen + 2 * dRawKerf > m_dTableLength Then
dRawOffsX = Math.Max(dRawKerf, m_dTableLength - dRawLen - dRawKerf) dRawOffsX = Math.Max(dRawKerf, m_dTableLength - dRawLen - 2 * dRawKerf)
dRawLen = Math.Min(dRawLen, m_dTableLength - dRawOffsX - dRawKerf) dRawLen = Math.Min(dRawLen, m_dTableLength - dRawOffsX - 2 * dRawKerf)
End If End If
If dRawOffsY < dRawKerf Then dRawOffsY = dRawKerf If dRawOffsY < dRawKerf Then dRawOffsY = dRawKerf
If dRawOffsY + dRawWidth + dRawKerf > m_dTableWidth Then If dRawOffsY + dRawWidth + 2 * dRawKerf > m_dTableWidth Then
dRawOffsY = Math.Max(dRawKerf, m_dTableWidth - dRawWidth - dRawKerf) dRawOffsY = Math.Max(dRawKerf, m_dTableWidth - dRawWidth - 2 * dRawKerf)
dRawWidth = Math.Min(dRawWidth, m_dTableWidth - dRawOffsY - dRawKerf) dRawWidth = Math.Min(dRawWidth, m_dTableWidth - dRawOffsY - 2 * dRawKerf)
End If End If
' Assegno i dati ' Assegno i dati
SetLength(dRawLen) SetLength(dRawLen)
@@ -2389,6 +2389,8 @@ Public Class RawPartTabVM
End If End If
' Aggiorno il punto precedente ' Aggiorno il punto precedente
m_ptPrev = ptCurr m_ptPrev = ptCurr
' Resetto i ponticelli (per ora non sono in grado di muoverli assieme ai pezzi)
ResetAllBridges()
End Sub End Sub
Private Sub ModifyPhoto(ptCurr As Point3d) Private Sub ModifyPhoto(ptCurr As Point3d)
+1
View File
@@ -14,6 +14,7 @@
<OmagOFFICE:ShowPanelV DataContext="{StaticResource ShowPanelVM}"/> <OmagOFFICE:ShowPanelV DataContext="{StaticResource ShowPanelVM}"/>
<OmagOFFICE:ViewPanelV DataContext="{StaticResource ViewPanelVM}"/> <OmagOFFICE:ViewPanelV DataContext="{StaticResource ViewPanelVM}"/>
<OmagOFFICE:InstrumentPanelV DataContext="{StaticResource InstrumentPanelVM}"/> <OmagOFFICE:InstrumentPanelV DataContext="{StaticResource InstrumentPanelVM}"/>
<OmagOFFICE:PrintPanelV DataContext="{StaticResource PrintPanelVM}"/>
<OmagOFFICE:VeinMatchPanelV DataContext="{StaticResource VeinMatchPanelVM}"/> <OmagOFFICE:VeinMatchPanelV DataContext="{StaticResource VeinMatchPanelVM}"/>
<OmagOFFICE:MachinePanelV DataContext="{StaticResource MachinePanelVM}"/> <OmagOFFICE:MachinePanelV DataContext="{StaticResource MachinePanelVM}"/>
</EgtFloating:EgtFloatingTray> </EgtFloating:EgtFloatingTray>
+4
View File
@@ -1,3 +1,7 @@
Public Class ProjectV Public Class ProjectV
Private Sub LoadPage() Handles Me.Loaded
OmagOFFICEMap.SetRefProjectV(Me)
End Sub
End Class End Class
Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

+15 -1
View File
@@ -11,7 +11,8 @@
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions> <RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!--Titolo delle colonne--> <!--Titolo delle colonne-->
<Grid Visibility="{Binding Legenda_Visibility}" <Grid Visibility="{Binding Legenda_Visibility}"
@@ -185,6 +186,19 @@
Grid.Column="1"/> Grid.Column="1"/>
</Grid> </Grid>
<Grid Visibility="{Binding Parameter6_Visibility}"
Grid.Row="6"
Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.8*"/>
<ColumnDefinition Width="1.2*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Parameter6Msg}" Grid.Row="2"/>
<EgtWPFLib5:EgtTextBox Text="{Binding Parameter6}"
Grid.Column="1"/>
</Grid>
</Grid> </Grid>
</UserControl> </UserControl>
+133 -9
View File
@@ -404,6 +404,40 @@ Public Class SideEntityControlVM
#End Region 'Parameter 5 #End Region 'Parameter 5
#Region "Parameter 6"
Private m_Parameter6_Visibility As Visibility
Public Property Parameter6_Visibility As Visibility
Get
Return m_Parameter6_Visibility
End Get
Set(value As Visibility)
m_Parameter6_Visibility = value
NotifyPropertyChanged(NameOf(Parameter6_Visibility))
End Set
End Property
Private m_Parameter6 As Double
Public Property Parameter6 As String
Get
Return LenToString(m_Parameter6, 2)
End Get
Set(value As String)
If m_Mode = ModeOpt.ENGRAVE Then
StringToLen(value, m_Parameter6)
m_dEngraveAngle = m_Parameter6
' Creo le geometrie dei gocciolatoi
RefreshSideAngleText()
End If
End Set
End Property
Private Sub SetParameter6(value As Double)
m_Parameter6 = value
NotifyPropertyChanged("Parameter6")
End Sub
#End Region
Private m_dSideAngle As Double = 0 Private m_dSideAngle As Double = 0
Private m_HeightA As Double = 0 Private m_HeightA As Double = 0
@@ -422,6 +456,7 @@ Public Class SideEntityControlVM
Private m_dDripDepth As Double = 10 Private m_dDripDepth As Double = 10
Private m_dEngraveDepth2 As Double = 5 Private m_dEngraveDepth2 As Double = 5
Private m_dDripShort As Double = 0 Private m_dDripShort As Double = 0
Private m_dEngraveAngle As Double = 0
Private m_CallingWndScene As Scene Private m_CallingWndScene As Scene
Private m_CallingWindow As CallingWindowOpt Private m_CallingWindow As CallingWindowOpt
@@ -480,6 +515,16 @@ Public Class SideEntityControlVM
End Set End Set
End Property End Property
Private m_Parameter6Msg As String = "Angle"
Public Property Parameter6Msg As String
Get
Return m_Parameter6Msg ' Angolo
End Get
Set(value As String)
m_Parameter6Msg = value
End Set
End Property
#End Region ' Messages #End Region ' Messages
#Region "CONSTRUCTOR" #Region "CONSTRUCTOR"
@@ -526,18 +571,29 @@ Public Class SideEntityControlVM
Parameter2ab_Visibility = Visibility.Hidden Parameter2ab_Visibility = Visibility.Hidden
Parameter4_Visibility = Visibility.Hidden Parameter4_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden Parameter5_Visibility = Visibility.Hidden
Parameter6_Visibility = Visibility.Hidden
ElseIf m_Mode = ModeOpt.FILOTOP Then ElseIf m_Mode = ModeOpt.FILOTOP Then
Parameter23_Visibility = Windows.Visibility.Hidden Parameter23_Visibility = Windows.Visibility.Hidden
Parameter2_Visibility = Visibility.Visible Parameter2_Visibility = Visibility.Visible
Parameter2ab_Visibility = Visibility.Hidden Parameter2ab_Visibility = Visibility.Hidden
Parameter4_Visibility = Visibility.Hidden Parameter4_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Visible Parameter5_Visibility = Visibility.Visible
Parameter6_Visibility = Visibility.Hidden
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
Parameter2_Visibility = Visibility.Hidden Parameter2_Visibility = Visibility.Hidden
Parameter23_Visibility = Windows.Visibility.Visible Parameter23_Visibility = Windows.Visibility.Visible
Parameter2ab_Visibility = Visibility.Visible Parameter2ab_Visibility = Visibility.Visible
Parameter4_Visibility = Visibility.Hidden Parameter4_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden Parameter5_Visibility = Visibility.Hidden
Parameter6_Visibility = Visibility.Hidden
ElseIf m_Mode = ModeOpt.ENGRAVE Then
' Temporaneamente lo disabilito
Parameter23_Visibility = Windows.Visibility.Visible
Parameter4_Visibility = Visibility.Visible
Parameter2ab_Visibility = Visibility.Visible
Parameter2_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden
Parameter6_Visibility = Visibility.Visible
Else Else
' Temporaneamente lo disabilito ' Temporaneamente lo disabilito
Parameter23_Visibility = Windows.Visibility.Visible Parameter23_Visibility = Windows.Visibility.Visible
@@ -545,6 +601,7 @@ Public Class SideEntityControlVM
Parameter2ab_Visibility = Visibility.Visible Parameter2ab_Visibility = Visibility.Visible
Parameter2_Visibility = Visibility.Hidden Parameter2_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden Parameter5_Visibility = Visibility.Hidden
Parameter6_Visibility = Visibility.Hidden
End If End If
'------------------ VALORI E TITOLI PARAMETRI '------------------ VALORI E TITOLI PARAMETRI
@@ -576,12 +633,14 @@ Public Class SideEntityControlVM
m_dDripDepth = GetMainPrivateProfileDouble(S_SIDES, K_DRIPDEPTH, 10) m_dDripDepth = GetMainPrivateProfileDouble(S_SIDES, K_DRIPDEPTH, 10)
m_dDripShort = GetMainPrivateProfileDouble(S_SIDES, K_DRIPSHORT, 0) m_dDripShort = GetMainPrivateProfileDouble(S_SIDES, K_DRIPSHORT, 0)
m_dEngraveDepth2 = GetMainPrivateProfileDouble(S_SIDES, K_ENGRAVEDEPTH2, 0) m_dEngraveDepth2 = GetMainPrivateProfileDouble(S_SIDES, K_ENGRAVEDEPTH2, 0)
m_dEngraveAngle = GetMainPrivateProfileDouble(S_SIDES, K_ENGRAVEANGLE, 0)
SetParameter1(m_dDripOffset) SetParameter1(m_dDripOffset)
SetParameter2(m_dDripOffset2) SetParameter2(m_dDripOffset2)
SetParameter2a(m_nEngrNbr2) SetParameter2a(m_nEngrNbr2)
SetParameter2b(m_dDripOffset2) SetParameter2b(m_dDripOffset2)
SetParameter3(m_dDripDepth) SetParameter3(m_dDripDepth)
SetParameter4(m_dEngraveDepth2) SetParameter4(m_dEngraveDepth2)
SetParameter6(m_dEngraveAngle)
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
' definisco i nomi dei campi ' definisco i nomi dei campi
@@ -789,18 +848,22 @@ Public Class SideEntityControlVM
If m_CallingWindow = CallingWindowOpt.DXFIMPORT Or m_CallingWindow = CallingWindowOpt.COMPO Then If m_CallingWindow = CallingWindowOpt.DXFIMPORT Or m_CallingWindow = CallingWindowOpt.COMPO Then
If m_Mode = ModeOpt.SIDEANGLE Then If m_Mode = ModeOpt.SIDEANGLE Then
For Each Entity In m_SideEntityList For Each Entity In m_SideEntityList
If DirectCast(Entity, SideAngleEntity).dSideAngle <> 0 Then If TypeOf Entity Is SideAngleEntity Then
Dim nI As Integer = 0 If DirectCast(Entity, SideAngleEntity).dSideAngle <> 0 Then
StringToInt(Entity.sEntityName.Substring(1), nI) Dim nI As Integer = 0
CheckSide(nI) StringToInt(Entity.sEntityName.Substring(1), nI)
CheckSide(nI)
End If
End If End If
Next Next
Else Else
For Each Entity In m_SideEntityList For Each Entity In m_SideEntityList
If DirectCast(Entity, DripEntity).bHaveDrip Then If TypeOf Entity Is DripEntity Then
Dim nI As Integer = 0 If DirectCast(Entity, DripEntity).bHaveDrip Then
StringToInt(Entity.sEntityName.Substring(1), nI) Dim nI As Integer = 0
CheckSide(nI) StringToInt(Entity.sEntityName.Substring(1), nI)
CheckSide(nI)
End If
End If End If
Next Next
End If End If
@@ -1191,7 +1254,11 @@ Public Class SideEntityControlVM
End While End While
End If End If
Dim ListEngraveSideAng As New List(Of Integer)
If m_Mode = ModeOpt.DRIP Then If m_Mode = ModeOpt.DRIP Then
' Assegno colore e attributi
Dim nInd As Integer = 0
' Esplodo nelle curve componenti ' Esplodo nelle curve componenti
nCrvId = EgtGetFirstInGroup(DripLayer) nCrvId = EgtGetFirstInGroup(DripLayer)
While nCrvId <> GDB_ID.NULL While nCrvId <> GDB_ID.NULL
@@ -1210,14 +1277,70 @@ Public Class SideEntityControlVM
End While End While
Else Else
' Assegno colore e attributi ' Assegno colore e attributi
Dim nInd As Integer = 0
nCrvId = EgtGetFirstInGroup(DripLayer) nCrvId = EgtGetFirstInGroup(DripLayer)
While nCrvId <> GDB_ID.NULL While nCrvId <> GDB_ID.NULL
EgtSetColor(nCrvId, COL_MCH_DRIPCUT()) EgtSetColor(nCrvId, COL_MCH_DRIPCUT())
' EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth) 'EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth)
EgtSetInfo(nCrvId, INFO_STRICT, If(m_dDripShort > EPS_SMALL, "3", "0")) EgtSetInfo(nCrvId, INFO_STRICT, If(m_dDripShort > EPS_SMALL, "3", "0"))
If nInd = 0 Then
' solo se m_dEngraveAngle > 0
If Math.Abs(m_dEngraveAngle) > EPS_ANG_SMALL Then
' salvo l'Id della curva che deve essere manipolato separatamente
ListEngraveSideAng.Add(nCrvId)
Else
EgtRemoveInfo(nCrvId, INFO_SIDE_ANGLE)
EgtModifyCurveThickness(nCrvId, -m_dEngraveDepth2)
End If
Else
If nInd = m_nEngrNbr2 Then
nInd = -1
End If
EgtModifyCurveThickness(nCrvId, -m_dEngraveDepth2)
End If
nInd = nInd + 1
If nInd > m_nEngrNbr2 Then nInd = 0
nCrvId = EgtGetNext(nCrvId) nCrvId = EgtGetNext(nCrvId)
End While End While
End If End If
SplitJointedSideEngrave(ListEngraveSideAng)
End Sub
Private Sub SplitJointedSideEngrave(ListEngraveSideAngId As List(Of Integer))
For Each nCrvId As Integer In ListEngraveSideAngId
' eventualmente separo il taglio inclinato
Dim dUs, dUe As Double
EgtCurveDomain(nCrvId, dUs, dUe)
Dim dU As Double = dUs
While dU < dUe ' + EPS_ZERO
Dim ptCurr As Point3d
EgtAtParamPoint(nCrvId, dU + 1, nCrvId, ptCurr)
' separa la curva in questo punto
Dim nNewCurvId As Integer = GDB_ID.NULL
If dUe > 1 Then
nNewCurvId = EgtSplitCurveAtPoint(nCrvId, ptCurr, GDB_RT.LOC)
Else
nNewCurvId = nCrvId
End If
EgtSetColor(nCrvId, COL_MCH_ONENGRAVE_ANG())
EgtSetInfo(nCrvId, INFO_SIDE_ANGLE, m_dEngraveAngle)
' recupero il vettore di estrusione della curva e la direzione della curva
Dim vtAux As Vector3d
EgtStartVector(nCrvId, vtAux)
Dim vtExtrusion As Vector3d
EgtCurveExtrusion(nCrvId, vtExtrusion)
' ruoto il vetottore nella nuova direzione
vtExtrusion.Rotate(vtAux, -m_dEngraveAngle)
' assegno il vettore di estrusione nella nuova direzione indicata (segno negativo perchè dentro il pezzo)
EgtModifyCurveExtrusion(nCrvId, vtExtrusion)
Dim ExtendFactor As Double = New Vector3d(0, 0, 1) * vtExtrusion
EgtModifyCurveThickness(nCrvId, -m_dDripDepth / ExtendFactor)
If dUe = 1 Then Exit While
nCrvId = nNewCurvId
' aggiorno i valori del dominio della curva che rimane
EgtCurveDomain(nCrvId, dUs, dUe)
End While
Next
End Sub End Sub
' Funzione che modifica l'inclinazione di un lato ' Funzione che modifica l'inclinazione di un lato
@@ -1378,6 +1501,7 @@ Public Class SideEntityControlVM
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEDEPTH, LenToString(m_dDripDepth, 3)) WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEDEPTH, LenToString(m_dDripDepth, 3))
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVESHORT, LenToString(m_dDripShort, 3)) WriteMainPrivateProfileString(S_SIDES, K_ENGRAVESHORT, LenToString(m_dDripShort, 3))
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEDEPTH2, LenToString(m_dEngraveDepth2, 3)) WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEDEPTH2, LenToString(m_dEngraveDepth2, 3))
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEANGLE, LenToString(m_dEngraveAngle, 3))
For Each objEntity In m_SideEntityList For Each objEntity In m_SideEntityList
If TypeOf objEntity Is DripEntity Then If TypeOf objEntity Is DripEntity Then
Dim CurrEntity As DripEntity = DirectCast(objEntity, DripEntity) Dim CurrEntity As DripEntity = DirectCast(objEntity, DripEntity)
+6 -1
View File
@@ -18,6 +18,7 @@
<EgtWPFLib5:ShowPanelVM x:Key="ShowPanelVM"/> <EgtWPFLib5:ShowPanelVM x:Key="ShowPanelVM"/>
<EgtWPFLib5:ViewPanelVM x:Key="ViewPanelVM"/> <EgtWPFLib5:ViewPanelVM x:Key="ViewPanelVM"/>
<EgtWPFLib5:InstrumentPanelVM x:Key="InstrumentPanelVM"/> <EgtWPFLib5:InstrumentPanelVM x:Key="InstrumentPanelVM"/>
<OmagOFFICE:PrintPanelVM x:Key="PrintPanelVM"/>
<OmagOFFICE:MyMachinePanelVM x:Key="MachinePanelVM"/> <OmagOFFICE:MyMachinePanelVM x:Key="MachinePanelVM"/>
<OmagOFFICE:VeinMatchPanelVM x:Key="VeinMatchPanelVM"/> <OmagOFFICE:VeinMatchPanelVM x:Key="VeinMatchPanelVM"/>
<OmagOFFICE:OptionPanelVM x:Key="OptionPanelVM"/> <OmagOFFICE:OptionPanelVM x:Key="OptionPanelVM"/>
@@ -223,7 +224,11 @@
<Setter Property="Height" Value="30"/> <Setter Property="Height" Value="30"/>
</Style> </Style>
<Style x:Key="OptionPanel_NestingToggleButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}"> <Style x:Key="OptionPanel_ToggleWrapButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="Height" Value="45"/>
</Style>
<Style x:Key="OptionPanel_NestingToggleButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="Height" Value="60"/> <Setter Property="Height" Value="60"/>
<Setter Property="Width" Value="60"/> <Setter Property="Width" Value="60"/>
</Style> </Style>
+38
View File
@@ -1,5 +1,6 @@
Imports EgtWPFLib5 Imports EgtWPFLib5
Imports EgtPHOTOLib Imports EgtPHOTOLib
Imports EgtUILib
Module OmagOFFICEMap Module OmagOFFICEMap
@@ -229,6 +230,43 @@ Module OmagOFFICEMap
Return Not IsNothing(m_refSimulTabVM) Return Not IsNothing(m_refSimulTabVM)
End Function End Function
Private m_refProjectV As ProjectV
Friend Sub SetRefProjectV(ProjectV As ProjectV)
m_refProjectV = ProjectV
End Sub
Private m_WidthProjectV As Integer = 2000
Friend Sub SetWidthDimProjectV(Width As Integer)
m_WidthProjectV = Width
End Sub
Friend Function GetWidthDimProjectV() As Integer
If Not IsNothing(m_refProjectV) Then
Try
m_WidthProjectV = CInt(m_refProjectV.ActualWidth)
Catch ex As Exception
EgtOutLog(ex.Message)
End Try
End If
Return m_WidthProjectV
End Function
Private m_HeightProjectV As Integer = 1000
Friend Sub SetHeightDimProjectV(Eight As Integer)
m_HeightProjectV = Eight
End Sub
Friend Function GetHeightDimProjectV() As Integer
If Not IsNothing(m_refProjectV) Then
Try
m_HeightProjectV = CInt(m_refProjectV.ActualHeight)
Catch ex As Exception
EgtOutLog(ex.Message)
End Try
End If
Return m_HeightProjectV
End Function
#End Region ' Set #End Region ' Set
#Region "Init" #Region "Init"