Imports System.Collections.ObjectModel Imports System.Collections.Specialized Imports System.Globalization Imports EgtUILib Imports EgtWPFLib5 Public Class RibPanelVM Inherits VMBase #Region "FIELDS & PROPERTIES" Public Enum StartMachTypes As Integer NULL = 0 POINT = 1 COMPO = 2 End Enum Public Enum RibSelectionTypes As Integer CURVE = 1 EXTRUSION = 2 BOTH = 3 End Enum Private m_nPartId As Integer = GDB_ID.NULL Private m_nRibLayerId As Integer = GDB_ID.NULL Friend ReadOnly Property nRibLayerId As Integer Get Return m_nRibLayerId End Get End Property Private m_RibList As New ObservableCollection(Of RibEntity) Public ReadOnly Property RibList As ObservableCollection(Of RibEntity) Get Return m_RibList End Get End Property Private m_SelRib As RibEntity Public Property SelRib As RibEntity Get Return m_SelRib End Get Set(value As RibEntity) m_SelRib = value EgtDeselectLayerObjs(m_nRibLayerId) If Not IsNothing(value) Then EgtSelectObj(value.nCurveId) EgtSelectObj(value.nExtrusionId) ' aggiorno visibilita' bottoni edit NotifyPropertyChanged(NameOf(Compo_Visibility)) ' aggiorno campi di testo posizione NotifyPropertyChanged(NameOf(sXPos)) NotifyPropertyChanged(NameOf(sYPos)) NotifyPropertyChanged(NameOf(sZPos)) End If EgtDraw() End Set End Property Public Property sXPos As String Get If Not IsNothing(m_SelRib) Then Dim nId As Integer = If(m_SelRib.Type = RibEntity.RibTypes.FROMDRAW, m_SelRib.nCurveId, m_SelRib.nExtrusionId) Dim b3Reference As New BBox3d EgtGetBBoxGlob(nId, GDB_BB.STANDARD, b3Reference) Return LenToString(b3Reference.Min.x, 1) Else Return "" End If End Get Set(value As String) Dim nId As Integer = If(m_SelRib.Type = RibEntity.RibTypes.FROMDRAW, m_SelRib.nCurveId, m_SelRib.nExtrusionId) Dim b3Reference As New BBox3d EgtGetBBoxGlob(nId, GDB_BB.STANDARD, b3Reference) Dim dNewXPos As Double = b3Reference.Min.x StringToLen(value, dNewXPos) If dNewXPos >= 0 AndAlso dNewXPos <= CurrentMachine.b3Tab.DimX Then EgtMove(m_SelRib.nCurveId, New Point3d(dNewXPos, b3Reference.Min.y, b3Reference.Min.z) - b3Reference.Min) EgtMove(m_SelRib.nExtrusionId, New Point3d(dNewXPos, b3Reference.Min.y, b3Reference.Min.z) - b3Reference.Min) EgtDraw() Else NotifyPropertyChanged(NameOf(sXPos)) End If ' Imposto flag di ricalcolo slice EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End Set End Property Public Property sYPos As String Get If Not IsNothing(m_SelRib) Then Dim nId As Integer = If(m_SelRib.Type = RibEntity.RibTypes.FROMDRAW, m_SelRib.nCurveId, m_SelRib.nExtrusionId) Dim b3Reference As New BBox3d EgtGetBBoxGlob(nId, GDB_BB.STANDARD, b3Reference) Return LenToString(b3Reference.Min.y, 1) Else Return "" End If End Get Set(value As String) Dim nId As Integer = If(m_SelRib.Type = RibEntity.RibTypes.FROMDRAW, m_SelRib.nCurveId, m_SelRib.nExtrusionId) Dim b3Reference As New BBox3d EgtGetBBoxGlob(nId, GDB_BB.STANDARD, b3Reference) Dim dNewYPos As Double = b3Reference.Min.y StringToLen(value, dNewYPos) If dNewYPos >= 0 AndAlso dNewYPos <= CurrentMachine.b3Tab.DimY Then EgtMove(m_SelRib.nCurveId, New Point3d(b3Reference.Min.x, dNewYPos, b3Reference.Min.z) - b3Reference.Min) EgtMove(m_SelRib.nExtrusionId, New Point3d(b3Reference.Min.x, dNewYPos, b3Reference.Min.z) - b3Reference.Min) EgtDraw() Else NotifyPropertyChanged(NameOf(sYPos)) End If ' Imposto flag di ricalcolo slice EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End Set End Property Public Property sZPos As String Get If Not IsNothing(m_SelRib) Then Dim nId As Integer = If(m_SelRib.Type = RibEntity.RibTypes.FROMDRAW, m_SelRib.nCurveId, m_SelRib.nExtrusionId) Dim b3Reference As New BBox3d EgtGetBBoxGlob(nId, GDB_BB.STANDARD, b3Reference) Return LenToString(b3Reference.Min.z, 1) Else Return "" End If End Get Set(value As String) Dim nId As Integer = If(m_SelRib.Type = RibEntity.RibTypes.FROMDRAW, m_SelRib.nCurveId, m_SelRib.nExtrusionId) Dim b3Reference As New BBox3d EgtGetBBoxGlob(nId, GDB_BB.STANDARD, b3Reference) Dim dNewZPos As Double = b3Reference.Min.y StringToLen(value, dNewZPos) If dNewZPos >= 0 Then EgtMove(m_SelRib.nCurveId, New Point3d(b3Reference.Min.x, b3Reference.Min.y, dNewZPos) - b3Reference.Min) EgtMove(m_SelRib.nExtrusionId, New Point3d(b3Reference.Min.x, b3Reference.Min.y, dNewZPos) - b3Reference.Min) EgtDraw() Else NotifyPropertyChanged(NameOf(sZPos)) End If ' Imposto flag di ricalcolo slice EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End Set End Property Private m_RotAxes() As Boolean = {False, False, True} Public Property RotAxes As Boolean() Get Return m_RotAxes End Get Set(value As Boolean()) m_RotAxes = value End Set End Property Public ReadOnly Property vtSelRotAxes As Vector3d Get If m_RotAxes(0) Then Return Vector3d.X_AX ElseIf m_RotAxes(1) Then Return Vector3d.Y_AX ElseIf m_RotAxes(2) Then Return Vector3d.Z_AX End If End Get End Property Private m_sRotAngle As String Public Property sRotAngle As String Get Return m_sRotAngle End Get Set(value As String) Dim dNewAngle As Double = 0 If Not StringToLen(value, dNewAngle) Then m_sRotAngle = 0 NotifyPropertyChanged(NameOf(sRotAngle)) Return End If Dim nId As Integer = If(m_SelRib.Type = RibEntity.RibTypes.FROMDRAW, m_SelRib.nCurveId, m_SelRib.nExtrusionId) Dim b3Rib As New BBox3d EgtGetBBox(nId, GDB_BB.STANDARD, b3Rib) Dim bOk As Boolean = False bOk = EgtRotate(nId, b3Rib.Center(), vtSelRotAxes, dNewAngle) If bOk AndAlso m_SelRib.Type = RibEntity.RibTypes.FROMDRAW Then EgtRotate(m_SelRib.nExtrusionId, b3Rib.Center, vtSelRotAxes, dNewAngle) If bOk Then EgtDraw() RefreshPos() m_sRotAngle = 0 NotifyPropertyChanged(NameOf(sRotAngle)) Else m_sRotAngle = value End If ' Imposto flag di ricalcolo slice EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End Set End Property Private m_bAdd_IsChecked As Boolean Public Property bAdd_IsChecked As Boolean Get Return m_bAdd_IsChecked End Get Set(value As Boolean) If Not m_bMachParam_IsChecked AndAlso Map.refSceneHostVM.MainController.GetStep = 0 Then m_bAdd_IsChecked = value If value Then m_bEdit_IsChecked = False m_bGrid_IsChecked = False m_bMove_IsChecked = False m_bRotate_IsChecked = False NotifyPropertyChanged(NameOf(bEdit_IsChecked)) NotifyPropertyChanged(NameOf(bGrid_IsChecked)) NotifyPropertyChanged(NameOf(bMove_IsChecked)) NotifyPropertyChanged(NameOf(bRotate_IsChecked)) End If End If End Set End Property Private m_bEdit_IsChecked As Boolean Public Property bEdit_IsChecked As Boolean Get Return m_bEdit_IsChecked End Get Set(value As Boolean) If Not IsNothing(m_SelRib) AndAlso Not m_bMachParam_IsChecked AndAlso Map.refSceneHostVM.MainController.GetStep = 0 Then m_bEdit_IsChecked = value If value Then m_bAdd_IsChecked = False m_bGrid_IsChecked = False m_bMove_IsChecked = False m_bRotate_IsChecked = False NotifyPropertyChanged(NameOf(bAdd_IsChecked)) NotifyPropertyChanged(NameOf(bGrid_IsChecked)) NotifyPropertyChanged(NameOf(bMove_IsChecked)) NotifyPropertyChanged(NameOf(bRotate_IsChecked)) End If Else NotifyPropertyChanged(NameOf(bEdit_IsChecked)) End If End Set End Property Private m_bGrid_IsChecked As Boolean Public Property bGrid_IsChecked As Boolean Get Return m_bGrid_IsChecked End Get Set(value As Boolean) If Not m_bMachParam_IsChecked AndAlso Map.refSceneHostVM.MainController.GetStep = 0 Then m_bGrid_IsChecked = value If value Then m_bAdd_IsChecked = False m_bEdit_IsChecked = False m_bMove_IsChecked = False m_bRotate_IsChecked = False NotifyPropertyChanged(NameOf(bAdd_IsChecked)) NotifyPropertyChanged(NameOf(bEdit_IsChecked)) NotifyPropertyChanged(NameOf(bMove_IsChecked)) NotifyPropertyChanged(NameOf(bRotate_IsChecked)) End If End If End Set End Property Private m_bMove_IsChecked As Boolean Public Property bMove_IsChecked As Boolean Get Return m_bMove_IsChecked End Get Set(value As Boolean) If Not IsNothing(m_SelRib) AndAlso Not m_bMachParam_IsChecked AndAlso Map.refSceneHostVM.MainController.GetStep = 0 Then m_bMove_IsChecked = value If value Then m_bAdd_IsChecked = False m_bEdit_IsChecked = False m_bGrid_IsChecked = False m_bRotate_IsChecked = False NotifyPropertyChanged(NameOf(bAdd_IsChecked)) NotifyPropertyChanged(NameOf(bEdit_IsChecked)) NotifyPropertyChanged(NameOf(bGrid_IsChecked)) NotifyPropertyChanged(NameOf(bRotate_IsChecked)) End If Else NotifyPropertyChanged(NameOf(bMove_IsChecked)) End If End Set End Property Private m_bRotate_IsChecked As Boolean Public Property bRotate_IsChecked As Boolean Get Return m_bRotate_IsChecked End Get Set(value As Boolean) If Not IsNothing(m_SelRib) AndAlso Not m_bMachParam_IsChecked AndAlso Map.refSceneHostVM.MainController.GetStep = 0 Then m_bRotate_IsChecked = value If value Then m_bAdd_IsChecked = False m_bEdit_IsChecked = False m_bGrid_IsChecked = False m_bMove_IsChecked = False NotifyPropertyChanged(NameOf(bAdd_IsChecked)) NotifyPropertyChanged(NameOf(bEdit_IsChecked)) NotifyPropertyChanged(NameOf(bGrid_IsChecked)) NotifyPropertyChanged(NameOf(bMove_IsChecked)) End If Else NotifyPropertyChanged(NameOf(bRotate_IsChecked)) End If End Set End Property Private m_bMachParam_IsChecked As Boolean Public Property bMachParam_IsChecked As Boolean Get Return m_bMachParam_IsChecked End Get Set(value As Boolean) If Not IsNothing(m_SelRib) AndAlso Map.refSceneHostVM.MainController.GetStep = 0 AndAlso Not IsNothing(Map.refTopPanelVM.SelMachining) AndAlso value Then m_bMachParam_IsChecked = True m_bAdd_IsChecked = False m_bEdit_IsChecked = False m_bGrid_IsChecked = False m_bMove_IsChecked = False m_bRotate_IsChecked = False NotifyPropertyChanged(NameOf(bAdd_IsChecked)) NotifyPropertyChanged(NameOf(bEdit_IsChecked)) NotifyPropertyChanged(NameOf(bGrid_IsChecked)) NotifyPropertyChanged(NameOf(bMove_IsChecked)) NotifyPropertyChanged(NameOf(bRotate_IsChecked)) Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.RIBPARAM) NotifyPropertyChanged(NameOf(RibList_IsEnabled)) Else NotifyPropertyChanged(NameOf(m_bMachParam_IsChecked)) End If End Set End Property Friend Sub ResetMachParamIsChecked() m_bMachParam_IsChecked = False NotifyPropertyChanged(NameOf(bMachParam_IsChecked)) NotifyPropertyChanged(NameOf(RibList_IsEnabled)) End Sub Public ReadOnly Property Compo_Visibility As Visibility Get Return If(Not IsNothing(m_SelRib) AndAlso m_SelRib.Type = RibEntity.RibTypes.FROMDRAW, Visibility.Visible, Visibility.Collapsed) End Get End Property Public ReadOnly Property RibList_IsEnabled As Boolean Get Return Not m_bMachParam_IsChecked End Get End Property ' riferimento griglia all'ingresso in questa pagina Private m_OriginalGridFrame As New Frame3d ' parametro che indica se e' in corso il disegno di un percorso Private m_bIsCreatingPath As Boolean = False Public ReadOnly Property bIsCreatingPath As Boolean Get Return m_bIsCreatingPath End Get End Property Private m_bIsCreatingExtrusion As Boolean = False Public ReadOnly Property bIsCreatingExtrusion As Boolean Get Return m_bIsCreatingExtrusion End Get End Property ' Definizione comandi Private m_cmdImport As ICommand Private m_cmdLine2P As ICommand Private m_cmdDelete As ICommand Private m_cmdModifyCurve As ICommand Private m_cmdAddPointCurve As ICommand Private m_cmdRemovePointCurve As ICommand Private m_cmdExtrude As ICommand Private m_cmdCPlaneTop As ICommand Private m_cmdCPlaneFront As ICommand Private m_cmdCPlaneRight As ICommand Private m_cmdCPlaneBack As ICommand Private m_cmdCPlaneLeft As ICommand Private m_cmdCPlaneBottom As ICommand Private m_cmdCPlaneView As ICommand Private m_cmdCPlaneElevation As ICommand Private m_cmdCPlaneOrigin As ICommand Private m_cmdCPlaneRotate As ICommand Private m_cmdCPlane3P As ICommand Private m_cmdCPlanePerpObj As ICommand Private m_cmdCPlaneObj As ICommand Private m_cmdDragMove As ICommand Private m_cmdDragRotate As ICommand Private m_cmdMachParam As ICommand #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTORS" Sub New() ' Creo riferimento a questa classe in EgtCAM5Map Map.SetRefRibPanelVM(Me) End Sub #End Region ' CONSTRUCTORS #Region "METHODS" Friend Sub Init() ' azzero indice StartEntity.ResetSharedIndex() ' fisso frame originale m_OriginalGridFrame = EgtGetGridFrame() ' recupero dati pezzo selezionato layer ed entita' m_nPartId = Map.refTopPanelVM.SelPart.nPartId m_nRibLayerId = Map.refTopPanelVM.SelPart.nRibsLayerId 'recupero tutte le entita' rib m_RibList.Clear() Dim nRibId As Integer = EgtGetFirstInGroup(m_nRibLayerId) While nRibId <> GDB_ID.NULL Dim EntityType As GDB_TY = EgtGetType(nRibId) Dim DrawType As Integer = RibEntity.RibTypes.FROMDRAW EgtGetInfo(nRibId, KEY_RIB_TYPE, DrawType) If EntityType = GDB_TY.CRV_COMPO AndAlso DrawType = RibEntity.RibTypes.FROMDRAW Then Dim nExtrusionId As Integer = GDB_ID.NULL EgtGetInfo(nRibId, KEY_EXTRUSION_ID, nExtrusionId) Dim RibEntity As RibEntity = New RibEntity(RibEntity.RibTypes.FROMDRAW, nRibId) If nExtrusionId <> GDB_ID.NULL Then RibEntity.SetExtrusionId(nExtrusionId) End If m_RibList.Add(RibEntity) ElseIf (EntityType = GDB_TY.SRF_BEZ OrElse EntityType = GDB_TY.SRF_MESH OrElse EntityType = GDB_TY.SRF_FRGN) AndAlso DrawType = RibEntity.RibTypes.FROMIMPORT Then Dim RibEntity As RibEntity = New RibEntity(RibEntity.RibTypes.FROMIMPORT, nRibId) m_RibList.Add(RibEntity) End If nRibId = EgtGetNext(nRibId) End While If m_RibList.Count > 0 Then SelRib = m_RibList(0) NotifyPropertyChanged(NameOf(SelRib)) End If Map.refSceneHostVM.MainScene.SetStatusNull() End Sub Friend Sub Dispose() ' ripristino frame originale EgtSetGridFrame(m_OriginalGridFrame) ' se in modifica parametri If m_bMachParam_IsChecked Then ' ripristino modalita' standard Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL) Map.refRibPanelVM.ResetMachParamIsChecked() End If EgtDraw() Map.refSceneHostVM.MainScene.SetStatusNull() End Sub Friend Sub RefreshPos() NotifyPropertyChanged(NameOf(sXPos)) NotifyPropertyChanged(NameOf(sYPos)) NotifyPropertyChanged(NameOf(sZPos)) End Sub Private Function InitCommand(RibSelectionType As RibSelectionTypes) As Boolean ' attivo modifiche su scena Map.refSceneHostVM.MainScene.ResetStatus() ' rendo traspanete estrusione EgtSetAlpha(m_SelRib.nExtrusionId, 50) ' seleziono percorso corrente EgtDeselectAll() Select Case RibSelectionType Case RibSelectionTypes.CURVE EgtSelectObj(m_SelRib.nCurveId) Case RibSelectionTypes.EXTRUSION ' creo layer per estrusione Dim nNewExtrusionLayerId As Integer = EgtCreateGroup(m_nPartId) EgtSetName(nNewExtrusionLayerId, LAY_NEWEXTRUSION) EgtSetCurrPartLayer(m_nPartId, nNewExtrusionLayerId) EgtSelectObj(m_SelRib.nCurveId) Case RibSelectionTypes.BOTH EgtSelectObj(m_SelRib.nCurveId) EgtSelectObj(m_SelRib.nExtrusionId) End Select EgtDraw() Return True End Function Friend Sub UpdateUI() ' se attiva operazione in piu' passaggi, esco If Map.refSceneHostVM.MainController.GetContinue() Then Return End Sub Friend Sub OnExecCmdEnd(command As Controller.CMD) Select Case command Case Controller.CMD.MODIFYCURVE, Controller.CMD.ADDPOINTCURVE, Controller.CMD.REMOVEPOINTCURVE ' leggo altezza estrusione Dim dExtrusionLength As Double = 0 EgtGetInfo(m_SelRib.nExtrusionId, KEY_EXTRUSION_LENGTH, dExtrusionLength) ' cancello estrusione EgtErase(m_SelRib.nExtrusionId) Dim nNewEntityId As Integer = EgtCreateSurfTmByRegionExtrusion(m_nRibLayerId, 1, {m_SelRib.nCurveId}, Vector3d.Z_AX * dExtrusionLength, EPS_STM) EgtSetName(nNewEntityId, RIB_EXTRUSION) EgtSetInfo(nNewEntityId, KEY_EXTRUSION_LENGTH, dExtrusionLength) ' coloro l'entita' di viola Dim c3LightBlue As Color3d c3LightBlue.FromColor(System.Drawing.Color.MediumOrchid) EgtSetColor(nNewEntityId, c3LightBlue) ' aggiorno riferimento nella curva m_SelRib.SetExtrusionId(nNewEntityId) ' seleziono nuova estrusione EgtSelectObj(m_SelRib.nExtrusionId) ' ripristino trasparenza estrusione EgtSetAlpha(m_SelRib.nExtrusionId, 100) EgtDraw() ' rimetto la selezione scena a null Map.refSceneHostVM.MainScene.SetStatusNull() Case Controller.CMD.MOVE, Controller.CMD.ROTATE EgtSetAlpha(Map.refRibPanelVM.SelRib.nExtrusionId, 100) ' seleziono nuova estrusione EgtSelectObj(m_SelRib.nExtrusionId) EgtDraw() ' rimetto la selezione scena a null Map.refSceneHostVM.MainScene.SetStatusNull() Case Controller.CMD.GRID_ELEVATION, Controller.CMD.GRID_3P, Controller.CMD.GRID_ORIGIN, Controller.CMD.GRID_PERPCURVE, Controller.CMD.GRID_ROTATE, Controller.CMD.GRID_ROTATE3D ' rimetto la selezione scena a null Map.refSceneHostVM.MainScene.SetStatusNull() End Select If command <> Controller.CMD.LINE2P AndAlso command <> Controller.CMD.EXTRUDE Then Return ' se finita creazione estrusione If m_bIsCreatingExtrusion Then m_bIsCreatingExtrusion = False ' se riferimento non nullo, elimino vecchia estrusione If m_SelRib.nExtrusionId <> GDB_ID.NULL Then EgtErase(m_SelRib.nExtrusionId) End If Dim NewEntity As RibEntity = Nothing Dim nNewExtrusionLayerId As Integer = EgtGetFirstNameInGroup(m_nPartId, LAY_NEWEXTRUSION) Dim nNewEntityId As Integer = EgtGetFirstInGroup(nNewExtrusionLayerId) Dim NewGeomType As GDB_TY = EgtGetType(nNewEntityId) If NewGeomType = GDB_TY.SRF_FRGN OrElse NewGeomType = GDB_TY.SRF_MESH Then EgtSetName(nNewEntityId, RIB_EXTRUSION) Dim dExtrusionLength As Double = 0 StringToLen(Map.refControllerInputPanelVM.Text, dExtrusionLength) EgtSetInfo(nNewEntityId, KEY_EXTRUSION_LENGTH, dExtrusionLength) ' coloro l'entita' di blu Dim c3LightBlue As Color3d c3LightBlue.FromColor(System.Drawing.Color.MediumOrchid) EgtSetColor(nNewEntityId, c3LightBlue) '' lo sposto nel layer dei rib EgtRelocateGlob(nNewEntityId, m_nRibLayerId, GDB_POS.LAST_SON) ' aggiungo riferimento a curva m_SelRib.SetExtrusionId(nNewEntityId) End If ' cancello layer estrusione EgtErase(nNewExtrusionLayerId) ' aggiorno posizione RefreshPos() EgtDraw() ' rimetto la selezione scena a null Map.refSceneHostVM.MainScene.SetStatusNull() End If ' se finita creazione curva If bIsCreatingPath Then m_bIsCreatingPath = False Dim NewEntity As RibEntity = Nothing Dim nNewRibLayerId As Integer = EgtGetFirstNameInGroup(m_nPartId, LAY_NEWRIB) Dim nNewEntityId As Integer = EgtGetFirstInGroup(nNewRibLayerId) Dim NewGeomType As GDB_TY = EgtGetType(nNewEntityId) If NewGeomType = GDB_TY.CRV_COMPO Then EgtSetName(nNewEntityId, RIB_CURVE) ' coloro l'entita' di blu Dim c3LightBlue As Color3d c3LightBlue.FromColor(System.Drawing.Color.MediumOrchid) EgtSetColor(nNewEntityId, c3LightBlue) ' lo sposto nel layer dei rib EgtRelocateGlob(nNewEntityId, m_nRibLayerId, GDB_POS.LAST_SON) ' lo aggiungo alla lista NewEntity = New RibEntity(RibEntity.RibTypes.FROMDRAW, nNewEntityId) m_RibList.Add(NewEntity) ' lo seleziono SelRib = NewEntity NotifyPropertyChanged(NameOf(SelRib)) ' creo layer per estrusione Dim nNewExtrusionLayerId As Integer = EgtCreateGroup(m_nPartId) EgtSetName(nNewExtrusionLayerId, LAY_NEWEXTRUSION) EgtSetCurrPartLayer(m_nPartId, nNewExtrusionLayerId) ' seleziono percorso da estrudere EgtDeselectAll() EgtSelectObj(nNewEntityId) If Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.EXTRUDE) Then m_bIsCreatingExtrusion = True Else ' cancello layer 'EgtErase(nNewRibLayerId) EgtErase(nNewExtrusionLayerId) End If End If ' cancello layer di disegno EgtErase(nNewRibLayerId) End If Select Case command Case Controller.CMD.LINE2P, Controller.CMD.DELETE, Controller.CMD.MODIFYCURVE, Controller.CMD.ADDPOINTCURVE, Controller.CMD.REMOVEPOINTCURVE, Controller.CMD.EXTRUDE, Controller.CMD.MOVE, Controller.CMD.ROTATE ' Imposto flag di ricalcolo slice EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End Select End Sub Friend Sub OnKeyDown(Key As Forms.Keys) If Key = Forms.Keys.Escape Then End If End Sub Friend Function OnMouseSelectingObj(nId As Integer) As Boolean Return EgtGetParent(nId) = m_nRibLayerId End Function Friend Sub SelStartFromId(nId) Dim SelRibEntity As RibEntity = m_RibList.FirstOrDefault(Function(x) x.nCurveId = nId OrElse x.nExtrusionId = nId) If Not IsNothing(SelRibEntity) Then SelRib = SelRibEntity NotifyPropertyChanged(NameOf(SelRib)) End If End Sub Friend Sub SelLastRib() If RibList.Count <= 0 Then Return SelRib = RibList(RibList.Count - 1) NotifyPropertyChanged(NameOf(SelRib)) End Sub #End Region ' METHODS #Region "COMMANDS" #Region "Import" ''' ''' Returns a command that do CPlaneTop. ''' Public ReadOnly Property Import_Command As ICommand Get If m_cmdImport Is Nothing Then m_cmdImport = New Command(AddressOf Import) End If Return m_cmdImport End Get End Property ''' ''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand. ''' Public Sub Import(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.InsertRib() End Sub #End Region ' Import #Region "Line2P" ''' ''' Returns a command that do CPlaneTop. ''' Public ReadOnly Property Line2P_Command As ICommand Get If m_cmdLine2P Is Nothing Then m_cmdLine2P = New Command(AddressOf Line2P) End If Return m_cmdLine2P End Get End Property ''' ''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand. ''' Public Sub Line2P(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Dim nNewRibLayerId As Integer = EgtGetFirstNameInGroup(m_nPartId, LAY_NEWRIB) If nNewRibLayerId = GDB_ID.NULL Then nNewRibLayerId = EgtCreateGroup(m_nPartId) EgtSetName(nNewRibLayerId, LAY_NEWRIB) EgtSetCurrPartLayer(m_nPartId, nNewRibLayerId) Map.refSceneHostVM.MainController.SetContinue() If Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.LINE2P) Then m_bIsCreatingPath = True End If End Sub #End Region ' Line2P #Region "Delete" Public ReadOnly Property Delete_Command As ICommand Get If m_cmdDelete Is Nothing Then m_cmdDelete = New Command(AddressOf Delete) End If Return m_cmdDelete End Get End Property Public Sub Delete() If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return If IsNothing(SelRib) Then Return Dim bOk As Boolean = False Select Case m_SelRib.Type Case RibEntity.RibTypes.FROMDRAW bOk = EgtErase(m_SelRib.nCurveId) If bOk Then EgtErase(m_SelRib.nExtrusionId) Case RibEntity.RibTypes.FROMIMPORT bOk = EgtErase(m_SelRib.nExtrusionId) End Select If bOk Then Dim nSelStartIndex As Integer = m_RibList.IndexOf(SelRib) m_RibList.Remove(SelRib) If nSelStartIndex < m_RibList.Count Then SelRib = m_RibList(nSelStartIndex) ElseIf m_RibList.Count > 0 Then SelRib = m_RibList(m_RibList.Count - 1) Else SelRib = Nothing End If NotifyPropertyChanged(NameOf(SelRib)) End If End Sub #End Region ' Delete #Region "ModifyCurve" ''' ''' Returns a command that do Linear Dimension. ''' Public ReadOnly Property ModifyCurve_Command As ICommand Get If m_cmdModifyCurve Is Nothing Then m_cmdModifyCurve = New Command(AddressOf ModifyCurve) End If Return m_cmdModifyCurve End Get End Property ''' ''' Execute the LinearDimension. This method is invoked by the LinDimCommand. ''' Public Sub ModifyCurve(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return InitCommand(RibSelectionTypes.CURVE) Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.MODIFYCURVE) End Sub #End Region ' ModifyCurve #Region "AddPointCurve" ''' ''' Returns a command that do Linear Dimension. ''' Public ReadOnly Property AddPointCurve_Command As ICommand Get If m_cmdAddPointCurve Is Nothing Then m_cmdAddPointCurve = New Command(AddressOf AddPointCurve) End If Return m_cmdAddPointCurve End Get End Property ''' ''' Execute the LinearDimension. This method is invoked by the LinDimCommand. ''' Public Sub AddPointCurve(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return InitCommand(RibSelectionTypes.CURVE) If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.CURVETOARC) Else Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.ADDPOINTCURVE) End If End Sub #End Region ' AddPointCurve #Region "RemovePointCurve" ''' ''' Returns a command that do Linear Dimension. ''' Public ReadOnly Property RemovePointCurve_Command As ICommand Get If m_cmdRemovePointCurve Is Nothing Then m_cmdRemovePointCurve = New Command(AddressOf RemovePointCurve) End If Return m_cmdRemovePointCurve End Get End Property ''' ''' Execute the LinearDimension. This method is invoked by the LinDimCommand. ''' Public Sub RemovePointCurve(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return InitCommand(RibSelectionTypes.CURVE) If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.CURVETOLINE) Else Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.REMOVEPOINTCURVE) End If End Sub #End Region ' RemovePointCurve #Region "Extrude" ''' ''' Returns a command that do Extrude. ''' Public ReadOnly Property Extrude_Command As ICommand Get If m_cmdExtrude Is Nothing Then m_cmdExtrude = New Command(AddressOf Extrude) End If Return m_cmdExtrude End Get End Property ''' ''' Execute the Extrude. This method is invoked by the ExtrudeCommand. ''' Public Sub Extrude(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return InitCommand(RibSelectionTypes.EXTRUSION) If Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.EXTRUDE) Then m_bIsCreatingExtrusion = True End If End Sub #End Region ' Extrude #Region "CPlaneTop" ''' ''' Returns a command that do CPlaneTop. ''' Public ReadOnly Property CPlaneTop_Command As ICommand Get If m_cmdCPlaneTop Is Nothing Then m_cmdCPlaneTop = New Command(AddressOf CPlaneTop) End If Return m_cmdCPlaneTop End Get End Property ''' ''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand. ''' Public Sub CPlaneTop(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.SetLastInteger(Controller.GRID_TYPE.TOP) Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID) End Sub #End Region ' CPlaneTop #Region "CPlaneFront" ''' ''' Returns a command that do CPlaneFront. ''' Public ReadOnly Property CPlaneFront_Command As ICommand Get If m_cmdCPlaneFront Is Nothing Then m_cmdCPlaneFront = New Command(AddressOf CPlaneFront) End If Return m_cmdCPlaneFront End Get End Property ''' ''' Execute the CPlaneFront. This method is invoked by the CPlaneFrontCommand. ''' Public Sub CPlaneFront(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.SetLastInteger(Controller.GRID_TYPE.FRONT) Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID) End Sub #End Region ' CPlaneFront #Region "CPlaneRight" ''' ''' Returns a command that do CPlaneRight. ''' Public ReadOnly Property CPlaneRight_Command As ICommand Get If m_cmdCPlaneRight Is Nothing Then m_cmdCPlaneRight = New Command(AddressOf CPlaneRight) End If Return m_cmdCPlaneRight End Get End Property ''' ''' Execute the CPlaneRight. This method is invoked by the CPlaneRightCommand. ''' Public Sub CPlaneRight(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.SetLastInteger(Controller.GRID_TYPE.RIGHT) Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID) End Sub #End Region ' CPlaneRight #Region "CPlaneBack" ''' ''' Returns a command that do CPlaneBack. ''' Public ReadOnly Property CPlaneBack_Command As ICommand Get If m_cmdCPlaneBack Is Nothing Then m_cmdCPlaneBack = New Command(AddressOf CPlaneBack) End If Return m_cmdCPlaneBack End Get End Property ''' ''' Execute the CPlaneBack. This method is invoked by the CPlaneBackCommand. ''' Public Sub CPlaneBack(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.SetLastInteger(Controller.GRID_TYPE.BACK) Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID) End Sub #End Region ' CPlaneBack #Region "CPlaneLeft" ''' ''' Returns a command that do CPlaneLeft. ''' Public ReadOnly Property CPlaneLeft_Command As ICommand Get If m_cmdCPlaneLeft Is Nothing Then m_cmdCPlaneLeft = New Command(AddressOf CPlaneLeft) End If Return m_cmdCPlaneLeft End Get End Property ''' ''' Execute the CPlaneLeft. This method is invoked by the CPlaneLeftCommand. ''' Public Sub CPlaneLeft(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.SetLastInteger(Controller.GRID_TYPE.LEFT) Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID) End Sub #End Region ' CPlaneLeft #Region "CPlaneBottom" ''' ''' Returns a command that do CPlaneBottom. ''' Public ReadOnly Property CPlaneBottom_Command As ICommand Get If m_cmdCPlaneBottom Is Nothing Then m_cmdCPlaneBottom = New Command(AddressOf CPlaneBottom) End If Return m_cmdCPlaneBottom End Get End Property ''' ''' Execute the CPlaneBottom. This method is invoked by the CPlaneBottomCommand. ''' Public Sub CPlaneBottom(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.SetLastInteger(Controller.GRID_TYPE.BOTTOM) Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID) End Sub #End Region ' CPlaneBottom #Region "CPlaneElevation" ''' ''' Returns a command that do CPlaneElevation. ''' Public ReadOnly Property CPlaneElevation_Command As ICommand Get If m_cmdCPlaneElevation Is Nothing Then m_cmdCPlaneElevation = New Command(AddressOf CPlaneElevation) End If Return m_cmdCPlaneElevation End Get End Property ''' ''' Execute the CPlaneElevation. This method is invoked by the CPlaneElevationCommand. ''' Public Sub CPlaneElevation(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID_ELEVATION) End Sub #End Region ' CPlaneElevation #Region "CPlaneOrigin" ''' ''' Returns a command that do CPlaneOrigin. ''' Public ReadOnly Property CPlaneOrigin_Command As ICommand Get If m_cmdCPlaneOrigin Is Nothing Then m_cmdCPlaneOrigin = New Command(AddressOf CPlaneOrigin) End If Return m_cmdCPlaneOrigin End Get End Property ''' ''' Execute the CPlaneOrigin. This method is invoked by the CPlaneOriginCommand. ''' Public Sub CPlaneOrigin(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID_ORIGIN) End Sub #End Region ' CPlaneOrigin #Region "CPlaneRotate" ''' ''' Returns a command that do CPlaneRotate. ''' Public ReadOnly Property CPlaneRotate_Command As ICommand Get If m_cmdCPlaneRotate Is Nothing Then m_cmdCPlaneRotate = New Command(AddressOf CPlaneRotate) End If Return m_cmdCPlaneRotate End Get End Property ''' ''' Execute the CPlaneRotate. This method is invoked by the CPlaneRotateCommand. ''' Public Sub CPlaneRotate(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID_ROTATE) Else Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID_ROTATE3D) End If End Sub #End Region ' CPlaneRotate #Region "CPlane3P" ''' ''' Returns a command that do CPlane3P. ''' Public ReadOnly Property CPlane3P_Command As ICommand Get If m_cmdCPlane3P Is Nothing Then m_cmdCPlane3P = New Command(AddressOf CPlane3P) End If Return m_cmdCPlane3P End Get End Property ''' ''' Execute the CPlane3P. This method is invoked by the CPlane3PCommand. ''' Public Sub CPlane3P(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID_3P) End Sub #End Region ' CPlane3P #Region "CPlanePerpObj" ''' ''' Returns a command that do CPlanePerpObj. ''' Public ReadOnly Property CPlanePerpObj_Command As ICommand Get If m_cmdCPlanePerpObj Is Nothing Then m_cmdCPlanePerpObj = New Command(AddressOf CPlanePerpObj) End If Return m_cmdCPlanePerpObj End Get End Property ''' ''' Execute the CPlanePerpObj. This method is invoked by the CPlanePerpObjCommand. ''' Public Sub CPlanePerpObj(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID_PERPCURVE) End Sub #End Region ' CPlanePerpObj #Region "CPlaneObj" ''' ''' Returns a command that do CPlanepObj. ''' Public ReadOnly Property CPlaneObj_Command As ICommand Get If m_cmdCPlaneObj Is Nothing Then m_cmdCPlaneObj = New Command(AddressOf CPlaneObj) End If Return m_cmdCPlaneObj End Get End Property ''' ''' Execute the CPlaneObj. This method is invoked by the CPlaneObjCommand. ''' Public Sub CPlaneObj(ByVal param As Object) If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.GRID_OBJ) End Sub #End Region ' CPlaneObj #Region "DragMove" Public ReadOnly Property DragMove_Command As ICommand Get If m_cmdDragMove Is Nothing Then m_cmdDragMove = New Command(AddressOf DragMove) End If Return m_cmdDragMove End Get End Property Public Sub DragMove() InitCommand(RibSelectionTypes.BOTH) Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.MOVE) End Sub #End Region ' DragMove #Region "DragRotate" Public ReadOnly Property DragRotate_Command As ICommand Get If m_cmdDragRotate Is Nothing Then m_cmdDragRotate = New Command(AddressOf DragRotate) End If Return m_cmdDragRotate End Get End Property Public Sub DragRotate() InitCommand(RibSelectionTypes.BOTH) Map.refSceneHostVM.MainController.ExecuteCommand(Controller.CMD.ROTATE) End Sub #End Region ' DragRotate #Region "MachParam" Public ReadOnly Property MachParam_Command As ICommand Get If m_cmdMachParam Is Nothing Then m_cmdMachParam = New Command(AddressOf MachParam) End If Return m_cmdMachParam End Get End Property Public Sub MachParam() If IsNothing(Map.refTopPanelVM.SelMachining) Then Return m_bAdd_IsChecked = False m_bEdit_IsChecked = False m_bGrid_IsChecked = False m_bMove_IsChecked = False m_bRotate_IsChecked = False NotifyPropertyChanged(NameOf(bAdd_IsChecked)) NotifyPropertyChanged(NameOf(bEdit_IsChecked)) NotifyPropertyChanged(NameOf(bGrid_IsChecked)) NotifyPropertyChanged(NameOf(bMove_IsChecked)) NotifyPropertyChanged(NameOf(bRotate_IsChecked)) Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.RIBPARAM) End Sub #End Region ' MachParam #End Region ' COMMANDS End Class Public Class RibEntity Inherits VMBase Public Enum RibTypes As Integer FROMDRAW = 1 FROMIMPORT = 2 End Enum Private Shared m_nSharedIndex As Integer = 0 Private ReadOnly Property nSharedIndex As Integer Get m_nSharedIndex += 1 Return m_nSharedIndex End Get End Property Friend Shared Sub ResetSharedIndex() m_nSharedIndex = 0 End Sub Private m_Type As RibTypes Public ReadOnly Property Type As RibTypes Get Return m_Type End Get End Property Private m_nCurveId As Integer = GDB_ID.NULL Public ReadOnly Property nCurveId As Integer Get Return m_nCurveId End Get End Property Private m_nExtrusionId As Integer = GDB_ID.NULL Public ReadOnly Property nExtrusionId As Integer Get Return m_nExtrusionId End Get End Property Friend Sub SetExtrusionId(nId As Integer) m_nExtrusionId = nId EgtSetInfo(m_nCurveId, KEY_EXTRUSION_ID, m_nExtrusionId) End Sub Private m_nIndex As Integer Public ReadOnly Property nIndex As Integer Get Return m_nIndex End Get End Property Public ReadOnly Property ghName As String Get Return String.Format("[{0}] {1}", {m_nIndex, If(m_Type = RibTypes.FROMDRAW, "Draw Rib", "Import Rib")}) End Get End Property Sub New(Type As RibTypes, nId As Integer) m_nIndex = nSharedIndex m_Type = Type EgtSetInfo(nId, KEY_RIB_TYPE, Type) Select Case Type Case RibTypes.FROMDRAW m_nCurveId = nId Case RibTypes.FROMIMPORT m_nExtrusionId = nId End Select End Sub End Class