- aggiunta la funzione per la creazione di tutit i solidi mancanti.

- miglirata la funzione per il refresh del partSolid.
- migliorata la gestione della creazione dei template.
This commit is contained in:
Daniele Bariletti
2025-02-27 12:13:39 +01:00
parent 34493aca8f
commit 9dc4278783
4 changed files with 74 additions and 14 deletions
+18 -1
View File
@@ -11,6 +11,16 @@ Public Class ParametricCompoVM
Friend ReadOnly bFileExsist As Boolean = False
Private m_nVeinCtx As Integer
Private m_nPartId As Integer = GDB_ID.NULL
Public Property nPartId As Integer
Get
Return m_nPartId
End Get
Set(value As Integer)
m_nPartId = value
End Set
End Property
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
@@ -88,6 +98,8 @@ Public Class ParametricCompoVM
EgtLuaSetGlobNumVar("TOOL.nId", nPart)
EgtLuaCallFunction("TOOL.RenameNewPart")
EgtLuaCallFunction("TOOL.ClearVariables")
nPartId = EgtGetLastPart()
End Sub
Public Overrides Sub Conferma()
@@ -98,7 +110,8 @@ Public Class ParametricCompoVM
End Sub
Public Overrides Sub Annulla()
EgtErase(EgtGetLastPart())
Dim PartSolidSel As PartSolidM = GetPartSolid(nPartId)
SolidManagerM.Delete(nPartId)
EgtDraw()
Close()
End Sub
@@ -111,6 +124,10 @@ Public Class ParametricCompoVM
Private Sub Close()
Map.refSceneButtonVM.RemoveUC(Map.refSceneButtonVM.m_ParametricCompoUC)
SolidManagerM.RefreshPartSolid(nPartId)
' debug
EgtSaveFile("D:\\Temp\\marmo\\Vein3D\\template.nge", 2)
' debug
End Sub
Private Function NameTypeValueFromLua(nInd As Integer, ByRef Param As GenericParam) As Boolean
+1
View File
@@ -11,6 +11,7 @@
Public Const EGT_SEL_TYPE As String = "SelType"
Public Const EGT_IMPORT_LOOP As String = "ImportLoop"
Public Const EGT_CREATE_SOLID_LOOP As String = "CreateSolidFromLoop"
Public Const EGT_CREATE_ALL_SOLIDS As String = "CreateAllSolids"
Public Const EGT_MOVE As String = "Move"
Public Const EGT_ADD_ALZ As String = "AddSplashTop"
Public Const EGT_ADD_FRO As String = "AddWaterfall"
+3
View File
@@ -483,6 +483,7 @@ Module SceneCmd
Map.refSceneButtonVM.m_ParametricCompoUC.DataContext = LocalParametricCompo
Map.refSceneButtonVM.LoadUC(Map.refSceneButtonVM.m_ParametricCompoUC)
bNewParametricExsists = True
SolidManagerM.CreatePartSolid()
End If
End If
Return bNewParametricExsists
@@ -521,6 +522,8 @@ Module SceneCmd
ImportLoop()
Case EGT_CREATE_SOLID_LOOP
SolidManagerM.CreateSolidFromLoops(Map.refSceneHostVM.m_nIdPart)
Case EGT_CREATE_ALL_SOLIDS
SolidManagerM.CreateAllSolids()
Case EGT_ADD_PANEL
If IsNothing(Map.refSceneButtonVM.m_NewPanelUC) Then Map.refSceneButtonVM.m_NewPanelUC = New SceneUserControlV
Map.refSceneButtonVM.m_NewPanelUC.DataContext = New NewPanelVM()
+52 -13
View File
@@ -13,6 +13,13 @@ Module SolidManagerM
#Region "METHODS"
Public Function ExistsPartSolid(nId As Integer) As PartSolidM
' cerco nella lista dei part quello con id uguale a nId, se non lo trovo allora nId era riferito ad un Part Solid
Dim PartSolid As PartSolidM = m_PartSolidList.FirstOrDefault(Function(x) x.PartId = nId)
If IsNothing(PartSolid) Then PartSolid = m_PartSolidList.FirstOrDefault(Function(x) x.PartSolidId = nId)
Return PartSolid
End Function
Public Function GetPartSolid(nId As Integer) As PartSolidM
' se la lista non esiste la creo
If m_PartSolidList.Count = 0 Then
@@ -20,9 +27,8 @@ Module SolidManagerM
End If
' se l'id è negativo allora sto applicando un disaccoppiamento e mi basta rendere l'id positivo
If nId < 0 Then nId *= -1
' cerco nella lista dei part quello con id uguale a nId, se non lo trovo allora nId era riferito ad un Part Solid
Dim PartSolid As PartSolidM = m_PartSolidList.FirstOrDefault(Function(x) x.PartId = nId)
If IsNothing(PartSolid) Then PartSolid = m_PartSolidList.FirstOrDefault(Function(x) x.PartSolidId = nId)
' cerco se è già presente nella lista il corrispondete PartSolid
Dim PartSolid As PartSolidM = ExistsPartSolid(nId)
' se non l'ho trovato allora lo creo
If IsNothing(PartSolid) Then AddPartSolid(nId, PartSolid)
@@ -39,12 +45,15 @@ Module SolidManagerM
End Function
Public Sub RefreshPartSolid(nPartId As Integer)
Dim PartSolidSel As PartSolidM = GetPartSolid(nPartId)
' rimuovo il part solid associato a questo part
PartSolidSel.DeselectPart()
m_PartSolidList.Remove(PartSolidSel)
Dim PartSolidSel As PartSolidM = ExistsPartSolid(nPartId)
If Not IsNothing(PartSolidSel) Then
' rimuovo il part solid associato a questo part
PartSolidSel.DeselectPart()
m_PartSolidList.Remove(PartSolidSel)
End If
' lo ricreo
AddPartSolid(nPartId)
AddPartSolid(nPartId, PartSolidSel)
PartSolidSel.DeselectPart()
End Sub
Public Sub ClearPartSolidList()
@@ -90,13 +99,18 @@ Module SolidManagerM
nInLay = EgtGetNextName(nInLay, "InLoop")
End While
' creo la superficie piana
Dim nRegLay As Integer = EgtCreateGroup(nPart)
EgtSetName(nRegLay, "Region")
EgtCreateSurfFlatRegion(nRegLay, nLoops.ToArray())
' creo la superficie piana, se non è già presente
Dim nRegLay As Integer = EgtGetFirstNameInGroup(nPart, "Region")
If nRegLay = GDB_ID.NULL Then
nRegLay = EgtCreateGroup(nPart)
EgtSetName(nRegLay, "Region")
EgtCreateSurfFlatRegion(nRegLay, nLoops.ToArray())
End If
' splitto le compo nei lati singoli
For Each nLoopId In nLoops
EgtLuaExecLine("TOOL.ExplodeAndNameEdges(" & nLoopId.ToString & "," & "false" & ")")
If EgtGetType(nLoopId) = GDB_TY.CRV_COMPO Then
EgtLuaExecLine("TOOL.ExplodeAndNameEdges(" & nLoopId.ToString & "," & "false" & ")")
End If
Next
' Assegno valori ai parametri per lua (appartengono alla tabella SLD)
@@ -114,6 +128,31 @@ Module SolidManagerM
End If
End Sub
Public Sub CreateAllSolids()
' controllo se tutti i Part nel .vme hanno un corrispettiveo nella lista dei PartSolid, sennò la aggiorno
EgtSetCurrentContext(m_nVeinCtx)
Dim nPart As Integer = EgtGetFirstPart()
Dim dThick As Double = 20
EgtSetCurrentContext(m_nVeinCtx)
Dim IdFP As Integer = EgtGetFirstPart()
While IdFP <> GDB_ID.NULL
Dim bImport As Boolean = False
EgtGetInfo(IdFP, "Import", bImport)
Dim sName As String = String.Empty
EgtGetName(IdFP, sName)
' se il part non è un solido o una terna, creo il solido corrispondente, se non è già presente
If Not bImport And sName <> "SOLID" And sName <> "Terna" Then
CreateSolidFromLoops(IdFP)
End If
IdFP = EgtGetNextPart(IdFP)
End While
' aggiorno la lista dei part solid
CreatePartSolid()
EgtDraw()
End Sub
Public Sub UpdatePairInfo(nId1 As Integer, Optional nId2 As Integer = GDB_ID.NULL)
If EgtLuaSetGlobIntVar("ASS.nPartId", nId1) Then AssLog("ASS.nPartId = " & nId1.ToString)
If EgtLuaSetGlobIntVar("ASS.nPartToPair", nId2) Then AssLog("ASS.nPartToPair = " & nId2.ToString)