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.
2443 lines
95 KiB
VB.net
2443 lines
95 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports EgtUILib
|
|
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
|
|
ENGRAVE = 2 ' incidi da sopra
|
|
FILOTOP = 3 ' filo top
|
|
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
|
|
End Enum
|
|
|
|
' Variabile che indica se sono in sideangle o drip
|
|
Friend m_Mode As ModeOpt
|
|
|
|
Friend Shared m_SideAngleCheck As Boolean = False
|
|
|
|
' Lista di tutte le entità (inclinabili) presenti nel progetto
|
|
Private m_SideEntityList As ObservableCollection(Of SideEntity)
|
|
Public Property SideEntityList As ObservableCollection(Of SideEntity)
|
|
Get
|
|
Return m_SideEntityList
|
|
End Get
|
|
Set(value As ObservableCollection(Of SideEntity))
|
|
m_SideEntityList = value
|
|
End Set
|
|
End Property
|
|
|
|
#Region "Titolo colonne"
|
|
|
|
' stampa il nome delle colonne
|
|
Public ReadOnly Property Legenda_Visibility As Visibility
|
|
Get
|
|
If m_Mode = SideEntityControlVM.ModeOpt.FILOTOP OrElse m_SideEntityList.Count() = 0 Then
|
|
Return Visibility.Collapsed
|
|
ElseIf m_Mode = SideEntityControlVM.ModeOpt.SIDEANGLE And m_SideAngleCheck Then
|
|
Return Visibility.Collapsed
|
|
Else
|
|
Return Visibility.Visible
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property FirstColumnMsg As String
|
|
Get
|
|
Dim sMsg As String = ""
|
|
If m_Mode = SideEntityControlVM.ModeOpt.DRIP OrElse m_Mode = SideEntityControlVM.ModeOpt.ENGRAVE Then
|
|
' Start
|
|
sMsg = EgtMsg(91655)
|
|
ElseIf m_Mode = SideEntityControlVM.ModeOpt.SIDEANGLE Then
|
|
' A°
|
|
sMsg = EgtMsg(91653)
|
|
ElseIf m_Mode = SideEntityControlVM.ModeOpt.ALZANDFRONT Then
|
|
' Alz
|
|
sMsg = "Alz."
|
|
End If
|
|
Return sMsg
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property SecondColumnMsg As String
|
|
Get
|
|
Dim sMsg As String = ""
|
|
If m_Mode = SideEntityControlVM.ModeOpt.DRIP OrElse m_Mode = SideEntityControlVM.ModeOpt.ENGRAVE Then
|
|
' End
|
|
sMsg = EgtMsg(91656)
|
|
ElseIf m_Mode = SideEntityControlVM.ModeOpt.SIDEANGLE Then
|
|
' T
|
|
sMsg = EgtMsg(91654)
|
|
ElseIf m_Mode = SideEntityControlVM.ModeOpt.ALZANDFRONT Then
|
|
' Front
|
|
sMsg = "Front."
|
|
End If
|
|
Return sMsg
|
|
End Get
|
|
End Property
|
|
|
|
#End Region 'Titolo colonne
|
|
|
|
#Region "Parameter 1"
|
|
|
|
Private m_Parameter1_Visibility As Visibility
|
|
Public ReadOnly Property Parameter1_Visibility As Visibility
|
|
Get
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
If m_SideAngleCheck Then
|
|
Return Visibility.Visible
|
|
Else
|
|
Return Visibility.Collapsed
|
|
End If
|
|
Else
|
|
Return Visibility.Visible
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
Private m_Parameter1 As Double
|
|
Public Property Parameter1 As String
|
|
Get
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
Return DoubleToString(m_Parameter1, 2)
|
|
Else
|
|
Return LenToString(m_Parameter1, 2)
|
|
End If
|
|
End Get
|
|
Set(value As String)
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
StringToDouble(value, m_Parameter1)
|
|
SideAngleEntity.m_Parameter1 = m_Parameter1
|
|
' ciclo sui checkbox calcolati sul numero di lati inclinabili presenti
|
|
For Index As Integer = 0 To m_SideEntityList.Count - 1
|
|
' Nuovo angolo di inclinazione
|
|
Dim dSideAngle As Double
|
|
' Se checked lo imposto al valore letto dalla TxBx
|
|
If m_SideEntityList(Index).bIsChecked Then
|
|
StringToDouble(value, dSideAngle)
|
|
' altrimenti lo imposto a zero
|
|
Else
|
|
dSideAngle = 0
|
|
End If
|
|
' Lo modifico nella geometria e nella lista inclinazioni
|
|
ModifySideAngle(m_SideEntityList(Index).sEntityName, dSideAngle)
|
|
Next
|
|
' Aggiorno tutti i testi
|
|
RefreshSideAngleText()
|
|
Else
|
|
StringToLen(value, m_Parameter1)
|
|
' Recupero il valore
|
|
StringToLen(value, m_dDripOffset)
|
|
' Creo le geometrie dei gocciolatoi
|
|
RefreshSideAngleText()
|
|
' Aggiorno i dati delle alette
|
|
RefreshDataAlzAndFront()
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetParameter1(value As Double)
|
|
m_Parameter1 = value
|
|
SideAngleEntity.m_Parameter1 = value
|
|
AlzAndFrontEntity.m_Parameter1 = value
|
|
NotifyPropertyChanged("Parameter1")
|
|
End Sub
|
|
|
|
#End Region 'Parameter 1
|
|
|
|
#Region "Parameter 2"
|
|
|
|
Private m_Parameter2_Visibility As Visibility = Visibility.Visible
|
|
Public Property Parameter2_Visibility As Visibility
|
|
Get
|
|
Return m_Parameter2_Visibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
m_Parameter2_Visibility = value
|
|
NotifyPropertyChanged("Parameter2_Visbility")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Parameter2 As Double
|
|
Public Property Parameter2 As String
|
|
Get
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
Return LenToString(m_Parameter2, 2)
|
|
Else
|
|
Return LenToString(m_Parameter2, 2)
|
|
End If
|
|
End Get
|
|
Set(value As String)
|
|
StringToLen(value, m_Parameter2)
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
SideAngleEntity.m_Parameter2 = m_Parameter2
|
|
' ciclo sui checkbox calcolati sul numero di lati inclinabili presenti
|
|
For Index As Integer = 0 To m_SideEntityList.Count - 1
|
|
' Nuovo angolo di inclinazione
|
|
Dim dSideHeel As Double
|
|
' Se checked lo imposto al valore letto dalla TxBx
|
|
If m_SideEntityList(Index).bIsChecked Then
|
|
dSideHeel = m_Parameter2
|
|
' altrimenti lo imposto a zero
|
|
Else
|
|
dSideHeel = 0
|
|
End If
|
|
' Lo modifico nella geometria e nella lista inclinazioni
|
|
ModifySideHeel(m_SideEntityList(Index).sEntityName, dSideHeel)
|
|
Next
|
|
' Aggiorno tutti i testi
|
|
RefreshSideAngleText()
|
|
Else
|
|
m_dDripOffset2 = m_Parameter2
|
|
' Creo le geometrie dei gocciolatoi
|
|
RefreshSideAngleText()
|
|
End If
|
|
|
|
'If m_Mode <> ModeOpt.SIDEANGLE Then
|
|
' StringToLen(value, m_Parameter2)
|
|
' m_dDripOffset2 = m_Parameter2
|
|
' ' Creo le geometrie dei gocciolatoi
|
|
' RefreshSideAngleText()
|
|
'End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetParameter2(value As Double)
|
|
m_Parameter2 = value
|
|
NotifyPropertyChanged("Parameter2")
|
|
End Sub
|
|
|
|
Private m_Parameter2ab_Visibility As Visibility = Visibility.Visible
|
|
Public Property Parameter2ab_Visibility As Visibility
|
|
Get
|
|
Return m_Parameter2ab_Visibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
m_Parameter2ab_Visibility = value
|
|
NotifyPropertyChanged("Parameter2ab_Visbility")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Parameter2a As Integer
|
|
Private m_dParameter2a As Double
|
|
Public Property Parameter2a As String
|
|
Get
|
|
If m_Mode = 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
|
|
RefreshSideAngleText()
|
|
' Aggiorno i dati delle alette
|
|
RefreshDataAlzAndFront()
|
|
End Set
|
|
End Property
|
|
' Gestione del dato intero (Incisioni)
|
|
Private Sub SetParameter2a(value As Integer)
|
|
m_Parameter2a = value
|
|
SideAngleEntity.m_Parameter2a = value
|
|
NotifyPropertyChanged("Parameter2a")
|
|
End Sub
|
|
' Gestione del dato Double (Alette)
|
|
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
|
|
Get
|
|
Return DoubleToString(m_Parameter2b, 2)
|
|
End Get
|
|
Set(value As String)
|
|
StringToLen(value, m_Parameter2b)
|
|
' Recupero il valore
|
|
StringToLen(value, m_dDripOffset2)
|
|
' Creo le geometrie dei gocciolatoi
|
|
RefreshSideAngleText()
|
|
' Aggiorno i dati delle alette
|
|
RefreshDataAlzAndFront()
|
|
End Set
|
|
End Property
|
|
Private Sub SetParameter2b(value As Double)
|
|
m_Parameter2b = value
|
|
SideAngleEntity.m_Parameter2b = value
|
|
AlzAndFrontEntity.m_Parameter2b = value
|
|
NotifyPropertyChanged("Parameter2b")
|
|
End Sub
|
|
|
|
#End Region 'Parameter 2
|
|
|
|
#Region "Parameter 3"
|
|
|
|
Private m_Parameter23_Visibility As Visibility
|
|
Public Property Parameter23_Visibility As Visibility
|
|
Get
|
|
Return m_Parameter23_Visibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
m_Parameter23_Visibility = value
|
|
NotifyPropertyChanged("Parameter23_Visibility")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Parameter3 As Double
|
|
Public Property Parameter3 As String
|
|
Get
|
|
Return LenToString(m_Parameter3, 2)
|
|
End Get
|
|
Set(value As String)
|
|
If m_Mode <> ModeOpt.SIDEANGLE Then
|
|
StringToLen(value, m_Parameter3)
|
|
m_dDripDepth = m_Parameter3
|
|
' Creo le geometrie dei gocciolatoi
|
|
RefreshSideAngleText()
|
|
' Aggiorno i dati delle alette
|
|
RefreshDataAlzAndFront()
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetParameter3(value As Double)
|
|
m_Parameter3 = value
|
|
AlzAndFrontEntity.m_Parameter3 = value
|
|
NotifyPropertyChanged("Parameter3")
|
|
End Sub
|
|
|
|
#End Region 'Parameter 3
|
|
|
|
#Region "Parameter 4"
|
|
|
|
Private m_Parameter4_Visibility As Visibility
|
|
Public Property Parameter4_Visibility As Visibility
|
|
Get
|
|
Return m_Parameter4_Visibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
m_Parameter4_Visibility = value
|
|
NotifyPropertyChanged(NameOf(Parameter4_Visibility))
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Parameter4 As Double
|
|
Public Property Parameter4 As String
|
|
Get
|
|
Return LenToString(m_Parameter4, 2)
|
|
End Get
|
|
Set(value As String)
|
|
If m_Mode <> ModeOpt.SIDEANGLE Then
|
|
StringToLen(value, m_Parameter4)
|
|
m_dDripShort = m_Parameter4
|
|
' Creo le geometrie dei gocciolatoi
|
|
RefreshSideAngleText()
|
|
End If
|
|
End Set
|
|
End Property
|
|
Private Sub SetParameter4(value As Double)
|
|
m_Parameter4 = value
|
|
NotifyPropertyChanged("Parameter4")
|
|
End Sub
|
|
|
|
#End Region 'Parameter 4
|
|
|
|
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_DeltaAngA As Double = 0
|
|
|
|
Private m_dOffsetFiloTop As Double = 5
|
|
Private m_dDepthFiloTop As Double = 5
|
|
|
|
Private m_dDripOffset As Double = 10
|
|
Private m_dDripOffset2 As Double = 0
|
|
Private m_nEngrNbr2 As Integer = 1
|
|
Private m_dDripDepth As Double = 10
|
|
Private m_dDripShort As Double = 0
|
|
|
|
Private m_CallingWndScene As Scene
|
|
Private m_CallingWindow As CallingWindowOpt
|
|
|
|
#Region "Messages"
|
|
|
|
Private m_Parameter1Msg As String
|
|
Public Property Parameter1Msg As String
|
|
Get
|
|
Return m_Parameter1Msg
|
|
End Get
|
|
Set(value As String)
|
|
m_Parameter1Msg = value
|
|
NotifyPropertyChanged("Parameter1Msg")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Parameter2Msg As String
|
|
Public Property Parameter2Msg As String
|
|
Get
|
|
Return m_Parameter2Msg
|
|
End Get
|
|
Set(value As String)
|
|
m_Parameter2Msg = value
|
|
NotifyPropertyChanged("Parameter2Msg")
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Parameter3Msg As String = EgtMsg(MSG_IMPORTPAGEUC + 11)
|
|
Public Property Parameter3Msg As String
|
|
Get
|
|
Return m_Parameter3Msg ' Affondamento
|
|
End Get
|
|
Set(value As String)
|
|
m_Parameter3Msg = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Parameter4Msg As String = EgtMsg(MSG_IMPORTPAGEUC + 12)
|
|
Public Property Parameter4Msg As String
|
|
Get
|
|
Return m_Parameter4Msg ' Accorciamento
|
|
End Get
|
|
Set(value As String)
|
|
m_Parameter4Msg = value
|
|
End Set
|
|
End Property
|
|
|
|
#End Region ' Messages
|
|
|
|
#Region "CONSTRUCTOR"
|
|
|
|
Sub New(CallingWindow As CallingWindowOpt, CallingWndScene As Scene, Mode As ModeOpt)
|
|
|
|
SideAngleEntity.m_ModifySideAngle = AddressOf ModifySideAngle
|
|
SideAngleEntity.m_ModifySideHeel = AddressOf ModifySideHeel
|
|
SideAngleEntity.m_RefreshSideAngleText = AddressOf RefreshSideAngleText
|
|
DripEntity.m_ModifyDrip = AddressOf ModifyDrip
|
|
DripEntity.m_RefreshSideAngleText = AddressOf RefreshSideAngleText
|
|
m_CallingWindow = CallingWindow
|
|
m_CallingWndScene = CallingWndScene
|
|
m_Mode = Mode
|
|
m_SideEntityList = New ObservableCollection(Of SideEntity)
|
|
NotifyPropertyChanged("SideEntityList")
|
|
m_SideAngleCheck = If(GetMainPrivateProfileInt(S_COMPO, K_SIDEMODE, 0) = 0, True, False)
|
|
SideAngleEntity.dMaxSideAng = GetMainPrivateProfileDouble(S_SIDES, K_MAXSIDEANGLE, SideAngleEntity.STD_MAXSIDEANG)
|
|
|
|
'------------------ DEFINIZIONE LISTA LATI
|
|
' creo la lista dei parametri
|
|
If CallingWindow = CallingWindowOpt.COMPO Then
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(CallingWndScene.GetCtx())
|
|
' Inizializzo lati per angoli (ne compilo la lista e aggiungo la scritta nel disegno)
|
|
InitSides()
|
|
' aggiorno i testi sui lati della figura
|
|
RefreshSideAngleText()
|
|
|
|
ElseIf CallingWindow = CallingWindowOpt.DXFIMPORT Then
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(CallingWndScene.GetCtx())
|
|
' Inizializzo lati per angoli (ne compilo la lista e aggiungo la scritta nel disegno)
|
|
InitSides()
|
|
' aggiorno i testi sui lati della figura
|
|
RefreshSideAngleText()
|
|
End If
|
|
|
|
'------------------ VISIBILITA' PARAMETRI
|
|
' Gestisco visualizzazione dei parametri (sotto l'elenco dei parametri)
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
Parameter23_Visibility = Windows.Visibility.Hidden
|
|
Parameter2_Visibility = Visibility.Visible
|
|
Parameter2ab_Visibility = Visibility.Hidden
|
|
ElseIf m_Mode = ModeOpt.FILOTOP Then
|
|
Parameter23_Visibility = Windows.Visibility.Hidden
|
|
Parameter2_Visibility = Visibility.Visible
|
|
Parameter2ab_Visibility = Visibility.Hidden
|
|
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
|
|
Parameter2_Visibility = Visibility.Hidden
|
|
Parameter23_Visibility = Windows.Visibility.Visible
|
|
Parameter2ab_Visibility = Visibility.Visible
|
|
Parameter4_Visibility = Visibility.Hidden
|
|
Else
|
|
' Temporaneamente lo disabilito
|
|
Parameter23_Visibility = Windows.Visibility.Visible
|
|
Parameter4_Visibility = Visibility.Collapsed
|
|
Parameter2ab_Visibility = Visibility.Visible
|
|
Parameter2_Visibility = Visibility.Hidden
|
|
End If
|
|
|
|
'------------------ VALORI E TITOLI PARAMETRI
|
|
' Aggiorno valori delle TextBlock che indicano i titoli delle colonne
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 9) ' Angolo
|
|
Parameter2Msg = EgtMsg(91002) ' Tallone
|
|
m_dSideAngle = GetMainPrivateProfileDouble(S_SIDES, K_SIDEANGLE, 45)
|
|
SetParameter1(m_dSideAngle)
|
|
|
|
ElseIf m_Mode = ModeOpt.FILOTOP Then
|
|
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset
|
|
Dim x As String = EgtMsg(MSG_IMPORTPAGEUC + 11)
|
|
Parameter2Msg = EgtMsg(MSG_IMPORTPAGEUC + 11) ' Depth
|
|
m_dOffsetFiloTop = GetMainPrivateProfileDouble(S_SIDES, K_FILOTOPOFFSET, 5)
|
|
m_dDepthFiloTop = GetMainPrivateProfileDouble(S_SIDES, K_FILOTOPDEPTH, 5)
|
|
SetParameter1(m_dOffsetFiloTop)
|
|
SetParameter2(m_dDepthFiloTop)
|
|
|
|
ElseIf m_Mode = ModeOpt.ENGRAVE Or m_Mode = ModeOpt.DRIP Then
|
|
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset
|
|
Parameter2Msg = EgtMsg(MSG_IMPORTPAGEUC + 16) ' Offset 2
|
|
m_dDripOffset = GetMainPrivateProfileDouble(S_SIDES, K_DRIPOFFSET, 20)
|
|
m_dDripOffset2 = GetMainPrivateProfileDouble(S_SIDES, K_DRIPOFFSET2, 0)
|
|
m_nEngrNbr2 = GetMainPrivateProfileInt(S_SIDES, K_ENGRAVENUMBER2, 1)
|
|
m_dDripDepth = GetMainPrivateProfileDouble(S_SIDES, K_DRIPDEPTH, 10)
|
|
m_dDripShort = GetMainPrivateProfileDouble(S_SIDES, K_DRIPSHORT, 0)
|
|
SetParameter1(m_dDripOffset)
|
|
SetParameter2(m_dDripOffset2)
|
|
SetParameter2a(m_nEngrNbr2)
|
|
SetParameter2b(m_dDripOffset2)
|
|
SetParameter3(m_dDripDepth)
|
|
SetParameter4(m_dDripShort)
|
|
|
|
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
|
|
' definisco i nomi dei campi
|
|
Parameter1Msg = "Spessore"
|
|
Parameter2Msg = "Altezza"
|
|
Parameter3Msg = "Delta Ang."
|
|
' carico i valori letti da file ini
|
|
m_HeightA = GetMainPrivateProfileDouble("Alz&Front", "A_Height", 0)
|
|
m_HeightF = GetMainPrivateProfileDouble("Alz&Front", "F_Height", 0)
|
|
m_DeltaAngF = GetMainPrivateProfileDouble("Alz&Front", "F_DeltaAng", 0)
|
|
SetParameter1(EstCalc.GetRawHeight)
|
|
SetdParameter2a(m_HeightA)
|
|
SetParameter2b(m_HeightF)
|
|
SetParameter3(m_DeltaAngF)
|
|
' ricalcolo le alette della figura
|
|
LoadCurrentCompo()
|
|
End If
|
|
|
|
' Aggiorno visualizzazione
|
|
If CallingWindow = CallingWindowOpt.COMPO Then
|
|
EgtZoom(ZM.ALL)
|
|
Else
|
|
EgtDraw()
|
|
End If
|
|
End Sub
|
|
|
|
#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())
|
|
Dim PartId As Integer = GDB_ID.NULL
|
|
Dim LoopId As Integer = GDB_ID.NULL
|
|
|
|
If m_CallingWindow = CallingWindowOpt.COMPO Then
|
|
' Ricavo nome primo pezzo
|
|
PartId = If(CompoWindowMap.refCompoSceneHostV.SelectedLayer <> GDB_ID.NULL, EgtGetFirstInGroup(GDB_ID.ROOT), GDB_ID.NULL)
|
|
' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo
|
|
LoopId = CompoWindowMap.refCompoSceneHostV.SelectedLayer
|
|
ElseIf m_CallingWindow = CallingWindowOpt.DXFIMPORT Then
|
|
' Recupero nome pezzo
|
|
PartId = DxfImportWindowMap.refDxfImportSceneHostV.SelectedPart
|
|
' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo
|
|
LoopId = DxfImportWindowMap.refDxfImportSceneHostV.SelectedLayer
|
|
End If
|
|
|
|
' Calcolo dimensione ingombro Loop
|
|
Dim ptMin, ptMax As Point3d
|
|
EgtGetBBoxGlob(LoopId, GDB_BB.STANDARD, ptMin, ptMax)
|
|
Dim dBBoxRad As Double = 0.5 * Point3d.DistXY(ptMin, ptMax)
|
|
|
|
' Preparo layer con testi inclinazioni (svuotandolo o creandolo)
|
|
Dim TextLayer As Integer = EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER)
|
|
If TextLayer <> GDB_ID.NULL Then
|
|
EgtEmptyGroup(TextLayer)
|
|
Else
|
|
TextLayer = EgtCreateGroup(PartId)
|
|
EgtSetName(TextLayer, SIDE_ANGLE_LAYER)
|
|
EgtSetColor(TextLayer, New Color3d(0, 0, 0))
|
|
End If
|
|
|
|
' Se modalità angoli di inclinazione...
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
' Per ogni entità, creo testo con nome e angolo di inclinazione
|
|
For Each Entity In m_SideEntityList
|
|
Dim SideEntity As SideAngleEntity = TryCast(Entity, SideAngleEntity)
|
|
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
|
|
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
|
|
' ---------------- ATTENZIONE ----------------
|
|
' tutta le gestione dei mesaggi è eseguita dal file lua della componente!
|
|
' 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
|
|
' Altrimenti modalità gocciolatoio
|
|
ElseIf m_Mode = ModeOpt.DRIP Or m_Mode = ModeOpt.ENGRAVE Then
|
|
' Per ogni entità creo testo con nome
|
|
For Each Entity In m_SideEntityList
|
|
AddTextToLine(Entity.sEntityName, Entity.nTextId, Entity.nGeomId, 20, dBBoxRad, True)
|
|
Next
|
|
' Creo le geometrie dei gocciolatoi
|
|
CreateDripGeom(PartId)
|
|
ElseIf m_Mode = ModeOpt.ENGRAVE Then
|
|
'--- ??? ---
|
|
End If
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Private Sub InitSides()
|
|
Dim PartId As Integer = GDB_ID.NULL
|
|
Dim LoopId As Integer = GDB_ID.NULL
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_CallingWndScene.GetCtx())
|
|
If m_CallingWindow = CallingWindowOpt.COMPO Then
|
|
' Ricavo nome primo pezzo
|
|
PartId = If(CompoWindowMap.refCompoSceneHostV.SelectedLayer <> GDB_ID.NULL, EgtGetFirstInGroup(GDB_ID.ROOT), GDB_ID.NULL)
|
|
' Ricavo nome layer con geometria esterna pezzo
|
|
LoopId = CompoWindowMap.refCompoSceneHostV.SelectedLayer
|
|
ElseIf m_CallingWindow = CallingWindowOpt.DXFIMPORT Then
|
|
' Recupero nome pezzo
|
|
PartId = DxfImportWindowMap.refDxfImportSceneHostV.SelectedPart
|
|
' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo
|
|
LoopId = DxfImportWindowMap.refDxfImportSceneHostV.SelectedLayer
|
|
End If
|
|
|
|
' Determino se loop esterno o interno
|
|
Dim sLoopName As String = ""
|
|
Dim bOutLoop As Boolean = ( EgtGetName( LoopId, sLoopName) AndAlso sLoopName = NAME_OUTLOOP)
|
|
' Calcolo dimensione ingombro Loop
|
|
Dim ptMin, ptMax As Point3d
|
|
EgtGetBBoxGlob(LoopId, GDB_BB.STANDARD, ptMin, ptMax)
|
|
Dim dBBoxRad As Double = 0.5 * Point3d.DistXY(ptMin, ptMax)
|
|
|
|
' Creo layer per testi se non esiste già
|
|
Dim TextLayer As Integer = EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER)
|
|
If TextLayer = GDB_ID.NULL Then
|
|
TextLayer = EgtCreateGroup(PartId)
|
|
EgtSetName(TextLayer, SIDE_ANGLE_LAYER)
|
|
EgtSetColor(TextLayer, New Color3d(0, 0, 0))
|
|
End If
|
|
|
|
Dim PrevLine As Integer = EgtGetLastInGroup(LoopId)
|
|
Dim CurrLine As Integer = EgtGetFirstInGroup(LoopId)
|
|
' Creo indice per numerare le entità in ImportPage
|
|
Dim nEntityIndex As Integer = 1
|
|
Dim nOtherIndex As Integer = 1
|
|
' Ciclo che verifica se possibile inclinare la curva corrente
|
|
While CurrLine <> GDB_ID.NULL
|
|
Dim NextLine As Integer = EgtGetNext(CurrLine)
|
|
If NextLine = GDB_ID.NULL Then NextLine = EgtGetFirstInGroup( LoopId)
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
If VerifySideAnglePossible(PrevLine, CurrLine, NextLine, bOutLoop) Then
|
|
' Aggiungo il lato alla lista di quelli inclinabili e ne azzero l'inclinazione
|
|
AddSideAngle(CurrLine, TextLayer, dBBoxRad, nEntityIndex)
|
|
nEntityIndex += 1
|
|
Else
|
|
EgtSetName(CurrLine, "B" & nOtherIndex.ToString())
|
|
nOtherIndex += 1
|
|
End If
|
|
ElseIf m_Mode = ModeOpt.FILOTOP Then
|
|
' --- NON FARE NIENTE ---
|
|
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
|
|
If VerifySideAnglePossible(PrevLine, CurrLine, NextLine, bOutLoop) And ApprovedSideToAlzFront(CurrLine) 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
|
|
AddDripSide(CurrLine, TextLayer, dBBoxRad, nEntityIndex)
|
|
Dim CurrEntity As DripEntity = DirectCast(m_SideEntityList.Last, DripEntity)
|
|
If m_Mode = ModeOpt.ENGRAVE Then
|
|
CurrEntity.dShortStart = GetMainPrivateProfileDouble(S_SIDES, K_ENGRAVESHORT & "A" & nEntityIndex.ToString & "_Start", 0)
|
|
CurrEntity.dShortEnd = GetMainPrivateProfileDouble(S_SIDES, K_ENGRAVESHORT & "A" & nEntityIndex.ToString & "_End", 0)
|
|
Else
|
|
CurrEntity.dShortStart = GetMainPrivateProfileDouble(S_SIDES, K_DRIPSHORT & "A" & nEntityIndex.ToString & "_Start", 0)
|
|
CurrEntity.dShortEnd = GetMainPrivateProfileDouble(S_SIDES, K_DRIPSHORT & "A" & nEntityIndex.ToString & "_End", 0)
|
|
End If
|
|
nEntityIndex += 1
|
|
Else
|
|
EgtSetName( CurrLine, "B" & nOtherIndex.ToString())
|
|
nOtherIndex += 1
|
|
End If
|
|
End If
|
|
PrevLine = CurrLine
|
|
CurrLine = EgtGetNext(CurrLine)
|
|
End While
|
|
|
|
' Se non ci sono lati su cui operare, messaggio utente
|
|
If LoopId <> GDB_ID.NULL Then
|
|
If m_SideEntityList.Count() = 0 Then
|
|
If m_CallingWindow = CallingWindowOpt.COMPO Then
|
|
CompoWindowMap.refCompoListPageVM.SetOutputMessage(EgtMsg(MSG_DRAWPAGEUC + 7), MSG_TYPE.WARNING) ' Non ci sono lati modificabili
|
|
Else
|
|
DxfImportWindowMap.refDxfImportWindowVM.SetOutputMessage(EgtMsg(MSG_DRAWPAGEUC + 7), MSG_TYPE.WARNING) ' Non ci sono lati modificabili
|
|
End If
|
|
Else
|
|
If m_CallingWindow = CallingWindowOpt.COMPO Then
|
|
CompoWindowMap.refCompoListPageVM.ClearOutputMessage()
|
|
Else
|
|
DxfImportWindowMap.refDxfImportWindowVM.ClearOutputMessage()
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
' Aggiorno interfaccia
|
|
If m_CallingWindow = CallingWindowOpt.DXFIMPORT Then
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
For Each Entity In m_SideEntityList
|
|
If DirectCast(Entity, SideAngleEntity).dSideAngle <> 0 Then
|
|
Dim nI As Integer = 0
|
|
StringToInt(Entity.sEntityName.Substring(1), nI)
|
|
CheckSide(nI)
|
|
End If
|
|
Next
|
|
Else
|
|
For Each Entity In m_SideEntityList
|
|
If DirectCast(Entity, DripEntity).bHaveDrip Then
|
|
Dim nI As Integer = 0
|
|
StringToInt(Entity.sEntityName.Substring(1), nI)
|
|
CheckSide(nI)
|
|
End If
|
|
Next
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
'Funzione che checka i lati
|
|
Private Sub CheckSide(nIndex As Integer)
|
|
'' Seleziono checkbox
|
|
'If m_Mode = ModeOpt.SIDEANGLE Then
|
|
' GetChBxFromIndex(10 - (m_SideEntityList.Count - nIndex)).IsChecked = True
|
|
'Else
|
|
' GetChBxFromIndex(10 - (m_SideEntityList.Count - nIndex)).IsChecked = True
|
|
'End If
|
|
End Sub
|
|
|
|
' Funzione che verifica se alla linea corrente è associabile un canalino
|
|
Private Function VerifyIsSideDripPossible(LastLine As Integer, CurrLine As Integer, NextLine As Integer) As Boolean
|
|
' Verifico se CurrLine è una linea
|
|
If EgtGetType(CurrLine) <> GDB_TY.CRV_LINE Then
|
|
Return False
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
' Funzione che gestisce le operazioni sull'entità da inclinare
|
|
Private Sub AddSideAngle(CurrLine As Integer, TextLayer As Integer, dBBoxRad As Double, nEntityIndex As Integer)
|
|
' Imposto nome del lato
|
|
EgtSetName(CurrLine, "A" & nEntityIndex.ToString())
|
|
' Ricavo angolo dell'entità
|
|
Dim dSideAngleVal As Double
|
|
If Not EgtGetInfo(CurrLine, INFO_SIDE_ANGLE, dSideAngleVal) Then dSideAngleVal = 0
|
|
' Ricavo tallone dell'entità
|
|
Dim dSideHeelVal As Double
|
|
If Not EgtGetInfo(CurrLine, INFO_HEEL, dSideHeelVal) Then dSideHeelVal = 0
|
|
' Aggiungo entità all'elenco di quelle inclinabili
|
|
Dim sEntityName As String = String.Empty
|
|
EgtGetName(CurrLine, sEntityName)
|
|
m_SideEntityList.Add(New SideAngleEntity(CurrLine, sEntityName, TextLayer, dSideAngleVal, dSideHeelVal, m_Mode))
|
|
NotifyPropertyChanged("Legenda_Visibility")
|
|
' Creo testo con angolo di inclinazione ed eventuale tallone
|
|
Dim sText As String = sEntityName & " = " & DoubleToString(dSideAngleVal, 1) & "°"
|
|
If dSideHeelVal > 10 * EPS_SMALL Then sText += "; " & LenToString(dSideHeelVal, 1)
|
|
AddTextToLine(sText, TextLayer, CurrLine, 20, dBBoxRad, True)
|
|
End Sub
|
|
|
|
' Funzione che gestisce l'aggiunta delle alzatine nella lista
|
|
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.SetbIsCheckedAlz(True)
|
|
ElseIf sInfo = "2" Then
|
|
NewEntity.SetbIsCheckedFront(True)
|
|
Else
|
|
NewEntity.SetbIsCheckedAlz(False)
|
|
NewEntity.SetbIsCheckedFront(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
|
|
EgtSetName(CurrLine, "A" & nEntityIndex.ToString())
|
|
' Ricavo info dell'entità
|
|
Dim bHaveDripVal As Boolean
|
|
If Not EgtGetInfo(CurrLine, INFO_HAVE_DRIP, bHaveDripVal) Then bHaveDripVal = False
|
|
' Aggiungo entità all'elenco di quelle che possono avere il gocciolatoio
|
|
Dim sEntityName As String = String.Empty
|
|
EgtGetName(CurrLine, sEntityName)
|
|
Dim CurrEntity As DripEntity = New DripEntity(CurrLine, sEntityName, TextLayer, bHaveDripVal, m_Mode)
|
|
m_SideEntityList.Add(CurrEntity)
|
|
NotifyPropertyChanged("Legenda_Visibility")
|
|
' Creo testo con angolo di inclinazione 0
|
|
AddTextToLine(sEntityName, TextLayer, CurrLine, 20, dBBoxRad, True)
|
|
End Sub
|
|
|
|
' Funzione che dato un segmento e una distanza, scrive il testo centrato alla sua destra
|
|
Friend Shared Function AddTextToLine(sText As String, TextLayer As Integer, CurrLine As Integer, dDistance As Double,
|
|
dBBoxRad As Double, bTextExt As Boolean, Optional bRot As Boolean = False) As Integer
|
|
' Calcolo altezza testo
|
|
Dim dH As Double = 0.05 * dBBoxRad
|
|
' Creo testo
|
|
Dim nText As Integer = EgtCreateTextAdv(TextLayer, New Point3d(0, 0, 0), 0, sText, "", 500, False, dH, 1, 0, INS_POS.MC)
|
|
' Calcolo posizionamento
|
|
' BBox del testo e suo centro
|
|
Dim ptMinBBox As Point3d
|
|
Dim ptMaxBBox As Point3d
|
|
EgtGetBBox(nText, GDB_BB.STANDARD, ptMinBBox, ptMaxBBox)
|
|
Dim ptMidBBox As Point3d
|
|
ptMidBBox = Point3d.Media(ptMinBBox, ptMaxBBox)
|
|
' Punto medio della curva
|
|
Dim ptMid As Point3d
|
|
EgtMidPoint( CurrLine, nText, ptMid)
|
|
' Versore sul punto medio della curva
|
|
Dim vtMid As Vector3d
|
|
EgtMidVector( CurrLine, nText, vtMid)
|
|
' versore perpendicolare alla CurrLine che punta verso il testo
|
|
Dim vtOrto As New Vector3d(vtMid)
|
|
If bTextExt Then
|
|
vtOrto.Rotate(Vector3d.Z_AX(), -90)
|
|
Else
|
|
vtOrto.Rotate(Vector3d.Z_AX(), 90)
|
|
End If
|
|
' eventuale rotazione del testo
|
|
Dim dRotAng As Double = 0
|
|
If bRot Then
|
|
dRotAng = Math.Atan2(vtMid.y, vtMid.x) * 180 / Math.PI
|
|
Dim dSpecRotAng = dRotAng
|
|
If dSpecRotAng > 91 Then
|
|
dSpecRotAng -= 180
|
|
ElseIf dSpecRotAng < -89 Then
|
|
dSpecRotAng += 180
|
|
End If
|
|
EgtRotate(nText, Point3d.ORIG(), Vector3d.Z_AX(), dSpecRotAng)
|
|
End If
|
|
' vettore dal centro del BBox all'estremo più vicino
|
|
Dim vtptExtptMC As Vector3d
|
|
If bRot Then
|
|
vtptExtptMC = New Vector3d(0, ptMidBBox.y - ptMinBBox.y, 0)
|
|
vtptExtptMC.Rotate(Vector3d.Z_AX(), dRotAng)
|
|
Else
|
|
If bTextExt Then
|
|
If vtMid.x > 0 Then
|
|
If vtMid.y > 0 Then
|
|
vtptExtptMC = ptMidBBox - New Point3d(ptMinBBox.x, ptMaxBBox.y, 0)
|
|
Else
|
|
vtptExtptMC = ptMidBBox - ptMaxBBox
|
|
End If
|
|
Else
|
|
If vtMid.y > 0 Then
|
|
vtptExtptMC = ptMidBBox - ptMinBBox
|
|
Else
|
|
vtptExtptMC = ptMidBBox - New Point3d(ptMaxBBox.x, ptMinBBox.y, 0)
|
|
End If
|
|
End If
|
|
Else
|
|
If vtMid.x > 0 Then
|
|
If vtMid.y > 0 Then
|
|
vtptExtptMC = ptMidBBox - New Point3d(ptMaxBBox.x, ptMinBBox.y, 0)
|
|
Else
|
|
vtptExtptMC = ptMidBBox - ptMinBBox
|
|
End If
|
|
Else
|
|
If vtMid.y > 0 Then
|
|
vtptExtptMC = ptMidBBox - ptMaxBBox
|
|
Else
|
|
vtptExtptMC = ptMidBBox - New Point3d(ptMinBBox.x, ptMaxBBox.y, 0)
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
' Calcolo il centro del testo
|
|
Dim ptTextMC As Point3d = ptMid + vtOrto * (dDistance + (vtOrto * vtptExtptMC))
|
|
EgtMove(nText, (ptTextMC - Point3d.ORIG))
|
|
Return nText
|
|
End Function
|
|
|
|
' Funzione che crea le geometrie dei gocciolatoi
|
|
Friend Sub CreateDripGeomAll(nPartId As Integer)
|
|
' Recupero Id layer di contorno esterno
|
|
Dim nOutLoopId = EgtGetFirstNameInGroup(nPartId, NAME_OUTLOOP)
|
|
' Preparo layer con geometria gocciolatoi (svuotandolo o creandolo)
|
|
Dim DripName As String = If(m_Mode = ModeOpt.DRIP, NAME_DRIPCUT, NAME_ONPATH)
|
|
Dim DripLayer As Integer = EgtGetFirstNameInGroup(nPartId, DripName)
|
|
If DripLayer <> GDB_ID.NULL Then
|
|
EgtEmptyGroup(DripLayer)
|
|
Else
|
|
DripLayer = EgtCreateGroup(nPartId)
|
|
EgtSetName(DripLayer, DripName)
|
|
End If
|
|
' Per ogni entità con gocciolatoio, ne inserisco una copia nel layer
|
|
Dim vSelId As New List(Of Integer)
|
|
For Each Entity In m_SideEntityList
|
|
If DirectCast(Entity, DripEntity).bHaveDrip Then
|
|
Dim nSouId As Integer = EgtGetFirstNameInGroup(nOutLoopId, Entity.sEntityName)
|
|
Dim nNewId As Integer = EgtCopyGlob(nSouId, DripLayer)
|
|
EgtSetName(nNewId, Entity.sEntityName)
|
|
vSelId.Add(nNewId)
|
|
End If
|
|
Next
|
|
' Eseguo eventuali allungamenti iniziali e finali
|
|
Dim nCrvId As Integer = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
If m_dDripShort < -EPS_SMALL Then
|
|
EgtExtendCurveStartByLen(nCrvId, -m_dDripShort)
|
|
EgtExtendCurveEndByLen(nCrvId, -m_dDripShort)
|
|
End If
|
|
nCrvId = EgtGetNext(nCrvId)
|
|
End While
|
|
' Concateno le curve
|
|
EgtCreateCurveCompoByReorder(DripLayer, vSelId.Count(), vSelId.ToArray(), New Point3d(), True)
|
|
' Eseguo eventuali accorciamenti iniziali e finali
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
If m_dDripShort > EPS_SMALL AndAlso Not EgtCurveIsClosed(nCrvId) Then
|
|
Dim dLen As Double
|
|
EgtCurveLength(nCrvId, dLen)
|
|
EgtTrimCurveEndAtLen(nCrvId, dLen - m_dDripShort)
|
|
EgtTrimCurveStartAtLen(nCrvId, m_dDripShort)
|
|
End If
|
|
nCrvId = EgtGetNext(nCrvId)
|
|
End While
|
|
' Eseguo offset dei risultati
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
EgtOffsetCurve(nCrvId, -m_dDripOffset, OFF_TYPE.EXTEND)
|
|
nCrvId = EgtGetNext(nCrvId)
|
|
End While
|
|
' Eventuali curve aggiuntive con offset2
|
|
If m_nEngrNbr2 > 0 And m_dDripOffset2 > EPS_SMALL Then
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
Dim nNextCrvId As Integer = EgtGetNext(nCrvId)
|
|
For i As Integer = 1 To m_nEngrNbr2
|
|
Dim nNewId As Integer = EgtCopy(nCrvId, nCrvId, GDB_POS.AFTER)
|
|
EgtOffsetCurve(nNewId, -i * m_dDripOffset2, OFF_TYPE.EXTEND)
|
|
Next
|
|
nCrvId = nNextCrvId
|
|
End While
|
|
End If
|
|
If m_Mode = ModeOpt.DRIP Then
|
|
' Esplodo nelle curve componenti
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
Dim nNextCrvId = EgtGetNext(nCrvId)
|
|
Dim nCount As Integer
|
|
EgtExplodeCurveCompo(nCrvId, nCount)
|
|
nCrvId = nNextCrvId
|
|
End While
|
|
' Assegno colore e attributi
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
EgtSetColor(nCrvId, COL_MCH_DRIPCUT())
|
|
EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth)
|
|
If m_dDripShort > EPS_SMALL Then EgtSetInfo(nCrvId, INFO_STRICT, "1")
|
|
nCrvId = EgtGetNext(nCrvId)
|
|
End While
|
|
Else
|
|
' Assegno colore e attributi
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
EgtSetColor(nCrvId, COL_MCH_DRIPCUT())
|
|
EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth)
|
|
EgtSetInfo(nCrvId, INFO_STRICT, If(m_dDripShort > EPS_SMALL, "3", "0"))
|
|
nCrvId = EgtGetNext(nCrvId)
|
|
End While
|
|
End If
|
|
End Sub
|
|
|
|
Friend Sub CreateDripGeom(nPartId As Integer)
|
|
If nPartId = GDB_ID.NULL Then Return
|
|
' Recupero Id layer di contorno esterno
|
|
Dim nOutLoopId = EgtGetFirstNameInGroup(nPartId, NAME_OUTLOOP)
|
|
' Preparo layer con geometria gocciolatoi (svuotandolo o creandolo)
|
|
Dim DripName As String = If(m_Mode = ModeOpt.DRIP, NAME_DRIPCUT, NAME_ONPATH)
|
|
Dim DripLayer As Integer = EgtGetFirstNameInGroup(nPartId, DripName)
|
|
If DripLayer <> GDB_ID.NULL Then
|
|
EgtEmptyGroup(DripLayer)
|
|
Else
|
|
DripLayer = EgtCreateGroup(nPartId)
|
|
EgtSetName(DripLayer, DripName)
|
|
End If
|
|
' Per ogni entità con gocciolatoio, ne inserisco una copia nel layer
|
|
Dim vSelId As New List(Of Integer)
|
|
Dim vTempSelId As New List(Of Integer)
|
|
|
|
Dim nIndex As Integer = 0
|
|
Dim vJoint As New List(Of Boolean)
|
|
Dim bJointStart As Boolean = False
|
|
|
|
For Each Entity In m_SideEntityList
|
|
If DirectCast(Entity, DripEntity).bHaveDrip Then
|
|
vJoint.Add(True)
|
|
Else
|
|
vJoint.Add(False)
|
|
End If
|
|
Next
|
|
|
|
If vJoint(0) And vJoint(vJoint.Count - 1) Then
|
|
bJointStart = True
|
|
End If
|
|
|
|
For Each Entity In m_SideEntityList
|
|
Dim objDripEtity As DripEntity = DirectCast(Entity, DripEntity)
|
|
If objDripEtity.bHaveDrip Then
|
|
Dim nSouId As Integer = EgtGetFirstNameInGroup(nOutLoopId, objDripEtity.sEntityName)
|
|
Dim nNewId As Integer = EgtCopyGlob(nSouId, DripLayer)
|
|
EgtSetName(nNewId, objDripEtity.sEntityName)
|
|
vSelId.Add(nNewId)
|
|
vTempSelId.Add(nNewId)
|
|
End If
|
|
|
|
' devo distingure i casi in cui inserisco un valore positivo ed uno negativo!
|
|
For Each IdCurve In vTempSelId
|
|
|
|
' accorcio entrmabi i lati
|
|
Dim dLen As Double
|
|
EgtCurveLength(IdCurve, dLen)
|
|
|
|
If nIndex = vJoint.Count - 1 And (Not bJointStart Or objDripEtity.dShortEnd <> 0) Then
|
|
' se l'ultimo segmento non è collegato al primo
|
|
If objDripEtity.dShortEnd > -EPS_SMALL Then
|
|
EgtTrimCurveEndAtLen(IdCurve, dLen - objDripEtity.dShortEnd)
|
|
Else
|
|
EgtExtendCurveEndByLen(IdCurve, -objDripEtity.dShortEnd)
|
|
End If
|
|
|
|
ElseIf nIndex < vJoint.Count - 1 Then
|
|
' se l'elemento corrente non è collegato al precedente allora accorcio la coda
|
|
If Not vJoint(nIndex + 1) Or objDripEtity.dShortEnd <> 0 Then
|
|
If objDripEtity.dShortEnd > -EPS_SMALL Then
|
|
EgtTrimCurveEndAtLen(IdCurve, dLen - objDripEtity.dShortEnd)
|
|
Else
|
|
EgtExtendCurveEndByLen(IdCurve, -objDripEtity.dShortEnd)
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
If nIndex = 0 And (Not bJointStart Or objDripEtity.dShortStart <> 0) Then
|
|
' se il primo elemento non è collegato all'ultimo
|
|
If objDripEtity.dShortStart > -EPS_SMALL Then
|
|
EgtTrimCurveStartAtLen(IdCurve, objDripEtity.dShortStart)
|
|
Else
|
|
EgtExtendCurveStartByLen(IdCurve, -objDripEtity.dShortStart)
|
|
End If
|
|
|
|
ElseIf nIndex > 0 Then
|
|
' se l'elemento precedente non è collegato al corrente allora accorcio la testa
|
|
If Not vJoint(nIndex - 1) Or objDripEtity.dShortStart <> 0 Then
|
|
If objDripEtity.dShortStart > -EPS_SMALL Then
|
|
EgtTrimCurveStartAtLen(IdCurve, objDripEtity.dShortStart)
|
|
Else
|
|
EgtExtendCurveStartByLen(IdCurve, -objDripEtity.dShortStart)
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
Next
|
|
vTempSelId.Clear()
|
|
nIndex = nIndex + 1
|
|
Next
|
|
|
|
' se tutti i lati sono accorciati allora eseguo il collegamento
|
|
EgtCreateCurveCompoByReorder(DripLayer, vSelId.Count(), vSelId.ToArray(), New Point3d(), True)
|
|
|
|
' Eseguo offset dei risultati
|
|
Dim nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
EgtOffsetCurve(nCrvId, -m_dDripOffset, OFF_TYPE.EXTEND)
|
|
nCrvId = EgtGetNext(nCrvId)
|
|
End While
|
|
' Eventuali curve aggiuntive con offset2
|
|
If m_nEngrNbr2 > 0 And m_dDripOffset2 > EPS_SMALL Then
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
Dim nNextCrvId As Integer = EgtGetNext(nCrvId)
|
|
For i As Integer = 1 To m_nEngrNbr2
|
|
Dim nNewId As Integer = EgtCopy(nCrvId, nCrvId, GDB_POS.AFTER)
|
|
EgtOffsetCurve(nNewId, -i * m_dDripOffset2, OFF_TYPE.EXTEND)
|
|
Next
|
|
nCrvId = nNextCrvId
|
|
End While
|
|
End If
|
|
If m_Mode = ModeOpt.DRIP Then
|
|
' Esplodo nelle curve componenti
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
Dim nNextCrvId = EgtGetNext(nCrvId)
|
|
Dim nCount As Integer
|
|
EgtExplodeCurveCompo(nCrvId, nCount)
|
|
nCrvId = nNextCrvId
|
|
End While
|
|
' Assegno colore e attributi
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
EgtSetColor(nCrvId, COL_MCH_DRIPCUT())
|
|
EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth)
|
|
If m_dDripShort > EPS_SMALL Then EgtSetInfo(nCrvId, INFO_STRICT, "1")
|
|
nCrvId = EgtGetNext(nCrvId)
|
|
End While
|
|
Else
|
|
' Assegno colore e attributi
|
|
nCrvId = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
EgtSetColor(nCrvId, COL_MCH_DRIPCUT())
|
|
EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth)
|
|
EgtSetInfo(nCrvId, INFO_STRICT, If(m_dDripShort > EPS_SMALL, "3", "0"))
|
|
nCrvId = EgtGetNext(nCrvId)
|
|
End While
|
|
End If
|
|
End Sub
|
|
|
|
' Funzione che modifica l'inclinazione di un lato
|
|
Friend Function ModifySideAngle(sEntityName As String, dSideAngle As Double) As Boolean
|
|
' Ricavo CurrEntity dal nome
|
|
Dim CurrEntity As SideAngleEntity = SideAngleEntity.FindEntity(sEntityName, m_SideEntityList)
|
|
If IsNothing(CurrEntity) Then
|
|
EgtOutLog("Error in side angle definition: selected line not found in SideAngleList")
|
|
Return False
|
|
End If
|
|
' Scrivo nuovo angolo nelle info
|
|
If dSideAngle <> 0 Then
|
|
EgtSetInfo(CurrEntity.nGeomId, INFO_SIDE_ANGLE, dSideAngle)
|
|
EgtSetInfo(CurrEntity.nGeomId, INFO_ORIG_SIDE_ANGLE, dSideAngle)
|
|
' Cancello inclinazione nell'apposito campo info
|
|
Else
|
|
EgtRemoveInfo(CurrEntity.nGeomId, INFO_SIDE_ANGLE)
|
|
EgtRemoveInfo(CurrEntity.nGeomId, INFO_ORIG_SIDE_ANGLE)
|
|
End If
|
|
' Aggiorno lista entità con nuova inclinazione
|
|
CurrEntity.dSideAngle = dSideAngle
|
|
Return True
|
|
End Function
|
|
|
|
' Funzione che modifica il tallone di un lato
|
|
Friend Function ModifySideHeel(sEntityName As String, dSideHeel As Double) As Boolean
|
|
' Ricavo CurrEntity dal nome
|
|
Dim CurrEntity As SideAngleEntity = SideAngleEntity.FindEntity(sEntityName, m_SideEntityList)
|
|
If IsNothing(CurrEntity) Then
|
|
EgtOutLog("Error in side angle definition: selected line not found in SideAngleList")
|
|
Return False
|
|
End If
|
|
' Scrivo nuovo tallone nelle info
|
|
If dSideHeel > 10 * EPS_SMALL Then
|
|
EgtSetInfo(CurrEntity.nGeomId, INFO_HEEL, dSideHeel)
|
|
' Cancello inclinazione nell'apposito campo info
|
|
Else
|
|
EgtRemoveInfo(CurrEntity.nGeomId, INFO_HEEL)
|
|
End If
|
|
' Aggiorno lista entità con nuova inclinazione
|
|
CurrEntity.dSideHeel = dSideHeel
|
|
Return True
|
|
End Function
|
|
|
|
' Funzione che modifica l'inclinazione di un lato
|
|
Friend Function ModifyDrip(sEntityName As String, bVal As Boolean) As Boolean
|
|
' Ricavo CurrEntity dal nome
|
|
Dim CurrEntity As DripEntity = DripEntity.FindEntity(sEntityName, m_SideEntityList)
|
|
If IsNothing(CurrEntity) Then
|
|
EgtOutLog("Error in drip definition: selected line not found in DripEntity")
|
|
Return False
|
|
End If
|
|
' Scrivo nuovo angolo nelle info
|
|
If bVal Then
|
|
EgtSetInfo(CurrEntity.nGeomId, INFO_HAVE_DRIP, "1")
|
|
' Cancello inclinazione nell'apposito campo info
|
|
Else
|
|
EgtRemoveInfo(CurrEntity.nGeomId, INFO_HAVE_DRIP)
|
|
End If
|
|
' Aggiorno lista entità con nuova inclinazione
|
|
CurrEntity.bHaveDrip = bVal
|
|
Return True
|
|
End Function
|
|
|
|
Friend Sub ReLoadSideAnglePage(CallingWindow As CallingWindowOpt)
|
|
|
|
m_SideEntityList.Clear()
|
|
NotifyPropertyChanged("Legenda_Visibility")
|
|
|
|
If CallingWindow = CallingWindowOpt.COMPO Then
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_CallingWndScene.GetCtx())
|
|
' Inizializzo lati per angoli (ne compilo la lista e aggiungo la scritta nel disegno)
|
|
InitSides()
|
|
RefreshSideAngleText()
|
|
|
|
ElseIf CallingWindow = CallingWindowOpt.DXFIMPORT Then
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_CallingWndScene.GetCtx())
|
|
' Inizializzo lati per angoli (ne compilo la lista e aggiungo la scritta nel disegno)
|
|
InitSides()
|
|
RefreshSideAngleText()
|
|
End If
|
|
|
|
' Gestisco visualizzazione dei parametri
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
Parameter23_Visibility = Windows.Visibility.Hidden
|
|
Else
|
|
Parameter23_Visibility = Windows.Visibility.Visible
|
|
End If
|
|
|
|
' Aggiorno valori
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 9) ' Angolo
|
|
Dim dVal As Double = GetMainPrivateProfileDouble(S_SIDES, K_SIDEANGLE, 45)
|
|
SetParameter1(dVal)
|
|
Else
|
|
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset
|
|
m_dDripOffset = GetMainPrivateProfileDouble(S_SIDES, K_DRIPOFFSET, 20)
|
|
m_dDripOffset2 = GetMainPrivateProfileDouble(S_SIDES, K_DRIPOFFSET2, 0)
|
|
m_nEngrNbr2 = GetMainPrivateProfileInt(S_SIDES, K_ENGRAVENUMBER2, 0)
|
|
m_dDripDepth = GetMainPrivateProfileDouble(S_SIDES, K_DRIPDEPTH, 10)
|
|
m_dDripShort = GetMainPrivateProfileDouble(S_SIDES, K_DRIPSHORT, 0)
|
|
SetParameter1(m_dDripOffset)
|
|
SetParameter2(m_dDripOffset2)
|
|
SetParameter2a(m_nEngrNbr2)
|
|
SetParameter2b(m_dDripOffset2)
|
|
SetParameter3(m_dDripDepth)
|
|
SetParameter4(m_dDripShort)
|
|
End If
|
|
End Sub
|
|
|
|
Friend Sub Close()
|
|
If m_CallingWindow = CallingWindowOpt.COMPO Then
|
|
' Svuoto layer in cui sono presenti i testi con le inclinazioni dei lati
|
|
Dim PartId As Integer = EgtGetFirstInGroup(GDB_ID.ROOT)
|
|
EgtEmptyGroup(EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER))
|
|
ElseIf m_CallingWindow = CallingWindowOpt.DXFIMPORT Then
|
|
' Nessuna azione necessaria
|
|
End If
|
|
' salvo le modifiche nel file config
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
WriteMainPrivateProfileString(S_SIDES, K_SIDEANGLE, DoubleToString(m_Parameter1, 3))
|
|
ElseIf m_Mode = ModeOpt.FILOTOP Then
|
|
WriteMainPrivateProfileString(S_SIDES, K_FILOTOPOFFSET, DoubleToString(m_Parameter1, 3))
|
|
WriteMainPrivateProfileString(S_SIDES, K_FILOTOPDEPTH, DoubleToString(m_Parameter2, 3))
|
|
' Aggiorno affondamento del profilo
|
|
Dim nPartId As Integer = EgtGetFirstPart()
|
|
While nPartId <> GDB_ID.NULL
|
|
Dim nLayId As Integer = EgtGetFirstLayer(nPartId)
|
|
While nLayId <> GDB_ID.NULL
|
|
Dim sLayName As String = ""
|
|
If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then
|
|
EgtSetInfo(nLayId, INFO_OFFSET, m_Parameter1)
|
|
EgtSetInfo(nLayId, INFO_DEPTH, m_Parameter2)
|
|
End If
|
|
nLayId = EgtGetNextLayer(nLayId)
|
|
End While
|
|
nPartId = EgtGetNextPart(nPartId)
|
|
End While
|
|
ElseIf m_Mode = ModeOpt.DRIP Then
|
|
WriteMainPrivateProfileString(S_SIDES, K_DRIPOFFSET, DoubleToString(m_dDripOffset, 3))
|
|
WriteMainPrivateProfileString(S_SIDES, K_DRIPOFFSET2, DoubleToString(m_dDripOffset2, 3))
|
|
WriteMainPrivateProfileString(S_SIDES, K_DRIPDEPTH, DoubleToString(m_dDripDepth, 3))
|
|
WriteMainPrivateProfileString(S_SIDES, K_DRIPSHORT, DoubleToString(m_dDripShort, 3))
|
|
For Each objEntity In m_SideEntityList
|
|
If TypeOf objEntity Is DripEntity Then
|
|
Dim CurrEntity As DripEntity = DirectCast(objEntity, DripEntity)
|
|
WriteMainPrivateProfileString(S_SIDES, K_DRIPSHORT & CurrEntity.sEntityName & "_Start", LenToString(CurrEntity.dShortStart, 3))
|
|
WriteMainPrivateProfileString(S_SIDES, K_DRIPSHORT & CurrEntity.sEntityName & "_End", LenToString(CurrEntity.dShortEnd, 3))
|
|
End If
|
|
Next
|
|
ElseIf m_Mode = ModeOpt.ENGRAVE Then
|
|
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEOFFSET, DoubleToString(m_dDripOffset, 3))
|
|
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEOFFSET2, DoubleToString(m_dDripOffset2, 3))
|
|
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVENUMBER2, m_nEngrNbr2.ToString)
|
|
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEDEPTH, DoubleToString(m_dDripDepth, 3))
|
|
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVESHORT, DoubleToString(m_dDripShort, 3))
|
|
For Each objEntity In m_SideEntityList
|
|
If TypeOf objEntity Is DripEntity Then
|
|
Dim CurrEntity As DripEntity = DirectCast(objEntity, DripEntity)
|
|
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVESHORT & CurrEntity.sEntityName & "_Start", LenToString(CurrEntity.dShortStart, 3))
|
|
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVESHORT & CurrEntity.sEntityName & "_End", LenToString(CurrEntity.dShortEnd, 3))
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Shared Sub WriteSideAngleForNest(nCtx As Integer)
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(nCtx)
|
|
Dim PartId As Integer = EgtGetFirstPart()
|
|
While PartId <> GDB_ID.NULL
|
|
' Se richiesti lati paralleli con misura sul top come in TRF, verifico e aggiusto
|
|
If GetMainPrivateProfileInt( S_SIDES, K_PARSIDE_AS_TRF, 0) <> 0 Then
|
|
AdjustAsTrfParSides( PartId)
|
|
End If
|
|
' Elimino eventuale precedente layer per testi
|
|
EgtErase(EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER))
|
|
' Creo layer per testi nesting
|
|
Dim TextLayId As Integer = EgtCreateGroup(PartId)
|
|
EgtSetName(TextLayId, SIDE_ANGLE_LAYER)
|
|
EgtSetColor(TextLayId, New Color3d(0, 0, 128))
|
|
' Opero su geometria esterna pezzo
|
|
WriteSideAngleOnLoop(EgtGetFirstNameInGroup(PartId, NAME_OUTLOOP), TextLayId)
|
|
' Ciclo su geometria interna pezzo
|
|
Dim LoopId As Integer = EgtGetFirstNameInGroup(PartId, NAME_INLOOP)
|
|
While LoopId <> GDB_ID.NULL
|
|
WriteSideAngleOnLoop(LoopId, TextLayId)
|
|
LoopId = EgtGetNextName(LoopId, NAME_INLOOP)
|
|
End While
|
|
PartId = EgtGetNextPart(PartId)
|
|
End While
|
|
End Sub
|
|
|
|
' Funzione che verifica se la linea corrente è inclinabile in base al tipo della precedente e successiva
|
|
Shared Function VerifySideAnglePossible(LastLine As Integer, CurrLine As Integer, NextLine As Integer, bOutLoop As Boolean) As Boolean
|
|
' Se WaterJet si tolgono i limiti
|
|
Dim bSideFree As Boolean = CurrentMachine.bWaterJetting
|
|
' Analisi del tipo
|
|
Select Case EgtGetType(CurrLine)
|
|
Case GDB_TY.CRV_LINE
|
|
' Le linee vanno bene di per sè
|
|
Case GDB_TY.CRV_ARC
|
|
If Not bSideFree Then
|
|
' Gli archi devono essere lavorati sul lato esterno
|
|
Dim dAngCen As Double : EgtArcAngCenter(CurrLine, dAngCen)
|
|
If (bOutLoop And dAngCen < 0) Or (Not bOutLoop And dAngCen > 0) Then Return False
|
|
End If
|
|
Case GDB_TY.CRV_COMPO
|
|
If Not bSideFree Then
|
|
' Gli archi componenti devono essere lavorati sul lato esterno
|
|
Dim nCopyId As Integer = EgtCopy(CurrLine, CurrLine, GDB_POS.AFTER)
|
|
If nCopyId = GDB_ID.NULL Then Return False
|
|
Dim bOk As Boolean = True
|
|
Dim nCount As Integer = 0
|
|
Dim nNewId As Integer = EgtExplodeCurveCompo(nCopyId, nCount)
|
|
For nI As Integer = 0 To nCount - 1
|
|
Dim nEntId As Integer = nNewId + nI
|
|
If EgtGetType(nEntId) = GDB_TY.CRV_ARC Then
|
|
Dim dAngCen As Double : EgtArcAngCenter(nEntId, dAngCen)
|
|
If (bOutLoop And dAngCen < 0) Or (Not bOutLoop And dAngCen > 0) Then bOk = False
|
|
End If
|
|
EgtErase(nEntId)
|
|
Next
|
|
If Not bOk Then Return False
|
|
End If
|
|
Case Else
|
|
Return False
|
|
End Select
|
|
|
|
' Se curva chiusa va bene solo se loop esterno
|
|
If Not bSideFree AndAlso EgtCurveIsClosed(CurrLine) Then Return bOutLoop
|
|
|
|
' Delta angolare limite per tangenza
|
|
Const DELTA_ANG_TG_DEF As Double = 5.0
|
|
Dim dDeltaAngTg As Double = GetMainPrivateProfileDouble(S_SIDES, K_DELTA_ANG_TG, DELTA_ANG_TG_DEF)
|
|
If bSideFree Then dDeltaAngTg = 0
|
|
' Verifico se curva precedente mi permette di inclinare
|
|
Dim bLastOk As Boolean = False
|
|
Select Case EgtGetType(LastLine)
|
|
Case GDB_TY.CRV_LINE, GDB_TY.CRV_ARC, GDB_TY.CRV_COMPO
|
|
' Ricavo direzione finale linea precedente
|
|
Dim vtLastEnd As Vector3d
|
|
EgtEndVector(LastLine, vtLastEnd)
|
|
' Ricavo direzione iniziale linea corrente
|
|
Dim vtCurrStart As Vector3d
|
|
EgtStartVector(CurrLine, vtCurrStart)
|
|
' Confronto direzioni per vedere se sono tangenti
|
|
Dim dAngDeg As Double = GetAngle(vtLastEnd, vtCurrStart)
|
|
' verifico se l'angolo è significativo
|
|
bLastOk = (dDeltaAngTg < EPS_ANG_SMALL Or dAngDeg > dDeltaAngTg)
|
|
Case Else
|
|
EgtOutLog("Error in Compo Outloop: found an entity that is not a line or a arc")
|
|
End Select
|
|
|
|
' Verifico se curva successiva mi permette di inclinare
|
|
Dim bNextOk As Boolean = False
|
|
Select Case EgtGetType(NextLine)
|
|
Case GDB_TY.CRV_LINE, GDB_TY.CRV_ARC, GDB_TY.CRV_COMPO
|
|
' Ricavo direzione finale linea corrente
|
|
Dim vtCurrEnd As Vector3d
|
|
EgtEndVector(CurrLine, vtCurrEnd)
|
|
' Ricavo direzione iniziale linea successiva
|
|
Dim vtNextStart As Vector3d
|
|
EgtStartVector(NextLine, vtNextStart)
|
|
' Confronto direzioni per vedere se sono tangenti
|
|
Dim dAngDeg As Double = GetAngle(vtCurrEnd, vtNextStart)
|
|
' verifico se l'angolo è significativo
|
|
bNextOk = (dDeltaAngTg < EPS_ANG_SMALL Or dAngDeg > dDeltaAngTg)
|
|
Case Else
|
|
EgtOutLog("Error in Compo Outloop: found an entity that is not a line or a arc")
|
|
End Select
|
|
|
|
' Se entrambe me lo permettono restituisco vero
|
|
Return (bLastOk And bNextOk)
|
|
End Function
|
|
|
|
Shared Function AdjustAsTrfParSides( PartId As Integer) As Boolean
|
|
' Recupero il loop esterno
|
|
Dim LoopId As Integer = EgtGetFirstNameInGroup(PartId, NAME_OUTLOOP)
|
|
If LoopId = GDB_ID.NULL Then Return False
|
|
' Scansiono i lati
|
|
Dim LineId As Integer = EgtGetFirstInGroup(LoopId)
|
|
While LineId <> GDB_ID.NULL
|
|
' Se non è linea con singolo angolo, vado oltre
|
|
If Not EgtExistsInfo(LineId, INFO_SIDE_ANGLE) OrElse
|
|
EgtExistsInfo(LineId, INFO_SIDE_ANGLE2) OrElse
|
|
EgtExistsInfo(LineId, INFO_HEEL) Then
|
|
LineId = EgtGetNext(LineId)
|
|
Continue While
|
|
End If
|
|
' Recupero angolo di fianco e direzione
|
|
Dim dSideAng As Double = 0 : EgtGetInfo( LineId, INFO_SIDE_ANGLE, dSideAng)
|
|
Dim vtDir As new Vector3d : EgtStartVector( LineId, GDB_ID.ROOT, vtDir)
|
|
' Confronto con le linee successive
|
|
Dim OthLId As Integer = EgtGetNext(LineId)
|
|
While OthLId <> GDB_ID.NULL
|
|
' Se non è linea con singolo angolo, vado oltre
|
|
If Not EgtExistsInfo(OthLId, INFO_SIDE_ANGLE) OrElse
|
|
EgtExistsInfo(OthLId, INFO_SIDE_ANGLE2) OrElse
|
|
EgtExistsInfo(OthLId, INFO_HEEL) Then
|
|
OthLId = EgtGetNext(OthLId)
|
|
Continue While
|
|
End If
|
|
' Recupero angolo di fianco e direzione
|
|
Dim dOthSAng As Double = 0 : EgtGetInfo( OthLId, INFO_SIDE_ANGLE, dOthSAng)
|
|
Dim vtOthDir As new Vector3d : EgtStartVector( OthLId, GDB_ID.ROOT, vtOthDir)
|
|
' Se gli angoli sono opposti e le due linee sono controverse
|
|
If Math.Abs( dSideAng + dOthSAng) < 10 * EPS_ANG_SMALL AndAlso (vtDir + vtOthDir).IsSmall() Then
|
|
EgtSetInfo( LineId, INFO_SIDE_FIXED, 1)
|
|
EgtSetInfo( OthLId, INFO_SIDE_FIXED, 1)
|
|
Exit While
|
|
End If
|
|
OthLId = EgtGetNext(OthLId)
|
|
End While
|
|
LineId = EgtGetNext(LineId)
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Shared Function WriteSideAngleOnLoop(LoopId As Integer, TextLayId As Integer) As Boolean
|
|
' Verifiche
|
|
If LoopId = GDB_ID.NULL Or TextLayId = GDB_ID.NULL Then Return False
|
|
' Calcolo dimensione ingombro Loop
|
|
Dim ptMin, ptMax As Point3d
|
|
EgtGetBBoxGlob(LoopId, GDB_BB.STANDARD, ptMin, ptMax)
|
|
Dim dBBoxRad As Double = 0.5 * Point3d.DistXY(ptMin, ptMax)
|
|
' Ciclo sulle linee di contorno, se hanno info con inclinazione aggiungo testo con angolo
|
|
Dim LineId As Integer = EgtGetFirstInGroup(LoopId)
|
|
While LineId <> GDB_ID.NULL
|
|
Dim dSideAngle As Double = 0
|
|
Dim bSA As Boolean = EgtGetInfo(LineId, INFO_SIDE_ANGLE, dSideAngle)
|
|
Dim dSideAngle2 As Double = 0
|
|
Dim bSA2 As Boolean = EgtGetInfo(LineId, INFO_SIDE_ANGLE2, dSideAngle2)
|
|
Dim dSideHeel As Double = 0
|
|
Dim bSH As Boolean = EgtGetInfo(LineId, INFO_HEEL, dSideHeel)
|
|
If Math.Abs(dSideAngle) > EPS_ANG_SMALL Or ( bSA2 And Not bSH) Then
|
|
' Creo testo con angolo di inclinazione
|
|
Dim sText As String = DoubleToString(dSideAngle, 1) & "°"
|
|
' Se presente tallone, lo indico
|
|
If bSH then
|
|
If dSideHeel > 10 * EPS_SMALL Then
|
|
If dSideAngle > 0 Then
|
|
sText = sText & "; " & LenToString(dSideHeel, 1)
|
|
Else
|
|
sText = LenToString(dSideHeel, 1) & "; " & sText
|
|
End If
|
|
End If
|
|
' se altrimenti presente secondo angolo, lo indico
|
|
ElseIf bSA2 then
|
|
sText = DoubleToString(dSideAngle2, 1) & "°" & "; " & sText
|
|
End If
|
|
SideEntityControlVM.AddTextToLine(sText, TextLayId, LineId, 15, dBBoxRad, False, True)
|
|
End If
|
|
LineId = EgtGetNext(LineId)
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Shared Sub ColorToSideAngle(nCtx As Integer)
|
|
' Leggo dati corrispondenza colore-angolo
|
|
Dim CurrCSA As New ColorSideAngs
|
|
CurrCSA.Read(IniFile.m_sIniFile)
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(nCtx)
|
|
' Ciclo sui pezzi
|
|
Dim PartId As Integer = EgtGetFirstPart()
|
|
While PartId <> GDB_ID.NULL
|
|
' Ciclo sui layer di contorno
|
|
Dim bOutLoop As Boolean = True
|
|
Dim LoopId As Integer = EgtGetFirstNameInGroup(PartId, NAME_OUTLOOP)
|
|
While LoopId <> GDB_ID.NULL
|
|
' Ciclo sulle curve
|
|
Dim PrevId As Integer = EgtGetLastInGroup(LoopId)
|
|
Dim EntId As Integer = EgtGetFirstInGroup(LoopId)
|
|
While EntId <> GDB_ID.NULL
|
|
Dim NextId As Integer = EgtGetNext(EntId)
|
|
If NextId = GDB_ID.NULL Then NextId = EgtGetFirstInGroup(LoopId)
|
|
If VerifySideAnglePossible(PrevId, EntId, NextId, bOutLoop) Then
|
|
Dim colEnt As Color3d
|
|
If EgtGetColor(EntId, colEnt) Then
|
|
Dim dAng As Double
|
|
Dim dHeel As Double
|
|
If CurrCSA.GetSideAngHeel(colEnt, dAng, dHeel) Then
|
|
EgtSetInfo(EntId, INFO_SIDE_ANGLE, dAng)
|
|
EgtSetInfo(EntId, INFO_ORIG_SIDE_ANGLE, dAng)
|
|
EgtSetInfo(EntId, INFO_HEEL, dHeel)
|
|
End If
|
|
End If
|
|
End If
|
|
PrevId = EntId
|
|
EntId = EgtGetNext(EntId)
|
|
End While
|
|
If bOutLoop Then
|
|
bOutLoop = False
|
|
LoopId = EgtGetFirstNameInGroup(PartId, NAME_INLOOP)
|
|
Else
|
|
LoopId = EgtGetNextName(LoopId, NAME_INLOOP)
|
|
End If
|
|
End While
|
|
PartId = EgtGetNextPart(PartId)
|
|
End While
|
|
' Aggiorno scritte per angoli sui lati
|
|
WriteSideAngleForNest(nCtx)
|
|
End Sub
|
|
|
|
Shared Sub ColorToEngrave(nCtx As Integer)
|
|
' Leggo dati corrispondenza colore-angolo
|
|
Dim CurrCE As New ColorEngrave
|
|
CurrCE.Read(IniFile.m_sIniFile)
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(nCtx)
|
|
' Ciclo sui pezzi
|
|
Dim PartId As Integer = EgtGetFirstPart()
|
|
While PartId <> GDB_ID.NULL
|
|
' Ciclo sui layer di Engraving
|
|
Dim LayerId As Integer = EgtGetFirstNameInGroup(PartId, NAME_ONPATH)
|
|
While LayerId <> GDB_ID.NULL
|
|
' Ciclo sulle curve
|
|
Dim EntId As Integer = EgtGetFirstInGroup(LayerId)
|
|
While EntId <> GDB_ID.NULL
|
|
Dim colEnt As Color3d
|
|
If EgtGetColor(EntId, colEnt) Then
|
|
Dim dAff, dLar As Double
|
|
If CurrCE.GetEngraveAff(colEnt, dAff, dLar) Then
|
|
EgtSetInfo(EntId, INFO_DEPTH, dAff)
|
|
EgtSetInfo(EntId, INFO_WIDTH, dLar)
|
|
End If
|
|
End If
|
|
EntId = EgtGetNext(EntId)
|
|
End While
|
|
LayerId = EgtGetNextLayer(LayerId)
|
|
End While
|
|
PartId = EgtGetNextPart(PartId)
|
|
End While
|
|
End Sub
|
|
|
|
'---------------------- GESTIONE ALZATIENE E FRONTALINI ----------------------
|
|
' eseguo compo
|
|
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
|
|
|
|
' restituisce vero se il lato possiede delle info legate al sideangle
|
|
Private Function VerifyIsThereSideAngle(nCurrLine As Integer) As Boolean
|
|
Dim sInfoSideAngle As String = String.Empty
|
|
EgtGetInfo(nCurrLine, INFO_SIDE_ANGLE, sInfoSideAngle)
|
|
If Not String.IsNullOrWhiteSpace(sInfoSideAngle) Or Not String.IsNullOrEmpty(sInfoSideAngle) Then
|
|
' verifico che il dato salvato sia un double
|
|
Try
|
|
Dim dSideAngle As Double = 0
|
|
StringToDouble(sInfoSideAngle, dSideAngle)
|
|
If dSideAngle <> 0 Then
|
|
Return True
|
|
End If
|
|
Catch ex As Exception
|
|
End Try
|
|
End If
|
|
Return False
|
|
End Function
|
|
|
|
' restituisce vero se il lato possiede delle info legate alle alette
|
|
Private Function VerifyIsThereAlzFront(nCurrLine As Integer) As Boolean
|
|
Dim sInfoAlzFront As String = String.Empty
|
|
EgtGetInfo(nCurrLine, INFO_ALZFRONT, sInfoAlzFront)
|
|
If Not String.IsNullOrWhiteSpace(sInfoAlzFront) Or Not String.IsNullOrEmpty(sInfoAlzFront) Then
|
|
If sInfoAlzFront.Trim <> "0" Then
|
|
Return True
|
|
End If
|
|
End If
|
|
Return False
|
|
End Function
|
|
|
|
' approvo la costruzione dell'aletta sul lato indicato
|
|
Private Function ApprovedSideToAlzFront(nCurrLine As Integer) As Boolean
|
|
If VerifyIsThereSideAngle(nCurrLine) And Not VerifyIsThereAlzFront(nCurrLine) Then
|
|
' se esiste SideAngle e un'aletta allora NON approvo
|
|
Return False
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
Shared Sub RefreshEntity(bIsAlz As Boolean, bIsChecked As Boolean, GeneralSideEntity As SideEntity, Optional DrawCompo As Boolean = True)
|
|
|
|
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)
|
|
' di default viene ricostruito tutto il disegno
|
|
If DrawCompo Then LoadCurrentCompo()
|
|
End Sub
|
|
|
|
Private Sub RefreshDataAlzAndFront()
|
|
If m_Mode = ModeOpt.ALZANDFRONT Then
|
|
AlzAndFrontEntity.m_Parameter1 = m_Parameter1
|
|
AlzAndFrontEntity.m_dParameter2a = m_dParameter2a
|
|
AlzAndFrontEntity.m_Parameter2b = m_Parameter2b
|
|
AlzAndFrontEntity.m_Parameter3 = m_Parameter3
|
|
LoadCurrentCompo()
|
|
WriteMainPrivateProfileString("Alz&Front", "A_Height", LenToString(AlzAndFrontEntity.m_dParameter2a, 2))
|
|
WriteMainPrivateProfileString("Alz&Front", "F_Height", LenToString(AlzAndFrontEntity.m_Parameter2b, 2))
|
|
WriteMainPrivateProfileString("Alz&Front", "F_DeltaAng", LenToString(AlzAndFrontEntity.m_Parameter3, 2))
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' METHODS
|
|
|
|
End Class
|
|
|
|
Public MustInherit Class SideEntity
|
|
Inherits VMBase
|
|
|
|
Private m_nGeomId As Integer
|
|
Public Property nGeomId As Integer
|
|
Get
|
|
Return m_nGeomId
|
|
End Get
|
|
Set(value As Integer)
|
|
m_nGeomId = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_sEntityName As String
|
|
Public ReadOnly Property sEntityName As String
|
|
Get
|
|
Return m_sEntityName
|
|
End Get
|
|
End Property
|
|
|
|
Private m_nTextId As Integer
|
|
Public ReadOnly Property nTextId As Integer
|
|
Get
|
|
Return m_nTextId
|
|
End Get
|
|
End Property
|
|
|
|
Private m_Mode As SideEntityControlVM.ModeOpt
|
|
Public ReadOnly Property Value_Visibility As Visibility
|
|
Get
|
|
If m_Mode = SideEntityControlVM.ModeOpt.SIDEANGLE Then
|
|
If SideEntityControlVM.m_SideAngleCheck Then
|
|
Return Visibility.Collapsed
|
|
Else
|
|
Return Visibility.Visible
|
|
End If
|
|
ElseIf m_Mode = SideEntityControlVM.ModeOpt.ALZANDFRONT Then
|
|
Return Visibility.Collapsed
|
|
Else
|
|
Return Visibility.Collapsed
|
|
End If
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property Check_Visibility As Visibility
|
|
Get
|
|
If m_Mode = SideEntityControlVM.ModeOpt.SIDEANGLE Then
|
|
If SideEntityControlVM.m_SideAngleCheck Then
|
|
Return Visibility.Visible
|
|
Else
|
|
Return Visibility.Collapsed
|
|
End If
|
|
ElseIf m_Mode = SideEntityControlVM.ModeOpt.ALZANDFRONT Then
|
|
Return Visibility.Collapsed
|
|
Else
|
|
Return Visibility.Visible
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
' imposto la visibilità delle TextBox per Drip ed Engrave
|
|
Public ReadOnly Property Value_Visibility_DE As Visibility
|
|
Get
|
|
If m_Mode = SideEntityControlVM.ModeOpt.ALZANDFRONT Then
|
|
Return Visibility.Collapsed
|
|
ElseIf m_Mode = SideEntityControlVM.ModeOpt.SIDEANGLE Then
|
|
Return Visibility.Collapsed
|
|
Else
|
|
Return Visibility.Visible
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
'--------------------------ALZ AND FRONT -----------------------------
|
|
Public ReadOnly Property CheckAlz_Visibility As Visibility
|
|
Get
|
|
If m_Mode = SideEntityControlVM.ModeOpt.ALZANDFRONT Then
|
|
Return Visibility.Visible
|
|
Else
|
|
Return Visibility.Collapsed
|
|
End If
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property CheckFront_Visibility As Visibility
|
|
Get
|
|
If m_Mode = SideEntityControlVM.ModeOpt.ALZANDFRONT Then
|
|
Return Visibility.Visible
|
|
Else
|
|
Return Visibility.Collapsed
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
Private m_bIsCheckedAlz As Boolean = False
|
|
Public Property bIsCheckedAlz As Boolean
|
|
Get
|
|
Return m_bIsCheckedAlz
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value Then
|
|
m_bIsCheckedAlz = True
|
|
m_bIsCheckedFront = False
|
|
Else
|
|
m_bIsCheckedAlz = False
|
|
End If
|
|
SideEntityControlVM.RefreshEntity(True, value, Me)
|
|
NotifyPropertyChanged("bIsCheckedAlz")
|
|
NotifyPropertyChanged("bIsCheckedFront")
|
|
End Set
|
|
End Property
|
|
Public Sub SetbIsCheckedAlz(value As Boolean)
|
|
' con questa funzione evito di ridisegnare la pagina delle alzatine per ognilato
|
|
m_bIsCheckedAlz = value
|
|
NotifyPropertyChanged("bIsCheckedAlz")
|
|
NotifyPropertyChanged("bIsCheckedFront")
|
|
End Sub
|
|
|
|
Private m_bIsCheckedFront As Boolean = False
|
|
Public Property bIsCheckedFront As Boolean
|
|
Get
|
|
Return m_bIsCheckedFront
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value Then
|
|
m_bIsCheckedAlz = False
|
|
m_bIsCheckedFront = True
|
|
Else
|
|
m_bIsCheckedFront = False
|
|
End If
|
|
SideEntityControlVM.RefreshEntity(False, value, Me)
|
|
NotifyPropertyChanged("bIsCheckedAlz")
|
|
NotifyPropertyChanged("bIsCheckedFront")
|
|
End Set
|
|
End Property
|
|
Public Sub SetbIsCheckedFront(value As Boolean)
|
|
' con questa funzione evito di ridisegnare la pagina delle alzatine per ognilato
|
|
m_bIsCheckedFront = value
|
|
NotifyPropertyChanged("bIsCheckedAlz")
|
|
NotifyPropertyChanged("bIsCheckedFront")
|
|
End Sub
|
|
'--------------------------ALZ AND FRONT -----------------------------
|
|
|
|
Public MustOverride Property bIsChecked As Boolean
|
|
|
|
Sub New(nId As Integer, sEntityName As String, nTextId As Integer, Mode As SideEntityControlVM.ModeOpt)
|
|
m_nGeomId = nId
|
|
m_sEntityName = sEntityName
|
|
m_nTextId = nTextId
|
|
m_Mode = Mode
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
Friend Class SideAngleEntity
|
|
Inherits SideEntity
|
|
|
|
Public Const STD_MAXSIDEANG As Double = 50.0
|
|
Public Const MAX_MAXSIDEANG As Double = 75.0
|
|
Private Shared m_dMaxSideAng As Double = STD_MAXSIDEANG
|
|
Friend Shared WriteOnly Property dMaxSideAng As Double
|
|
Set(value As Double)
|
|
m_dMaxSideAng = Math.Max(Math.Min(value, MAX_MAXSIDEANG), 0)
|
|
End Set
|
|
End Property
|
|
|
|
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_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
|
|
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()
|
|
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)
|
|
MyBase.New(nId, sEntityName, nTextId, Mode)
|
|
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
|
|
|
|
Friend Class DripEntity
|
|
Inherits SideEntity
|
|
|
|
Friend Shared m_ModifyDrip As Action(Of String, Boolean)
|
|
Friend Shared m_RefreshSideAngleText As Action
|
|
|
|
Private m_bHaveDrip As Boolean
|
|
Public Property bHaveDrip As Boolean
|
|
Get
|
|
Return m_bHaveDrip
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_bHaveDrip = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_dShortStart As Double
|
|
|
|
Public Property GrphShortStart As String
|
|
Get
|
|
Return LenToString(m_dShortStart, 2)
|
|
End Get
|
|
Set(value As String)
|
|
Dim dVal As Double = 0
|
|
If Not String.IsNullOrWhiteSpace(value) Then StringToLen(value, dVal)
|
|
m_dShortStart = dVal
|
|
NotifyPropertyChanged(NameOf(GrphShortStart))
|
|
' Aggiorno tutti i testi
|
|
m_RefreshSideAngleText()
|
|
|
|
End Set
|
|
End Property
|
|
|
|
Public Property dShortStart As Double
|
|
Get
|
|
Return m_dShortStart
|
|
End Get
|
|
Set(value As Double)
|
|
m_dShortStart = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_dShortEnd As Double
|
|
Public Property GrphShortEnd As String
|
|
Get
|
|
Return LenToString(m_dShortEnd, 2)
|
|
End Get
|
|
Set(value As String)
|
|
Dim dVal As Double = 0
|
|
If Not String.IsNullOrWhiteSpace(value) Then StringToLen(value, dVal)
|
|
m_dShortEnd = dVal
|
|
NotifyPropertyChanged(NameOf(GrphShortEnd))
|
|
' Aggiorno tutti i testi
|
|
m_RefreshSideAngleText()
|
|
End Set
|
|
End Property
|
|
Public Property dShortEnd As Double
|
|
Get
|
|
Return m_dShortEnd
|
|
End Get
|
|
Set(value As Double)
|
|
m_dShortEnd = value
|
|
End Set
|
|
End Property
|
|
|
|
Public Overrides Property bIsChecked As Boolean
|
|
Get
|
|
Return m_bHaveDrip
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_bHaveDrip Then
|
|
m_bHaveDrip = value
|
|
' Lo modifico nella geometria e nella lista inclinazioni
|
|
m_ModifyDrip(sEntityName, m_bHaveDrip)
|
|
' Aggiorno tutti i testi
|
|
m_RefreshSideAngleText()
|
|
NotifyPropertyChanged("bIsChecked")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Sub New(nId As Integer, sEntityName As String, nTextId As Integer, bHaveDrip As Boolean, Mode As SideEntityControlVM.ModeOpt)
|
|
MyBase.New(nId, sEntityName, nTextId, Mode)
|
|
m_bHaveDrip = bHaveDrip
|
|
End Sub
|
|
|
|
Friend Shared Function FindEntity(sEntityName As String, EntityList As ObservableCollection(Of SideEntity)) As DripEntity
|
|
If IsNothing(EntityList) Then
|
|
Return Nothing
|
|
End If
|
|
|
|
For Each Entity In EntityList
|
|
If Entity.sEntityName = sEntityName Then
|
|
Return DirectCast(Entity, DripEntity)
|
|
End If
|
|
Next
|
|
Return Nothing
|
|
End Function
|
|
|
|
End Class
|
|
|
|
Friend Class FiloTopEntity
|
|
Inherits SideEntity
|
|
|
|
Friend Shared m_ModifyDrip As Action(Of String, Boolean)
|
|
Friend Shared m_RefreshSideAngleText As Action
|
|
|
|
Private m_bHaveDrip As Boolean
|
|
Public Property bHaveDrip As Boolean
|
|
Get
|
|
Return m_bHaveDrip
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_bHaveDrip = value
|
|
End Set
|
|
End Property
|
|
|
|
Public Overrides Property bIsChecked As Boolean
|
|
Get
|
|
Return m_bHaveDrip
|
|
End Get
|
|
Set(value As Boolean)
|
|
If value <> m_bHaveDrip Then
|
|
m_bHaveDrip = value
|
|
' Lo modifico nella geometria e nella lista inclinazioni
|
|
m_ModifyDrip(sEntityName, m_bHaveDrip)
|
|
' Aggiorno tutti i testi
|
|
m_RefreshSideAngleText()
|
|
NotifyPropertyChanged("bIsChecked")
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Sub New(nId As Integer, sEntityName As String, nTextId As Integer, bHaveDrip As Boolean, Mode As SideEntityControlVM.ModeOpt)
|
|
MyBase.New(nId, sEntityName, nTextId, Mode)
|
|
m_bHaveDrip = bHaveDrip
|
|
End Sub
|
|
|
|
Friend Shared Function FindEntity(sEntityName As String, EntityList As ObservableCollection(Of SideEntity)) As DripEntity
|
|
If IsNothing(EntityList) Then
|
|
Return Nothing
|
|
End If
|
|
|
|
For Each Entity In EntityList
|
|
If Entity.sEntityName = sEntityName Then
|
|
Return DirectCast(Entity, DripEntity)
|
|
End If
|
|
Next
|
|
Return Nothing
|
|
End Function
|
|
|
|
End Class
|
|
|
|
Friend Class ColorSideAngs
|
|
Class CTSA
|
|
Friend m_bOk As Boolean
|
|
Friend m_R As Integer
|
|
Friend m_G As Integer
|
|
Friend m_B As Integer
|
|
Friend m_dAng As Double
|
|
Friend m_dHeel As Double
|
|
End Class
|
|
Private m_ListCtsa As New List(Of CTSA)
|
|
Private m_nTol As Integer = 10
|
|
|
|
Friend Function Read( sIniFile As String) As Boolean
|
|
' Lettura parametri di conversione
|
|
Dim nIndex As Integer = 1
|
|
Dim OneCtsa As CTSA = GetPrivateProfileColorSideAng( S_COLORTOSIDEANG, K_CTSA & nIndex, sIniFile)
|
|
While Not IsNothing(OneCtsa)
|
|
m_ListCtsa.Add(OneCtsa)
|
|
nIndex += 1
|
|
OneCtsa = GetPrivateProfileColorSideAng( S_COLORTOSIDEANG, K_CTSA & nIndex, sIniFile)
|
|
End While
|
|
' Lettura tolleranza
|
|
m_nTol = GetPrivateProfileInt( S_COLORTOSIDEANG, K_CTSA_TOLERANCE, 10, sIniFile)
|
|
Return True
|
|
End Function
|
|
|
|
Private Function GetPrivateProfileColorSideAng( sSect As String, sKey As String, sIniFile As String) As CTSA
|
|
Dim OneCtsa As New CTSA
|
|
Dim sVal As String = String.Empty
|
|
GetPrivateProfileString(sSect, sKey, "", sVal, sIniFile)
|
|
Dim sItems() As String = sVal.Split(",".ToCharArray)
|
|
OneCtsa.m_bOk = If( sItems.Count() = 6, ( sItems(5).Trim() <> "0"), True)
|
|
If sItems.Count() >= 5 Then
|
|
StringToInt( sItems(0), OneCtsa.m_R)
|
|
StringToInt( sItems(1), OneCtsa.m_G)
|
|
StringToInt( sItems(2), OneCtsa.m_B)
|
|
StringToDouble( sItems(3), OneCtsa.m_dAng)
|
|
StringToDouble( sItems(4), OneCtsa.m_dHeel)
|
|
Return OneCtsa
|
|
End If
|
|
Return Nothing
|
|
End Function
|
|
|
|
Friend Function GetSideAngHeel( cCol As Color3d, ByRef dAng As Double, ByRef dHeel As Double) As Boolean
|
|
For Each Ctsa In m_ListCtsa
|
|
If Ctsa.m_bOk And
|
|
Math.Abs( cCol.R - Ctsa.m_R) < m_nTol And
|
|
Math.Abs( cCol.G - Ctsa.m_G) < m_nTol And
|
|
Math.Abs( cCol.B - Ctsa.m_B) < m_nTol Then
|
|
dAng = Ctsa.m_dAng
|
|
dHeel = Ctsa.m_dHeel
|
|
Return True
|
|
End If
|
|
Next
|
|
Return False
|
|
End Function
|
|
|
|
End Class
|
|
|
|
Friend Class ColorEngrave
|
|
Class CTE
|
|
Friend m_bOk As Boolean
|
|
Friend m_R As Integer
|
|
Friend m_G As Integer
|
|
Friend m_B As Integer
|
|
Friend m_dAff As Double
|
|
Friend m_dLar As Double
|
|
End Class
|
|
Private m_ListCte As New List(Of CTE)
|
|
Private m_nTol As Integer = 10
|
|
|
|
Friend Function Read(sIniFile As String) As Boolean
|
|
' Lettura parametri di conversione
|
|
Dim nIndex As Integer = 1
|
|
Dim OneCte As CTE = GetPrivateProfileColorEngrave(S_COLORTOENGRAVE, K_CTE & nIndex, sIniFile)
|
|
While Not IsNothing(OneCte)
|
|
m_ListCte.Add(OneCte)
|
|
nIndex += 1
|
|
OneCte = GetPrivateProfileColorEngrave(S_COLORTOENGRAVE, K_CTE & nIndex, sIniFile)
|
|
End While
|
|
' Lettura tolleranza
|
|
m_nTol = GetPrivateProfileInt(S_COLORTOENGRAVE, K_CTE_TOLERANCE, 10, sIniFile)
|
|
Return True
|
|
End Function
|
|
|
|
Private Function GetPrivateProfileColorEngrave(sSect As String, sKey As String, sIniFile As String) As CTE
|
|
Dim OneCte As New CTE
|
|
Dim sVal As String = String.Empty
|
|
GetPrivateProfileString(sSect, sKey, "", sVal, sIniFile)
|
|
Dim sItems() As String = sVal.Split(",".ToCharArray)
|
|
OneCte.m_bOk = If(sItems.Count() = 6, (sItems(5).Trim() <> "0"), True)
|
|
If sItems.Count() >= 5 Then
|
|
StringToInt(sItems(0), OneCte.m_R)
|
|
StringToInt(sItems(1), OneCte.m_G)
|
|
StringToInt(sItems(2), OneCte.m_B)
|
|
StringToDouble(sItems(3), OneCte.m_dAff)
|
|
StringToDouble(sItems(4), OneCte.m_dLar)
|
|
Return OneCte
|
|
End If
|
|
Return Nothing
|
|
End Function
|
|
|
|
Friend Function GetEngraveAff(cCol As Color3d, ByRef dAff As Double, ByRef dLar As Double) As Boolean
|
|
For Each Ctsa In m_ListCte
|
|
If Ctsa.m_bOk And
|
|
Math.Abs(cCol.R - Ctsa.m_R) < m_nTol And
|
|
Math.Abs(cCol.G - Ctsa.m_G) < m_nTol And
|
|
Math.Abs(cCol.B - Ctsa.m_B) < m_nTol Then
|
|
dAff = Ctsa.m_dAff
|
|
dLar = Ctsa.m_dLar
|
|
Return True
|
|
End If
|
|
Next
|
|
Return False
|
|
End Function
|
|
|
|
End Class
|
|
|
|
Friend Class AlzAndFrontEntity
|
|
Inherits SideEntity
|
|
|
|
Public Const STD_MAXSIDEANG As Double = 50.0
|
|
Public Const MAX_MAXSIDEANG As Double = 75.0
|
|
Private Shared m_dMaxSideAng As Double = STD_MAXSIDEANG
|
|
Friend Shared WriteOnly Property dMaxSideAng As Double
|
|
Set(value As Double)
|
|
m_dMaxSideAng = Math.Max(Math.Min(value, MAX_MAXSIDEANG), 0)
|
|
End Set
|
|
End Property
|
|
|
|
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_Parameter3 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_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 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()
|
|
NotifyPropertyChanged("bIsChecked")
|
|
End Set
|
|
End Property
|
|
|
|
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
|
|
End Sub
|
|
|
|
End Class
|