diff --git a/Constants/ConstEgtStone3D.vb b/Constants/ConstEgtStone3D.vb index c9c51c7..e8c418c 100644 --- a/Constants/ConstEgtStone3D.vb +++ b/Constants/ConstEgtStone3D.vb @@ -117,6 +117,13 @@ ShowPreview = 2 End Enum + Public Enum PartType As Integer + Unknown = -1 + TopKitchen = 0 + Panel = 1 + Sink = 2 + End Enum + ' Constanti ParametricCompo Public Enum ParamType As Integer BOOL = 1 diff --git a/Panel/EditPanelVM.vb b/Panel/EditPanelVM.vb index 6f6b2b0..d7665b8 100644 --- a/Panel/EditPanelVM.vb +++ b/Panel/EditPanelVM.vb @@ -22,6 +22,16 @@ Public Class EditPanelVM End Set End Property + Private m_PartType As PartType = PartType.Unknown + Friend Property PartType As PartType + Get + Return m_PartType + End Get + Set(value As PartType) + m_PartType = value + End Set + End Property + ' id del part selezionato per essere modificato Private m_nIdPart As Integer = GDB_ID.NULL Public Property nIdPart As Integer @@ -30,6 +40,27 @@ Public Class EditPanelVM End Get Set(value As Integer) m_nIdPart = value + If ParamList.Count > 0 Then UpdatePanelInfoFromPart(m_nIdPart) + AdvanceStage() + ' devo capire che tipo di pezzo sto modificando + ' se non ha info di accoppiamento è una base (piano cucina) + ' se ha l'info "Sink" allora è un pezzo di una buca + ' se ha info di accoppiamento generico è una paretina + Dim bIsSink As Boolean = False + EgtGetInfo(m_nIdPart, "Sink", bIsSink) + If bIsSink Then + PartType = PartType.Sink + Return + End If + Dim sPair As String = String.Empty + EgtGetInfo(m_nIdPart, "PairMyRef", sPair) + Dim bIsPanel As Boolean = sPair <> String.Empty + If bIsPanel Then + PartType = PartType.Panel + Return + End If + ' altrimenti è un piano cucina + PartType = PartType.TopKitchen End Set End Property @@ -60,23 +91,41 @@ Public Class EditPanelVM Public Sub New() MyBase.New() Title = "Modifica Paretina".ToUpper() + If Map.refSceneHostVM.m_nIdPart <> GDB_ID.NULL Then + nIdPart = Map.refSceneHostVM.m_nIdPart + Stage = EditPanelStage.InsertNewParam + End If + LoadParamList() + UpdatePanelInfoFromPart(m_nIdPart) End Sub #End Region ' Constructor #Region "METHODS" + Private Sub UpdatePanelInfoFromPart(nIdPart As Integer) + If nIdPart = GDB_ID.NULL Then Return + Dim dH As Double = 100 + EgtGetInfo(nIdPart, "H", dH) + DirectCast(ParamList(2), _TextBoxParam).sValue = dH.ToString() + Dim dTh As Double = 10 + EgtGetInfo(nIdPart, "Th", dTh) + DirectCast(ParamList(3), _TextBoxParam).sValue = dTh.ToString() + + End Sub + Public Overrides Sub LoadParamList() AddGenericParam(New _TextBlockParam("Messaggio", MsgList(0), ParamType.STR, Visibility.Visible)) ' sezione paretina AddGenericParam(New _TextBlockParam("Messaggio", MsgList(1), ParamType.STR, Visibility.Collapsed)) - Dim dH As Double = 0 - EgtGetInfo(nIdPart, "H", dH) + Dim dH As Double = 200 AddGenericParam(New _TextBoxParam("Altezza", dH, ParamType.LEN, Visibility.Visible)) - Dim dTh As Double = 0 - EgtGetInfo(nIdPart, "Th", dTh) + Dim dTh As Double = 20 AddGenericParam(New _TextBoxParam("Spessore", dTh, ParamType.LEN, Visibility.Visible)) + Dim nJunctionType As Integer = 0 + Dim JunctionTypeList As New List(Of ParamCmBx)({New ParamCmBx("Trim Start"), New ParamCmBx("Trim End"), New ParamCmBx("Angle"), New ParamCmBx("Trim Both")}) + AddGenericParam(New _ComboBoxParam("Tipo Giunzione", JunctionTypeList, nJunctionType)) ' sezione fondello AddGenericParam(New _TextBlockParam("Messaggio", MsgList(2), ParamType.STR, Visibility.Collapsed)) @@ -85,8 +134,8 @@ Public Class EditPanelVM AddGenericParam(New _TextBoxParam("Inclinazione", 0.1, ParamType.DOUB, Visibility.Collapsed)) AddGenericParam(New _TextBoxParam("Diametro foro", 30, ParamType.LEN, Visibility.Collapsed)) - ' - AddGenericParam(New _CheckBoxParam("ModificaAdiacenti", "Modifica anche paretine adiacenti", Visibility.Visible)) + ' checkbox + AddGenericParam(New _CheckBoxParam("ModificaAdiacenti", "Modifica anche altre paretine dello stesso tipo", Visibility.Visible)) '' dalle info leggo se l'oggetto è una paretina o una buca @@ -138,14 +187,16 @@ Public Class EditPanelVM End Function Public Overrides Sub Conferma() - ' se sono in modalità fondello allora devo creare il pezzo - If DirectCast(ParamList(1), _ComboBoxParam).SelParamCmBx.Name = "SplitBottom" Then - AddSplitBottom(Map.refSceneHostVM.m_PanelPartList) - End If - ' resetto la lista dei part selezionati per la creazione di uno splitBottom - Map.refSceneHostVM.m_PanelPartList.Clear() - ' resetto il tipo di elementi da evidenziare - Map.refSceneHostVM.m_SelType = GDB_TY.NONE + ' in base al tipo di pezzo che sto modificando chiamo la funzione corrispondente + Select Case PartType + Case PartType.Sink + 'EditSplitBottom() + Case PartType.Panel + EditPanel() + Case PartType.TopKitchen + 'EditTopKitchen() + End Select + ' chiudo lo user control Close() @@ -161,14 +212,14 @@ Public Class EditPanelVM Private Sub Close() SolidManagerM.ResetOperationMarks(Map.refSceneHostVM.m_nIdPart) EgtDraw() - Dim Btn As SceneBtn = Map.refSceneButtonVM.GetButton(EGT_PANEL) + Dim Btn As SceneBtn = Map.refSceneButtonVM.GetButton(EGT_EDIT_PANEL) If TypeOf (Btn) Is _ToggleButton Then DirectCast(Btn, _ToggleButton).IsChecked = False Else - EgtOutLog("CONFIG ERR: Il pulsante di Panel è stato definito come Button anziché ToggleButton") + EgtOutLog("CONFIG ERR: Il pulsante di Edit Panel è stato definito come Button anziché ToggleButton") End If ' rimuovo lo UC dalla griglia - Map.refSceneButtonVM.RemoveUC(Map.refSceneButtonVM.m_NewPanelUC) + Map.refSceneButtonVM.RemoveUC(Map.refSceneButtonVM.m_EditPanelUC) SolidManagerM.ManageUndoRedo() End Sub @@ -288,5 +339,85 @@ Public Class EditPanelVM AddSplitBottom(WaterFallList) End Sub + Private Sub SetVariablesAndRecreate(nEdgeId As Integer) + If EgtLuaSetGlobIntVar("TOOL.nEdgeId", nEdgeId) Then AssLog("TOOL.nEdgeId = " & nEdgeId.ToString()) + Dim nJunctionType = DirectCast(ParamList(4), _ComboBoxParam).IndexSelParamCmBx + 1 ' in Lua l'enum è 1-based + If EgtLuaSetGlobIntVar("TOOL.nJunctionType", nJunctionType) Then AssLog("TOOL.nJunctionType = " & nJunctionType.ToString()) + Dim dTh As Double = DirectCast(ParamList(3), _TextBoxParam).GetValue() + If EgtLuaSetGlobNumVar("TOOL.dTh", dTh) Then AssLog("TOOL.dTh = " & dTh.ToString()) + Dim dH As Double = DirectCast(ParamList(2), _TextBoxParam).GetValue() + If EgtLuaSetGlobNumVar("TOOL.dH", dH) Then AssLog("TOOL.dH = " & dH.ToString()) + Dim bPrev As Boolean = True + If EgtLuaSetGlobBoolVar("TOOL.bPrev", bPrev) Then AssLog("TOOL.bPrev = true") + Dim bNext As Boolean = True + If EgtLuaSetGlobBoolVar("TOOL.bNext", bNext) Then AssLog("TOOL.bNext = true") + If EgtLuaCallFunction("TOOL.CreateParetinaFull") Then AssLog("TOOL.CreateParetinaFull()") + End Sub + + Private Sub EditPanel() + ' recupero le info salvate nel Part + EgtLuaExecLine("TOOL.FillInfoTableFromPart(" & nIdPart.ToString() & ")") + ' recupero l'id dell'edge che ha generato la paretina + Dim nParent As Integer = GDB_ID.NULL + EgtGetInfo(nIdPart, "Parent", nParent) + Dim nIn As Integer = 0 + EgtGetInfo(nIdPart, "nInLoop", nIn) + Dim sLayName As String = "OutLoop" + Dim nLayId As Integer = GDB_ID.NULL + If nIn = 0 Then + nLayId = EgtGetFirstNameInGroup(nParent, sLayName) + Else + sLayName = "InLoop" + nLayId = EgtGetFirstNameInGroup(nParent, sLayName) + Dim nInLays = 1 + While nInLays <> nIn + nLayId = EgtGetNextName(nLayId, sLayName) + nInLays += 1 + End While + End If + Dim nEdge As Integer = 0 + EgtGetInfo(nIdPart, "ParentEdge", nEdge) + Dim sEdgeName As String = "A" & nEdge.ToString() + Dim nEdgeId As Integer = EgtGetFirstNameInGroup(nLayId, sEdgeName) + ' setto i parametri che ha scelto l'utente + SetVariablesAndRecreate(nEdgeId) + ' se la checkbox per la modifica delle paretine dello stesso tipo, sullo stesso loop, è checkata allora scorro il loop e continuo a chiamare la ricreazione + If DirectCast(ParamList(10), _CheckBoxParam).IsChecked Then + ' scorro i next e prev modificando anche le paretine adiacenti con le stesse modifiche + ' facendo attenzione a non entrare in un loop + Dim sCurrPartName As String = String.Empty + EgtGetName(nIdPart, sCurrPartName) + Dim sNamePrev As String = String.Empty + EgtGetInfo(nIdPart, "Prev", sNamePrev) + Dim nLastPrev As Integer = GDB_ID.NULL + While sNamePrev <> String.Empty And sNamePrev <> sCurrPartName + Dim nPrev As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, sNamePrev) + ' recupero le info salvate nel Part + EgtLuaExecLine("TOOL.FillInfoTableFromPart(" & nPrev.ToString() & ")") + ' recupero l'edge del parent e ricreo la paretina + EgtGetInfo(nPrev, "ParentEdge", nEdge) + sEdgeName = "A" & nEdge.ToString() + nEdgeId = EgtGetFirstNameInGroup(nLayId, sEdgeName) + SetVariablesAndRecreate(nEdgeId) + EgtGetInfo(nPrev, "Prev", sNamePrev) + nLastPrev = nPrev + End While + Dim sNameNext As String = String.Empty + EgtGetInfo(nIdPart, "Next", sNameNext) + While sNameNext <> String.Empty + Dim nNext As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, sNameNext) + ' recupero le info salvate nel Part + EgtLuaExecLine("TOOL.FillInfoTableFromPart(" & nNext.ToString() & ")") + ' recupero l'edge del parent e ricreo la paretina + If nNext = nLastPrev Then Exit While + EgtGetInfo(nNext, "ParentEdge", nEdge) + sEdgeName = "A" & nEdge.ToString() + nEdgeId = EgtGetFirstNameInGroup(nLayId, sEdgeName) + SetVariablesAndRecreate(nEdgeId) + EgtGetInfo(nNext, "Next", sNameNext) + End While + End If + End Sub + #End Region ' Methods End Class diff --git a/SVG/SVGVM.vb b/SVG/SVGVM.vb index 57bafe5..6c8dae4 100644 --- a/SVG/SVGVM.vb +++ b/SVG/SVGVM.vb @@ -278,6 +278,7 @@ Public Class MyPath ' Carico colore linea SetBrushFromRGBString(m_stroke, m_CurrPath.Stroke) ' Carico spessore linea + If m_stroke_width < 5 Then m_stroke_width = 10 m_CurrPath.StrokeThickness = m_stroke_width ' Applico l'opacità della superificie m_CurrPath.Opacity = m_fill_opacity diff --git a/SceneButton/SceneButtonVM.vb b/SceneButton/SceneButtonVM.vb index 956cd37..b8670c8 100644 --- a/SceneButton/SceneButtonVM.vb +++ b/SceneButton/SceneButtonVM.vb @@ -214,6 +214,12 @@ Public Class SceneButtonVM ''' ''' User control generico Public Sub LoadUC(SceneUC As SceneUserControlV) + If Not IsNothing(m_PairUC) Then RemoveUC(m_PairUC) + If Not IsNothing(m_RotateUC) Then RemoveUC(m_RotateUC) + If Not IsNothing(m_MoveUC) Then RemoveUC(m_MoveUC) + If Not IsNothing(m_NewPanelUC) Then RemoveUC(m_NewPanelUC) + If Not IsNothing(m_EditPanelUC) Then RemoveUC(m_EditPanelUC) + If Not IsNothing(m_ParametricCompoUC) Then RemoveUC(m_ParametricCompoUC) Grid.SetColumn(SceneUC, 0) Grid.SetRow(SceneUC, 0) Grid.SetColumnSpan(SceneUC, 2) @@ -227,6 +233,7 @@ Public Class SceneButtonVM ''' User control generico Friend Sub RemoveUC(SceneUC As SceneUserControlV) Map.refSceneButtonV.MainGrid.Children.Remove(SceneUC) + SceneUC = Nothing End Sub #End Region ' Methods diff --git a/SceneHost/MySceneHostVM.vb b/SceneHost/MySceneHostVM.vb index ae3f04a..2db8b38 100644 --- a/SceneHost/MySceneHostVM.vb +++ b/SceneHost/MySceneHostVM.vb @@ -983,8 +983,14 @@ Line1: Continue While End If - ' selezione semplice - If EgtIsPart(nPartId) Then + If Map.refSceneButtonVM.IsTgBtnChecked(EGT_EDIT_PANEL) Then + Dim PartSolidId As Integer = nPartId + If sName = "SOLID" Then EgtGetInfo(nPartId, "Parent", PartSolidId) + DirectCast(Map.refSceneButtonVM.m_EditPanelUC.DataContext, EditPanelVM).nIdPart = PartSolidId + End If + + ' selezione semplice + If EgtIsPart(nPartId) Then Dim nStat As Integer = GDB_ST.ON_ EgtGetStatus(nPartId, nStat) ' Se già selezionato o posizione oggetto incompatibile con flag posizione selezionati @@ -1090,7 +1096,12 @@ Line1: ' WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ' WARNING WARNING WARNING WARNING WARNING WARNING ' questo controllo è stato tolto per poter selezionare gli oggetti importati nel vme e quindi non presenti nel nesting 'If bSelected Then - PartSolidIdToSel.SelectPart() + If Map.refSceneButtonVM.IsTgBtnChecked(EGT_EDIT_PANEL) Then + PartSolidIdToSel.SelectSinglePart() + Else + PartSolidIdToSel.SelectPart() + End If + 'End If ' Se deselezione da eseguire ElseIf m_nIdToDesel <> GDB_ID.NULL Then diff --git a/SceneUserControl/SceneUserControlVM.vb b/SceneUserControl/SceneUserControlVM.vb index c700d4d..89119d2 100644 --- a/SceneUserControl/SceneUserControlVM.vb +++ b/SceneUserControl/SceneUserControlVM.vb @@ -354,6 +354,17 @@ Public Class _ComboBoxParam m_SelParamCmBx = value RaiseEvent SelectionChanged(Me, m_SelParamCmBx) NotifyPropertyChanged(NameOf(SelParamCmBx)) + IndexSelParamCmBx = ParamCmBxList.FindIndex(Function(x As ParamCmBx) x.Name = m_SelParamCmBx.Name) + End Set + End Property + + Private m_IndexSelParamCmBx As Integer + Public Property IndexSelParamCmBx As Integer + Get + Return m_IndexSelParamCmBx + End Get + Set(value As Integer) + m_IndexSelParamCmBx = value End Set End Property