OmagCUT 2.2e1 :
- modifiche e correzioni per gestione tagli su angoli.
This commit is contained in:
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")>
|
||||
|
||||
Reference in New Issue
Block a user