OmagCUT 2.2e1 :

- modifiche e correzioni per gestione tagli su angoli.
This commit is contained in:
Dario Sassi
2020-05-07 06:59:22 +00:00
parent 174e6fd47c
commit cf243f1a69
5 changed files with 71 additions and 18 deletions
+1
View File
@@ -37,6 +37,7 @@
</Grid.ColumnDefinitions>
<Button Name="OkBtn" Grid.Column="1"
IsDefault="True"
Style="{DynamicResource OmagCut_GradientBlueIconButton}">
<Image Source="{DynamicResource VImg}" Style="{StaticResource OmagCut_ButtonIcon}"/>
</Button>
+28 -12
View File
@@ -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
+28 -4
View File
@@ -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)
+12
View File
@@ -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)
+2 -2
View File
@@ -62,5 +62,5 @@ Imports System.Windows
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("2.2.4.5")>
<Assembly: AssemblyFileVersion("2.2.4.5")>
<Assembly: AssemblyVersion("2.2.5.1")>
<Assembly: AssemblyFileVersion("2.2.5.1")>