diff --git a/CAM/CamAuto.vb b/CAM/CamAuto.vb
index aaca208..3124642 100644
--- a/CAM/CamAuto.vb
+++ b/CAM/CamAuto.vb
@@ -255,7 +255,7 @@ Friend Module CamAuto
Dim nIdPart As Integer = EgtGetFirstPart()
While nIdPart <> GDB_ID.NULL
' elimino il layer dei flag di separazione "AUX_SPLIT_WJ"
- Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(nIdPart, INFO_AUX_SPLIT_WJ)
+ Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(nIdPart, LAY_AUX_SPLIT_WJ)
EgtErase(IdAuxLayer)
' accedo al Layer OutLoop
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
@@ -270,7 +270,7 @@ Friend Module CamAuto
nIdPart = EgtGetFirstPartInRawPart(nRawId)
While nIdPart <> GDB_ID.NULL
' elimino il layer dei flag di separazione "AUX_SPLIT_WJ"
- Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(nIdPart, INFO_AUX_SPLIT_WJ)
+ Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(nIdPart, LAY_AUX_SPLIT_WJ)
EgtErase(IdAuxLayer)
' accedo al Layer OutLoop
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
@@ -328,7 +328,7 @@ Friend Module CamAuto
Dim nNextParId As Integer = EgtGetNextPartInRawPart(nParId)
' verifico se il pezzo passato è un taglio di sepatazione (il nome deve contenere "SpliCut")
Dim sName As String = String.Empty
- If EgtGetName(nParId, sName) AndAlso sName.Contains(SPLIT_CUT) Then
+ If EgtGetName(nParId, sName) AndAlso sName.Contains(NAME_SPLIT_CUT) Then
' Rimuovo il pezzo dal grezzo
If EgtRemovePartFromRawPart(nParId) Then
' Salvo l'indice del pezzo se non è stato già inserito
@@ -1065,6 +1065,8 @@ Friend Module CamAuto
Dim bMillingOnCorners As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_MILLING_ON_CORNERS, 1, m_MainWindow.GetMachIniFile()) <> 0)
Dim bMillingOnSinks As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_MILLING_ON_SINKS, 0, m_MainWindow.GetMachIniFile()) <> 0)
Dim dMillingShort As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_MILLING_SHORTENING, 0, m_MainWindow.GetMachIniFile())
+ Dim bWaterjetOptimize As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_WATERJET_OPTIMIZE, 0, m_MainWindow.GetMachIniFile()) <> 0)
+ Dim bWaterjetOnSinks As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_WATERJET_ON_SINKS, 0, m_MainWindow.GetMachIniFile()) <> 0)
EgtLuaSetGlobStringVar("CAM.MATERIAL", sMaterial)
EgtLuaSetGlobStringVar("CAM.SAWMCH", sSawMch)
EgtLuaSetGlobStringVar("CAM.SAWTILTEDMCH", sSawTiltedMch)
@@ -1084,6 +1086,8 @@ Friend Module CamAuto
EgtLuaSetGlobBoolVar("CAM.MILLINGONCORNERS", bMillingOnCorners)
EgtLuaSetGlobBoolVar("CAM.MILLINGONSINKS", bMillingOnSinks)
EgtLuaSetGlobNumVar("CAM.MILLINGSHORT", dMillingShort)
+ EgtLuaSetGlobBoolVar("CAM.WATERJETOPTIMIZE", bWaterjetOptimize)
+ EgtLuaSetGlobBoolVar("CAM.WATERJETONSINKS", bWaterjetOnSinks)
EgtLuaSetGlobNumVar("CAM.RAWHEIGHT", GetRawHeight())
EgtLuaSetGlobNumVar("CAM.REGROT", GetRegistrationRotation())
Return True
diff --git a/CadCuts/NestPageUC.xaml.vb b/CadCuts/NestPageUC.xaml.vb
index 9e38d2e..76f3cbe 100644
--- a/CadCuts/NestPageUC.xaml.vb
+++ b/CadCuts/NestPageUC.xaml.vb
@@ -352,62 +352,57 @@ Public Class NestPageUC
' Se non abilitata separazione lato waterjet o bottone mouse non Left, esco
If Not m_bIsCheckedSplitCurveWJ Or e.Button <> Windows.Forms.MouseButtons.Left Then Return
- ' Se esiste un elemento selezionato
EgtResetMark(m_nIdSelectedWaterJet)
- ' Verifico se selezionato indicativo di pezzo
+ ' Imposto riconoscimento entità in finestra di selezione
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
+ ' Ciclo su entità in finestra di selezione
+ Dim nMyId As Integer = EgtGetFirstObjInSelWin()
+ While nMyId <> GDB_ID.NULL
+ ' Recupero layer di appartenenza e suo nome
+ Dim nLayerId As Integer = EgtGetParent(nMyId)
Dim sLayer As String = String.Empty
- ' layer di origine
- Dim nIdParent As Integer = EgtGetParent(nIdMy)
- ' recupero il nome del Layer
- EgtGetName(nIdParent, sLayer)
+ EgtGetName(nLayerId, 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 Then
- If m_nIdSelectedSideWJ <> GDB_ID.NULL Or m_nIdSelectedSideWJ = nIdMy Then
+ If EgtGetType(nMyId) = GDB_TY.CRV_ARC OrElse EgtGetType(nMyId) = GDB_TY.CRV_COMPO OrElse EgtGetType(nMyId) = GDB_TY.CRV_LINE Then
+ If m_nIdSelectedSideWJ <> GDB_ID.NULL Or m_nIdSelectedSideWJ = nMyId Then
EgtDeselectObj(m_nIdSelectedSideWJ)
End If
' recupero il gruppo della lavorazione associata
- Dim nIdParentPart As Integer = EgtGetParent(nIdParent)
- Dim nIdPV As Integer = EgtGetFirstNameInGroup(nIdParentPart, NAME_PREVIEW)
- ' recupero l'elenco delle Preview di Tipo WaterJet associate a questo Part
- Dim ListGroup As List(Of Integer) = ResearchGropuWJ(nIdParent, nIdPV)
- ' se esiste almeno 1 Preview di tipo WaterJet
- If ListGroup.Count > 0 Then
- m_nIdSelectedSideWJ = nIdMy
+ Dim nPartId As Integer = EgtGetParent(nLayerId)
+ Dim nPartPvId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_PREVIEW)
+ ' recupero Preview di tipo WaterJet associato all'entità
+ Dim nWjPvId As Integer = GetCurrentPreViewFromSide( nMyId, nPartPvId)
+ If nWjPvId <> GDB_ID.NULL Then
+ m_nIdSelectedSideWJ = nMyId
Dim nValInfo As Integer = 0
- If EgtGetInfo(nIdMy, INFO_JOINENTITY, nValInfo) Then
+ If EgtGetInfo(nMyId, INFO_JOINENTITY, nValInfo) Then
nValInfo = If( nValInfo = 1, 0, 1)
End If
- EgtSetInfo(nIdMy, INFO_JOINENTITY, nValInfo)
+ EgtSetInfo(nMyId, INFO_JOINENTITY, nValInfo)
' Ricalcolo tutte le lavorazioni
Dim nWarn As Integer = 0
ResetAllMachinings(nWarn)
- ' recupero l'indice del PreView che deve essere acceso per indicare la selezione
- ListGroup = ResearchGropuWJ(nIdParent, nIdPV)
- Dim nIdWJ As Integer = GetPVIdFromIdSide(ListGroup, nIdMy)
- GetCurrentPVFromIdSide(ListGroup, nIdMy, nIdWJ, nIdParent)
- ' assegno un identificativo grafico per indicare che è un taglio separato
+ ' Recupero nuovo Preview associato alla lavorazione dell'entità
+ nWjPvId = GetCurrentPreViewFromSide( nMyId, nPartPvId)
+ ' Assegno un identificativo grafico per indicare che è un taglio separato
If nValInfo = 0 Then
- AssignFlagOnGraphic(nIdMy, nIdParentPart)
+ AssignFlagOnGraphic(nMyId, nPartId)
Else
- EraseFlagOnGraphic(nIdMy, nIdParentPart)
+ EraseFlagOnGraphic(nMyId, nPartId)
End If
- ' salvo il valore del PreView evidenziato
- m_nIdSelectedWaterJet = nIdWJ
- EgtSetMark(nIdWJ)
- EgtSelectObj(nIdMy)
+ ' Salvo il valore del PreView evidenziato
+ m_nIdSelectedWaterJet = nWjPvId
+ EgtSetMark(nWjPvId)
+ EgtSelectObj(nMyId)
EgtDraw()
Exit While
End If
-
End If
End If
- nIdMy = EgtGetNextObjInSelWin()
+ nMyId = EgtGetNextObjInSelWin()
End While
End Sub
@@ -418,7 +413,7 @@ Public Class NestPageUC
' Se non abilitato spostamento punto inizio waterjet o bottone mouse non Left, esco
If Not m_bIsCheckedStartCurveWJ Or e.Button <> Windows.Forms.MouseButtons.Left Then Return
- ' Acquisisco punto da disegno
+ ' Acquisisco punto di selezione
Dim ptStartCurv As New Point3d
EgtUnProjectPoint(e.Location, ptStartCurv)
' Aggiusto Z punto acquisito (è in globale)
@@ -428,56 +423,54 @@ Public Class NestPageUC
ptStartCurv.z = ptRawMax.z
End If
- ' Se esiste un elemento selezionato
EgtResetMark(m_nIdSelectedWaterJet)
- ' Verifico se selezionato indicativo di pezzo
+ ' Imposto riconoscimento entità in finestra di selezione
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 nMySel As Integer
+ EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nMySel)
+ ' Ciclo su entità in finestra di selezione
+ Dim nEntId As Integer = EgtGetFirstObjInSelWin()
+ While nEntId <> GDB_ID.NULL
+ ' Recupero layer di appartenenza e suo nome
+ Dim nLayerId As Integer = EgtGetParent(nEntId)
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
+ EgtGetName(nLayerId, sLayer)
+ ' Se il nome del layer è quello associato ad un lato esterno o interno allora procedo
If sLayer = NAME_OUTLOOP Or sLayer = NAME_INLOOP Then
- If EgtGetType(nIdMy) = GDB_TY.CRV_ARC OrElse EgtGetType(nIdMy) = GDB_TY.CRV_COMPO OrElse EgtGetType(nIdMy) = GDB_TY.CRV_LINE Then
- ' verifico che il contorno sia chiuso, altrimenti esco
- If Not VerifyOutLoopIsClosed(nIdParent) Then
+ If EgtGetType(nEntId) = GDB_TY.CRV_ARC OrElse EgtGetType(nEntId) = GDB_TY.CRV_COMPO OrElse EgtGetType(nEntId) = GDB_TY.CRV_LINE Then
+ ' Verifico che il contorno sia chiuso, altrimenti esco
+ If Not VerifyOutLoopIsClosed(nLayerId) Then
m_CurrProjPage.SetWarningMessage(EgtMsg(91131)) ' Il contorno non è chiuso
Exit While
End If
- ' recupero il gruppo della lavorazione associata
- Dim nIdParentPart As Integer = EgtGetParent(nIdParent)
- Dim nIdPV As Integer = EgtGetFirstNameInGroup(nIdParentPart, NAME_PREVIEW)
- ' VERIFICA: recupero l'elenco delle Preview di Tipo WaterJet_n_S associate a questo Part
- Dim ListGroup As List(Of Integer) = ResearchGropuWJ(nIdParent, nIdPV)
- ' VERIFICA: se esistono delle lavorazioni associate al percorso OutLoop di tipo Saw allora non procedo
- Dim ListGroupSaw As List(Of Integer) = ResearchGropuSaw(nIdParent, nIdPV)
- ' se esiste 1 Preview di tipo WaterJet e nessuno di tipo Saw
- If ListGroup.Count = 1 And ListGroupSaw.Count = 0 Then
- EgtSetInfo(nIdParent, INFO_START, ptStartCurv)
+ ' Recupero il gruppo della lavorazione associata
+ Dim nPartId As Integer = EgtGetParent(nLayerId)
+ Dim nPartPvId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_PREVIEW)
+ ' Recupero l'elenco delle Preview di Tipo WaterJetNN_S associate a questo layer
+ Dim lstWjPV As List(Of Integer) = ResearchGroupWJ(nLayerId, nPartPvId)
+ ' Recupero l'elenco delle Preview di Tipo Saw associate a questo layer
+ Dim lstSawPV As List(Of Integer) = ResearchGroupSaw(nLayerId, nPartPvId)
+ ' Se esiste 1 Preview di tipo WaterJet e nessuno di tipo Saw, cambio inizio
+ If lstWjPV.Count = 1 And lstSawPV.Count = 0 Then
+ ' Imposto punto di inizio
+ EgtSetInfo(nLayerId, INFO_START, ptStartCurv)
' Ricalcolo tutte le lavorazioni
Dim nWarn As Integer = 0
ResetAllMachinings(nWarn)
- ' recupero l'indice del PreView che deve essere acceso per indicare la selezione
- ListGroup = ResearchGropuWJ(nIdParent, nIdPV)
- Dim nIdWJ As Integer = GetPVIdFromIdSide(ListGroup, nIdMy)
- GetCurrentPVFromIdSide(ListGroup, nIdMy, nIdWJ, nIdParent)
- m_nIdSelectedWaterJet = nIdWJ
- EgtSetMark(nIdWJ)
+ ' Recupero nuovo Preview associato alla lavorazione dell'entità
+ Dim nWjPvId As Integer = GetCurrentPreViewFromSide( nEntId, nPartPvId)
+ ' Salvo il valore del PreView evidenziato
+ m_nIdSelectedWaterJet = nWjPvId
+ EgtSetMark(nWjPvId)
EgtDraw()
Exit While
Else
m_CurrProjPage.SetWarningMessage(EgtMsg(91131)) ' Il contorno non è chiuso
Exit While
End If
-
End If
End If
- nIdMy = EgtGetNextObjInSelWin()
+ nEntId = EgtGetNextObjInSelWin()
End While
End Sub
@@ -786,110 +779,83 @@ Public Class NestPageUC
#Region "SPLIT/START CURVE"
' restituisce l'elenco dei Gruppi Waterjet associati al contorno indicato
- Public Function ResearchGropuWJ(nIdOutLoop As Integer, nIdPV As Integer) As List(Of Integer)
- Dim ListOfGroupPV As New List(Of Integer)
- Dim nIdGroup As Integer = GDB_ID.NULL
- Dim nIdMy As Integer = GDB_ID.NULL
- ' recupero il primo lato dall'elenco dei lati della figura
- nIdMy = EgtGetFirstInGroup(nIdOutLoop)
- ' altrimenti cerco all'interno del layer OutLoop per ogni lato la lavorazione associata
- While nIdMy <> GDB_ID.NULL
+ Public Function ResearchGroupWJ(nLayId As Integer, nPvId As Integer) As List(Of Integer)
+ Dim lstPvGroup As New List(Of Integer)
+ ' ciclo sui lati del layer OutLoop
+ Dim nMyId As Integer = EgtGetFirstInGroup(nLayId)
+ While nMyId <> GDB_ID.NULL
' verifico se esiste una Preview associata al lato
- nIdGroup = EgtGetFirstNameInGroup(nIdPV, "Waterjet" & nIdMy.ToString & "S")
- If nIdGroup <> GDB_ID.NULL Then
- ListOfGroupPV.Add(nIdGroup)
+ Dim nGroupId As Integer = EgtGetFirstNameInGroup(nPvId, "Waterjet" & nMyId.ToString() & "S")
+ If nGroupId <> GDB_ID.NULL Then
+ lstPvGroup.Add(nGroupId)
End If
- nIdMy = EgtGetNext(nIdMy)
+ nMyId = EgtGetNext(nMyId)
End While
- Return ListOfGroupPV
+ Return lstPvGroup
End Function
' restituisce l'elenco dei Gruppi Saw associati al contorno indicato
- Public Function ResearchGropuSaw(nIdOutLoop As Integer, nIdPV As Integer) As List(Of Integer)
- Dim ListOfGroupPV As New List(Of Integer)
- Dim nIdGroup As Integer = GDB_ID.NULL
- Dim nIdMy As Integer = GDB_ID.NULL
+ Public Function ResearchGroupSaw(nLayId As Integer, nIdPV As Integer) As List(Of Integer)
+ Dim lstPvGroup As New List(Of Integer)
' recupero il primo lato dall'elenco dei lati della figura
- nIdMy = EgtGetFirstInGroup(nIdOutLoop)
+ Dim nMyId As Integer = EgtGetFirstInGroup(nLayId)
' altrimenti cerco all'interno del layer OutLoop per ogni lato la lavorazione associata
- While nIdMy <> GDB_ID.NULL
+ While nMyId <> GDB_ID.NULL
' verifico se esiste una Preview associata al lato
- nIdGroup = EgtGetFirstNameInGroup(nIdPV, "Saw" & nIdMy.ToString)
+ Dim nIdGroup As Integer = EgtGetFirstNameInGroup(nIdPV, "Saw" & nMyId.ToString)
If nIdGroup <> GDB_ID.NULL Then
- ListOfGroupPV.Add(nIdGroup)
+ lstPvGroup.Add(nIdGroup)
End If
- nIdMy = EgtGetNext(nIdMy)
+ nMyId = EgtGetNext(nMyId)
End While
- Return ListOfGroupPV
+ Return lstPvGroup
End Function
- Public Function GetPVIdFromIdSide(ListGroup As List(Of Integer), nIdMy As Integer) As Integer
- Dim IdWaterjetPV As Integer = GDB_ID.NULL
- For Each nIdItem As Integer In ListGroup
- Dim sName As String = String.Empty
- If EgtGetName(nIdItem, sName) Then
- If sName.Contains(nIdMy.ToString) Then
- IdWaterjetPV = nIdItem
- Exit For
- End If
+ Private Function GetDirectPreViewFromSide( nSideId As Integer, nPvGroupId As Integer) As Integer
+ ' Radice del nome del gruppo di Preview
+ Dim sRefName As String = "Waterjet" & nSideId.ToString() & "S"
+ ' Ricerca nei gruppi all'interno del gruppo di Preview
+ Dim nEntId As Integer = EgtGetFirstInGroup( nPvGroupId)
+ While nEntId <> GDB_ID.NULL
+ Dim sName As String = ""
+ If EgtGetName( nEntId, sName) AndAlso sName.StartsWith( sRefName) Then
+ Return nEntId
End If
- Next
- Return IdWaterjetPV
+ nEntId = EgtGetNext( nEntId)
+ End While
+ ' Non è stato trovato
+ return GDB_ID.NULL
End Function
- Public Sub GetCurrentPVFromIdSide(ListGroup As List(Of Integer), nIdMy As Integer, ByRef nIdWj As Integer, nIdParent As Integer)
- Dim nObjInGroup As Integer = EgtGetGroupObjs(nIdParent)
- Dim nCount As Integer = 0
- GetNextSideJoint(ListGroup, nIdMy, nIdWj, nCount, nObjInGroup)
- If nIdWj <> GDB_ID.NULL Then Return
- GetPrevSideJoint(ListGroup, nIdMy, nIdWj, nCount, nObjInGroup)
- End Sub
-
- ' funzione ricorsiva per la ricerca del lato al quale è associata la PreView
- Private Sub GetNextSideJoint(ListGroup As List(Of Integer), nIdMy As Integer, ByRef nIdWj As Integer, ByRef nCount As Integer, nObjInGroup As Integer)
- Dim nValInfo As Integer = 1
- ' espressione di controllo per evitare di generare Loop infinito
- If nCount > nObjInGroup Then Return
- If nIdWj = GDB_ID.NULL Then
- Dim nIdWJNext As Integer = EgtGetNext(nIdMy)
- If nIdWJNext = GDB_ID.NULL Then nIdWJNext = EgtGetFirstInGroup(EgtGetParent(nIdMy))
- nCount += 1
- EgtGetInfo(nIdWJNext, INFO_JOINENTITY, nValInfo)
- If nValInfo = 1 Then
- nIdWj = GetPVIdFromIdSide(ListGroup, nIdWJNext)
- If nIdWj <> GDB_ID.NULL Then Return
- Else
- Return
- End If
- 'nIdWJNext = EgtGetNext(nIdWJNext)
- GetNextSideJoint(ListGroup, nIdWJNext, nIdWj, nCount, nObjInGroup)
- If nIdWj <> GDB_ID.NULL Then Return
- End If
- End Sub
-
- ' funzione ricorsiva per la ricerca del lato al quale è associata la PreView
- Private Sub GetPrevSideJoint(ListGroup As List(Of Integer), nIdMy As Integer, ByRef nIdWj As Integer, ByRef nCount As Integer, nObjInGroup As Integer)
- Dim nValInfo As Integer = 1
- ' espressione di controllo per evitare di generare Loop infinito
- If nCount > nObjInGroup Then Return
- If nIdWj = GDB_ID.NULL Then
- Dim nIdWJPrev As Integer = EgtGetPrev(nIdMy)
- ' se arrivato al primo valore allora continuo la ricerca dall'ultimo
- If nIdWJPrev = GDB_ID.NULL Then nIdWJPrev = EgtGetLastInGroup(EgtGetParent(nIdMy))
- nCount += 1
- EgtGetInfo(nIdWJPrev, INFO_JOINENTITY, nValInfo)
- If nValInfo = 1 Then
- nIdWj = GetPVIdFromIdSide(ListGroup, nIdWJPrev)
- If nIdWj <> GDB_ID.NULL Then Return
- Else
- Return
- End If
- 'nIdWJPrev = EgtGetPrev(nIdWJPrev)
- GetPrevSideJoint(ListGroup, nIdWJPrev, nIdWj, nCount, nObjInGroup)
- If nIdWj <> GDB_ID.NULL Then Return
-
- End If
- End Sub
+ Public Function GetCurrentPreViewFromSide( nSideId As Integer, nPvGroupId As Integer) As Integer
+ ' Cerco Preview diretta
+ Dim nPvId As Integer = GetDirectPreViewFromSide( nSideId, nPvGroupId)
+ ' Se trovata, esco con successo
+ If nPvId <> GDB_ID.NULL Then Return nPvId
+ ' Se elemento non collegato, esco con insuccesso
+ Dim nJoint As Integer = 1
+ If EgtGetInfo( nSideId, INFO_JOINENTITY, nJoint) AndAlso nJoint = 0 Then Return GDB_ID.NULL
+ ' Cerco su elementi successivi collegati
+ Dim nNextId = EgtGetNext( nSideId)
+ While nNextId <> GDB_ID.NULL
+ Dim nNextJoint As Integer = 1
+ If EgtGetInfo( nNextId, INFO_JOINENTITY, nNextJoint) AndAlso nNextJoint = 0 Then Exit While
+ nPvId = GetDirectPreViewFromSide( nNextId, nPvGroupId)
+ If nPvId <> GDB_ID.NULL Then Return nPvId
+ nNextId = EgtGetNext( nNextId)
+ End While
+ ' Cerco su elementi precedenti collegati
+ Dim nPrevId = EgtGetPrev( nSideId)
+ While nPrevId <> GDB_ID.NULL
+ Dim nPrevJoint As Integer = 1
+ If EgtGetInfo( nPrevId, INFO_JOINENTITY, nPrevJoint) AndAlso nPrevJoint = 0 Then Exit While
+ nPvId = GetDirectPreViewFromSide( nPrevId, nPvGroupId)
+ If nPvId <> GDB_ID.NULL Then Return nPvId
+ nPrevId = EgtGetPrev( nPrevId)
+ End While
+ ' Non trovato
+ Return GDB_ID.NULL
+ End Function
Public Sub ResetSplitCurvWJParam()
EgtDeselectObj(m_nIdSelectedSideWJ)
@@ -900,37 +866,33 @@ Public Class NestPageUC
End Sub
' ricevo l'ID del percorso di lavorazione WJ al quale associo una etichetta grafica con scritto "S"
- Private Sub AssignFlagOnGraphic(nIdMy As Integer, IdParentPart As Integer)
+ Private Sub AssignFlagOnGraphic(nMyId As Integer, NPartId As Integer)
' cerco se esiste già un layer nominato "AUX_SPLIT_WJ", altrimenti lo creo
- Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(IdParentPart, INFO_AUX_SPLIT_WJ)
- If IdAuxLayer = GDB_ID.NULL Then
- IdAuxLayer = EgtCreateGroup(IdParentPart)
- EgtSetName(IdAuxLayer, INFO_AUX_SPLIT_WJ)
+ Dim nAuxLayerId As Integer = EgtGetFirstNameInGroup(NPartId, LAY_AUX_SPLIT_WJ)
+ If nAuxLayerId = GDB_ID.NULL Then
+ nAuxLayerId = EgtCreateGroup(NPartId)
+ EgtSetName(nAuxLayerId, LAY_AUX_SPLIT_WJ)
End If
- ' recupero il punto medio del segmento selezionato
- Dim MidPoint As Point3d
- EgtMidPoint(nIdMy, GDB_RT.GLOB, MidPoint)
- 'Dim nIdTextFlag As Integer = EgtCreateText(IdAuxLayer, MidPoint, "*", 20, GDB_RT.GLOB)
- Dim nIdTextFlag As Integer = GetCreateFlagText(nIdMy, IdAuxLayer)
+ ' inserisco flag
+ Dim nIdTextFlag As Integer = GetCreateFlagText(nMyId, nAuxLayerId)
EgtSetColor(nIdTextFlag, New Color3d(255, 0, 0))
- EgtSetName(nIdTextFlag, "RefSide_" & nIdMy.ToString)
+ EgtSetName(nIdTextFlag, "RefSide_" & nMyId.ToString)
End Sub
- Private Function GetCreateFlagText(nId As Integer, nIdLayer As Integer, Optional sText As String = "*") As Integer
- ' recupero il punto medio
+ Private Function GetCreateFlagText(nId As Integer, nLayerId As Integer, Optional sText As String = "*") As Integer
+ ' Recupero il punto medio
Dim MidPoint As Point3d
EgtMidPoint(nId, GDB_RT.GLOB, MidPoint)
- ' recupero la direzione del vettore nel punto medio
+ ' Recupero la direzione della curva nel punto medio e la ruota 90deg CCW
Dim vVers As Vector3d
EgtMidVector(nId, GDB_RT.GLOB, vVers)
vVers.Normalize()
vVers.Rotate(Vector3d.Z_AX, 90)
' Ingombro complessivo della lavorazione
- Dim ptMin, ptMax As Point3d
- EgtStartPoint(nId, GDB_RT.GLOB, ptMin)
- EgtEndPoint(nId, GDB_RT.GLOB, ptMax)
+ Dim b3Ent As New BBox3d
+ EgtGetBBoxGlob(nId, BBFLAG, b3Ent)
' Metto il numero nel centro
- Dim dRadXY = Point3d.DistXY(ptMin, ptMax)
+ Dim dRadXY = Point3d.DistXY(b3Ent.Min(), b3Ent.Max())
Dim dHtxt As Double = 50
Dim dRat As Double = 0.75
If dRadXY < 200 Then
@@ -940,18 +902,18 @@ Public Class NestPageUC
dHtxt = 25
dRat = 0.5
End If
- ' determino la posizione del flag
- MidPoint.x += vVers.x * dHtxt / 2
- MidPoint.y += vVers.y * dHtxt / 2
-
- Return EgtCreateTextAdv(nIdLayer, MidPoint, 0, sText, "", 300, False, dHtxt, dRat, 0, INS_POS.MC, GDB_RT.GLOB)
+ ' Determino la posizione
+ MidPoint.x += dHtxt / 2 * vVers.x
+ MidPoint.y += dHtxt / 2 * vVers.y
+ ' Creo il testo
+ Return EgtCreateTextAdv(nLayerId, MidPoint, 0, sText, "", 300, False, dHtxt, dRat, 0, INS_POS.MC, GDB_RT.GLOB)
End Function
- Private Sub EraseFlagOnGraphic(nIdMy As Integer, IdParentPart As Integer)
- ' cerco se esiste già un layer nominato "AUX_SPLIT_WJ", altrimenti lo creo
- Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(IdParentPart, INFO_AUX_SPLIT_WJ)
- If IdAuxLayer = GDB_ID.NULL Then Return
- Dim nIdTextFlag As Integer = EgtGetFirstNameInGroup(IdAuxLayer, "RefSide_" & nIdMy.ToString)
+ Private Sub EraseFlagOnGraphic(nMyId As Integer, nPartId As Integer)
+ ' cerco se esiste già un layer nominato "AUX_SPLIT_WJ"
+ Dim nAuxLayerId As Integer = EgtGetFirstNameInGroup(nPartId, LAY_AUX_SPLIT_WJ)
+ If nAuxLayerId = GDB_ID.NULL Then Return
+ Dim nIdTextFlag As Integer = EgtGetFirstNameInGroup(nAuxLayerId, "RefSide_" & nMyId.ToString)
EgtErase(nIdTextFlag)
End Sub
@@ -1224,6 +1186,7 @@ Public Class NestPageUC
m_bKeyLeftShiftPressed = m_bVerify
m_vtTotMove = Vector3d.NULL()
End Sub
+
Private Sub OnMyMouseMoveScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseMoveScene
' Verifico di essere il gestore attivo
If Not m_bActive Then Return
@@ -2730,8 +2693,8 @@ Public Class NestPageUC
DragRectangleBtn.IsChecked = False
m_bIsCheckedDragRectangle = False
StartCurveWJBtn.IsChecked = False
- ResetStartCurvWJParam()
m_bIsCheckedStartCurveWJ = False
+ ResetStartCurvWJParam()
Else
m_bIsCheckedSplitCurveWJ = False
' resetto i parametri di selezione dei lati
diff --git a/CadCuts/SplitAuto.vb b/CadCuts/SplitAuto.vb
index 8bd6c68..c7ecabf 100644
--- a/CadCuts/SplitAuto.vb
+++ b/CadCuts/SplitAuto.vb
@@ -289,6 +289,12 @@ Public Module SplitAuto
colCut = COL_MCH_ONCUT()
ElseIf bDrip Then
colCut = COL_MCH_DRIPCUT()
+ ElseIf nOperType = MCH_OY.WATERJETTING Then
+ If Math.Abs(dSideAng) > EPS_ANG_SMALL then
+ colCut = COL_MCH_WJ_ANG()
+ Else
+ colCut = COL_MCH_WJ()
+ End If
ElseIf nOperType = MCH_OY.SAWING AndAlso bSawTc Then
Dim sSawing As String = String.Empty, sSaw As String = String.Empty
m_MainWindow.m_CadCutPageUC.m_SplitPage.GetMachiningAndTool(nOperId, sSawing, sSaw)
diff --git a/Constants/ConstGen.vb b/Constants/ConstGen.vb
index 559241f..60a3608 100644
--- a/Constants/ConstGen.vb
+++ b/Constants/ConstGen.vb
@@ -319,12 +319,12 @@ Module ConstGen
Public Const INFO_PARTROT As String = "ROT"
' Info in entità in OutLoop per indicare se è separata WaterJet
Public Const INFO_JOINENTITY As String = "JoinEntity"
- ' Nome layer per "*" inidcanti un lato separato nel taglio WaterJet
- Public Const INFO_AUX_SPLIT_WJ As String = "AUX_SPLIT_WJ"
- ' Info in OutLoop per punto inzio lavorazione WaterJet
+ ' Nome layer per "*" indicanti un lato separato nel taglio WaterJet
+ Public Const LAY_AUX_SPLIT_WJ As String = "AUX_SPLIT_WJ"
+ ' Info in OutLoop per punto inizio lavorazione WaterJet
Public Const INFO_START As String = "Start"
' Nome dei tagli diretti inseriti in fase di Splitting
- Public Const SPLIT_CUT As String = "SplitCut"
+ Public Const NAME_SPLIT_CUT As String = "SplitCut"
' Forzo specifica lavorazione
Public Const DEF_MACHINING As String = "Def_Machining"
' Forzo specifica lavorazione solo per tagli con inclinazione
@@ -406,6 +406,12 @@ Module ConstGen
Public Function COL_MCH_ONFREE() As Color3d
Return New Color3d(192, 128, 0)
End Function
+ Public Function COL_MCH_WJ() As Color3d
+ Return New Color3d(0, 128, 128)
+ End Function
+ Public Function COL_MCH_WJ_ANG() As Color3d
+ Return New Color3d(255, 0, 255)
+ End Function
Public Function COL_MCH_DRIPCUT() As Color3d
Return New Color3d(255, 0, 165)
End Function
diff --git a/Constants/ConstMachIni.vb b/Constants/ConstMachIni.vb
index 7b17911..a75488a 100644
--- a/Constants/ConstMachIni.vb
+++ b/Constants/ConstMachIni.vb
@@ -262,6 +262,8 @@
Public Const K_MACH_STARTCENERTOOLPATH As String = "StartCenterToolPath"
Public Const K_MACH_ENGRAVING_DEPTH As String = "EngravingDepth"
Public Const K_MACH_ENGRAVING_WIDTH As String = "EngravingWidth"
+ Public Const K_MACH_WATERJET_OPTIMIZE As String = "WjOptimize"
+ Public Const K_MACH_WATERJET_ON_SINKS As String = "WjOnSinks"
Public Const K_MACH_NEST_ALIGNED As String = "Aligned"
Public Const K_MACH_NEST_GHIGLIOTTINA As String = "Guillotine"
Public Const K_MACH_WASHING As String = "Washing"
diff --git a/DrawImport/SideAngleUc.xaml.vb b/DrawImport/SideAngleUc.xaml.vb
index 66e6854..f6a5c33 100644
--- a/DrawImport/SideAngleUc.xaml.vb
+++ b/DrawImport/SideAngleUc.xaml.vb
@@ -949,7 +949,7 @@ Public Class SideAngleUC
End If
End Sub
- ' nuova funzione per gestire l'accorcaimento dei segmenti
+ ' nuova funzione per gestire l'accorciamento dei segmenti
Friend Sub CreateDripGeom(nPartId As Integer)
' Recupero Id layer di contorno esterno
Dim nOutLoopId = EgtGetFirstNameInGroup(nPartId, NAME_OUTLOOP)
@@ -1146,7 +1146,7 @@ Public Class SideAngleUC
EgtStartVector(nCrvId, vtAux)
Dim vtExtrusion As Vector3d
EgtCurveExtrusion(nCrvId, vtExtrusion)
- ' ruoto il vetottore nella nuova direzione
+ ' ruoto il vettore 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)
diff --git a/Machine/Alarms2PageUC.xaml b/Machine/Alarms2PageUC.xaml
index 1b63416..24dee6e 100644
--- a/Machine/Alarms2PageUC.xaml
+++ b/Machine/Alarms2PageUC.xaml
@@ -16,9 +16,9 @@
-
-
+
+
@@ -112,6 +112,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Machine/Alarms2PageUC.xaml.vb b/Machine/Alarms2PageUC.xaml.vb
index e0f3b57..a9aeb1c 100644
--- a/Machine/Alarms2PageUC.xaml.vb
+++ b/Machine/Alarms2PageUC.xaml.vb
@@ -16,6 +16,7 @@ Public Class Alarms2PageUC
SawGpBx.Header = EgtMsg(90925) ' Parametri lama
HolesGpBx.Header = EgtMsg(90917) ' Parametri fori
+ WjsParamGpBx.Header = EgtMsg(91058) ' Parametri waterjet
MillingsParamGpBx.Header = EgtMsg(90929) ' Parametri fresature
HolesOffsetTxBl.Text = EgtMsg(90909) ' Offset fori
@@ -27,15 +28,17 @@ Public Class Alarms2PageUC
ExtArcMinRadTxBl.Text = EgtMsg(90918) ' Rmin archi est.
IntArcMaxSideAngTxBl.Text = EgtMsg(90924) ' Amax archi int.
PreCutExitTxBl.Text = EgtMsg(91065) ' PreTaglio uscite
+ WjOptimizeTxBl.Text = EgtMsg(91043) ' Ottimizza
+ WjIntCutsTxBl.Text = EgtMsg(90930) ' Sempre sugli interni
CornerCutsTxBl.Text = EgtMsg(90944) ' Sempre sugli angoli
InternalCutsTxBl.Text = EgtMsg(90930) ' Sempre sugli interni
ShortTxBl.Text = EgtMsg(90949) ' Accorciamento
End Sub
- Private Sub Allarm2Page_Loaded() Handles Me.Loaded
+ Private Sub Alarms2Page_Loaded() Handles Me.Loaded
If m_bFirst Then
- ' in assenza della testa per lama (H1) nascondo i parametri lama
- If Not m_CurrentMachine.ExistsSawHead() Then
+ ' Se non previsti tagli di lama, nascondo i relativi parametri
+ If Not m_CurrentMachine.bSawing Then
SawGpBx.Visibility = Visibility.Hidden
End If
@@ -45,21 +48,30 @@ Public Class Alarms2PageUC
' Disattivo il gruppo dei parametri fori
HolesGpBx.Visibility = Windows.Visibility.Hidden
Case CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL
- 'Non faccio alcunchè
+ ' Non faccio alcunchè
Case CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGERWITHSAW
- 'Da implementare
+ ' Da implementare
End Select
- ' Se non previste forature, disabilito relativo box
+ ' Se non previste forature, nascondo relativo box
If Not m_CurrentMachine.bDrilling Then
HolesGpBx.Visibility = Visibility.Hidden
End If
- ' Se non previste fresature, disabilito relativo box e uso fresa con incisione
+ ' Se non previste fresature, nascondo relativo box e uso fresa con incisione
If Not m_CurrentMachine.bMilling Then
MillingsParamGpBx.Visibility = Visibility.Hidden
End If
+ ' Se non previsto taglio ad acqua (waterjet), nascondo relativo box
+ If Not m_CurrentMachine.bWaterJet Then
+ WjsParamGpBx.Visibility = Visibility.Hidden
+ ' se altrimenti non c'è lama, nascondo il check e lo considero sempre vero
+ ElseIf Not m_CurrentMachine.bSawing Then
+ WjIntCutsTxBl.Visibility = Visibility.Hidden
+ WjIntCutsChBx.Visibility = Visibility.Hidden
+ End If
+
m_bFirst = False
End If
@@ -112,6 +124,10 @@ Public Class Alarms2PageUC
' Leggo accorciamento angoli con fresa
dVal = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_MILLING_SHORTENING, 0, m_MainWindow.GetMachIniFile())
ShortTxBx.Text = LenToString(dVal, 2)
+ ' Leggo ottimizzazione lavorazione waterjet
+ WjOptimizeChBx.IsChecked = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_WATERJET_OPTIMIZE, 0, m_MainWindow.GetMachIniFile()) <> 0)
+ ' Leggo lavorazione interni con waterjet
+ WjIntCutsChBx.IsChecked = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_WATERJET_ON_SINKS, 0, m_MainWindow.GetMachIniFile()) <> 0)
End Sub
Private Sub CutExtraLenTxBx_EgtClosed(sender As Object, e As EventArgs) Handles CutExtraLenTxBx.EgtClosed
@@ -183,19 +199,13 @@ Public Class Alarms2PageUC
End Sub
Private Sub OneHoleInCornerChBx_Click(sender As Object, e As RoutedEventArgs) Handles OneHoleInCornerChBx.Click
- If OneHoleInCornerChBx.IsChecked() Then
- WritePrivateProfileString(S_MACH_NEST, K_MACH_ONEHOLE_INTCORNER, "1", m_MainWindow.GetMachIniFile())
- Else
- WritePrivateProfileString(S_MACH_NEST, K_MACH_ONEHOLE_INTCORNER, "0", m_MainWindow.GetMachIniFile())
- End If
+ Dim sVal As String = If( OneHoleInCornerChBx.IsChecked(), "1", "0")
+ WritePrivateProfileString(S_MACH_NEST, K_MACH_ONEHOLE_INTCORNER, sVal, m_MainWindow.GetMachIniFile())
End Sub
Private Sub CornerCutsChBx_Click(sender As Object, e As RoutedEventArgs) Handles CornerCutsChBx.Click
- If CornerCutsChBx.IsChecked() Then
- WritePrivateProfileString(S_MACH_NEST, K_MACH_MILLING_ON_CORNERS, "1", m_MainWindow.GetMachIniFile())
- Else
- WritePrivateProfileString(S_MACH_NEST, K_MACH_MILLING_ON_CORNERS, "0", m_MainWindow.GetMachIniFile())
- End If
+ Dim sVal As String = If( CornerCutsChBx.IsChecked(), "1", "0")
+ WritePrivateProfileString(S_MACH_NEST, K_MACH_MILLING_ON_CORNERS, sVal, m_MainWindow.GetMachIniFile())
End Sub
Private Sub ShortTxBx_EgtClosed(sender As Object, e As EventArgs) Handles ShortTxBx.EgtClosed
@@ -205,11 +215,18 @@ Public Class Alarms2PageUC
End Sub
Private Sub InternalCutsChBx_Click(sender As Object, e As RoutedEventArgs) Handles InternalCutsChBx.Click
- If InternalCutsChBx.IsChecked() Then
- WritePrivateProfileString(S_MACH_NEST, K_MACH_MILLING_ON_SINKS, "1", m_MainWindow.GetMachIniFile())
- Else
- WritePrivateProfileString(S_MACH_NEST, K_MACH_MILLING_ON_SINKS, "0", m_MainWindow.GetMachIniFile())
- End If
+ Dim sVal As String = If( InternalCutsChBx.IsChecked(), "1", "0")
+ WritePrivateProfileString(S_MACH_NEST, K_MACH_MILLING_ON_SINKS, sVal, m_MainWindow.GetMachIniFile())
+ End Sub
+
+ Private Sub WjOptimizeChBx_Click(sender As Object, e As RoutedEventArgs) Handles WjOptimizeChBx.Click
+ Dim sVal As String = If( WjOptimizeChBx.IsChecked(), "1", "0")
+ WritePrivateProfileString(S_MACH_NEST, K_MACH_WATERJET_OPTIMIZE, sVal, m_MainWindow.GetMachIniFile())
+ End Sub
+
+ Private Sub WjIntCutsChBx_Click(sender As Object, e As RoutedEventArgs) Handles WjIntCutsChBx.Click
+ Dim sVal As String = If( WjIntCutsChBx.IsChecked(), "1", "0")
+ WritePrivateProfileString(S_MACH_NEST, K_MACH_WATERJET_ON_SINKS, sVal, m_MainWindow.GetMachIniFile())
End Sub
End Class
diff --git a/Machine/AlarmsPageUC.xaml b/Machine/AlarmsPageUC.xaml
index 039c94e..f2b5e1c 100644
--- a/Machine/AlarmsPageUC.xaml
+++ b/Machine/AlarmsPageUC.xaml
@@ -193,27 +193,27 @@
-
-
-
-
-
-
+
-
-