From cf243f1a690aa97be3247f159ea5e2dbafb7f34d Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 7 May 2020 06:59:22 +0000 Subject: [PATCH] OmagCUT 2.2e1 : - modifiche e correzioni per gestione tagli su angoli. --- CadCuts/EditValueWD.xaml | 1 + CadCuts/SplitAuto.vb | 40 ++++++++++++++++++++++++++----------- CadCuts/SplitPageUC.xaml.vb | 32 +++++++++++++++++++++++++---- Constants/ConstGen.vb | 12 +++++++++++ My Project/AssemblyInfo.vb | 4 ++-- 5 files changed, 71 insertions(+), 18 deletions(-) diff --git a/CadCuts/EditValueWD.xaml b/CadCuts/EditValueWD.xaml index bfdd927..51e9495 100644 --- a/CadCuts/EditValueWD.xaml +++ b/CadCuts/EditValueWD.xaml @@ -37,6 +37,7 @@ diff --git a/CadCuts/SplitAuto.vb b/CadCuts/SplitAuto.vb index 9186084..1394230 100644 --- a/CadCuts/SplitAuto.vb +++ b/CadCuts/SplitAuto.vb @@ -22,6 +22,11 @@ Public Module SplitAuto Public m_bEnabled As Boolean Public m_bPause As Boolean Public m_bInvert As Boolean + Public m_bIsLine As Boolean + Public m_dPrevAng As Double + Public m_dNextAng As Double + Public m_dStartFreeLen As Double + Public m_dEndFreeLen As Double End Class '----------------------------------------------------------------------------------------------- @@ -67,6 +72,8 @@ Public Module SplitAuto End If ' la imposto come lavorazione corrente EgtSetCurrMachining(nOperId) + ' inversione + EgtGetMachiningParam(MCH_MP.INVERT, Mach.m_bInvert) ' recupero l'angolo di fianco EgtGetMachiningParam(MCH_MP.SIDEANGLE, Mach.m_dSideAng) ' recupero allungamento iniziale e finale (negativi vicino ad angoli interni) @@ -74,17 +81,28 @@ Public Module SplitAuto EgtGetMachiningParam(MCH_MP.STARTADDLEN, dStartAddLen) Dim dEndAddLen As Double = -10 EgtGetMachiningParam(MCH_MP.ENDADDLEN, dEndAddLen) + ' recupero tipo entità, ancolo con entità precedente e successiva, lunghezze libere iniziale e finale + Mach.m_bIsLine = True + Mach.m_dPrevAng = 0 + Mach.m_dNextAng = 0 + Mach.m_dStartFreeLen = FREELEN_INF + 1 + Mach.m_dEndFreeLen = FREELEN_INF + 1 + Dim nEntId, nSub As Integer + 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 + EgtGetInfo( nEntId, If( Not Mach.m_bInvert, INFO_PREVANG, INFO_NEXTANG), Mach.m_dPrevAng) + 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) + End If ' verifico se trasformabile in un taglio di separazione (almeno da un lato) - 'If Math.Abs(Mach.m_dSideAng) < EPS_ANG_SMALL And - If True And - (dStartAddLen > -EPS_SMALL Or dEndAddLen > -EPS_SMALL) And + If (dStartAddLen > -EPS_SMALL Or dEndAddLen > -EPS_SMALL) And Mach.m_sLay = NAME_OUTLOOP And Mach.m_nInterf = FMI_TYPE.NONE Then Dim nRes As Integer = EgtVerifyCutAsSplitting(nOperId) - Mach.m_bCanStartAll = (dStartAddLen > -EPS_SMALL And (nRes And CAR_RES.LI_OK) <> 0) - Mach.m_bCanEndAll = (dEndAddLen > -EPS_SMALL And (nRes And CAR_RES.LO_OK) <> 0) - Else - Mach.m_bCanStartAll = False - Mach.m_bCanEndAll = False + Mach.m_bCanStartAll = (dStartAddLen > -EPS_SMALL And (nRes And CAR_RES.LI_OK) <> 0) And + Mach.m_dStartFreeLen > FREELEN_INF And Mach.m_bIsLine + Mach.m_bCanEndAll = (dEndAddLen > -EPS_SMALL And (nRes And CAR_RES.LO_OK) <> 0) And + Mach.m_dEndFreeLen > FREELEN_INF And Mach.m_bIsLine End If ' se trasformabile in taglio di separazione, verifico se lo è If Mach.m_bCanStartAll Or Mach.m_bCanEndAll Then @@ -121,8 +139,6 @@ Public Module SplitAuto Mach.m_bEnabled = Not EgtExistsInfo(nOperId, INFO_MCH_USER_OFF) ' pausa Mach.m_bPause = GetPause(nOperId) - ' inversione - EgtGetMachiningParam(MCH_MP.INVERT, Mach.m_bInvert) ' inserisco in lista MachSplitList.Add(Mach) ' altrimenti la disattivo @@ -557,7 +573,7 @@ Public Module SplitAuto If EgtGetGroupObjs(nPv2Id) = 0 Then EgtGetInfo(nPv2Id, INFO_PV_ONPART_ID, nPv2Id) Dim nRLiCut2Id As Integer = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(nPv2Id), NAME_PV_RLICUT) ' Verifico se questa regione interferisce con quella del taglio di riferimento - If EgtSurfFrChunkSimpleClassify(nRCutId, 0, nRLiCut2Id, 0) <> REGC.OUT Then Return True + If EgtSurfFrChunkSimpleClassify(nRCutId, 0, nRLiCut2Id, 0, 20 * EPS_SMALL) <> REGC.OUT Then Return True End If ' Se il secondo ha l'uscita che interferisce If (nInterf2 And FMI_TYPE.LO) <> 0 Then @@ -566,7 +582,7 @@ Public Module SplitAuto If EgtGetGroupObjs(nPv2Id) = 0 Then EgtGetInfo(nPv2Id, INFO_PV_ONPART_ID, nPv2Id) Dim nRLoCut2Id As Integer = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(nPv2Id), NAME_PV_RLOCUT) ' Verifico se questa regione interferisce con quella del taglio di riferimento - If EgtSurfFrChunkSimpleClassify(nRCutId, 0, nRLoCut2Id, 0) <> REGC.OUT Then Return True + If EgtSurfFrChunkSimpleClassify(nRCutId, 0, nRLoCut2Id, 0, 20 * EPS_SMALL) <> REGC.OUT Then Return True End If Return False End Function diff --git a/CadCuts/SplitPageUC.xaml.vb b/CadCuts/SplitPageUC.xaml.vb index 9853dd4..7e20447 100644 --- a/CadCuts/SplitPageUC.xaml.vb +++ b/CadCuts/SplitPageUC.xaml.vb @@ -713,15 +713,27 @@ Public Class SplitPageUC Dim nOperId As Integer = m_MachiningList(nI).m_nId Dim nMachiningType As Integer = EgtGetOperationType(nOperId) ' Se taglio con lama - If nMachiningType = MCH_MY.SAWING Then + If nMachiningType = MCH_MY.SAWING And + ( m_MachiningList(nI).m_bIsLine Or m_MachiningList(nI).m_dPrevAng > FL_ARC_ANG_MIN) Then Dim dOrigUsal As Double = 0 EgtGetInfo(nOperId, INFO_MCH_USER_SAL, dOrigUsal) ' Dialogo richiesta valore Dim ValWnd As New EditValueWD(m_MainWindow, EgtMsg(MSG_SPLITPAGEUC + 35)) ' Allungamento ValWnd.SetVal(dOrigUsal) If Not ValWnd.ShowDialog() Then Return - ' Modifica della lavorazione Dim dUsal As Double = ValWnd.GetVal() + ' Se c'è limite alla lunghezza libera + If m_MachiningList(nI).m_dStartFreeLen < FREELEN_INF Then + ' Recupero sicurezza in corner interno + Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, m_MainWindow.GetMachIniFile()), 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 + ' Modifica della lavorazione EgtSetCurrMachining(nOperId) Dim dAddLen As Double = 0 EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen) @@ -788,15 +800,27 @@ Public Class SplitPageUC Dim nOperId As Integer = m_MachiningList( nI).m_nId Dim nMachiningType As Integer = EgtGetOperationType( nOperId) ' Se taglio con lama - If nMachiningType = MCH_MY.SAWING Then + If nMachiningType = MCH_MY.SAWING And + ( m_MachiningList( nI).m_bIsLine Or m_MachiningList( nI).m_dNextAng > FL_ARC_ANG_MIN) Then Dim dOrigUeal As Double = 0 EgtGetInfo(nOperId, INFO_MCH_USER_EAL, dOrigUeal) ' Dialogo richiesta valore Dim ValWnd As New EditValueWD( m_MainWindow, EgtMsg(MSG_SPLITPAGEUC + 35)) ' Allungamento ValWnd.SetVal(dOrigUeal) If Not ValWnd.ShowDialog() Then Return - ' Modifica della lavorazione Dim dUeal As Double = ValWnd.GetVal() + ' Se c'è limite alla lunghezza libera + If m_MachiningList(nI).m_dEndFreeLen < FREELEN_INF Then + ' Recupero sicurezza in corner interno + Dim dCornerSafety As Double = Math.Max(GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, m_MainWindow.GetMachIniFile()), 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 + ' Modifica della lavorazione EgtSetCurrMachining( nOperId) Dim dAddLen As Double = 0 EgtGetMachiningParam( MCH_MP.ENDADDLEN, dAddLen) diff --git a/Constants/ConstGen.vb b/Constants/ConstGen.vb index 379ac97..0db26db 100644 --- a/Constants/ConstGen.vb +++ b/Constants/ConstGen.vb @@ -202,6 +202,15 @@ Module ConstGen Public Const INFO_DIR As String = "Dir" ' Info in entità da tagliare per abilitare possibilità di inversione Public Const INFO_ENABLE_INVERT As String = "EnInv" + ' Info in entità da tagliare per angolo con entità precedente e successiva + Public Const INFO_PREVANG As String = "PrevAng" + Public Const INFO_NEXTANG As String = "NextAng" + ' Info in entità da tagliare per lunghezza libera prima dell'inizio + Public Const INFO_START_FREELEN As String = "SFL" + ' Info in entità da tagliare per lunghezza libera dopo la fine + Public Const INFO_END_FREELEN As String = "EFL" + ' Angolo esterno minimo per calcolare la direzione libera sull'arco + Public Const FL_ARC_ANG_MIN As Double = 30 ' Info in preview lavorazione con identificativo layer preview spostato nel pezzo Public Const INFO_PV_ONPART_ID As String = "PvId" ' Info in lavorazione con identificativo lavorazioni inglobate @@ -294,6 +303,9 @@ Module ConstGen ' Costante per flag di BBox Public Const BBFLAG As Integer = GDB_BB.ONLY_VISIBLE + GDB_BB.IGNORE_TEXT + GDB_BB.IGNORE_DIM + ' Lunghezza libera infinita + Public Const FREELEN_INF = 9999 + ' Colori per lavorazioni Public Function COL_MCH_CUT() As Color3d Return New Color3d(0, 255, 0) diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index 9be7f38..4f0f1fb 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -62,5 +62,5 @@ Imports System.Windows ' by using the '*' as shown below: ' - - + +