2d39dcacc3
- modifiche per escludere spessore sovratavola da scalatura foto fatte con CameraMng - all'esportazione verso la macchina le foto vengono rese non più scalabili per lo spessore pezzo (come gli scan) - corretta scrittura dati in interfaccia per problema decimali che falsano la posizione del cursore.
2428 lines
93 KiB
VB.net
2428 lines
93 KiB
VB.net
Imports System.IO
|
|
Imports System.Collections.ObjectModel
|
|
Imports EgtWPFLib5
|
|
Imports EgtPHOTOLib
|
|
Imports EgtUILib
|
|
|
|
Public Class RawPartTabVM
|
|
Inherits VMBase
|
|
|
|
Friend OmagPhoto As OmagPhotoV
|
|
|
|
Private m_OmagPhotoVM As OmagPhotoVM
|
|
|
|
Private m_bSlabIsSelectedFromDB As Boolean = False
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
' Colori standard
|
|
Private m_RawCol As New Color3d(64, 192, 255, 40)
|
|
Private m_KerfCol As New Color3d(255, 0, 0, 100)
|
|
' Dati tavola
|
|
Private m_ptTableMin As Point3d
|
|
Private m_dTableLength As Double = 0
|
|
Private m_dTableWidth As Double = 0
|
|
' Dati per Drag
|
|
Private m_bDrag As Boolean = False
|
|
Private m_ptPrev As Point3d
|
|
Private m_nDragEnt As Integer = -1
|
|
Private m_dDragPar As Double = 0
|
|
' Modalità operazione su punti grezzo
|
|
Private m_nPtMode As PTMODE = PTMODE.MOVE
|
|
' Modalità operazione su punti aree danneggiate
|
|
Private m_nPtDmgMode As DMGMODE = DMGMODE.NONE
|
|
' Variabile che indica la zona danneggiata selezionata
|
|
Private m_nSelDmg As Integer
|
|
' Layer per crocette temporanee
|
|
Private m_nTempLay As Integer = GDB_ID.NULL
|
|
|
|
' Costante minima dimensione del grezzo
|
|
Private Const MIN_RAW_DIM As Double = 10
|
|
' Costante distanza di sicurezza del grezzo dal bordo
|
|
Private Const SAFE_RAW_DIST As Double = 5
|
|
' Costante raggio cerchietto
|
|
Private Const RAD_CIRCLE As Double = 30
|
|
' Stati dialogo tipo contorno
|
|
Enum Type As Integer
|
|
RECTANGLE = 0
|
|
BY_POINTS = 1
|
|
FROM_PHOTO = 2
|
|
End Enum
|
|
' Costanti modalità di creazione grezzo
|
|
Private Enum RAWMODE As Integer
|
|
RECTANGLE = 0
|
|
BY_POINTS = 1
|
|
FROM_PHOTO = 2
|
|
DAMAGED = 3
|
|
End Enum
|
|
' Costanti modo operazione punti
|
|
Private Enum PTMODE
|
|
MOVE = 0
|
|
ADD = 1
|
|
REMOVE = 2
|
|
End Enum
|
|
' Costanti modo operazione zone danneggiate
|
|
Private Enum DMGMODE
|
|
NONE = 0
|
|
ADD = 1
|
|
REMOVE = 2
|
|
End Enum
|
|
|
|
Private m_SlabIdVisibility As Visibility
|
|
Public Property SlabIdVisibility As Visibility
|
|
Get
|
|
Return m_SlabIdVisibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
If value <> m_SlabIdVisibility Then
|
|
m_SlabIdVisibility = value
|
|
NotifyPropertyChanged("SlabIdVisibility")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_SlabIdIsEnabled As Boolean
|
|
Public Property SlabIdIsEnabled As Boolean
|
|
Get
|
|
Return m_SlabIdIsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_SlabIdIsEnabled Then
|
|
m_SlabIdIsEnabled = value
|
|
NotifyPropertyChanged("SlabIdIsEnabled")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_PhotoWithMouse As Boolean
|
|
Public Property PhotoWithMouse As Boolean
|
|
Get
|
|
Return m_PhotoWithMouse
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_PhotoWithMouse = value
|
|
NotifyPropertyChanged("PhotoWithMouse")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_dPhotoOffsetX As Double
|
|
Public Property PhotoOffsetX As String
|
|
Get
|
|
Return LenToString(m_dPhotoOffsetX, 2)
|
|
End Get
|
|
Set(value As String)
|
|
Dim dVal As Double = 0
|
|
If StringToLen(value, dVal) Then
|
|
ModifyPhoto(New Vector3d(dVal - m_dPhotoOffsetX, 0, 0))
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetPhotoOffsetX(value As Double)
|
|
m_dPhotoOffsetX = value
|
|
NotifyPropertyChanged("PhotoOffsetX")
|
|
End Sub
|
|
|
|
Private m_dPhotoOffsetY As Double
|
|
Public Property PhotoOffsetY As String
|
|
Get
|
|
Return LenToString(m_dPhotoOffsetY, 2)
|
|
End Get
|
|
Set(value As String)
|
|
Dim dVal As Double = 0
|
|
If StringToLen(value, dVal) Then
|
|
ModifyPhoto(New Vector3d(0, dVal - m_dPhotoOffsetY, 0))
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetPhotoOffsetY(value As Double)
|
|
m_dPhotoOffsetY = value
|
|
NotifyPropertyChanged("PhotoOffsetY")
|
|
End Sub
|
|
|
|
Private m_dPhotoRot As Double
|
|
Public Property PhotoRot As String
|
|
Get
|
|
Return LenToString(m_dPhotoRot, 2)
|
|
End Get
|
|
Set(value As String)
|
|
Dim dVal As Double = 0
|
|
If StringToDouble(value, dVal) Then
|
|
ModifyPhoto(dVal - m_dPhotoRot)
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetPhotoRot(value As Double)
|
|
m_dPhotoRot = value
|
|
NotifyPropertyChanged("PhotoRot")
|
|
End Sub
|
|
|
|
Private m_OutlineIsChecked As Boolean
|
|
Public Property OutlineIsChecked As Boolean
|
|
Get
|
|
Return m_OutlineIsChecked
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_OutlineIsChecked Then
|
|
m_OutlineIsChecked = value
|
|
RawModeView()
|
|
If m_OutlineIsChecked Then
|
|
UpdateCircles()
|
|
Else
|
|
m_SelType = Type.BY_POINTS
|
|
NotifyPropertyChanged("SelType")
|
|
RemoveCircles()
|
|
End If
|
|
EgtDraw()
|
|
NotifyPropertyChanged("OutlineIsChecked")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_TypeList As New List(Of String)
|
|
Public ReadOnly Property TypeList As List(Of String)
|
|
Get
|
|
Return m_TypeList
|
|
End Get
|
|
End Property
|
|
|
|
Private m_SelType As Integer
|
|
Public Property SelType As Integer
|
|
Get
|
|
Return m_SelType
|
|
End Get
|
|
Set(value As Integer)
|
|
m_SelType = value
|
|
Select Case m_SelType
|
|
Case Type.RECTANGLE
|
|
RawModeView()
|
|
RemoveCircles()
|
|
RecalcRawPart()
|
|
Case Type.BY_POINTS
|
|
RawModeView()
|
|
UpdateCircles()
|
|
EgtDraw()
|
|
Case Type.FROM_PHOTO
|
|
RawModeView()
|
|
RemoveCircles()
|
|
CreateRawFromPhotoContour()
|
|
EgtDraw()
|
|
End Select
|
|
End Set
|
|
End Property
|
|
|
|
Private m_TypeIsEnabled As Boolean
|
|
Public Property TypeIsEnabled As Boolean
|
|
Get
|
|
Return m_TypeIsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_TypeIsEnabled Then
|
|
m_TypeIsEnabled = value
|
|
NotifyPropertyChanged("TypeIsEnabled")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_dLength As Double
|
|
Public Property Length As String
|
|
Get
|
|
If m_InvertKerf < 0 Then
|
|
Return LenToString(m_dLength + 2 * m_dKerf, 2)
|
|
Else
|
|
Return LenToString(m_dLength, 2)
|
|
End If
|
|
'Return LenToString(m_dLength, 2)
|
|
End Get
|
|
Set(value As String)
|
|
Dim dLength As Double = 0
|
|
Dim dMaxLen As Double = m_dTableLength - m_dOffsetX - m_dKerf * m_InvertKerf
|
|
If Not StringToLen(value, dLength) Then
|
|
Return
|
|
End If
|
|
If dLength > EPS_SMALL And dLength < dMaxLen + EPS_SMALL Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
If m_InvertKerf < 0 Then
|
|
m_dLength = dLength - 2 * m_dKerf
|
|
Else
|
|
m_dLength = dLength
|
|
End If
|
|
RecalcRawPart()
|
|
ElseIf dLength <= EPS_SMALL Then
|
|
NotifyPropertyChanged("Length")
|
|
Else
|
|
NotifyPropertyChanged("Length")
|
|
' Massima lunghezza =
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 16) & " " & LenToString(dMaxLen, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetLength(value As Double)
|
|
m_dLength = value
|
|
NotifyPropertyChanged("Length")
|
|
End Sub
|
|
|
|
Private m_LengthIsEnabled As Boolean
|
|
Public Property LengthIsEnabled As Boolean
|
|
Get
|
|
Return m_LengthIsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_LengthIsEnabled Then
|
|
m_LengthIsEnabled = value
|
|
NotifyPropertyChanged("LengthIsEnabled")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_dWidth As Double
|
|
Public Property Width As String
|
|
Get
|
|
If m_InvertKerf < 0 Then
|
|
Return LenToString(m_dWidth + 2 * m_dKerf, 2)
|
|
Else
|
|
Return LenToString(m_dWidth, 2)
|
|
End If
|
|
End Get
|
|
Set(value As String)
|
|
Dim dWidth As Double = 0
|
|
Dim dMaxWidth As Double = m_dTableWidth - m_dOffsetY - m_dKerf * m_InvertKerf
|
|
If Not StringToLen(value, dWidth) Then
|
|
Return
|
|
End If
|
|
If dWidth > EPS_SMALL And dWidth < dMaxWidth + EPS_SMALL Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
If m_InvertKerf < 0 Then
|
|
m_dWidth = dWidth - 2 * m_dKerf
|
|
Else
|
|
m_dWidth = dWidth
|
|
End If
|
|
RecalcRawPart()
|
|
ElseIf dWidth <= EPS_SMALL Then
|
|
NotifyPropertyChanged("Width")
|
|
Else
|
|
NotifyPropertyChanged("Width")
|
|
' Massima larghezza =
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 17) & " " & LenToString(dMaxWidth, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetWidth(value As Double)
|
|
m_dWidth = value
|
|
NotifyPropertyChanged("Width")
|
|
End Sub
|
|
|
|
Private m_WidthIsEnabled As Boolean
|
|
Public Property WidthIsEnabled As Boolean
|
|
Get
|
|
Return m_WidthIsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_WidthIsEnabled Then
|
|
m_WidthIsEnabled = value
|
|
NotifyPropertyChanged("WidthIsEnabled")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_dHeight As Double
|
|
Public Property Height As String
|
|
Get
|
|
Return LenToString(m_dHeight, 2)
|
|
End Get
|
|
Set(value As String)
|
|
Dim dHeight As Double = 0
|
|
If StringToLen(value, dHeight) And dHeight > -EPS_ZERO Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
m_dHeight = dHeight
|
|
UpdateRawPartHeight()
|
|
UpdateTabState()
|
|
EstCalc.SetSlabHeight(dHeight)
|
|
OmagOFFICEMap.refMachGroupPanelVM.SelectedMachGroup.NotifyPropertyChanged("MachGroupToolTip")
|
|
Else
|
|
' Non sono ammessi spessori negativi
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 18)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
End If
|
|
NotifyPropertyChanged("Height")
|
|
End Set
|
|
End Property
|
|
Private Sub SetHeight(value As Double)
|
|
m_dHeight = value
|
|
NotifyPropertyChanged("Height")
|
|
End Sub
|
|
|
|
Private m_HeightIsEnabled As Boolean
|
|
Public Property HeightIsEnabled As Boolean
|
|
Get
|
|
Return m_HeightIsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_HeightIsEnabled Then
|
|
m_HeightIsEnabled = value
|
|
NotifyPropertyChanged("HeightIsEnabled")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_dOffsetX As Double
|
|
Public Property OffsetX As String
|
|
Get
|
|
If m_InvertKerf < 0 Then
|
|
Return LenToString(m_dOffsetX - m_dKerf, 2)
|
|
Else
|
|
Return LenToString(m_dOffsetX, 2)
|
|
End If
|
|
End Get
|
|
Set(value As String)
|
|
Dim dOffsetX As Double = 0
|
|
Dim dMinOffsetX As Double = m_dKerf
|
|
Dim dMaxOffsetX As Double = m_dTableLength - m_dLength - m_dKerf
|
|
If Not StringToLen(value, dOffsetX) Then
|
|
Return
|
|
End If
|
|
If m_InvertKerf > 0 And dOffsetX > dMinOffsetX - EPS_SMALL And dOffsetX < dMaxOffsetX + EPS_SMALL Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
m_dOffsetX = dOffsetX
|
|
RecalcRawPart()
|
|
ElseIf m_InvertKerf < 0 And dOffsetX >= 0 And dOffsetX < dMaxOffsetX + m_dKerf Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
m_dOffsetX = dOffsetX + m_dKerf
|
|
RecalcRawPart()
|
|
ElseIf dOffsetX <= dMinOffsetX - EPS_SMALL Then
|
|
NotifyPropertyChanged("OffsetX")
|
|
' Minimo offset X =
|
|
If m_InvertKerf < 0 Then
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 19) & " " & LenToString(0, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
Else
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 19) & " " & LenToString(dMinOffsetX, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
End If
|
|
Else
|
|
NotifyPropertyChanged("OffsetX")
|
|
' Massimo offset X =
|
|
If m_InvertKerf < 0 Then
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 48) & " " & LenToString(dMaxOffsetX + m_dKerf, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
Else
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 48) & " " & LenToString(dMaxOffsetX, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
End If
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetOffsetX(value As Double)
|
|
m_dOffsetX = value
|
|
NotifyPropertyChanged("OffsetX")
|
|
End Sub
|
|
|
|
Private m_OffsetXIsEnabled As Boolean
|
|
Public Property OffsetXIsEnabled As Boolean
|
|
Get
|
|
Return m_OffsetXIsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_OffsetXIsEnabled Then
|
|
m_OffsetXIsEnabled = value
|
|
NotifyPropertyChanged("OffsetXIsEnabled")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_dOffsetY As Double
|
|
Public Property OffsetY As String
|
|
Get
|
|
If m_InvertKerf < 0 Then
|
|
Return LenToString(m_dOffsetY - m_dKerf, 2)
|
|
Else
|
|
Return LenToString(m_dOffsetY, 2)
|
|
End If
|
|
End Get
|
|
Set(value As String)
|
|
Dim dOffsetY As Double = 0
|
|
Dim dMinOffsetY As Double = m_dKerf
|
|
Dim dMaxOffsetY As Double = m_dTableWidth - m_dWidth - m_dKerf
|
|
If Not StringToLen(value, dOffsetY) Then
|
|
Return
|
|
End If
|
|
If m_InvertKerf > 0 And dOffsetY > dMinOffsetY - EPS_SMALL And dOffsetY < dMaxOffsetY + EPS_SMALL Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
m_dOffsetY = dOffsetY
|
|
RecalcRawPart()
|
|
ElseIf m_InvertKerf < 0 And dOffsetY >= 0 And dOffsetY < dMaxOffsetY + m_dKerf Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
m_dOffsetY = dOffsetY + m_dKerf
|
|
RecalcRawPart()
|
|
ElseIf dOffsetY <= dMinOffsetY - EPS_SMALL Then
|
|
NotifyPropertyChanged("OffsetY")
|
|
' Minimo offset Y =
|
|
If m_InvertKerf < 0 Then
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 20) & " " & LenToString(0, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
Else
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 20) & " " & LenToString(dMinOffsetY, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
End If
|
|
Else
|
|
NotifyPropertyChanged("OffsetY")
|
|
' Massimo offset Y =
|
|
If m_InvertKerf < 0 Then
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 49) & " " & LenToString(m_dWidth + m_dKerf, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
Else
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 49) & " " & LenToString(m_dWidth + m_dKerf, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
End If
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetOffsetY(value As Double)
|
|
m_dOffsetY = value
|
|
NotifyPropertyChanged("OffsetY")
|
|
End Sub
|
|
|
|
Private m_OffsetYIsEnabled As Boolean
|
|
Public Property OffsetYIsEnabled As Boolean
|
|
Get
|
|
Return m_OffsetYIsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_OffsetYIsEnabled Then
|
|
m_OffsetYIsEnabled = value
|
|
NotifyPropertyChanged("OffsetYIsEnabled")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_InvertKerf As Double = 1
|
|
Public ReadOnly Property InvertKerf As Double
|
|
Get
|
|
Return m_InvertKerf
|
|
End Get
|
|
End Property
|
|
Public Sub SetInvertKerf(dvalue As Double)
|
|
m_InvertKerf = dvalue
|
|
NotifyPropertyChanged("InvertKerf")
|
|
End Sub
|
|
|
|
Private m_dKerf As Double
|
|
Public Property Kerf As String
|
|
Get
|
|
Return LenToString(m_dKerf * m_InvertKerf, 2)
|
|
End Get
|
|
Set(value As String)
|
|
Dim dKerf As Double = 0
|
|
Dim dMaxKerf As Double = Math.Min(Math.Min(m_dOffsetX, m_dOffsetY),
|
|
Math.Min(m_dTableLength - m_dLength - m_dOffsetX, m_dTableWidth - m_dWidth - m_dOffsetY))
|
|
' carcio di dati della lastra letti da intrfaccia
|
|
Dim dRawLength, dRawWidth, dRawOffsetX, dRawOffsetY As Double
|
|
If Not StringToLen(Length, dRawLength) Then Return
|
|
If Not StringToLen(Width, dRawWidth) Then Return
|
|
If Not StringToLen(OffsetY, dRawOffsetY) Then Return
|
|
If Not StringToLen(OffsetX, dRawOffsetX) Then Return
|
|
Dim dMinKerf = -Math.Min(dRawLength, dRawWidth) / 2
|
|
If Not StringToLen(value, dKerf) Then
|
|
Return
|
|
End If
|
|
If dKerf >= 0 And dKerf < dMaxKerf + EPS_SMALL Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
If GetRawMode() <> RAWMODE.FROM_PHOTO Then
|
|
' Specifico che si tratta di un Kerf negativo (per interfaccia grafica)
|
|
EgtSetInfo(EstCalc.GetRawId(), KEY_INVERT_KERF, 1)
|
|
SetInvertKerf(1)
|
|
' aggiorno il grezzo
|
|
m_dLength = dRawLength
|
|
m_dWidth = dRawWidth
|
|
m_dOffsetX = dRawOffsetX
|
|
m_dOffsetY = dRawOffsetY
|
|
m_dKerf = dKerf
|
|
' RecalcRawPart()
|
|
UpdateRawPartKerf()
|
|
' Recupero id contorno kerf
|
|
Dim nKerfId As Integer = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
' Modifico il colore
|
|
EgtSetColor(nKerfId, New Color3d(255, 0, 0))
|
|
Else
|
|
CreateRawFromPhotoContour()
|
|
End If
|
|
EgtDraw()
|
|
ElseIf dKerf > dMinKerf - EPS_SMALL And dKerf < 0 Then
|
|
If GetRawMode() <> RAWMODE.FROM_PHOTO Then
|
|
' Specifico che si tratta di un Kerf negativo (per interfaccia grafica)
|
|
EgtSetInfo(EstCalc.GetRawId(), KEY_INVERT_KERF, -1)
|
|
SetInvertKerf(-1)
|
|
' aggiorno dati grezzo (partendo dalle dimensioni esterne del grezzo)
|
|
m_dLength = dRawLength + 2 * dKerf
|
|
m_dWidth = dRawWidth + 2 * dKerf
|
|
m_dOffsetX = dRawOffsetX - dKerf
|
|
m_dOffsetY = dRawOffsetY - dKerf
|
|
m_dKerf = -dKerf
|
|
' RecalcRawPart()
|
|
'EstCalc.UpdateRawPart()
|
|
UpdateRawPartKerf()
|
|
' Recupero id contorno kerf
|
|
Dim nKerfId As Integer = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
' Modifico il colore
|
|
EgtSetColor(nKerfId, New Color3d(255, 128, 0))
|
|
Else
|
|
CreateRawFromPhotoContour()
|
|
End If
|
|
EgtDraw()
|
|
ElseIf dKerf < dMinKerf Then
|
|
NotifyPropertyChanged("Kerf")
|
|
' Minimo kerf =
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 21) & " " & LenToString(dMinKerf, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
Else
|
|
NotifyPropertyChanged("Kerf")
|
|
' Massimo kerf =
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 22) & " " & LenToString(dMaxKerf, 2)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetKerf(value As Double)
|
|
m_dKerf = value
|
|
NotifyPropertyChanged("Kerf")
|
|
End Sub
|
|
|
|
Private m_KerfIsEnabled As Boolean
|
|
Public Property KerfIsEnabled As Boolean
|
|
Get
|
|
Return m_KerfIsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_KerfIsEnabled Then
|
|
m_KerfIsEnabled = value
|
|
NotifyPropertyChanged("KerfIsEnabled")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Public ReadOnly Property MaterialList As ObservableCollection(Of Material)
|
|
Get
|
|
Return CurrentMachine.Materials
|
|
End Get
|
|
End Property
|
|
|
|
Public Property SelMaterial As Material
|
|
Get
|
|
Return CurrentMachine.CurrMat
|
|
End Get
|
|
Set(value As Material)
|
|
If Not IsNothing(value) Then
|
|
CurrentMachine.CurrMat = value
|
|
EstCalc.SetMaterialName()
|
|
UpdateTabState()
|
|
OmagOFFICEMap.refMachGroupPanelVM.SelectedMachGroup.NotifyPropertyChanged("MachGroupToolTip")
|
|
NotifyPropertyChanged("SelMaterial")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_AddPoint As Boolean
|
|
Public Property AddPoint As Boolean
|
|
Get
|
|
Return m_AddPoint
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_AddPoint Then
|
|
If value Then PhotoWithMouse = False
|
|
m_AddPoint = value
|
|
Select Case GetRawMode()
|
|
Case RAWMODE.BY_POINTS
|
|
m_RemovePoint = False
|
|
NotifyPropertyChanged("RemovePoint")
|
|
m_nPtMode = If(m_AddPoint, PTMODE.ADD, PTMODE.MOVE)
|
|
Case RAWMODE.DAMAGED
|
|
' Verifico ci sia almeno una zona rovinata
|
|
If EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_DAMAGED) = GDB_ID.NULL Then
|
|
m_AddPoint = False
|
|
End If
|
|
m_RemovePoint = False
|
|
NotifyPropertyChanged("RemovePoint")
|
|
m_NewDA = False
|
|
NotifyPropertyChanged("NewDA")
|
|
m_DeleteDA = False
|
|
NotifyPropertyChanged("DeleteDA")
|
|
m_nPtMode = If(m_AddPoint, PTMODE.ADD, PTMODE.MOVE)
|
|
m_nPtDmgMode = DMGMODE.NONE
|
|
End Select
|
|
NotifyPropertyChanged("AddPoint")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_RemovePoint As Boolean
|
|
Public Property RemovePoint As Boolean
|
|
Get
|
|
Return m_RemovePoint
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_RemovePoint Then
|
|
If value Then PhotoWithMouse = False
|
|
m_RemovePoint = value
|
|
Select Case GetRawMode()
|
|
Case RAWMODE.BY_POINTS
|
|
m_AddPoint = False
|
|
NotifyPropertyChanged("AddPoint")
|
|
m_nPtMode = If(m_RemovePoint, PTMODE.REMOVE, PTMODE.MOVE)
|
|
Case RAWMODE.DAMAGED
|
|
' Verifico ci sia almeno una zona rovinata
|
|
If EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_DAMAGED) = GDB_ID.NULL Then
|
|
m_RemovePoint = False
|
|
End If
|
|
m_AddPoint = False
|
|
NotifyPropertyChanged("AddPoint")
|
|
m_NewDA = False
|
|
NotifyPropertyChanged("NewDA")
|
|
m_DeleteDA = False
|
|
NotifyPropertyChanged("DeleteDA")
|
|
m_nPtMode = If(m_RemovePoint, PTMODE.REMOVE, PTMODE.MOVE)
|
|
m_nPtDmgMode = DMGMODE.NONE
|
|
End Select
|
|
NotifyPropertyChanged("RemovePoint")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_PointsVisibility As Visibility
|
|
Public Property PointsVisibility As Visibility
|
|
Get
|
|
Return m_PointsVisibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
If value <> m_PointsVisibility Then
|
|
m_PointsVisibility = value
|
|
NotifyPropertyChanged("PointsVisibility")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_NewDA As Boolean
|
|
Public Property NewDA As Boolean
|
|
Get
|
|
Return m_NewDA
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_NewDA Then
|
|
m_NewDA = value
|
|
NotifyPropertyChanged("NewDA")
|
|
m_nPtDmgMode = If(m_NewDA, DMGMODE.ADD, DMGMODE.NONE)
|
|
m_DeleteDA = False
|
|
NotifyPropertyChanged("DeleteDA")
|
|
m_AddPoint = False
|
|
NotifyPropertyChanged("AddPoint")
|
|
m_RemovePoint = False
|
|
NotifyPropertyChanged("RemovePoint")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_DeleteDA As Boolean
|
|
Public Property DeleteDA As Boolean
|
|
Get
|
|
Return m_DeleteDA
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_DeleteDA Then
|
|
m_DeleteDA = value
|
|
' Verifico ci sia almeno una zona rovinata
|
|
If EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_DAMAGED) = GDB_ID.NULL Then
|
|
m_DeleteDA = False
|
|
End If
|
|
NotifyPropertyChanged("DeleteDA")
|
|
m_nPtDmgMode = If(m_DeleteDA, DMGMODE.REMOVE, DMGMODE.NONE)
|
|
m_NewDA = False
|
|
NotifyPropertyChanged("NewDA")
|
|
m_AddPoint = False
|
|
NotifyPropertyChanged("AddPoint")
|
|
m_RemovePoint = False
|
|
NotifyPropertyChanged("RemovePoint")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_DAVisibility As Visibility
|
|
Public Property DAVisibility As Visibility
|
|
Get
|
|
Return m_DAVisibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
If value <> m_DAVisibility Then
|
|
m_DAVisibility = value
|
|
NotifyPropertyChanged("DAVisibility")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_ConfirmPhotoVisibility As Visibility
|
|
Public Property ConfirmPhotoVisibility As Visibility
|
|
Get
|
|
Return m_ConfirmPhotoVisibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
If value <> m_ConfirmPhotoVisibility Then
|
|
m_ConfirmPhotoVisibility = value
|
|
NotifyPropertyChanged("ConfirmPhotoVisibility")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_CurrMach_Background As Brush = DirectCast(New BrushConverter().ConvertFrom("#FFDDDDDD"), SolidColorBrush)
|
|
Public Property CurrMach_Background As Brush
|
|
Get
|
|
Return m_CurrMach_Background
|
|
End Get
|
|
Set(value As Brush)
|
|
m_CurrMach_Background = value
|
|
NotifyPropertyChanged("CurrMach_Background")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_MaterialFromDB As String = String.Empty
|
|
Public ReadOnly Property MaterialFromDB As String
|
|
Get
|
|
Return m_MaterialFromDB
|
|
End Get
|
|
End Property
|
|
Public Sub SetMaterialFromDB(sMaterial As String)
|
|
m_MaterialFromDB = sMaterial
|
|
If Not String.IsNullOrEmpty(m_MaterialFromDB) Then
|
|
'EstCalc.SetMaterialPhoto(m_MaterialFromDB)
|
|
SetVisibilityMaterialFromDB(Visibility.Visible)
|
|
Else
|
|
SetVisibilityMaterialFromDB(Visibility.Collapsed)
|
|
End If
|
|
NotifyPropertyChanged("MaterialFromDB")
|
|
End Sub
|
|
|
|
Private m_VisibilityMaterialFromDB As Visibility = Visibility.Collapsed
|
|
Public ReadOnly Property VisibilityMaterialFromDB As Visibility
|
|
Get
|
|
Return m_VisibilityMaterialFromDB
|
|
End Get
|
|
End Property
|
|
Public Sub SetVisibilityMaterialFromDB(VisibilityMaterial As Visibility)
|
|
m_VisibilityMaterialFromDB = VisibilityMaterial
|
|
NotifyPropertyChanged("VisibilityMaterialFromDB")
|
|
End Sub
|
|
|
|
#Region "Messages"
|
|
|
|
Public ReadOnly Property PhotoRotMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 0)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property OutlineMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 33)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property DamagedAreaMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 10)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property LengthMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 3)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property WidthMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 4)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property HeightMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 5)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property OffsetXMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 6)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property OffsetYMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 7)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property KerfMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 8)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MaterialMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 9)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property PointsMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 13)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property AddMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 14)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property RemoveMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 15)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property NewMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 11)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property DeleteMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 12)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ConfirmPhotoMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTPAGEUC + 24)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property CurrMachMsg As String
|
|
Get
|
|
Return EgtMsg(MSG_CHOOSEMACHININGPAGEUC + 9)
|
|
End Get
|
|
End Property
|
|
|
|
#End Region ' Messages
|
|
|
|
#Region "ToolTip"
|
|
|
|
Public ReadOnly Property PhotoToolTip As String
|
|
Get
|
|
Return EgtMsg(MSG_RAWPARTTAB + 2)
|
|
End Get
|
|
End Property
|
|
|
|
#End Region ' ToolTip
|
|
|
|
' Definizione comandi
|
|
Private m_cmdCurrMach As ICommand
|
|
Private m_cmdSlabId As ICommand
|
|
Private m_cmdPhoto As ICommand
|
|
Private m_cmdConfirmPhoto As ICommand
|
|
|
|
#End Region ' FIELDS & PROPERTIES
|
|
|
|
#Region "CONSTRUCTOR"
|
|
|
|
Sub New()
|
|
' Creo riferimento a questa classe in OmagOFFICEMap
|
|
OmagOFFICEMap.SetRefRawPartTabVM(Me)
|
|
If OmagOFFICEMap.refMainWindowVM.MainWindowM.m_SlabDB Then
|
|
'Me.OmagPhoto = New OmagPhotoV(Application.Current.MainWindow(), New OmagPhotoVM)
|
|
Me.OmagPhoto = New OmagPhotoV
|
|
If Not PhotoMap.ContinueApplication Then End
|
|
End If
|
|
' Aggiungo voci alla lista di tipi di definizione grezzo
|
|
m_TypeList.Add(EgtMsg(MSG_RAWPARTPAGEUC + 1))
|
|
m_TypeList.Add(EgtMsg(MSG_RAWPARTPAGEUC + 2))
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTOR
|
|
|
|
#Region "METHODS"
|
|
|
|
Friend Function InitRawPart() As Boolean
|
|
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx())
|
|
' Se abilitati, visualizzo bottone per dati lastra
|
|
Dim bSlabId As Boolean = ( GetMainPrivateProfileInt( S_RAWPART, K_SLABID, 0) <> 0)
|
|
SlabIdVisibility = If( bSlabId, Windows.Visibility.Visible, Windows.Visibility.Hidden)
|
|
' Se disponibile, imposto possibilità di contorno da foto
|
|
If EstPhoto.GetContour() = GDB_ID.NULL Then
|
|
If m_TypeList.Count = 3 Then m_TypeList.RemoveAt(2)
|
|
Else
|
|
If m_TypeList.Count = 2 Then m_TypeList.Add(EgtMsg(MSG_RAWPARTPAGEUC + 35))
|
|
End If
|
|
' Colori standard
|
|
GetMainPrivateProfileColor(S_RAWPART, K_RAWCOLOR, m_RawCol)
|
|
GetMainPrivateProfileColor(S_RAWPART, K_KERFCOLOR, m_KerfCol)
|
|
' Dimensioni tavola
|
|
Dim ptMin, ptMax As Point3d
|
|
If EgtGetTableArea(1, ptMin, ptMax) Then
|
|
m_ptTableMin = ptMin
|
|
m_dTableLength = ptMax.x - ptMin.x
|
|
m_dTableWidth = ptMax.y - ptMin.y
|
|
End If
|
|
' Origine tavola
|
|
Dim ptRef1 As Point3d
|
|
If EgtGetTableRef(1, ptRef1) Then
|
|
If Not Point3d.SameApprox(m_ptTableMin, ptRef1) Then
|
|
EgtOutLog("Error : TableMin e TableRef1 are different")
|
|
End If
|
|
End If
|
|
' Assegno identificativo del grezzo
|
|
EstCalc.UpdateRawPart()
|
|
' Nascondo eventuali pezzi in parcheggio
|
|
EstCalc.HideParkedParts()
|
|
' Deseleziono pezzi
|
|
EgtDeselectAll()
|
|
VeinMatching.OnDeselectAll()
|
|
' Visualizzo eventuale foto
|
|
ShowPhoto(True)
|
|
' Se esiste già il grezzo...
|
|
If EstCalc.GetRawId() <> GDB_ID.NULL Then
|
|
' dimensioni del grezzo
|
|
Dim ptRawMin As Point3d = GetRawPtMin()
|
|
Dim ptRawMax As Point3d = GetRawPtMax()
|
|
' kerf
|
|
Dim dTmp As Double = 0
|
|
Dim dInvertKerf As Double = 1
|
|
EgtGetInfo(EgtGetFirstRawPart(), KEY_KERF, dTmp)
|
|
SetKerf(dTmp)
|
|
' aggiorno dati grezzo
|
|
m_dLength = ptRawMax.x - ptRawMin.x - 2 * m_dKerf
|
|
m_dWidth = ptRawMax.y - ptRawMin.y - 2 * m_dKerf * dInvertKerf
|
|
m_dHeight = ptRawMax.z - ptRawMin.z
|
|
m_dOffsetX = ptRawMin.x - m_ptTableMin.x + m_dKerf * dInvertKerf
|
|
m_dOffsetY = ptRawMin.y - m_ptTableMin.y + m_dKerf * dInvertKerf
|
|
' verifico se il kerf è negativo
|
|
EgtGetInfo(EgtGetFirstRawPart(), KEY_INVERT_KERF, dInvertKerf)
|
|
SetInvertKerf(dInvertKerf)
|
|
' aggiorno i dati della grafica
|
|
NotifyPropertyChanged("Length")
|
|
NotifyPropertyChanged("Width")
|
|
NotifyPropertyChanged("OffsetX")
|
|
NotifyPropertyChanged("OffsetY")
|
|
NotifyPropertyChanged("Height")
|
|
NotifyPropertyChanged("Kerf")
|
|
' aggiorno offset e rotazione foto
|
|
Dim dPhotoOffsetX, dPhotoOffsetY, dPhotoRot As Double
|
|
GetPhotoOffsetRot(dPhotoOffsetX, dPhotoOffsetY, dPhotoRot)
|
|
SetPhotoOffsetX(dPhotoOffsetX)
|
|
SetPhotoOffsetY(dPhotoOffsetY)
|
|
SetPhotoRot(dPhotoRot)
|
|
' aggiorno l'apparenza del grezzo
|
|
AdjustRawPartOnStart()
|
|
' Altrimenti lo definisco
|
|
Else
|
|
' Leggo da Ini gli ultimi valori e li rendo compatibili con le dimensioni della tavola
|
|
CreateNewRawFromIniData()
|
|
' Imposto spessore lastra
|
|
EstCalc.SetSlabHeight(m_dHeight)
|
|
OmagOFFICEMap.refMachGroupPanelVM.SelectedMachGroup.NotifyPropertyChanged("MachGroupToolTip")
|
|
' Annullo offset e rotazione foto
|
|
SetPhotoOffsetX(0)
|
|
SetPhotoOffsetY(0)
|
|
SetPhotoRot(0)
|
|
' Richiedo ricalcolo quota eventuale foto
|
|
RecalcRawPart(True)
|
|
End If
|
|
' Abilitazione eventuale bottone per dati slab
|
|
SlabIdIsEnabled = ( EstCalc.GetRawId() <> GDB_ID.NULL)
|
|
' Creo layer temporaneo per crocette
|
|
m_nTempLay = EgtCreateGroup(GDB_ID.ROOT)
|
|
EgtSetLevel(m_nTempLay, GDB_LV.TEMP)
|
|
' Determino modalità di definizione
|
|
OutlineIsChecked = True
|
|
If EgtExistsInfo(EstCalc.GetRawId(), KEY_RAWBYPOINTS) Then
|
|
SelType = Type.BY_POINTS
|
|
NotifyPropertyChanged("SelType")
|
|
PointsVisibility = Visibility.Visible
|
|
AdjustRawPartPosition()
|
|
' Visualizzo crocette
|
|
UpdateCircles()
|
|
Else
|
|
m_SelType = Type.RECTANGLE
|
|
NotifyPropertyChanged("SelType")
|
|
PointsVisibility = Visibility.Collapsed
|
|
AdjustRawPartPosition()
|
|
End If
|
|
EgtZoom(ZM.ALL)
|
|
DAVisibility = Visibility.Collapsed
|
|
' Imposto il materiale corrente nella combobox
|
|
NotifyPropertyChanged("SelMaterial")
|
|
Return True
|
|
End Function
|
|
|
|
Private Sub CreateNewRawFromIniData()
|
|
' Recupero i dati dal file Ini
|
|
Dim dRawLen As Double = GetMainPrivateProfileDouble(S_RAWPART, K_RAWLENGTH, 2500)
|
|
Dim dRawWidth As Double = GetMainPrivateProfileDouble(S_RAWPART, K_RAWWIDTH, 1500)
|
|
Dim dRawHeight As Double = GetMainPrivateProfileDouble(S_RAWPART, K_RAWHEIGHT, 30)
|
|
Dim dRawOffsX As Double = GetMainPrivateProfileDouble(S_RAWPART, K_RAWOFFSX, 100)
|
|
Dim dRawOffsY As Double = GetMainPrivateProfileDouble(S_RAWPART, K_RAWOFFSY, 100)
|
|
Dim dRawKerf As Double = GetMainPrivateProfileDouble(S_RAWPART, K_RAWKERF, 50)
|
|
' Eseguo i controlli
|
|
If dRawKerf < 0 Then
|
|
dRawKerf = 0
|
|
ElseIf dRawKerf > Math.Min(m_dTableLength, m_dTableWidth) / 5 Then
|
|
dRawKerf = Math.Min(m_dTableLength, m_dTableWidth) / 5
|
|
End If
|
|
If dRawLen < 0 Then
|
|
dRawLen = 100
|
|
ElseIf dRawLen > m_dTableLength - 2 * dRawKerf Then
|
|
dRawLen = m_dTableLength - 2 * dRawKerf
|
|
End If
|
|
If dRawWidth < 0 Then
|
|
dRawWidth = 100
|
|
ElseIf dRawWidth > m_dTableWidth - 2 * dRawKerf Then
|
|
dRawWidth = m_dTableWidth - 2 * dRawKerf
|
|
End If
|
|
If dRawOffsX < dRawKerf Then dRawOffsX = dRawKerf
|
|
If dRawOffsX + dRawLen + dRawKerf > m_dTableLength Then
|
|
dRawOffsX = Math.Max(dRawKerf, m_dTableLength - dRawLen - dRawKerf)
|
|
dRawLen = Math.Min(dRawLen, m_dTableLength - dRawOffsX - dRawKerf)
|
|
End If
|
|
If dRawOffsY < dRawKerf Then dRawOffsY = dRawKerf
|
|
If dRawOffsY + dRawWidth + dRawKerf > m_dTableWidth Then
|
|
dRawOffsY = Math.Max(dRawKerf, m_dTableWidth - dRawWidth - dRawKerf)
|
|
dRawWidth = Math.Min(dRawWidth, m_dTableWidth - dRawOffsY - dRawKerf)
|
|
End If
|
|
' Assegno i dati
|
|
SetLength(dRawLen)
|
|
SetWidth(dRawWidth)
|
|
SetHeight(dRawHeight)
|
|
SetOffsetX(dRawOffsX)
|
|
SetOffsetY(dRawOffsY)
|
|
SetKerf(dRawKerf)
|
|
End Sub
|
|
|
|
Friend Function ExitRawPart() As Boolean
|
|
' Sistemo il grezzo
|
|
AdjustRawPartOnExit()
|
|
' Rimuovo layer temporaneo per crocette
|
|
EgtErase(m_nTempLay)
|
|
' Rimuovo eventuale contorno del grezzo non utilizzato
|
|
EstPhoto.RemoveContour()
|
|
' Salvo nel file Ini le dimensioni del grezzo (sempre in mm)
|
|
WriteMainPrivateProfileString(S_RAWPART, K_RAWLENGTH, DoubleToString(m_dLength, 2))
|
|
WriteMainPrivateProfileString(S_RAWPART, K_RAWWIDTH, DoubleToString(m_dWidth, 2))
|
|
WriteMainPrivateProfileString(S_RAWPART, K_RAWHEIGHT, DoubleToString(m_dHeight, 2))
|
|
WriteMainPrivateProfileString(S_RAWPART, K_RAWOFFSX, DoubleToString(m_dOffsetX, 2))
|
|
WriteMainPrivateProfileString(S_RAWPART, K_RAWOFFSY, DoubleToString(m_dOffsetY, 2))
|
|
WriteMainPrivateProfileString(S_RAWPART, K_RAWKERF, DoubleToString(m_dKerf, 2))
|
|
' Se ci sono pezzi nel grezzo
|
|
If EgtGetFirstPartInRawPart(EstCalc.GetRawId()) <> GDB_ID.NULL Then
|
|
' Cancello tutte le lavorazioni
|
|
CamAuto.EraseMachinings(GDB_ID.NULL)
|
|
' Reinserisco tutte le lavorazioni piane
|
|
CamAuto.AddMachinings(GDB_ID.NULL)
|
|
' Aggiorno regioni per nesting
|
|
EstCalc.UpdateNestRegions()
|
|
EstCalc.EnableReferenceRegion(False)
|
|
' Visualizzo i pezzi parcheggiati (per inserire correttamente in parcheggio i pezzi del grezzo)
|
|
EstCalc.ShowParkedParts()
|
|
' Verifico ogni singolo pezzo
|
|
Dim nPartId As Integer = EgtGetFirstPartInRawPart(EstCalc.GetRawId())
|
|
While nPartId <> GDB_ID.NULL
|
|
Dim nNextPartId = EgtGetNextPartInRawPart(nPartId)
|
|
If Not EgtVerifyPart(nPartId, CurrentMachine.bReducedCut) Then
|
|
EstCalc.StoreOnePart(nPartId)
|
|
VeinMatching.OnRemovePartFromRaw(nPartId)
|
|
End If
|
|
nPartId = nNextPartId
|
|
End While
|
|
' Nascondo i pezzi parcheggiati
|
|
EstCalc.HideParkedParts()
|
|
End If
|
|
' Disabiliti movimento foto con mouse
|
|
PhotoWithMouse = False
|
|
Return True
|
|
End Function
|
|
|
|
Private Function GetRawMode() As RAWMODE
|
|
Select Case m_SelType
|
|
Case Type.RECTANGLE
|
|
Return RAWMODE.RECTANGLE
|
|
Case Type.BY_POINTS
|
|
If m_OutlineIsChecked Then
|
|
Return RAWMODE.BY_POINTS
|
|
Else
|
|
Return RAWMODE.DAMAGED
|
|
End If
|
|
Case Type.FROM_PHOTO
|
|
Return RAWMODE.FROM_PHOTO
|
|
End Select
|
|
Return RAWMODE.RECTANGLE
|
|
End Function
|
|
|
|
Private Sub RawModeView()
|
|
Select Case GetRawMode()
|
|
Case RAWMODE.RECTANGLE
|
|
TypeIsEnabled = True
|
|
LengthIsEnabled = True
|
|
WidthIsEnabled = True
|
|
HeightIsEnabled = True
|
|
OffsetXIsEnabled = True
|
|
OffsetYIsEnabled = True
|
|
KerfIsEnabled = True
|
|
' Nascondo bottoni per disegno
|
|
PointsVisibility = Visibility.Collapsed
|
|
' Disattivo bottoni zone rovinate e conferma contorno da foto
|
|
DAVisibility = Visibility.Collapsed
|
|
ConfirmPhotoVisibility = Visibility.Collapsed
|
|
Case RAWMODE.BY_POINTS
|
|
TypeIsEnabled = True
|
|
LengthIsEnabled = False
|
|
WidthIsEnabled = False
|
|
HeightIsEnabled = True
|
|
OffsetXIsEnabled = False
|
|
OffsetYIsEnabled = False
|
|
KerfIsEnabled = True
|
|
' Visualizzo bottoni per disegno
|
|
PointsVisibility = Visibility.Visible
|
|
' Disattivo bottoni zone rovinate e conferma contorno da foto
|
|
DAVisibility = Visibility.Collapsed
|
|
ConfirmPhotoVisibility = Visibility.Collapsed
|
|
Case RAWMODE.DAMAGED
|
|
TypeIsEnabled = False
|
|
LengthIsEnabled = False
|
|
WidthIsEnabled = False
|
|
HeightIsEnabled = False
|
|
OffsetXIsEnabled = False
|
|
OffsetYIsEnabled = False
|
|
KerfIsEnabled = False
|
|
' Visualizzo bottoni per disegno
|
|
PointsVisibility = Visibility.Visible
|
|
' Attivo bottoni zone rovinate
|
|
DAVisibility = Visibility.Visible
|
|
' Disattivo bottone conferma contorno da foto
|
|
ConfirmPhotoVisibility = Visibility.Collapsed
|
|
Case RAWMODE.FROM_PHOTO
|
|
TypeIsEnabled = True
|
|
LengthIsEnabled = False
|
|
WidthIsEnabled = False
|
|
HeightIsEnabled = True
|
|
OffsetXIsEnabled = False
|
|
OffsetYIsEnabled = False
|
|
KerfIsEnabled = True
|
|
' Nascondo bottoni per punti e zone rovinate
|
|
PointsVisibility = Visibility.Collapsed
|
|
DAVisibility = Visibility.Collapsed
|
|
' Visualizzo bottone conferma contorno da foto
|
|
ConfirmPhotoVisibility = Visibility.Visible
|
|
End Select
|
|
End Sub
|
|
|
|
Private Sub RecalcRawPart(Optional bHeightModified As Boolean = False)
|
|
' Se cambiato spessore e c'è foto, aggiorno quota fotografia
|
|
If bHeightModified And GetPhoto() <> GDB_ID.NULL Then
|
|
' Ricarico fotografia
|
|
EstPhoto.UpdatePhoto()
|
|
' Aggiorno eventuale contorno da foto
|
|
EstPhoto.UpdateContour()
|
|
End If
|
|
' Recupero il colore (con la foto lo rendo molto più trasparente)
|
|
Dim Col = m_RawCol
|
|
' in presenza di foto rendo molto più trasparente
|
|
If GetPhoto() <> GDB_ID.NULL Then Col.A = 20
|
|
' Se non esiste già il grezzo e richiesto, lo inserisco
|
|
Dim nRawId As Integer = EstCalc.GetRawId()
|
|
If nRawId = GDB_ID.NULL And m_dHeight > EPS_SMALL Then
|
|
EgtAddRawPart(Point3d.ORIG(), m_dLength + 2 * m_dKerf, m_dWidth + 2 * m_dKerf, m_dHeight, Col)
|
|
' se esiste e da cancellare
|
|
ElseIf m_dHeight < EPS_SMALL Then
|
|
EgtRemoveRawPart(nRawId)
|
|
' Altrimenti lo modifico
|
|
Else
|
|
EgtModifyRawPart(nRawId, Point3d.ORIG(), m_dLength + 2 * m_dKerf, m_dWidth + 2 * m_dKerf, m_dHeight, Col)
|
|
End If
|
|
' Se il grezzo esistente
|
|
If EstCalc.UpdateRawPart() Then
|
|
AdjustRawPartKerf()
|
|
' Sistemo la posizione
|
|
AdjustRawPartPosition()
|
|
End If
|
|
' Abilitazione eventuale bottone per dati slab
|
|
SlabIdIsEnabled = ( EstCalc.GetRawId() <> GDB_ID.NULL)
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Private Function AdjustRawPartPosition() As Boolean
|
|
Dim ptRef As New Point3d(m_dOffsetX - m_dKerf, m_dOffsetY - m_dKerf, CurrentMachine.dAdditionalTable)
|
|
If EgtMoveToCornerRawPart(EstCalc.GetRawId(), ptRef, MCH_CR.BL) Then
|
|
EstCalc.UpdateRawPart()
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
Return True
|
|
Else
|
|
' tento di portare la lastra tutta dentro la tavola
|
|
Dim bOk As Boolean = EgtMoveToCornerRawPart(EstCalc.GetRawId(), Point3d.ORIG(), MCH_CR.BL)
|
|
' aggiorno posizione e offset
|
|
If EstCalc.UpdateRawPart() Then
|
|
Dim ptMin As Point3d = GetRawPtMin()
|
|
m_dOffsetX = ptMin.x - m_ptTableMin.x + m_dKerf
|
|
m_dOffsetY = ptMin.y - m_ptTableMin.y + m_dKerf
|
|
NotifyPropertyChanged("OffsetX")
|
|
NotifyPropertyChanged("OffsetY")
|
|
End If
|
|
'Errore nella posizione o dimensione del grezzo
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 47)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
Return bOk
|
|
End If
|
|
End Function
|
|
|
|
Private Function AdjustRawPartKerf() As Boolean
|
|
' Se non c'è il grezzo, esco
|
|
If EstCalc.GetRawId() = GDB_ID.NULL Then Return False
|
|
' Cancello eventuale vecchio contorno di kerf
|
|
Dim nKerfId As Integer = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
EgtErase(nKerfId)
|
|
' box grezzo
|
|
Dim ptMin As Point3d = GetRawPtMin()
|
|
Dim ptMax As Point3d = GetRawPtMax()
|
|
ptMin.x += m_dKerf
|
|
ptMin.y += m_dKerf
|
|
ptMin.z = ptMax.z
|
|
ptMax.x -= m_dKerf
|
|
ptMax.y -= m_dKerf
|
|
' Creo il nuovo contorno del kerf
|
|
nKerfId = EgtCreateRectangle2P(EstCalc.GetRawId(), ptMin, ptMax, GDB_RT.GLOB)
|
|
EgtSetName(nKerfId, NAME_KERF)
|
|
EgtSetColor(nKerfId, m_KerfCol)
|
|
' Salvo il valore del kerf (sempre in mm)
|
|
EgtSetInfo(EstCalc.GetRawId(), KEY_KERF, m_dKerf)
|
|
Return True
|
|
End Function
|
|
|
|
Private Sub UpdateRawPartHeight()
|
|
' Se da creare
|
|
If EstCalc.GetRawId() = GDB_ID.NULL Then
|
|
RecalcRawPart(True)
|
|
Return
|
|
' se da cancellare
|
|
ElseIf m_dHeight < EPS_SMALL Then
|
|
' Se ci sono pezzi
|
|
If EgtGetFirstPartInRawPart(EstCalc.GetRawId()) <> GDB_ID.NULL Then
|
|
' Visualizzo i pezzi parcheggiati (per inserire correttamente in parcheggio i pezzi del grezzo)
|
|
EstCalc.ShowParkedParts()
|
|
' Parcheggio pezzi presenti nel grezzo e li tolgo da VeinMatcing
|
|
Dim nPartId As Integer = EgtGetFirstPartInRawPart(EstCalc.GetRawId())
|
|
While nPartId <> GDB_ID.NULL
|
|
Dim nNextPartId As Integer = EgtGetNextPartInRawPart(nPartId)
|
|
EstCalc.StoreOnePart(nPartId)
|
|
VeinMatching.OnRemovePartFromRaw(nPartId)
|
|
nPartId = nNextPartId
|
|
End While
|
|
' Cancello tutte le lavorazioni
|
|
CamAuto.EraseMachinings(GDB_ID.NULL)
|
|
' Nascondo i pezzi parcheggiati
|
|
EstCalc.HideParkedParts()
|
|
End If
|
|
' Elimino il grezzo
|
|
EgtRemoveRawPart(EstCalc.GetRawId())
|
|
' altrimenti da aggiornare
|
|
Else
|
|
' Salvo vecchia altezza
|
|
Dim dOldHeight As Double = EstCalc.GetRawHeight()
|
|
' Aggiorno solido
|
|
EgtModifyRawPartHeight(EstCalc.GetRawId(), m_dHeight)
|
|
' Vettore spostamento
|
|
Dim vtMove As New Vector3d(0, 0, m_dHeight - dOldHeight)
|
|
' Aggiorno quota kerf
|
|
Dim nKerfId As Integer = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
If nKerfId <> GDB_ID.NULL Then
|
|
EgtMove(nKerfId, vtMove)
|
|
End If
|
|
' Se ci sono pezzi ne aggiorno la quota
|
|
Dim nPartId As Integer = EgtGetFirstPartInRawPart(EstCalc.GetRawId())
|
|
While nPartId <> GDB_ID.NULL
|
|
EgtMovePartInRawPart(nPartId, vtMove)
|
|
nPartId = EgtGetNextPartInRawPart(nPartId)
|
|
End While
|
|
' aggiorno la posizione dei cerchi del Kerf
|
|
UpdateCircles()
|
|
' Aggiorno la posizione della zona rovinata
|
|
UpdateDemageArea(vtMove)
|
|
End If
|
|
' aggiorno l'Id del grezzo
|
|
EstCalc.UpdateRawPart()
|
|
' Se c'è foto, aggiorno quota fotografia
|
|
If GetPhoto() <> GDB_ID.NULL Then
|
|
' Ricarico fotografia
|
|
EstPhoto.UpdatePhoto()
|
|
' Aggiorno eventuale contorno da foto
|
|
EstPhoto.UpdateContour()
|
|
End If
|
|
' Abilitazione eventuale bottone per dati slab
|
|
SlabIdIsEnabled = ( EstCalc.GetRawId() <> GDB_ID.NULL)
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Private Sub UpdateRawPartKerf(Optional bDraw As Boolean = True)
|
|
' Se non c'è il grezzo, esco
|
|
If EstCalc.GetRawId() = GDB_ID.NULL Then Return
|
|
' Recupero percorso di contorno kerf
|
|
Dim nKerfId As Integer = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
' Recupero colore grezzo ( in presenza di foto rendo molto più trasparente)
|
|
Dim Col = m_RawCol
|
|
If GetPhoto() <> GDB_ID.NULL Then Col.A = 20
|
|
' Aggiorno il grezzo
|
|
Dim x As Boolean = EgtModifyRawPart(EstCalc.GetRawId(), nKerfId, m_dKerf, m_ptTableMin.z, m_dHeight, Col)
|
|
' Salvo il nuovo valore (sempre in mm)
|
|
EgtSetInfo(EstCalc.GetRawId(), KEY_KERF, m_dKerf)
|
|
' Aggiorno dimensioni e posizione grezzo
|
|
UpdateRawXYData()
|
|
' Aggiorno visualizzazione
|
|
If bDraw Then EgtDraw()
|
|
End Sub
|
|
|
|
Private Sub UpdateRawXYData()
|
|
' Aggiorno i dati del grezzo
|
|
EstCalc.UpdateRawPart()
|
|
' Aggiorno dimensioni grezzo nel piano XY
|
|
If EstCalc.GetRawId() <> GDB_ID.NULL Then
|
|
' aggiorno dati grezzo
|
|
m_dLength = EstCalc.GetRawLength() - 2 * m_dKerf
|
|
m_dWidth = EstCalc.GetRawWidth() - 2 * m_dKerf
|
|
m_dOffsetX = EstCalc.GetRawPtMin().x + m_dKerf - m_ptTableMin.x
|
|
m_dOffsetY = EstCalc.GetRawPtMin().y + m_dKerf - m_ptTableMin.y
|
|
'If m_InvertKerf < 0 Then
|
|
' SetLength(m_dLength + 2 * m_dKerf)
|
|
' SetWidth(m_dWidth + 2 * m_dKerf)
|
|
' SetOffsetX(m_dOffsetX - m_dKerf)
|
|
' SetOffsetY(m_dOffsetY - m_dKerf)
|
|
' RecalcRawPart()
|
|
'Else
|
|
' SetLength(m_dLength)
|
|
' SetWidth(m_dWidth)
|
|
' SetOffsetX(m_dOffsetX)
|
|
' SetOffsetY(m_dOffsetY)
|
|
' RecalcRawPart()
|
|
'End If
|
|
' Assegno dati grezzo rettangolare ai textbox
|
|
NotifyPropertyChanged("Length")
|
|
NotifyPropertyChanged("Width")
|
|
NotifyPropertyChanged("OffsetX")
|
|
NotifyPropertyChanged("OffsetY")
|
|
End If
|
|
' Aggiorno la posizione del grezzo
|
|
Dim ptRef As New Point3d(m_dOffsetX - m_dKerf, m_dOffsetY - m_dKerf, CurrentMachine.dAdditionalTable)
|
|
If EgtMoveToCornerRawPart(EstCalc.GetRawId(), ptRef, MCH_CR.BL) Then
|
|
EstCalc.UpdateRawPart()
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
Else
|
|
EstCalc.UpdateRawPart()
|
|
'Errore nella posizione o dimensione del grezzo
|
|
Dim sMsg As String = EgtMsg(MSG_RAWPARTPAGEUC + 47)
|
|
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(sMsg, 3, MSG_TYPE.ERROR_)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub UpdateDemageArea(vtMove As Vector3d)
|
|
Dim nId As Integer = GDB_ID.NULL
|
|
nId = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_DAMAGED)
|
|
While nId <> GDB_ID.NULL
|
|
EgtMove(nId, vtMove)
|
|
nId = EgtGetNext(nId)
|
|
End While
|
|
|
|
End Sub
|
|
|
|
Private Sub ModifyPhoto(vtMove As Vector3d)
|
|
' Non ci deve essere movimento in Z
|
|
vtMove.z = 0
|
|
' In presenza di contorno, verifico non esca dalla tavola
|
|
Dim nCrvId As Integer = EstPhoto.GetContour()
|
|
If nCrvId <> GDB_ID.NULL Then
|
|
Dim b3Crv As New BBox3d
|
|
EgtGetBBoxGlob(nCrvId, GDB_BB.STANDARD, b3Crv)
|
|
b3Crv.Move(vtMove)
|
|
If b3Crv.Min().x < m_ptTableMin.x + 10 * EPS_SMALL Then
|
|
vtMove.x += m_ptTableMin.x + 10 * EPS_SMALL - b3Crv.Min().x
|
|
ElseIf b3Crv.Max().x > m_ptTableMin.x + m_dTableLength + 10 * EPS_SMALL Then
|
|
vtMove.x += m_ptTableMin.x + m_dTableLength - 10 * EPS_SMALL - b3Crv.Max().x
|
|
End If
|
|
If b3Crv.Min().y < m_ptTableMin.y + 10 * EPS_SMALL Then
|
|
vtMove.y += m_ptTableMin.y + 10 * EPS_SMALL - b3Crv.Min().y
|
|
ElseIf b3Crv.Max().y > m_ptTableMin.y + m_dTableWidth + 10 * EPS_SMALL Then
|
|
vtMove.y += m_ptTableMin.y + m_dTableWidth - 10 * EPS_SMALL - b3Crv.Max().y
|
|
End If
|
|
End If
|
|
' Muovo eventuale grezzo ed eventuali cerchietti
|
|
Dim nRawId As Integer = EstCalc.GetRawId()
|
|
If nRawId <> GDB_ID.NULL Then
|
|
If Not EgtMoveRawPart(EstCalc.GetRawId(), vtMove) Then Return
|
|
' Imposto posizione esatta del grezzo dopo movimento
|
|
Dim b3Raw As New BBox3d
|
|
EgtGetRawPartBBox(nRawId, b3Raw)
|
|
If EgtMoveToCornerRawPart(nRawId, (b3Raw.Min() - m_ptTableMin) + Point3d.ORIG(), MCH_CR.BL) Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
End If
|
|
' Muovo eventuali cerchietti alle estremità della curva di contorno
|
|
MoveCircles(vtMove)
|
|
End If
|
|
' Incremento opportunamente l'offset della fotografia
|
|
Dim dPhotoOffsetX As Double = m_dPhotoOffsetX + vtMove.x
|
|
Dim dPhotoOffsetY As Double = m_dPhotoOffsetY + vtMove.y
|
|
EstPhoto.ChangeOffsetPhoto(dPhotoOffsetX, dPhotoOffsetY)
|
|
' Muovo eventuale contorno
|
|
If nCrvId <> GDB_ID.NULL Then EgtMove(nCrvId, vtMove, GDB_RT.GLOB)
|
|
' Aggiorno interfaccia
|
|
SetPhotoOffsetX(dPhotoOffsetX)
|
|
SetPhotoOffsetY(dPhotoOffsetY)
|
|
' Aggiorno dimensioni e posizione grezzo
|
|
UpdateRawXYData()
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Private Sub ModifyPhoto(dRotAngDeg As Double)
|
|
' Recupero il grezzo e il suo centro
|
|
Dim nRawId As Integer = EstCalc.GetRawId()
|
|
Dim ptCent As New Point3d
|
|
If Not EgtGetRawPartCenter(nRawId, ptCent) Then
|
|
ptCent = m_ptTableMin + New Vector3d(m_dTableLength / 2, m_dTableWidth / 2, 0)
|
|
End If
|
|
' Recupero eventuale contorno
|
|
Dim nCrvId As Integer = EstPhoto.GetContour()
|
|
' Ruoto eventuale grezzo ed eventuali cerchietti
|
|
If nRawId <> GDB_ID.NULL Then
|
|
' Eseguo rotazione complessiva di controllo
|
|
If Not EgtRotateRawPart(nRawId, Vector3d.Z_AX(), dRotAngDeg) Then Return
|
|
' Annullo rotazione complessiva ed eseguo rotazione degli oggetti contenuti nel grezzo
|
|
EgtRotateRawPart(nRawId, Vector3d.Z_AX(), -dRotAngDeg)
|
|
Dim nId As Integer = EgtGetFirstInGroup(nRawId)
|
|
While nId <> GDB_ID.NULL
|
|
EgtRotate(nId, ptCent, Vector3d.Z_AX(), dRotAngDeg, GDB_RT.GLOB)
|
|
nId = EgtGetNext(nId)
|
|
End While
|
|
' Imposto posizione esatta del grezzo dopo rotazione
|
|
Dim b3Raw As New BBox3d
|
|
EgtGetRawPartBBox(nRawId, b3Raw)
|
|
If EgtMoveToCornerRawPart(nRawId, (b3Raw.Min() - m_ptTableMin) + Point3d.ORIG(), MCH_CR.BL) Then
|
|
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
|
|
End If
|
|
' Ruoto eventuali cerchietti alle estremità della curva di contorno
|
|
RotateCircles(ptCent, Vector3d.Z_AX(), dRotAngDeg)
|
|
End If
|
|
' Incremento opportunamente la rotazione della fotografia
|
|
Dim dPhotoRot As Double = m_dPhotoRot + dRotAngDeg
|
|
EstPhoto.ChangeRotationPhoto(ptCent, dPhotoRot)
|
|
' Ruoto eventuale contorno
|
|
If nCrvId <> GDB_ID.NULL Then EgtRotate(nCrvId, ptCent, Vector3d.Z_AX(), dRotAngDeg, GDB_RT.GLOB)
|
|
' Aggiorno interfaccia
|
|
SetPhotoRot(dPhotoRot)
|
|
' Aggiorno dimensioni e posizione grezzo
|
|
UpdateRawXYData()
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Private Function CreateRawFromPhotoContour() As Boolean
|
|
' Calcolo offset interno di kerf dal contorno riconosciuto nella fotografia
|
|
Dim nCount As Integer = 0
|
|
Dim nKerfId As Integer = EgtOffsetCurveAdv(EstPhoto.GetContour(), -m_dKerf, OFF_TYPE.EXTEND, nCount)
|
|
Dim nSiCnt As Integer = 0
|
|
If nKerfId = GDB_ID.NULL OrElse Not EgtCurveIsClosed(nKerfId) OrElse
|
|
(Not EgtCurveSelfIntersCount(nKerfId, nSiCnt) OrElse nSiCnt > 0) Then
|
|
EgtOutLog("Error on RawPart from Photo Contour")
|
|
' Creo un rettangolo, se possibile
|
|
Dim nParentId As Integer = EgtGetParent(EstPhoto.GetContour())
|
|
Dim b3Crv As New BBox3d
|
|
If EgtGetBBox(EstPhoto.GetContour(), GDB_BB.STANDARD, b3Crv) Then
|
|
nKerfId = EgtCreateRectangle2P(nParentId, b3Crv.Min(), b3Crv.Max(), GDB_RT.LOC)
|
|
nCount = 1
|
|
Else
|
|
Return False
|
|
End If
|
|
End If
|
|
' Cancello eventuali curve risultato dell'offset oltre la prima
|
|
For i = 1 To nCount - 1
|
|
EgtErase(nKerfId + i)
|
|
Next
|
|
' Cancello il vecchio kerf
|
|
EgtErase(EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF))
|
|
' Sposto la curva di offset nel gruppo del grezzo e la rinomino come kerf
|
|
EgtRelocateGlob(nKerfId, EstCalc.GetRawId())
|
|
EgtSetName(nKerfId, NAME_KERF)
|
|
EgtSetColor(nKerfId, m_KerfCol)
|
|
' Aggiorno il grezzo, l'ingombro e la posizione
|
|
UpdateRawPartKerf()
|
|
Return True
|
|
End Function
|
|
|
|
Private Sub AdjustRawPartOnStart()
|
|
' Se non c'è la foto va già bene così
|
|
If GetPhoto() = GDB_ID.NULL Then Return
|
|
' Disabilito impostazione modificato
|
|
Dim bOldEnMod = EgtGetEnableModified()
|
|
If bOldEnMod Then EgtDisableModified()
|
|
' Disabilito la texture sul grezzo
|
|
Dim nSolidId = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_RAW_SOLID)
|
|
EgtRemoveTextureData(nSolidId)
|
|
' Sistemo il colore
|
|
Dim Col = m_RawCol
|
|
Col.A = 20
|
|
EgtSetColor(nSolidId, Col, True)
|
|
' Ripristino precedente impostazione modificato
|
|
If bOldEnMod Then EgtEnableModified()
|
|
End Sub
|
|
|
|
Private Sub AdjustRawPartOnExit()
|
|
' Se non c'è il grezzo, esco
|
|
If EstCalc.GetRawId() = GDB_ID.NULL Then Return
|
|
' Disabilito impostazione modificato
|
|
Dim bOldEnMod = EgtGetEnableModified()
|
|
If bOldEnMod Then EgtDisableModified()
|
|
' Salvo la modalità di definizione
|
|
If SelType = Type.RECTANGLE Then
|
|
EgtRemoveInfo(EstCalc.GetRawId(), KEY_RAWBYPOINTS)
|
|
Else
|
|
EgtSetInfo(EstCalc.GetRawId(), KEY_RAWBYPOINTS, 1)
|
|
End If
|
|
' Verifico senso antiorario della curva di kerf
|
|
Dim nKerfId = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
Dim dArea As Double
|
|
If EgtCurveAreaXY(nKerfId, dArea) AndAlso dArea < 0 Then
|
|
EgtInvertCurve(nKerfId)
|
|
End If
|
|
' Elimino regioni per nesting
|
|
RemoveNestRegions()
|
|
' Se c'è la foto devo sistemare
|
|
If GetPhoto() <> GDB_ID.NULL Then
|
|
' Carico la texture della foto sul grezzo
|
|
Dim nSolidId = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_RAW_SOLID)
|
|
EgtSetTextureName(nSolidId, EstPhoto.GetPhotoName())
|
|
' Sistemo il riferimento della texture
|
|
Dim refTxr As New Frame3d
|
|
GetPhotoTextureRef(refTxr)
|
|
EgtSetTextureFrame(nSolidId, refTxr, GDB_RT.GLOB)
|
|
' Sistemo il colore
|
|
Dim colWhite As New Color3d(255, 255, 255, 100)
|
|
EgtSetColor(nSolidId, colWhite)
|
|
' Anche per il contorno
|
|
Dim nOutlineId = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_RAW_OUTLINE)
|
|
EgtSetColor(nOutlineId, colWhite)
|
|
EgtSetStatus(nOutlineId, GDB_ST.OFF)
|
|
' Nascondo la foto
|
|
ShowPhoto(False)
|
|
End If
|
|
' Ripristino precedente impostazione modificato
|
|
If bOldEnMod Then EgtEnableModified()
|
|
End Sub
|
|
|
|
Private Function RemoveNestRegions() As Boolean
|
|
' Cancello eventuale vecchia regione fuori kerf per nesting
|
|
EgtErase(EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_OUTKERF_REG))
|
|
' Cancello eventuale vecchia regione di riferimento per nesting
|
|
EgtErase(EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_REF_REG))
|
|
' Cancello eventuali vecchie regioni aree rovinate per nesting
|
|
Dim nId As Integer = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_DAMAGED_REG)
|
|
While nId <> GDB_ID.NULL
|
|
EgtErase(nId)
|
|
nId = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_DAMAGED_REG)
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Private Sub AddNewDamagedArea()
|
|
' Creo triangolo che abbia il punto selezionato come centro (lato 100mm)
|
|
' calcolo punto in basso a sinistra
|
|
Dim ptBottomLeft As Point3d = New Point3d(m_ptPrev.x - 50,
|
|
m_ptPrev.y - (100 / 6 * Math.Sqrt(3)),
|
|
m_ptTableMin.z + CurrentMachine.dAdditionalTable + m_dHeight)
|
|
Dim vtRight As Vector3d = New Vector3d(100, 0, 0)
|
|
' creo lato base
|
|
Dim nBaseId As Integer = EgtCreateLine(EstCalc.GetRawId(), ptBottomLeft, ptBottomLeft + vtRight, GDB_RT.GLOB)
|
|
' calcolo vertice superiore del triangolo
|
|
Dim vtTop As New Vector3d(vtRight)
|
|
vtTop.Rotate(Vector3d.Z_AX, 60)
|
|
' creo lati inclinati
|
|
Dim nCat1 As Integer = EgtCreateLine(EstCalc.GetRawId(), ptBottomLeft + vtRight, ptBottomLeft + vtTop, GDB_RT.GLOB)
|
|
Dim nCAt2 As Integer = EgtCreateLine(EstCalc.GetRawId(), ptBottomLeft + vtTop, ptBottomLeft, GDB_RT.GLOB)
|
|
' Creo contorno zona rovinata
|
|
Dim nDmgId As Integer = EgtCreateCurveCompoByChain(EstCalc.GetRawId(), 3, {nBaseId, nCat1, nCAt2}, ptBottomLeft, True)
|
|
' Assegno il nome alla CCompo creata
|
|
EgtSetName(nDmgId, NAME_DAMAGED)
|
|
' e il colore
|
|
EgtSetColor(nDmgId, m_KerfCol)
|
|
' Imposto come area danneggiata corrente
|
|
m_nSelDmg = nDmgId
|
|
' Disabilito modalità aggiungi zona rovinata
|
|
m_nPtDmgMode = DMGMODE.NONE
|
|
End Sub
|
|
|
|
Private Sub RemoveDamagedArea()
|
|
' Elimino area rovinata selezionata
|
|
EgtErase(m_nSelDmg)
|
|
' Dichiaro zona danneggiata non selezionata
|
|
m_nSelDmg = GDB_ID.NULL
|
|
' Disabilito modalità rimuovi zona rovinata
|
|
m_nPtDmgMode = DMGMODE.NONE
|
|
End Sub
|
|
|
|
Private Sub UpdateCircles()
|
|
' Elimino vecchi punti finali
|
|
EgtEmptyGroup(m_nTempLay)
|
|
' Identificativo curva
|
|
Dim nId As Integer = GDB_ID.NULL
|
|
If GetRawMode() = RAWMODE.BY_POINTS Then
|
|
nId = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
ElseIf GetRawMode() = RAWMODE.DAMAGED Then
|
|
nId = m_nSelDmg
|
|
End If
|
|
' Verifico validità curva
|
|
If nId = GDB_ID.NULL Then Return
|
|
' riferimento globale della stessa
|
|
Dim frRef As New Frame3d
|
|
EgtGetGlobFrame(nId, frRef)
|
|
' Recupero i punti finali delle diverse entità componenti
|
|
Dim dU As Double = 1
|
|
Dim ptP As Point3d
|
|
While EgtAtParamPoint(nId, dU, ptP)
|
|
ptP.ToGlob(frRef)
|
|
CreateCircle(m_nTempLay, ptP)
|
|
dU += 1
|
|
End While
|
|
End Sub
|
|
|
|
Private Sub MoveCircles(vtMove As Vector3d)
|
|
Dim nId As Integer = EgtGetFirstInGroup(m_nTempLay)
|
|
While nId <> GDB_ID.NULL
|
|
EgtMove(nId, vtMove, GDB_RT.GLOB)
|
|
nId = EgtGetNext(nId)
|
|
End While
|
|
End Sub
|
|
|
|
Private Sub RotateCircles(ptAx As Point3d, vtAx As Vector3d, dAngDeg As Double)
|
|
Dim nId As Integer = EgtGetFirstInGroup(m_nTempLay)
|
|
While nId <> GDB_ID.NULL
|
|
EgtRotate(nId, ptAx, vtAx, dAngDeg, GDB_RT.GLOB)
|
|
nId = EgtGetNext(nId)
|
|
End While
|
|
End Sub
|
|
|
|
Private Sub RemoveCircles()
|
|
EgtEmptyGroup(m_nTempLay)
|
|
End Sub
|
|
|
|
Private Function CreateCircle(nLayerId As Integer, ptP As Point3d) As Boolean
|
|
' Aggiungo cerchio
|
|
Dim nCircId As Integer = EgtCreateCircle(nLayerId, ptP, RAD_CIRCLE)
|
|
EgtSetColor(nCircId, New Color3d(255, 0, 0))
|
|
Return True
|
|
End Function
|
|
|
|
Private Function ValidateCurrMachMatThick() As Boolean
|
|
' Verifico che le lavorazioni correnti siano compatibili con materiale e spessore
|
|
' Lama
|
|
Dim bOk As Boolean = True
|
|
EgtMdbSetCurrMachining(CurrentMachine.sCurrSawing)
|
|
bOk = bOk And CurrMachWindowVM.VerifyMatThickCompatibility()
|
|
' Fresa
|
|
If Not String.IsNullOrWhiteSpace(CurrentMachine.sCurrMilling) Then
|
|
EgtMdbSetCurrMachining(CurrentMachine.sCurrMilling)
|
|
bOk = bOk And CurrMachWindowVM.VerifyMatThickCompatibility()
|
|
End If
|
|
' Foretto
|
|
If Not String.IsNullOrWhiteSpace(CurrentMachine.sCurrDrilling) Then
|
|
EgtMdbSetCurrMachining(CurrentMachine.sCurrDrilling)
|
|
bOk = bOk And CurrMachWindowVM.VerifyMatThickCompatibility()
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Private Function ValidateCurrMachToolIsInSetUp() As Boolean
|
|
Dim bOk As Boolean = True
|
|
Dim sTUUID As String = String.Empty
|
|
If Not String.IsNullOrWhiteSpace(CurrentMachine.sCurrSawing) Then
|
|
EgtMdbSetCurrMachining(CurrentMachine.sCurrSawing)
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sTUUID)
|
|
bOk = bOk And SetUpUtility.IsToolInSetUp(sTUUID)
|
|
End If
|
|
' Fresa
|
|
If Not String.IsNullOrWhiteSpace(CurrentMachine.sCurrMilling) Then
|
|
EgtMdbSetCurrMachining(CurrentMachine.sCurrMilling)
|
|
sTUUID = String.Empty
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sTUUID)
|
|
bOk = bOk And SetUpUtility.IsToolInSetUp(sTUUID)
|
|
End If
|
|
' Foretto
|
|
If Not String.IsNullOrWhiteSpace(CurrentMachine.sCurrDrilling) Then
|
|
EgtMdbSetCurrMachining(CurrentMachine.sCurrDrilling)
|
|
sTUUID = String.Empty
|
|
EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sTUUID)
|
|
bOk = bOk And SetUpUtility.IsToolInSetUp(sTUUID)
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Private Sub UpdateTabState()
|
|
If ValidateCurrMachMatThick() Then
|
|
OmagOFFICEMap.refOptionPanelVM.NestTabIsEnabled = True
|
|
OmagOFFICEMap.refOptionPanelVM.MachTabIsEnabled = True
|
|
OmagOFFICEMap.refOptionPanelVM.SimulTabIsEnabled = True
|
|
OmagOFFICEMap.refOptionPanelVM.RawPart_Background = OmagOFFICEDictionary.TabControl_Header_Background
|
|
CurrMach_Background = DirectCast(New BrushConverter().ConvertFrom("#FFDDDDDD"), SolidColorBrush)
|
|
Else
|
|
OmagOFFICEMap.refOptionPanelVM.NestTabIsEnabled = False
|
|
OmagOFFICEMap.refOptionPanelVM.MachTabIsEnabled = False
|
|
OmagOFFICEMap.refOptionPanelVM.SimulTabIsEnabled = False
|
|
OmagOFFICEMap.refOptionPanelVM.RawPart_Background = Brushes.Red
|
|
CurrMach_Background = Brushes.Red
|
|
End If
|
|
If Not ValidateCurrMachToolIsInSetUp() Then
|
|
OmagOFFICEMap.refMachinePanelVM.SetUp_Background = Brushes.Red
|
|
Else
|
|
OmagOFFICEMap.refMachinePanelVM.SetUp_Background = DirectCast(New BrushConverter().ConvertFrom("#FFDDDDDD"), SolidColorBrush)
|
|
End If
|
|
If String.IsNullOrWhiteSpace(CurrentMachine.sCurrSawing) And String.IsNullOrWhiteSpace(CurrentMachine.sCurrWaterJetting) Then
|
|
CurrMach_Background = Brushes.Red
|
|
End If
|
|
End Sub
|
|
|
|
Friend Sub Refresh(PrevMeasureUnit As MeasureUnitOpt)
|
|
NotifyPropertyChanged("Length")
|
|
NotifyPropertyChanged("Width")
|
|
NotifyPropertyChanged("Height")
|
|
NotifyPropertyChanged("OffsetX")
|
|
NotifyPropertyChanged("OffsetY")
|
|
NotifyPropertyChanged("Kerf")
|
|
End Sub
|
|
|
|
#End Region ' METHODS
|
|
|
|
#Region "COMMANDS"
|
|
|
|
#Region "CurrMachCommand"
|
|
|
|
Public ReadOnly Property CurrMachCommand As ICommand
|
|
Get
|
|
If m_cmdCurrMach Is Nothing Then
|
|
m_cmdCurrMach = New Command(AddressOf CurrMach)
|
|
End If
|
|
Return m_cmdCurrMach
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub CurrMach(ByVal param As Object)
|
|
' Apro finestra di configurazione delle lavorazioni correnti
|
|
Dim CurrMachWindow As New CurrMachWindowV(Application.Current.MainWindow, New CurrMachWindowVM)
|
|
CurrMachWindow.ShowDialog()
|
|
UpdateTabState()
|
|
OmagOFFICEMap.refMachGroupPanelVM.SelectedMachGroup.NotifyPropertyChanged("MachGroupToolTip")
|
|
End Sub
|
|
|
|
#End Region ' CurrMachCommand
|
|
|
|
#Region "SlabIdCommand"
|
|
|
|
Public ReadOnly Property SlabIdCommand As ICommand
|
|
Get
|
|
If m_cmdSlabId Is Nothing Then
|
|
m_cmdSlabId = New Command(AddressOf SlabId)
|
|
End If
|
|
Return m_cmdSlabId
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub SlabId(ByVal param As Object)
|
|
Dim nRawId As Integer = EstCalc.GetRawId()
|
|
If nRawId = GDB_ID.NULL Then Return
|
|
' Finestra input dati
|
|
Dim DlgSlabIdVM As New SlabIdWindowVM()
|
|
Dim DlgSlabIdV As New SlabIdWindowV(Application.Current.MainWindow, DlgSlabIdVM)
|
|
' Recupero eventuali vecchi dati della lastra
|
|
Dim sBlockName As String = "" : Dim sSlabNbr As String = ""
|
|
EgtGetInfo( nRawId, INFO_RAW_BLOCK, sBlockName)
|
|
EgtGetInfo( nRawId, INFO_RAW_SLABNBR, sSlabNbr)
|
|
DlgSlabIdVM.SetData( sBlockName, sSlabNbr)
|
|
' Visualizzo finestra richiesta dati
|
|
If DlgSlabIdV.ShowDialog() Then
|
|
DlgSlabIdVM.GetData( sBlockName, sSlabNbr)
|
|
' Assegno info
|
|
EgtSetInfo( nRawId, INFO_RAW_BLOCK, sBlockName)
|
|
EgtSetInfo( nRawId, INFO_RAW_SLABNBR, sSlabNbr)
|
|
' Aggiorno nome lastra
|
|
If Not String.IsNullOrWhiteSpace( sBlockName) And Not String.IsNullOrWhiteSpace( sBlockName) Then
|
|
Dim sSlabName = sBlockName & "-" & sSlabNbr
|
|
EstCalc.SetSlabName( sSlabName)
|
|
' notifico il MachGroup Corrente
|
|
OmagOFFICEMap.refMachGroupPanelVM.SelectedMachGroup.NotifyPropertyChanged("MachGroupToolTip")
|
|
End If
|
|
' Cancello vecchio BarCode e se definito inserisco nuovo
|
|
Dim sBarCode As String = sBlockName & " - " & sSlabNbr
|
|
ShowBarCode( nRawId, sBarCode)
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' SlabIdCommand
|
|
|
|
#Region "PhotoCommand"
|
|
|
|
Public ReadOnly Property PhotoCommand As ICommand
|
|
Get
|
|
If m_cmdPhoto Is Nothing Then
|
|
m_cmdPhoto = New Command(AddressOf Photo)
|
|
End If
|
|
Return m_cmdPhoto
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub ClosePhotoWnd()
|
|
m_bSlabIsSelectedFromDB = True
|
|
OmagPhoto.Close()
|
|
End Sub
|
|
|
|
Public Sub Photo(ByVal param As Object)
|
|
|
|
Dim sPhoto As String = String.Empty
|
|
Dim sSlabNameDB As String = ""
|
|
|
|
Dim nSlabId As Integer = 0
|
|
Dim sBlockCode As String = ""
|
|
Dim sSlabCode As String = ""
|
|
Dim sSlabName As String = ""
|
|
Dim sMat As String = ""
|
|
|
|
' cancello eventuali nome di materiali da DB
|
|
SetMaterialFromDB(String.Empty)
|
|
|
|
If OmagOFFICEMap.refMainWindowVM.MainWindowM.m_SlabDB Then
|
|
' recupero il nome del progetto corrente
|
|
Dim sFileProject As String = String.Empty
|
|
EgtGetCurrFilePath(sFileProject)
|
|
' devo verificare se attualmente c'è una foto di lastra nel MachGroup corrente
|
|
If Not IsNothing(OmagOFFICEMap.refMachGroupPanelVM.SelectedMachGroup) Then
|
|
Dim CurrMachGroup As MachGroup = OmagOFFICEMap.refMachGroupPanelVM.SelectedMachGroup
|
|
sSlabNameDB = GetSlabName()
|
|
End If
|
|
SetMaterialFromDB(GetMaterialPhoto())
|
|
' salvo il contesto corrente del programma
|
|
Dim nCurrentContetxt As Integer = EgtGetCurrentContext()
|
|
MainData.SetPreviousContext(nCurrentContetxt)
|
|
'If Not IsNothing(MainData.ContextSTONELib) Or MainData.ContextSTONELib <> 0 Then
|
|
If MainData.ContextSTONELib <> 0 Then
|
|
EgtSetCurrentContext(MainData.ContextSTONELib)
|
|
End If
|
|
|
|
' imposto come prima pagina sempre la lista, altrimenti compare l'ultima selezione
|
|
PhotoMap.refProjectVM.SelProjectMode = ProjectSlabVM.ProjectModeOpt.LIST
|
|
' assegno il nome della lastra corrente, se eseguo una nuova selezione la rendo AVAILABLE
|
|
PhotoMap.refOptionPanelVM.sSlabId = sSlabNameDB
|
|
PhotoMap.refOptionPanelVM.sProjectAssigned = sFileProject
|
|
' imposto la ricerca attiva
|
|
PhotoMap.refSearchPanelVM.SetSearchPanel_Visibility(True)
|
|
PhotoMap.refSearchPanelVM.InitSearchPanel()
|
|
' inizializzo la ricerca a tutti le lastre di tipo "AVAILABLE" (=1)
|
|
PhotoMap.refSearchPanelVM.State = 1
|
|
PhotoMap.refSearchPanelVM.Search()
|
|
' inserisco in elenco solo i materiali della macchina corrente
|
|
AddHandler PhotoMap.refOptionPanelVM.SlabIsSelectedOFFICE, AddressOf OmagOFFICEMap.refRawPartTabVM.ClosePhotoWnd
|
|
|
|
' Dim OmagPhotoWnd As New OmagPhotoV(Application.Current.MainWindow(), New OmagPhotoVM)
|
|
'OmagPhotoWnd.ShowDialog()
|
|
Me.OmagPhoto = New OmagPhotoV
|
|
OmagPhoto.ShowDialog()
|
|
|
|
EgtSetCurrentContext(EgtPHOTOLib.MainData.PreviousContext)
|
|
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx())
|
|
|
|
' se non seleziono nessun lastra esco
|
|
If Not m_bSlabIsSelectedFromDB Then Return
|
|
m_bSlabIsSelectedFromDB = False
|
|
Dim LocalSlab As Slab = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab
|
|
|
|
' rimuovo la precedente lastra dalla lista
|
|
OmagOFFICEMap.refMachGroupPanelVM.SlabNameListCurr.Remove(sSlabNameDB)
|
|
|
|
EgtPHOTOLib.PhotoMap.refOptionPanelVM.SetAvailableSlab(sSlabNameDB)
|
|
sPhoto = LocalSlab.ImagePath
|
|
sSlabNameDB = LocalSlab.Id
|
|
' imposto lo spessore della lastra
|
|
Height = LocalSlab.Thickness
|
|
|
|
' imposto il tipo di materiale
|
|
If Not IsNothing(LocalSlab.Material) Then
|
|
Dim bMaterialExists As Boolean = False
|
|
For Each ItemMaterial In MaterialList
|
|
If LocalSlab.Material = ItemMaterial.sName Then
|
|
SelMaterial = ItemMaterial
|
|
bMaterialExists = True
|
|
Exit For
|
|
End If
|
|
Next
|
|
If Not bMaterialExists Then
|
|
EstCalc.SetMaterialPhoto(LocalSlab.Material)
|
|
SetMaterialFromDB(LocalSlab.Material)
|
|
End If
|
|
End If
|
|
' aggiungo la nuova lastra
|
|
OmagOFFICEMap.refMachGroupPanelVM.SlabNameListCurr.Add(sSlabNameDB)
|
|
EgtPHOTOLib.PhotoMap.refOptionPanelVM.SetAssignedSlab(sSlabNameDB)
|
|
Else
|
|
' Apro dialogo per scelta immagine
|
|
Dim PhotoDlg As New Microsoft.Win32.OpenFileDialog()
|
|
PhotoDlg.Title = "Open"
|
|
PhotoDlg.Filter = "Image file(*.jpg;*.png;*.bmp)|*.jpg;*.png;*.bmp"
|
|
PhotoDlg.FilterIndex = 1
|
|
GetMainPrivateProfileString(S_GENERAL, K_IMAGEDIR, "", PhotoDlg.InitialDirectory)
|
|
If Not Directory.Exists(PhotoDlg.InitialDirectory) Then PhotoDlg.InitialDirectory = ""
|
|
If Not PhotoDlg.ShowDialog Then Return
|
|
sPhoto = PhotoDlg.FileName
|
|
End If
|
|
|
|
' Salvo nuovo direttorio corrente per immagini
|
|
WriteMainPrivateProfileString(S_GENERAL, K_IMAGEDIR, Path.GetDirectoryName(sPhoto))
|
|
' Annullo offset e rotazione foto
|
|
SetPhotoOffsetX(0)
|
|
SetPhotoOffsetY(0)
|
|
SetPhotoRot(0)
|
|
' Carico immagine
|
|
If Not EstPhoto.LoadPhoto(sPhoto, nSlabId, sBlockCode, sSlabCode, sSlabName, sMat) Then
|
|
' Ripristino offset e rotazione foto
|
|
Dim dPhotoOffsetX, dPhotoOffsetY, dPhotoRot As Double
|
|
GetPhotoOffsetRot(dPhotoOffsetX, dPhotoOffsetY, dPhotoRot)
|
|
SetPhotoOffsetX(dPhotoOffsetX)
|
|
SetPhotoOffsetY(dPhotoOffsetY)
|
|
SetPhotoRot(dPhotoRot)
|
|
' Errore nel caricamento della fotografia
|
|
MessageBox.Show(EgtMsg(MSG_RAWPARTTAB + 1), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.OK, MessageBoxImage.Error)
|
|
Return
|
|
End If
|
|
' Se da DB aggiorno nome lastra
|
|
If OmagOFFICEMap.refMainWindowVM.MainWindowM.m_SlabDB Then sSlabName = sSlabNameDB
|
|
' Aggiorno immagini nel VeinMatching
|
|
VeinMatching.RemoveUnusedPhotos()
|
|
' Parcheggio tutti i pezzi presenti nella lastra
|
|
Dim nPartId As Integer = EgtGetFirstPartInRawPart(GetRawId())
|
|
While nPartId <> GDB_ID.NULL
|
|
' Recupero identificativo del successivo
|
|
Dim nNextPartId As Integer = EgtGetNextPartInRawPart(nPartId)
|
|
' Metto in parcheggio
|
|
EstCalc.StoreOnePart(nPartId)
|
|
' Notifica al VeinMatching
|
|
VeinMatching.OnRemovePartFromRaw(nPartId)
|
|
' Passo al successivo
|
|
nPartId = nNextPartId
|
|
End While
|
|
EstCalc.HideParkedParts()
|
|
|
|
' Imposto nome e spessore lastra
|
|
If Not String.IsNullOrEmpty(sSlabName) Then EstCalc.SetSlabName(sSlabName)
|
|
If Not String.IsNullOrEmpty(sBlockCode) Then EstCalc.SetBlockCode(sBlockCode)
|
|
If Not String.IsNullOrEmpty(sSlabCode) Then EstCalc.SetSlabCode(sSlabCode)
|
|
EstCalc.SetSlabHeight(m_dHeight)
|
|
' Visualizzo eventuale codice
|
|
Dim sBarCode As String = sBlockCode & " - " & sSlabCode
|
|
ShowBarCode( EstCalc.GetRawId(), sBarCode)
|
|
' notifico il MachGroup Corrente
|
|
OmagOFFICEMap.refMachGroupPanelVM.SelectedMachGroup.NotifyPropertyChanged("MachGroupToolTip")
|
|
' Carico contorno
|
|
EstPhoto.LoadContour(sPhoto)
|
|
Dim nCntId As Integer = EstPhoto.GetContour()
|
|
' Se disponibile, imposto possibilità di contorno da foto
|
|
If nCntId = GDB_ID.NULL Then
|
|
If m_TypeList.Count = 3 Then m_TypeList.RemoveAt(2)
|
|
Else
|
|
If m_TypeList.Count = 2 Then m_TypeList.Add(EgtMsg(MSG_RAWPARTPAGEUC + 35))
|
|
SelType = Type.FROM_PHOTO
|
|
NotifyPropertyChanged("SelType")
|
|
End If
|
|
' Se sporge dalla tavola, lo centro sulla stessa
|
|
If nCntId <> GDB_ID.NULL Then
|
|
Dim b3Cnt As New BBox3d
|
|
EgtGetBBoxGlob(nCntId, GDB_BB.STANDARD, b3Cnt)
|
|
Dim b3Tab As New BBox3d(m_ptTableMin, m_ptTableMin + New Vector3d(m_dTableLength, m_dTableWidth, 0))
|
|
If Not b3Tab.EnclosesXY(b3Cnt) Then ModifyPhoto(b3Tab.Center() - b3Cnt.Center())
|
|
End If
|
|
' Abilito movimento foto con mouse
|
|
PhotoWithMouse = True
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
#End Region ' PhotoCommand
|
|
|
|
#Region "ConfirmPhotoCommand"
|
|
|
|
Public ReadOnly Property ConfirmPhotoCommand As ICommand
|
|
Get
|
|
If m_cmdConfirmPhoto Is Nothing Then
|
|
m_cmdConfirmPhoto = New Command(AddressOf ConfirmPhoto)
|
|
End If
|
|
Return m_cmdConfirmPhoto
|
|
End Get
|
|
End Property
|
|
|
|
Public Sub ConfirmPhoto(ByVal param As Object)
|
|
' Passo in modalità per punti
|
|
SelType = RAWMODE.BY_POINTS
|
|
NotifyPropertyChanged("SelType")
|
|
' Disabilito eventuale movimento foto con mouse
|
|
PhotoWithMouse = False
|
|
End Sub
|
|
|
|
#End Region ' ConfirmPhotoCommand
|
|
|
|
#End Region ' COMMANDS
|
|
|
|
#Region "EVENTS"
|
|
|
|
Friend Sub OnMouseDownScene(sender As Object, e As Windows.Forms.MouseEventArgs)
|
|
' Verifico cosa selezionato
|
|
Dim nSolidId As Integer = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_RAW_SOLID)
|
|
Dim nKerfId As Integer = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
Dim nPhotoId As Integer = GetPhoto()
|
|
EgtSetObjFilterForSelWin(True, True, True, True, True)
|
|
Dim nSel As Integer
|
|
EgtSelect(e.Location, 2 * Scene.DIM_SEL, 2 * Scene.DIM_SEL, nSel)
|
|
' Ricavo nome dell'entità selezionata e identificativo
|
|
Dim nSelId As Integer = EgtGetFirstObjInSelWin()
|
|
Dim sName As String = String.Empty
|
|
While nSelId <> GDB_ID.NULL
|
|
sName = String.Empty
|
|
EgtGetName(nSelId, sName)
|
|
If m_PhotoWithMouse Then
|
|
If nSelId = nPhotoId Then
|
|
m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev)
|
|
m_nDragEnt = -1
|
|
m_dDragPar = -1
|
|
Exit While
|
|
End If
|
|
ElseIf sName = NAME_RAW_SOLID Then
|
|
m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev)
|
|
m_nDragEnt = -1
|
|
m_dDragPar = -1
|
|
ElseIf sName = NAME_KERF And
|
|
(GetRawMode() = RAWMODE.RECTANGLE Or GetRawMode() = RAWMODE.BY_POINTS) Then
|
|
m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev)
|
|
Dim dDist, dU As Double
|
|
If Not EgtPointCurveDist(m_ptPrev.Loc(nKerfId), nKerfId, nKerfId, dDist, dU) Then
|
|
m_bDrag = False
|
|
End If
|
|
m_nDragEnt = CInt(Math.Ceiling(dU))
|
|
m_dDragPar = dU
|
|
' Privilegio il kerf, pertanto esco
|
|
Exit While
|
|
ElseIf sName = NAME_DAMAGED And GetRawMode() = RAWMODE.DAMAGED Then
|
|
m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev)
|
|
Dim dDist, dU As Double
|
|
If Not EgtPointCurveDist(m_ptPrev.Loc(nSelId), nSelId, nSelId, dDist, dU) Then
|
|
m_bDrag = False
|
|
End If
|
|
m_nDragEnt = CInt(Math.Ceiling(dU))
|
|
m_dDragPar = dU
|
|
m_nSelDmg = nSelId
|
|
' Aggiorno cerchi
|
|
UpdateCircles()
|
|
EgtDraw()
|
|
' Privilegio l'area danneggiata, pertanto esco
|
|
Exit While
|
|
End If
|
|
nSelId = EgtGetNextObjInSelWin()
|
|
End While
|
|
' se drag e modalità punti
|
|
If m_bDrag And Not m_PhotoWithMouse And GetRawMode() = RAWMODE.BY_POINTS Then
|
|
' se aggiungi punto
|
|
If m_nPtMode = PTMODE.ADD Then
|
|
If EgtAddCurveCompoJoint(nKerfId, m_dDragPar) Then m_dDragPar = Math.Ceiling(m_dDragPar)
|
|
' il grezzo non è cambiato, perchè il nuovo punto è sulla vecchia linea
|
|
m_AddPoint = False
|
|
NotifyPropertyChanged("AddPoint")
|
|
m_nPtMode = PTMODE.MOVE
|
|
' Aggiorno cerchi
|
|
UpdateCircles()
|
|
EgtDraw()
|
|
' altrimenti
|
|
Else
|
|
' verifico se abbastanza vicino ad un estremo
|
|
Dim ptJoint As Point3d
|
|
If Not EgtAtParamPoint(nKerfId, Math.Round(m_dDragPar), GDB_ID.ROOT, ptJoint) OrElse
|
|
Point3d.SqDistXY(ptJoint, m_ptPrev) > RAD_CIRCLE * RAD_CIRCLE Then
|
|
' se premuto Alt, permetto di muovere il grezzo
|
|
If (Keyboard.Modifiers And ModifierKeys.Alt) > 0 Then
|
|
m_nDragEnt = -1
|
|
Else
|
|
m_bDrag = False
|
|
End If
|
|
End If
|
|
' se rimuovi
|
|
If m_nDragEnt <> -1 And m_nPtMode = PTMODE.REMOVE Then
|
|
' ci devono essere almeno 4 punti
|
|
If EgtGetCurveCompoJointCount(nKerfId) >= 4 Then
|
|
EgtRemoveCurveCompoJoint(nKerfId, CInt(m_dDragPar))
|
|
' Aggiorno il solido del grezzo, l'ingombro e la posizione
|
|
UpdateRawPartKerf(False)
|
|
' Aggiorno cerchi
|
|
UpdateCircles()
|
|
EgtDraw()
|
|
End If
|
|
m_RemovePoint = False
|
|
NotifyPropertyChanged("RemovePoint")
|
|
m_nPtMode = PTMODE.MOVE
|
|
m_bDrag = False
|
|
End If
|
|
End If
|
|
' se drag e modalità zona danneggiata
|
|
ElseIf m_bDrag And GetRawMode() = RAWMODE.DAMAGED Then
|
|
' se aggiungi zona rovinata
|
|
If m_nPtDmgMode = DMGMODE.ADD Then
|
|
AddNewDamagedArea()
|
|
' Aggiorno
|
|
m_NewDA = False
|
|
NotifyPropertyChanged("NewDA")
|
|
UpdateCircles()
|
|
EgtDraw()
|
|
' se rimuovi zona rovinata
|
|
ElseIf m_nPtDmgMode = DMGMODE.REMOVE Then
|
|
' Verifico di essere sulla zona danneggiata
|
|
Dim ptNear As Point3d
|
|
If EgtAtParamPoint(m_nSelDmg, m_dDragPar, GDB_ID.ROOT, ptNear) And
|
|
Point3d.SqDistXY(ptNear, m_ptPrev) <= RAD_CIRCLE * RAD_CIRCLE Then
|
|
RemoveDamagedArea()
|
|
' Aggiorno
|
|
m_DeleteDA = False
|
|
NotifyPropertyChanged("DeleteDA")
|
|
End If
|
|
' Aggiorno cerchi
|
|
UpdateCircles()
|
|
EgtDraw()
|
|
' altrimenti eventuali operazioni di punto
|
|
Else
|
|
' se aggiungi punto
|
|
If m_nPtMode = PTMODE.ADD Then
|
|
If EgtAddCurveCompoJoint(m_nSelDmg, m_dDragPar) Then m_dDragPar = Math.Ceiling(m_dDragPar)
|
|
' il grezzo non è cambiato, perchè il nuovo punto è sulla vecchia linea
|
|
m_AddPoint = False
|
|
NotifyPropertyChanged("AddPoint")
|
|
m_nPtMode = PTMODE.MOVE
|
|
' Aggiorno cerchi
|
|
UpdateCircles()
|
|
EgtDraw()
|
|
' altrimenti
|
|
Else
|
|
' verifico di essere abbastanza vicino ad un estremo
|
|
Dim ptJoint As Point3d
|
|
If Not EgtAtParamPoint(m_nSelDmg, Math.Round(m_dDragPar), GDB_ID.ROOT, ptJoint) OrElse
|
|
Point3d.SqDistXY(ptJoint, m_ptPrev) > RAD_CIRCLE * RAD_CIRCLE Then
|
|
m_bDrag = False
|
|
End If
|
|
' se rimuovi
|
|
If m_bDrag And m_nPtMode = PTMODE.REMOVE Then
|
|
' ci devono essere almeno 4 punti
|
|
If EgtGetCurveCompoJointCount(m_nSelDmg) >= 4 Then
|
|
EgtRemoveCurveCompoJoint(m_nSelDmg, CInt(m_dDragPar))
|
|
' aggiorno il solido del grezzo, l'ingombro e la posizione
|
|
UpdateRawPartKerf(False)
|
|
' Aggiorno cerchi
|
|
UpdateCircles()
|
|
EgtDraw()
|
|
End If
|
|
m_RemovePoint = False
|
|
NotifyPropertyChanged("RemovePoint")
|
|
m_nPtMode = PTMODE.MOVE
|
|
m_bDrag = False
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Friend Sub OnMouseMoveScene(sender As Object, e As System.Windows.Forms.MouseEventArgs)
|
|
' Verifico di essere in modalità drag
|
|
If Not m_bDrag Then Return
|
|
' Ricavo il punto corrente in coordinate mondo
|
|
Dim ptCurr As Point3d
|
|
EgtUnProjectPoint(e.Location, ptCurr)
|
|
' Eseguo solo se movimento significativo
|
|
If Point3d.SqDistXY(ptCurr, m_ptPrev) < 0.01 Then Return
|
|
' Eseguo modifica
|
|
If m_PhotoWithMouse Then
|
|
ModifyPhoto(ptCurr)
|
|
Else
|
|
Select Case GetRawMode()
|
|
Case RAWMODE.RECTANGLE
|
|
ModifyRectangle(ptCurr)
|
|
Case RAWMODE.BY_POINTS
|
|
ModifyGeneric(ptCurr)
|
|
Case RAWMODE.DAMAGED
|
|
ModifyDamaged(ptCurr)
|
|
End Select
|
|
End If
|
|
' Aggiorno il punto precedente
|
|
m_ptPrev = ptCurr
|
|
End Sub
|
|
|
|
Private Sub ModifyPhoto(ptCurr As Point3d)
|
|
ModifyPhoto(ptCurr - m_ptPrev)
|
|
End Sub
|
|
|
|
Private Sub ModifyRectangle(ptCurr As Point3d)
|
|
' Se movimento del grezzo
|
|
If m_nDragEnt = -1 Then
|
|
' Ricavo il vettore di movimento (tengo solo XY)
|
|
Dim vtMove As Vector3d = ptCurr - m_ptPrev
|
|
vtMove.z = 0
|
|
' Muovo il grezzo
|
|
If EgtMoveRawPart(EstCalc.GetRawId(), vtMove) Then
|
|
EstCalc.UpdateRawPart()
|
|
EgtDraw()
|
|
' Aggiorno gli offset
|
|
m_dOffsetX += vtMove.x
|
|
m_dOffsetY += vtMove.y
|
|
NotifyPropertyChanged("OffsetX")
|
|
NotifyPropertyChanged("OffsetY")
|
|
End If
|
|
' se sposto lato sotto
|
|
ElseIf m_nDragEnt = 1 Then
|
|
Dim dDelta = ptCurr.y - m_ptPrev.y
|
|
If m_dWidth - dDelta > MIN_RAW_DIM And m_dOffsetY + dDelta > m_dKerf Then
|
|
m_dWidth -= dDelta
|
|
m_dOffsetY += dDelta
|
|
EgtModifyRawPartSize(EstCalc.GetRawId(), m_dLength + 2 * m_dKerf, m_dWidth + 2 * m_dKerf, m_dHeight)
|
|
EstCalc.UpdateRawPart()
|
|
AdjustRawPartKerf()
|
|
Dim vtMove As New Vector3d(0, dDelta, 0)
|
|
EgtMoveRawPart(EstCalc.GetRawId(), vtMove)
|
|
EstCalc.UpdateRawPart()
|
|
EgtDraw()
|
|
NotifyPropertyChanged("Width")
|
|
NotifyPropertyChanged("OffsetY")
|
|
End If
|
|
' se sposto lato a destra
|
|
ElseIf m_nDragEnt = 2 Then
|
|
Dim dDelta = ptCurr.x - m_ptPrev.x
|
|
If m_dLength + dDelta > MIN_RAW_DIM And
|
|
m_dOffsetX + m_dLength + dDelta + m_dKerf < m_dTableLength Then
|
|
m_dLength += dDelta
|
|
EgtModifyRawPartSize(EstCalc.GetRawId(), m_dLength + 2 * m_dKerf, m_dWidth + 2 * m_dKerf, m_dHeight)
|
|
EstCalc.UpdateRawPart()
|
|
AdjustRawPartKerf()
|
|
EgtDraw()
|
|
NotifyPropertyChanged("Length")
|
|
End If
|
|
' se sposto lato sopra
|
|
ElseIf m_nDragEnt = 3 Then
|
|
Dim dDelta = ptCurr.y - m_ptPrev.y
|
|
If m_dWidth + dDelta > MIN_RAW_DIM And
|
|
m_dOffsetY + m_dWidth + dDelta + m_dKerf < m_dTableWidth Then
|
|
m_dWidth += dDelta
|
|
EgtModifyRawPartSize(EstCalc.GetRawId(), m_dLength + 2 * m_dKerf, m_dWidth + 2 * m_dKerf, m_dHeight)
|
|
EstCalc.UpdateRawPart()
|
|
AdjustRawPartKerf()
|
|
EgtDraw()
|
|
NotifyPropertyChanged("Width")
|
|
End If
|
|
' se sposto lato a sinistra
|
|
ElseIf m_nDragEnt = 4 Then
|
|
Dim dDelta = ptCurr.x - m_ptPrev.x
|
|
If m_dLength - dDelta > MIN_RAW_DIM And m_dOffsetX + dDelta > m_dKerf Then
|
|
m_dLength -= dDelta
|
|
m_dOffsetX += dDelta
|
|
EgtModifyRawPartSize(EstCalc.GetRawId(), m_dLength + 2 * m_dKerf, m_dWidth + 2 * m_dKerf, m_dHeight)
|
|
EstCalc.UpdateRawPart()
|
|
AdjustRawPartKerf()
|
|
Dim vtMove As New Vector3d(dDelta, 0, 0)
|
|
EgtMoveRawPart(EstCalc.GetRawId(), vtMove)
|
|
EstCalc.UpdateRawPart()
|
|
EgtDraw()
|
|
NotifyPropertyChanged("Length")
|
|
NotifyPropertyChanged("OffsetX")
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub ModifyGeneric(ptCurr As Point3d)
|
|
' Se movimento del grezzo
|
|
If m_nDragEnt = -1 Then
|
|
' Ricavo il vettore di movimento (tengo solo XY)
|
|
Dim vtMove As Vector3d = ptCurr - m_ptPrev
|
|
vtMove.z = 0
|
|
' Muovo il grezzo
|
|
If EgtMoveRawPart(EstCalc.GetRawId(), vtMove) Then
|
|
EstCalc.UpdateRawPart()
|
|
' Aggiorno cerchi
|
|
UpdateCircles()
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
' Aggiorno gli offset
|
|
m_dOffsetX += vtMove.x
|
|
m_dOffsetY += vtMove.y
|
|
NotifyPropertyChanged("OffsetX")
|
|
NotifyPropertyChanged("OffsetY")
|
|
End If
|
|
' Altrimenti movimento di un singolo punto
|
|
Else
|
|
' Limito il punto a stare nella tavola con franco pari al kerf
|
|
If ptCurr.x < m_ptTableMin.x + m_dKerf Then ptCurr.x = m_ptTableMin.x + m_dKerf + SAFE_RAW_DIST
|
|
If ptCurr.y < m_ptTableMin.y + m_dKerf Then ptCurr.y = m_ptTableMin.y + m_dKerf + SAFE_RAW_DIST
|
|
If ptCurr.x > m_ptTableMin.x + m_dTableLength - m_dKerf Then ptCurr.x = m_ptTableMin.x + m_dTableLength - m_dKerf - SAFE_RAW_DIST
|
|
If ptCurr.y > m_ptTableMin.y + m_dTableWidth - m_dKerf Then ptCurr.y = m_ptTableMin.y + m_dTableWidth - m_dKerf - SAFE_RAW_DIST
|
|
' Identificativo curva di kerf
|
|
Dim nKerfId = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
' Identifico il punto
|
|
Dim nU As Integer = CInt(m_dDragPar)
|
|
' Aggiusto Z punto movimentato (è in globale)
|
|
ptCurr.z = m_ptTableMin.z + CurrentMachine.dAdditionalTable + m_dHeight
|
|
' Sposto il punto
|
|
If Not EgtModifyCurveCompoJoint(nKerfId, nU, ptCurr, GDB_RT.GLOB) Then Return
|
|
' Aggiorno il grezzo, l'ingombro e la posizione
|
|
UpdateRawPartKerf(False)
|
|
' Aggiorno cerchi
|
|
UpdateCircles()
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub ModifyDamaged(ptCurr As Point3d)
|
|
' Se non selezionata entità, esco
|
|
If m_nDragEnt = -1 Then Return
|
|
' Recupero Id kerf
|
|
Dim nKerfId As Integer = EgtGetFirstNameInGroup(EstCalc.GetRawId(), NAME_KERF)
|
|
' Limito il punto a stare nel kerf
|
|
Dim ptLocCurr As Point3d = ptCurr.Loc(nKerfId)
|
|
Dim dMinDist As Double
|
|
Dim ptLocMin As Point3d
|
|
Dim nSide As Integer
|
|
If EgtPointCurveDistSide(ptLocCurr, nKerfId, Vector3d.Z_AX, nKerfId, dMinDist, ptLocMin, nSide) And nSide = +1 Then
|
|
ptCurr = ptLocMin.Glob(nKerfId)
|
|
End If
|
|
' Identifico il punto
|
|
Dim nU As Integer = CInt(m_dDragPar)
|
|
' Aggiusto Z punto movimentato (è in globale)
|
|
ptCurr.z = m_ptTableMin.z + CurrentMachine.dAdditionalTable + m_dHeight
|
|
' Sposto il punto
|
|
If Not EgtModifyCurveCompoJoint(m_nSelDmg, nU, ptCurr, GDB_RT.GLOB) Then Return
|
|
' Aggiorno cerchi
|
|
UpdateCircles()
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Friend Sub OnMouseUpScene(sender As Object, e As System.Windows.Forms.MouseEventArgs)
|
|
' Disabilito modalità drag
|
|
m_bDrag = False
|
|
End Sub
|
|
|
|
#End Region ' EVENTS
|
|
|
|
End Class
|