Costruzione delle alette, da gestire la riapertutra della pagina

This commit is contained in:
NicolaP
2021-11-03 19:32:51 +01:00
parent bc06203edd
commit d1247d5c7e
3 changed files with 319 additions and 126 deletions
+313 -122
View File
@@ -5,6 +5,8 @@ Imports EgtWPFLib5
Public Class SideEntityControlVM
Inherits VMBase
Private Const INFO_ALZFRONT As String = "AF"
Public Enum ModeOpt As Integer
SIDEANGLE = 0 ' inclina lato
DRIP = 1 ' incidi da sotto
@@ -13,6 +15,12 @@ Public Class SideEntityControlVM
ALZANDFRONT = 4 ' alzatine e frontalini
End Enum
Public Enum ModeAlzAndFront
ALZATINA = 0
FRONTALINO = 1
NONE = 2
End Enum
Public Enum CallingWindowOpt As Integer
COMPO = 0
DXFIMPORT = 1
@@ -158,6 +166,7 @@ Public Class SideEntityControlVM
Private Sub SetParameter1(value As Double)
m_Parameter1 = value
SideAngleEntity.m_Parameter1 = value
AlzAndFrontEntity.m_Parameter1 = value
NotifyPropertyChanged("Parameter1")
End Sub
@@ -232,12 +241,19 @@ Public Class SideEntityControlVM
End Property
Private m_Parameter2a As Integer
Private m_dParameter2a As Double
Public Property Parameter2a As String
Get
If SideEntityControlVM.ModeOpt.ALZANDFRONT = ModeOpt.ALZANDFRONT Then
Return DoubleToString(m_dParameter2a, 2)
End If
Return DoubleToString(m_Parameter2a, 2)
End Get
Set(value As String)
' recupero il valore passato come intero
StringToInt(value, m_Parameter2a)
' recupero il valore passato come double
StringToDouble(value, m_dParameter2a)
' Recupero il valore
StringToInt(value, m_nEngrNbr2)
' Creo le geometrie dei gocciolatoi
@@ -249,6 +265,12 @@ Public Class SideEntityControlVM
SideAngleEntity.m_Parameter2a = value
NotifyPropertyChanged("Parameter2a")
End Sub
Private Sub SetdParameter2a(value As Double)
m_dParameter2a = value
SideAngleEntity.m_dParameter2a = value
AlzAndFrontEntity.m_dParameter2a = value
NotifyPropertyChanged("Parameter2a")
End Sub
Private m_Parameter2b As Double
Public Property Parameter2b As String
@@ -266,6 +288,7 @@ Public Class SideEntityControlVM
Private Sub SetParameter2b(value As Double)
m_Parameter2b = value
SideAngleEntity.m_Parameter2b = value
AlzAndFrontEntity.m_Parameter2b = value
NotifyPropertyChanged("Parameter2b")
End Sub
@@ -309,6 +332,10 @@ Public Class SideEntityControlVM
Private m_dSideAngle As Double = 0
Private m_HeightA As Double = 0
Private m_HeightF As Double = 0
Private m_DeltaAngF As Double = 0
Private m_dOffsetFiloTop As Double = 5
Private m_dDepthFiloTop As Double = 5
@@ -345,15 +372,24 @@ Public Class SideEntityControlVM
End Set
End Property
Public ReadOnly Property Parameter3Msg As String
Private m_Parameter3Msg As String = EgtMsg(MSG_IMPORTPAGEUC + 11)
Public Property Parameter3Msg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 11) ' Affondamento
Return m_Parameter3Msg ' Affondamento
End Get
Set(value As String)
m_Parameter3Msg = value
End Set
End Property
Public ReadOnly Property Parameter4Msg As String
Private m_Parameter4Msg As String = EgtMsg(MSG_IMPORTPAGEUC + 12)
Public Property Parameter4Msg As String
Get
Return EgtMsg(MSG_IMPORTPAGEUC + 12) ' Accorciamento
Return m_Parameter4Msg ' Accorciamento
End Get
Set(value As String)
m_Parameter4Msg = value
End Set
End Property
#End Region ' Messages
@@ -435,13 +471,21 @@ Public Class SideEntityControlVM
' imposto la pagina per la gestione delle Alzatine e dei frontalini
If m_Mode = ModeOpt.ALZANDFRONT Then
Parameter23_Visibility = Windows.Visibility.Hidden
Parameter2_Visibility = Visibility.Visible
Parameter2ab_Visibility = Visibility.Hidden
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 9) ' Angolo
Parameter2Msg = EgtMsg(91002) ' Tallone
m_dSideAngle = GetMainPrivateProfileDouble(S_SIDES, K_SIDEANGLE, 45)
SetParameter1(m_dSideAngle)
Parameter2_Visibility = Visibility.Hidden
Parameter23_Visibility = Windows.Visibility.Visible
Parameter2ab_Visibility = Visibility.Visible
Parameter4_Visibility = Visibility.Hidden
Parameter1Msg = "Spessore"
Parameter2Msg = "Altezza"
Parameter3Msg = "Delta Ang."
m_HeightA = GetMainPrivateProfileDouble("Alz&Front", "A_Height", 0)
m_HeightF = GetMainPrivateProfileDouble("Alz&Front", "F_Height", 0)
SetParameter1(EstCalc.GetRawHeight)
SetdParameter2a(m_HeightA)
SetParameter2b(m_HeightF)
End If
' Aggiorno visualizzazione
@@ -455,7 +499,7 @@ Public Class SideEntityControlVM
#End Region ' CONSTRUCTOR
#Region "METHODS"
' aggiorno i messaggi scritti sui lati della figura (anche per le alette)
Private Sub RefreshSideAngleText()
' Imposto contesto corrente
EgtSetCurrentContext(m_CallingWndScene.GetCtx())
@@ -497,7 +541,19 @@ Public Class SideEntityControlVM
If SideEntity.dSideHeel > 10 * EPS_SMALL Then sText += "; " & LenToString(SideEntity.dSideHeel, 1)
AddTextToLine(sText, Entity.nTextId, Entity.nGeomId, 20, dBBoxRad, True)
Next
' Altrimenti modalità gocciolatoio
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
AlzAndFrontEntity.m_Parameter1 = m_Parameter1
AlzAndFrontEntity.m_dParameter2a = m_dParameter2a
AlzAndFrontEntity.m_Parameter2b = m_Parameter2b
' Per ogni entità, creo testo con nome e angolo di inclinazione
For Each Entity In m_SideEntityList
Dim SideEntity As AlzAndFrontEntity = TryCast(Entity, AlzAndFrontEntity)
Dim sText As String = Entity.sEntityName '& " = " & DoubleToString(SideEntity.dSideAngle, 1) & "°"
'If SideEntity.dSideHeel > 10 * EPS_SMALL Then sText += "; " & LenToString(SideEntity.dSideHeel, 1)
AddTextToLine(sText, Entity.nTextId, Entity.nGeomId, 20, dBBoxRad, True)
Next
LoadCurrentCompo()
' Altrimenti modalità gocciolatoio
Else
' Per ogni entità creo testo con nome
For Each Entity In m_SideEntityList
@@ -562,7 +618,16 @@ Public Class SideEntityControlVM
nOtherIndex += 1
End If
ElseIf m_Mode = ModeOpt.FILOTOP Then
' --- ??? ---
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
If VerifySideAnglePossible(PrevLine, CurrLine, NextLine, bOutLoop) Then
' Aggiungo il lato alla lista di quelli inclinabili e ne azzero l'inclinazione
AddAlzAndFront(CurrLine, TextLayer, dBBoxRad, nEntityIndex)
nEntityIndex += 1
Else
EgtSetName(CurrLine, "B" & nOtherIndex.ToString())
nOtherIndex += 1
End If
Else
If VerifyIsSideDripPossible(PrevLine, CurrLine, NextLine) Then
' Aggiungo il lato alla lista di quelli su cui è possibile mettere il gocciolatoio
@@ -664,6 +729,29 @@ Public Class SideEntityControlVM
AddTextToLine(sText, TextLayer, CurrLine, 20, dBBoxRad, True)
End Sub
Private Sub AddAlzAndFront(CurrLine As Integer, TextLayer As Integer, dBBoxRad As Double, nEntityIndex As Integer)
' Imposto nome del lato
EgtSetName(CurrLine, "A" & nEntityIndex.ToString())
Dim sEntityName As String = String.Empty
EgtGetName(CurrLine, sEntityName)
Dim NewEntity As AlzAndFrontEntity = Nothing
NewEntity = New AlzAndFrontEntity(CurrLine, sEntityName, TextLayer, ModeOpt.ALZANDFRONT)
Dim sInfo As String = "0"
EgtGetInfo(CurrLine, "AF", sInfo)
If sInfo = "1" Then
NewEntity.bIsCheckedAlz = True
ElseIf sInfo = "2" Then
NewEntity.bIsCheckedFront = True
Else
NewEntity.bIsCheckedAlz = False
NewEntity.bIsCheckedFront = False
End If
EgtSetInfo(NewEntity.nGeomId, "IsModify", 0)
m_SideEntityList.Add(NewEntity)
NotifyPropertyChanged("Legenda_Visibility")
AddTextToLine("A" & CurrLine.ToString, TextLayer, CurrLine, 20, dBBoxRad, True)
End Sub
' Funzione che gestisce le operazioni sull'entità con gocciolatoio
Private Sub AddDripSide(CurrLine As Integer, TextLayer As Integer, dBBoxRad As Double, nEntityIndex As Integer)
' Imposto nome del lato
@@ -1435,6 +1523,107 @@ Public Class SideEntityControlVM
End While
End Sub
'---------------------- GESTIONE ALZATIENE E FRONTALINI ----------------------
Shared Sub LoadCurrentCompo()
Dim m_dBBoxRad As Double = 0.5 * Point3d.DistXY(EstCalc.GetRawPtMin, EstCalc.GetRawPtMax)
Dim m_dH As Double = 0.05 * m_dBBoxRad
' !! ATTENZIONE !! : per problemi di spazio è stata spenta la text per stampare i messaggi (ma potrebbe servire?)
' Pulisco l'ambiente lua
EgtLuaResetGlobVar("CMP")
EgtLuaResetGlobVar("CMP_Draw")
Dim nCompoName As Integer
Dim sCompoFile As String = ""
Dim sCompoImage As String = ""
' recupero il nome del direttorio
Dim sCompoDir As String = String.Empty
GetMainPrivateProfileString("Alz&Front", K_COMPODIR, "", sCompoDir)
' leggo le info inserite nel campo "Alz&Front"
Dim CItem As CompoItem = CompoWindowMap.refCompoListPageVM.GetPrivateProfileCompo("Alz&Front", "Alz&Front")
nCompoName = CItem.Index
sCompoFile = CItem.LuaPath
sCompoImage = CItem.ImagePath
'Dim sCompoImageSource As ImageSource
' Costruisco path completa del componente
Dim sPath = sCompoDir & "\" & sCompoFile
' Carico il file
EgtLuaExecFile(sPath)
' carico la lista di variabili
Dim dVal As Double
If StringToLen(AlzAndFrontEntity.m_dParameter2a.ToString, dVal) Then
EgtLuaSetGlobNumVar("CMP.A_Height", dVal)
End If
If StringToLen(AlzAndFrontEntity.m_Parameter2b.ToString, dVal) Then
EgtLuaSetGlobNumVar("CMP.F_Height", dVal)
End If
If StringToLen("0", dVal) Then
EgtLuaSetGlobNumVar("CMP.A_DeltaAng", dVal)
End If
If StringToLen("0", dVal) Then
EgtLuaSetGlobNumVar("CMP.F_DeltaAng", dVal)
End If
' deve essere imposta sempre la dimensione della lastra
If StringToLen(AlzAndFrontEntity.m_Parameter1.ToString, dVal) Then
EgtLuaSetGlobNumVar("CMP.ThicknessRaw", dVal)
End If
' parametri per la scrittura dei caratteri
EgtLuaSetGlobNumVar("CMP.BBoxRad", m_dBBoxRad)
EgtLuaSetGlobNumVar("CMP.HeightText", m_dH)
Dim sMsg As String = String.Empty
' eseguo la funzione per il disegno della componente (CMP_Draw)
If Not EgtLuaExecLine("CMP_Draw" & "(true)") Then
sMsg = "Error in component execution"
'm_bDrawOk = False
Else
EgtLuaGetGlobStringVar("CMP" & ".MSG", sMsg)
Dim nErr As Integer = 0
EgtLuaGetGlobIntVar("CMP" & ".ERR", nErr)
'm_bDrawOk = (nErr = 0)
End If
' aggiorno la grafica
EgtZoom(ZM.ALL)
End Sub
Shared Sub RefreshEntity(bIsAlz As Boolean, bIsChecked As Boolean, GeneralSideEntity As SideEntity)
Dim Loacl_AlzFrontEntity As AlzAndFrontEntity = Nothing
Try
Loacl_AlzFrontEntity = DirectCast(GeneralSideEntity, AlzAndFrontEntity)
Catch ex As Exception
Return
End Try
If bIsAlz Then
If bIsChecked Then
Loacl_AlzFrontEntity.Type = ModeAlzAndFront.ALZATINA
Else
Loacl_AlzFrontEntity.Type = ModeAlzAndFront.NONE
End If
Else
If bIsChecked Then
Loacl_AlzFrontEntity.Type = ModeAlzAndFront.FRONTALINO
Else
Loacl_AlzFrontEntity.Type = ModeAlzAndFront.NONE
End If
End If
Select Case Loacl_AlzFrontEntity.Type
Case SideEntityControlVM.ModeAlzAndFront.NONE
EgtSetInfo(Loacl_AlzFrontEntity.nGeomId, INFO_ALZFRONT, 0)
Case SideEntityControlVM.ModeAlzAndFront.ALZATINA
EgtSetInfo(Loacl_AlzFrontEntity.nGeomId, INFO_ALZFRONT, 1)
Case SideEntityControlVM.ModeAlzAndFront.FRONTALINO
EgtSetInfo(Loacl_AlzFrontEntity.nGeomId, INFO_ALZFRONT, 2)
End Select
EgtSetInfo(Loacl_AlzFrontEntity.nGeomId, "IsModify", 1)
' questa funzione deve essere lanciata al termine di ogno selezione o modifica dei parametri di dimensione
LoadCurrentCompo()
End Sub
#End Region ' METHODS
End Class
@@ -1541,6 +1730,7 @@ Public MustInherit Class SideEntity
Else
m_bIsCheckedAlz = False
End If
SideEntityControlVM.RefreshEntity(True, value, Me)
NotifyPropertyChanged("bIsCheckedAlz")
NotifyPropertyChanged("bIsCheckedFront")
End Set
@@ -1558,6 +1748,7 @@ Public MustInherit Class SideEntity
Else
m_bIsCheckedFront = False
End If
SideEntityControlVM.RefreshEntity(False, value, Me)
NotifyPropertyChanged("bIsCheckedAlz")
NotifyPropertyChanged("bIsCheckedFront")
End Set
@@ -1590,6 +1781,7 @@ Friend Class SideAngleEntity
Friend Shared m_Parameter1 As Double
Friend Shared m_Parameter2 As Double
Friend Shared m_Parameter2a As Integer
Friend Shared m_dParameter2a As Double
Friend Shared m_Parameter2b As Double
Friend Shared m_ModifySideAngle As Action(Of String, Double)
Friend Shared m_ModifySideHeel As Action(Of String, Double)
@@ -2005,130 +2197,129 @@ Friend Class AlzAndFrontEntity
Friend Shared m_Parameter1 As Double
Friend Shared m_Parameter2 As Double
Friend Shared m_Parameter2a As Integer
Friend Shared m_dParameter2a As Double
Friend Shared m_Parameter2b As Double
Friend Shared m_ModifySideAngle As Action(Of String, Double)
Friend Shared m_ModifySideHeel As Action(Of String, Double)
Friend Shared m_RefreshSideAngleText As Action
Private m_dSideAngle As Double
Public Property GrphSideAngle As String
Get
Return DoubleToString(m_dSideAngle, 2)
End Get
Set(value As String)
Dim dVal As Double = 0
If Not String.IsNullOrWhiteSpace(value) Then StringToDouble(value, dVal)
If dVal <> m_dSideAngle Then
' Assegno controllando i limiti
If dVal < -m_dMaxSideAng Then
m_dSideAngle = -m_dMaxSideAng
NotifyPropertyChanged("GrphSideAngle")
ElseIf dVal > m_dMaxSideAng Then
m_dSideAngle = m_dMaxSideAng
NotifyPropertyChanged("GrphSideAngle")
Else
m_dSideAngle = dVal
End If
' Lo modifico nella geometria e nella lista inclinazioni
m_ModifySideAngle(sEntityName, dSideAngle)
' Aggiorno tutti i testi
m_RefreshSideAngleText()
End If
End Set
End Property
Public Property dSideAngle As Double
Get
Return m_dSideAngle
End Get
Set(value As Double)
' Assegno controllando i limiti
If value < -m_dMaxSideAng Then
m_dSideAngle = -m_dMaxSideAng
ElseIf value > m_dMaxSideAng Then
m_dSideAngle = m_dMaxSideAng
Else
m_dSideAngle = value
End If
End Set
End Property
'Private m_dSideAngle As Double
'Public Property GrphSideAngle As String
' Get
' Return DoubleToString(m_dSideAngle, 2)
' End Get
' Set(value As String)
' Dim dVal As Double = 0
' If Not String.IsNullOrWhiteSpace(value) Then StringToDouble(value, dVal)
' If dVal <> m_dSideAngle Then
' ' Assegno controllando i limiti
' If dVal < -m_dMaxSideAng Then
' m_dSideAngle = -m_dMaxSideAng
' NotifyPropertyChanged("GrphSideAngle")
' ElseIf dVal > m_dMaxSideAng Then
' m_dSideAngle = m_dMaxSideAng
' NotifyPropertyChanged("GrphSideAngle")
' Else
' m_dSideAngle = dVal
' End If
' ' Lo modifico nella geometria e nella lista inclinazioni
' m_ModifySideAngle(sEntityName, dSideAngle)
' ' Aggiorno tutti i testi
' m_RefreshSideAngleText()
' End If
' End Set
'End Property
'Public Property dSideAngle As Double
' Get
' Return m_dSideAngle
' End Get
' Set(value As Double)
' ' Assegno controllando i limiti
' If value < -m_dMaxSideAng Then
' m_dSideAngle = -m_dMaxSideAng
' ElseIf value > m_dMaxSideAng Then
' m_dSideAngle = m_dMaxSideAng
' Else
' m_dSideAngle = value
' End If
' End Set
'End Property
Private m_dSideHeel As Double
Public Property GrphSideHeel As String
Get
Return LenToString(m_dSideHeel, 2)
End Get
Set(value As String)
Dim dVal As Double = 0
If Not String.IsNullOrWhiteSpace(value) Then StringToLen(value, dVal)
If Math.Abs(dVal - m_dSideHeel) > EPS_SMALL Then
' Verifico stia nei limiti
If dVal < 0 Then
m_dSideHeel = 0
NotifyPropertyChanged("GrphSideHeel")
Else
m_dSideHeel = dVal
End If
' Lo modifico nella geometria e nella lista inclinazioni
m_ModifySideHeel(sEntityName, dSideHeel)
' Aggiorno tutti i testi
m_RefreshSideAngleText()
End If
End Set
End Property
Public Property dSideHeel As Double
Get
Return m_dSideHeel
End Get
Set(value As Double)
' Verifico stia nei limiti
If value < 0 Then
m_dSideHeel = 0
Else
m_dSideHeel = value
End If
End Set
End Property
'Private m_dSideHeel As Double
'Public Property GrphSideHeel As String
' Get
' Return LenToString(m_dSideHeel, 2)
' End Get
' Set(value As String)
' Dim dVal As Double = 0
' If Not String.IsNullOrWhiteSpace(value) Then StringToLen(value, dVal)
' If Math.Abs(dVal - m_dSideHeel) > EPS_SMALL Then
' ' Verifico stia nei limiti
' If dVal < 0 Then
' m_dSideHeel = 0
' NotifyPropertyChanged("GrphSideHeel")
' Else
' m_dSideHeel = dVal
' End If
' ' Lo modifico nella geometria e nella lista inclinazioni
' m_ModifySideHeel(sEntityName, dSideHeel)
' ' Aggiorno tutti i testi
' m_RefreshSideAngleText()
' End If
' End Set
'End Property
'Public Property dSideHeel As Double
' Get
' Return m_dSideHeel
' End Get
' Set(value As Double)
' ' Verifico stia nei limiti
' If value < 0 Then
' m_dSideHeel = 0
' Else
' m_dSideHeel = value
' End If
' End Set
'End Property
Public Overrides Property bIsChecked As Boolean
Get
Return Not m_dSideAngle = 0
Return False
End Get
Set(value As Boolean)
If value Then
m_dSideAngle = m_Parameter1
m_dSideHeel = m_Parameter2
Else
m_dSideAngle = 0
m_dSideHeel = 0
End If
' '' Converto nome checkbox in nome elemento tenendo conto dello slittamento verso il basso
''Dim nCurrSide As Integer = m_SideAngleEntityList.Count() - (10 - CInt(CurrCheckBox.Name.Substring(1)))
''Dim sCurrSide As String = "A" & nCurrSide.ToString()
' Lo modifico nella geometria e nella lista inclinazioni
m_ModifySideAngle(sEntityName, m_dSideAngle)
m_ModifySideHeel(sEntityName, m_dSideHeel)
' Aggiorno tutti i testi
m_RefreshSideAngleText()
'If value Then
' m_dSideAngle = m_Parameter1
' m_dSideHeel = m_Parameter2
'Else
' m_dSideAngle = 0
' m_dSideHeel = 0
'End If
'' '' Converto nome checkbox in nome elemento tenendo conto dello slittamento verso il basso
'''Dim nCurrSide As Integer = m_SideAngleEntityList.Count() - (10 - CInt(CurrCheckBox.Name.Substring(1)))
'''Dim sCurrSide As String = "A" & nCurrSide.ToString()
'' Lo modifico nella geometria e nella lista inclinazioni
'm_ModifySideAngle(sEntityName, m_dSideAngle)
'm_ModifySideHeel(sEntityName, m_dSideHeel)
'' Aggiorno tutti i testi
'm_RefreshSideAngleText()
NotifyPropertyChanged("bIsChecked")
End Set
End Property
Sub New(nId As Integer, sEntityName As String, nTextId As Integer, dSideAngle As Double, dSideHeel As Double, Mode As SideEntityControlVM.ModeOpt)
Private m_Type As SideEntityControlVM.ModeAlzAndFront = SideEntityControlVM.ModeAlzAndFront.NONE
Public Property Type As SideEntityControlVM.ModeAlzAndFront
Get
Return m_Type
End Get
Set(value As SideEntityControlVM.ModeAlzAndFront)
m_Type = value
End Set
End Property
Sub New(nId As Integer, sEntityName As String, nTextId As Integer, Mode As SideEntityControlVM.ModeOpt)
MyBase.New(nId, sEntityName, nTextId, Mode)
m_dSideAngle = dSideAngle
m_dSideHeel = dSideHeel
'm_dSideAngle = dSideAngle
'm_dSideHeel = dSideHeel
End Sub
Friend Shared Function FindEntity(sEntityName As String, EntityList As ObservableCollection(Of SideEntity)) As SideAngleEntity
If IsNothing(EntityList) Then
Return Nothing
End If
For Each Entity In EntityList
If Entity.sEntityName = sEntityName Then
Return DirectCast(Entity, SideAngleEntity)
End If
Next
Return Nothing
End Function
End Class