c9b492da9b
- migliorie su finestra inclinazione lati.
1058 lines
42 KiB
VB.net
1058 lines
42 KiB
VB.net
Imports EgtUILib
|
|
|
|
Public Class SideAngleUC
|
|
|
|
Friend Const MAX_SIDEANG As Double = 67.5
|
|
|
|
Public Enum ModeOpt As Integer
|
|
SIDEANGLE = 0
|
|
DRIP = 1
|
|
End Enum
|
|
' Variabile che indica se sono in sideangle o drip
|
|
Friend m_Mode As ModeOpt
|
|
|
|
' Riferimento alla MainWindow
|
|
Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
|
|
|
|
' Riferimento alla pagina che ha aperto SideAngleUC
|
|
Private m_CallingPage As MainWindow.Pages
|
|
|
|
' Lista di tutte le entità inclinabili presenti nel progetto
|
|
Friend m_SideAngleEntityList As New List(Of SideAngleEntity)
|
|
Friend m_DripEntityList As New List(Of DripEntity)
|
|
Friend m_dDripOffset As Double = 10
|
|
Friend m_dDripDepth As Double = 10
|
|
Friend m_dDripShort As Double = 0
|
|
|
|
Private Sub SideAngleUC_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
|
' Imposto riferimenti ad altre pagine
|
|
m_CallingPage = m_MainWindow.m_ActivePage
|
|
|
|
' Imposto messaggi
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
Parameter1TxBl.Text = EgtMsg(MSG_IMPORTPAGEUC + 9) ' Angolo
|
|
Else
|
|
Parameter1TxBl.Text = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset
|
|
Parameter2TxBl.Text = EgtMsg(MSG_IMPORTPAGEUC + 11) ' Affondamento
|
|
Parameter3TxBl.Text = EgtMsg(MSG_IMPORTPAGEUC + 12) ' Accorciamento
|
|
End If
|
|
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
A1TxBx.Text = "0"
|
|
A2TxBx.Text = "0"
|
|
A3TxBx.Text = "0"
|
|
A4TxBx.Text = "0"
|
|
A5TxBx.Text = "0"
|
|
A6TxBx.Text = "0"
|
|
A7TxBx.Text = "0"
|
|
A8TxBx.Text = "0"
|
|
A9TxBx.Text = "0"
|
|
A10TxBx.Text = "0"
|
|
End If
|
|
|
|
If m_CallingPage = MainWindow.Pages.Draw Then
|
|
' Imposto questa come pagina correntemente visualizzata nella drawpage
|
|
m_MainWindow.m_DrawPageUC.m_ActiveComponentPage = DrawPageUC.Pages.SideAngle
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_MainWindow.m_DrawPageUC.DrawScene.GetCtx())
|
|
' Inizializzo
|
|
DeleteSideAngle()
|
|
' Inizializzo lati per angoli (ne compilo la lista e aggiungo la scritta nel disegno)
|
|
InitSides()
|
|
' Aggiorno testi nel disegno
|
|
RefreshSideAngleText()
|
|
' Aggiorno check e valori
|
|
RefreshCheckAndValue()
|
|
|
|
ElseIf m_CallingPage = MainWindow.Pages.Import Then
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_MainWindow.m_ImportPageUC.ImportScene.GetCtx())
|
|
' Inizializzo
|
|
DeleteSideAngle()
|
|
' Inizializzo lati per angoli (ne compilo la lista e aggiungo la scritta nel disegno)
|
|
InitSides()
|
|
' Aggiorno testi nel disegno
|
|
RefreshSideAngleText()
|
|
' Aggiorno check e valori
|
|
RefreshCheckAndValue()
|
|
End If
|
|
|
|
' Gestisco Checkbox e nomi in base al numero di lati inclinabili
|
|
TxBlChBxView()
|
|
' Gestisco visualizzazione dei parametri
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
A1.Visibility = Windows.Visibility.Collapsed
|
|
A2.Visibility = Windows.Visibility.Collapsed
|
|
A3.Visibility = Windows.Visibility.Collapsed
|
|
A4.Visibility = Windows.Visibility.Collapsed
|
|
A5.Visibility = Windows.Visibility.Collapsed
|
|
A6.Visibility = Windows.Visibility.Collapsed
|
|
A7.Visibility = Windows.Visibility.Collapsed
|
|
A8.Visibility = Windows.Visibility.Collapsed
|
|
A9.Visibility = Windows.Visibility.Collapsed
|
|
A10.Visibility = Windows.Visibility.Collapsed
|
|
Parameter1TxBl.Visibility = Windows.Visibility.Hidden
|
|
Parameter1TxBx.Visibility = Windows.Visibility.Hidden
|
|
Parameter2TxBl.Visibility = Windows.Visibility.Hidden
|
|
Parameter2TxBx.Visibility = Windows.Visibility.Hidden
|
|
Parameter3TxBl.Visibility = Windows.Visibility.Hidden
|
|
Parameter3TxBx.Visibility = Windows.Visibility.Hidden
|
|
Else
|
|
A1TxBx.Visibility = Windows.Visibility.Collapsed
|
|
A2TxBx.Visibility = Windows.Visibility.Collapsed
|
|
A3TxBx.Visibility = Windows.Visibility.Collapsed
|
|
A4TxBx.Visibility = Windows.Visibility.Collapsed
|
|
A5TxBx.Visibility = Windows.Visibility.Collapsed
|
|
A6TxBx.Visibility = Windows.Visibility.Collapsed
|
|
A7TxBx.Visibility = Windows.Visibility.Collapsed
|
|
A8TxBx.Visibility = Windows.Visibility.Collapsed
|
|
A9TxBx.Visibility = Windows.Visibility.Collapsed
|
|
A10TxBx.Visibility = Windows.Visibility.Collapsed
|
|
Parameter1TxBl.Visibility = Windows.Visibility.Visible
|
|
Parameter1TxBx.Visibility = Windows.Visibility.Visible
|
|
Parameter2TxBl.Visibility = Windows.Visibility.Visible
|
|
Parameter2TxBx.Visibility = Windows.Visibility.Visible
|
|
Parameter3TxBl.Visibility = Windows.Visibility.Visible
|
|
Parameter3TxBx.Visibility = Windows.Visibility.Visible
|
|
End If
|
|
|
|
' Aggiorno valori
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
Dim sVal As String = String.Empty
|
|
GetPrivateProfileString(S_SIDES, K_SIDEANGLE, "45", sVal, m_MainWindow.GetIniFile())
|
|
Parameter1TxBx.Text = sVal
|
|
Else
|
|
m_dDripOffset = GetPrivateProfileDouble(S_SIDES, K_DRIPOFFSET, 20, m_MainWindow.GetIniFile())
|
|
m_dDripDepth = GetPrivateProfileDouble(S_SIDES, K_DRIPDEPTH, 10, m_MainWindow.GetIniFile())
|
|
m_dDripShort = GetPrivateProfileDouble(S_SIDES, K_DRIPSHORT, 0, m_MainWindow.GetIniFile())
|
|
Parameter1TxBx.Text = LenToString(m_dDripOffset, 3)
|
|
Parameter2TxBx.Text = LenToString(m_dDripDepth, 3)
|
|
Parameter3TxBx.Text = LenToString(m_dDripShort, 3)
|
|
End If
|
|
|
|
' Aggiorno visualizzazione
|
|
If m_CallingPage = MainWindow.Pages.Draw Then
|
|
EgtZoom(ZM.ALL)
|
|
Else
|
|
EgtDraw()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub TxBlChBxView()
|
|
' Numero di lati da visualizzare
|
|
Dim nCount As Integer = If(m_Mode = ModeOpt.SIDEANGLE,
|
|
m_SideAngleEntityList.Count(), m_DripEntityList.Count())
|
|
' Lati nascosti
|
|
For Index As Integer = 1 To 10 - nCount
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
GetSideTxBxFromIndex(Index).Visibility = Windows.Visibility.Hidden
|
|
Else
|
|
GetChBxFromIndex(Index).Visibility = Windows.Visibility.Hidden
|
|
End If
|
|
GetTxBlFromIndex(Index).Visibility = Windows.Visibility.Hidden
|
|
Next
|
|
' Lati visibili
|
|
Dim TxBlIndex As Integer = 1
|
|
For Index As Integer = 10 - nCount + 1 To 10
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
GetSideTxBxFromIndex(Index).Visibility = Windows.Visibility.Visible
|
|
Else
|
|
GetChBxFromIndex(Index).Visibility = Windows.Visibility.Visible
|
|
End If
|
|
GetTxBlFromIndex(Index).Text = If(m_Mode = ModeOpt.SIDEANGLE,
|
|
m_SideAngleEntityList(TxBlIndex - 1).sEntityName,
|
|
m_DripEntityList(TxBlIndex - 1).sEntityName)
|
|
GetTxBlFromIndex(Index).Visibility = Windows.Visibility.Visible
|
|
TxBlIndex += 1
|
|
Next
|
|
End Sub
|
|
|
|
Private Function GetChBxFromIndex(Index As Integer) As CheckBox
|
|
Select Case Index
|
|
Case 1
|
|
Return A1
|
|
Case 2
|
|
Return A2
|
|
Case 3
|
|
Return A3
|
|
Case 4
|
|
Return A4
|
|
Case 5
|
|
Return A5
|
|
Case 6
|
|
Return A6
|
|
Case 7
|
|
Return A7
|
|
Case 8
|
|
Return A8
|
|
Case 9
|
|
Return A9
|
|
Case Else
|
|
Return A10
|
|
End Select
|
|
End Function
|
|
|
|
Private Function GetSideTxBxFromIndex(Index As Integer) As EgtWPFLib.EgtTextBox
|
|
Select Case Index
|
|
Case 1
|
|
Return A1TxBx
|
|
Case 2
|
|
Return A2TxBx
|
|
Case 3
|
|
Return A3TxBx
|
|
Case 4
|
|
Return A4TxBx
|
|
Case 5
|
|
Return A5TxBx
|
|
Case 6
|
|
Return A6TxBx
|
|
Case 7
|
|
Return A7TxBx
|
|
Case 8
|
|
Return A8TxBx
|
|
Case 9
|
|
Return A9TxBx
|
|
Case Else
|
|
Return A10TxBx
|
|
End Select
|
|
End Function
|
|
|
|
Private Function GetTxBlFromIndex(Index As Integer) As TextBlock
|
|
Select Case Index
|
|
Case 1
|
|
Return Entity1
|
|
Case 2
|
|
Return Entity2
|
|
Case 3
|
|
Return Entity3
|
|
Case 4
|
|
Return Entity4
|
|
Case 5
|
|
Return Entity5
|
|
Case 6
|
|
Return Entity6
|
|
Case 7
|
|
Return Entity7
|
|
Case 8
|
|
Return Entity8
|
|
Case 9
|
|
Return Entity9
|
|
Case Else
|
|
Return Entity10
|
|
End Select
|
|
End Function
|
|
|
|
Private Sub SideAngleUC_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
|
|
If m_CallingPage = MainWindow.Pages.Draw Then
|
|
' Ricavo nome pezzo
|
|
Dim PartId As Integer = EgtGetFirstInGroup(GDB_ID.ROOT)
|
|
' Svuoto layer in cui sono presenti i testi con le inclinazioni dei lati
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
EgtEmptyGroup(EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER))
|
|
Else
|
|
EgtEmptyGroup(EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER))
|
|
End If
|
|
ElseIf m_CallingPage = MainWindow.Pages.Import Then
|
|
' Nessuna azione necessaria
|
|
End If
|
|
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
WritePrivateProfileString(S_SIDES, K_SIDEANGLE, Parameter1TxBx.Text, m_MainWindow.GetIniFile())
|
|
Else
|
|
WritePrivateProfileString(S_SIDES, K_DRIPOFFSET, DoubleToString(m_dDripOffset, 3), m_MainWindow.GetIniFile())
|
|
WritePrivateProfileString(S_SIDES, K_DRIPDEPTH, DoubleToString(m_dDripDepth, 3), m_MainWindow.GetIniFile())
|
|
WritePrivateProfileString(S_SIDES, K_DRIPSHORT, DoubleToString(m_dDripShort, 3), m_MainWindow.GetIniFile())
|
|
End If
|
|
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Private Sub RefreshCheckAndValue()
|
|
For EntityIndex = 1 To m_SideAngleEntityList.Count
|
|
Dim Entity As SideAngleEntity = m_SideAngleEntityList(EntityIndex - 1)
|
|
' Creo testo con angolo di inclinazione
|
|
Dim nTxBxIndex As Integer = 10 - m_SideAngleEntityList.Count + EntityIndex
|
|
GetSideTxBxFromIndex(nTxBxIndex).Text = DoubleToString(Entity.dSideAngle, 1)
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub RefreshSideAngleText()
|
|
Dim PartId As Integer = GDB_ID.NULL
|
|
Dim LoopId As Integer = GDB_ID.NULL
|
|
If m_CallingPage = MainWindow.Pages.Draw Then
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_MainWindow.m_DrawPageUC.DrawScene.GetCtx())
|
|
' Ricavo nome primo pezzo
|
|
PartId = If(m_MainWindow.m_DrawPageUC.SelectedLayer <> GDB_ID.NULL, EgtGetFirstPart(), GDB_ID.NULL)
|
|
' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo
|
|
LoopId = m_MainWindow.m_DrawPageUC.SelectedLayer
|
|
ElseIf m_CallingPage = MainWindow.Pages.Import Then
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_MainWindow.m_ImportPageUC.ImportScene.GetCtx())
|
|
' Recupero nome pezzo
|
|
PartId = m_MainWindow.m_ImportPageUC.SelectedPart
|
|
' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo
|
|
LoopId = m_MainWindow.m_ImportPageUC.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)
|
|
ElseIf PartId <> GDB_ID.NULL Then
|
|
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_SideAngleEntityList
|
|
Dim sText As String = Entity.sEntityName & " = " & DoubleToString(Entity.dSideAngle, 1) & "°"
|
|
AddTextToLine(sText, Entity.nTextId, Entity.nGeomId, 20, dBBoxRad, True)
|
|
Next
|
|
' Altrimenti modalità gocciolatoio
|
|
Else
|
|
' Per ogni entità creo testo con nome
|
|
For Each Entity In m_DripEntityList
|
|
AddTextToLine(Entity.sEntityName, Entity.nTextId, Entity.nGeomId, 20, dBBoxRad, True)
|
|
Next
|
|
' Creo le geometrie dei gocciolatoi
|
|
CreateDripGeom(PartId)
|
|
End If
|
|
' Aggiorno visualizzazione
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Private Sub InitSides()
|
|
Dim PartId As Integer = GDB_ID.NULL
|
|
Dim LoopId As Integer = GDB_ID.NULL
|
|
If m_CallingPage = MainWindow.Pages.Draw Then
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_MainWindow.m_DrawPageUC.DrawScene.GetCtx())
|
|
' Ricavo nome primo pezzo e lo sistemo
|
|
PartId = If(m_MainWindow.m_DrawPageUC.SelectedLayer <> GDB_ID.NULL, EgtGetFirstPart(), GDB_ID.NULL)
|
|
' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo
|
|
LoopId = m_MainWindow.m_DrawPageUC.SelectedLayer
|
|
Else
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(m_MainWindow.m_ImportPageUC.ImportScene.GetCtx())
|
|
' Recupero nome pezzo
|
|
PartId = m_MainWindow.m_ImportPageUC.SelectedPart
|
|
' Recupero nome layer con geometria di contorno (esterno o interno) del pezzo
|
|
LoopId = m_MainWindow.m_ImportPageUC.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)
|
|
' Creo layer per testi se non esiste già
|
|
Dim TextLayer As Integer = EgtGetFirstNameInGroup(PartId, SIDE_ANGLE_LAYER)
|
|
If TextLayer = GDB_ID.NULL And PartId <> GDB_ID.NULL Then
|
|
TextLayer = EgtCreateGroup(PartId)
|
|
EgtSetName(TextLayer, SIDE_ANGLE_LAYER)
|
|
EgtSetColor(TextLayer, New Color3d(0, 0, 0))
|
|
End If
|
|
|
|
Dim LastLine As Integer = EgtGetLastInGroup(LoopId)
|
|
Dim CurrLine As Integer = EgtGetFirstInGroup(LoopId)
|
|
Dim NextLine As Integer = EgtGetNext(CurrLine)
|
|
' Creo indice per numerare le entità in ImportPage
|
|
Dim nEntityIndex As Integer = 1
|
|
' Ciclo che verifica se possibile inclinare la linea corrente fino alla penultima
|
|
While NextLine <> GDB_ID.NULL
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
If VerifyIsSideAnglePossible(LastLine, CurrLine, NextLine) Then
|
|
' Aggiungo il lato alla lista di quelli inclinabili e ne azzero l'inclinazione
|
|
AddSideAngle(CurrLine, TextLayer, dBBoxRad, nEntityIndex)
|
|
nEntityIndex += 1
|
|
End If
|
|
Else
|
|
If VerifyIsSideDripPossible(LastLine, CurrLine, NextLine) Then
|
|
' Aggiungo il lato alla lista di quelli su cui è possibile mettere il gocciolatoio
|
|
AddDripSide(CurrLine, TextLayer, dBBoxRad, nEntityIndex)
|
|
nEntityIndex += 1
|
|
End If
|
|
End If
|
|
LastLine = CurrLine
|
|
CurrLine = NextLine
|
|
NextLine = EgtGetNext(CurrLine)
|
|
End While
|
|
' Verifico ultima linea
|
|
NextLine = EgtGetFirstInGroup(LoopId)
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
If VerifyIsSideAnglePossible(LastLine, CurrLine, NextLine) Then
|
|
' Aggiungo il lato alla lista di quelli inclinabili e ne azzero l'inclinazione
|
|
AddSideAngle(CurrLine, TextLayer, dBBoxRad, nEntityIndex)
|
|
nEntityIndex += 1
|
|
End If
|
|
Else
|
|
If VerifyIsSideDripPossible(LastLine, CurrLine, NextLine) Then
|
|
' Aggiungo il lato alla lista di quelli su cui è possibile mettere il gocciolatoio
|
|
AddDripSide(CurrLine, TextLayer, dBBoxRad, nEntityIndex)
|
|
nEntityIndex += 1
|
|
End If
|
|
End If
|
|
|
|
' Se non ci sono lati su cui operare, messaggio utente
|
|
If LoopId <> GDB_ID.NULL Then
|
|
If (m_Mode = ModeOpt.SIDEANGLE And m_SideAngleEntityList.Count() = 0) Or
|
|
(m_Mode = ModeOpt.DRIP And m_DripEntityList.Count() = 0) Then
|
|
If m_CallingPage = MainWindow.Pages.Draw Then
|
|
m_MainWindow.m_DrawPageUC.MessageTxBx.Text = EgtMsg(MSG_DRAWPAGEUC + 7) ' Non ci sono lati modificabili
|
|
m_MainWindow.m_DrawPageUC.MessageBrd.Background = Application.Current.FindResource("OmagCut_Yellow")
|
|
Else
|
|
m_MainWindow.m_ImportPageUC.MessageTxBx.Text = EgtMsg(MSG_DRAWPAGEUC + 7) ' Non ci sono lati modificabili
|
|
m_MainWindow.m_ImportPageUC.MessageBrd.Background = Application.Current.FindResource("OmagCut_Yellow")
|
|
End If
|
|
Else
|
|
If m_CallingPage = MainWindow.Pages.Draw Then
|
|
m_MainWindow.m_DrawPageUC.MessageTxBx.Text = ""
|
|
m_MainWindow.m_DrawPageUC.MessageBrd.Background = Brushes.Transparent
|
|
Else
|
|
m_MainWindow.m_ImportPageUC.MessageTxBx.Text = ""
|
|
m_MainWindow.m_ImportPageUC.MessageBrd.Background = Brushes.Transparent
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
' Aggiorno interfaccia
|
|
If m_CallingPage = MainWindow.Pages.Import Then
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
For Each Entity In m_SideAngleEntityList
|
|
If Entity.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_DripEntityList
|
|
If Entity.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_SideAngleEntityList.Count - nIndex)).IsChecked = True
|
|
Else
|
|
GetChBxFromIndex(10 - (m_DripEntityList.Count - nIndex)).IsChecked = True
|
|
End If
|
|
End Sub
|
|
|
|
' Funzione che verifica se la linea corrente è inclinabile in base al tipo della precedente e successiva
|
|
Private Function VerifyIsSideAnglePossible(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
|
|
|
|
' Verifico se curva precedente mi permette di inclinare
|
|
Dim bLastOk As Boolean = False
|
|
If EgtGetType(LastLine) = GDB_TY.CRV_LINE Then
|
|
bLastOk = True
|
|
ElseIf EgtGetType(LastLine) = GDB_TY.CRV_ARC Then
|
|
' 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
|
|
' calcolo differenza dei vettori
|
|
Dim vtDiff As Vector3d = vtLastEnd - vtCurrStart
|
|
' verifico che sia nulla o quasi
|
|
bLastOk = Not vtDiff.IsSmall()
|
|
Else
|
|
EgtOutLog("Error in Compo Outloop: found an entity that is not a line or a arc")
|
|
End If
|
|
|
|
' Verifico se curva successiva mi permette di inclinare
|
|
Dim bNextOk As Boolean = False
|
|
If EgtGetType(NextLine) = GDB_TY.CRV_LINE Then
|
|
bNextOk = True
|
|
ElseIf EgtGetType(NextLine) = GDB_TY.CRV_ARC Then
|
|
' 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
|
|
' calcolo differenza dei vettori
|
|
Dim vtDiff As Vector3d = vtCurrEnd - vtNextStart
|
|
' verifico che sia nulla o quasi
|
|
bNextOk = Not vtDiff.IsSmall()
|
|
Else
|
|
EgtOutLog("Error in Compo Outloop: found an entity that is not a line or a arc")
|
|
End If
|
|
|
|
' Se entrambe me lo permettono restituisco vero
|
|
If bLastOk And bNextOk Then
|
|
Return True
|
|
End If
|
|
Return False
|
|
|
|
End Function
|
|
|
|
' 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
|
|
' Aggiungo entità all'elenco di quelle inclinabili
|
|
Dim sEntityName As String = String.Empty
|
|
EgtGetName(CurrLine, sEntityName)
|
|
m_SideAngleEntityList.Add(New SideAngleEntity(CurrLine, sEntityName, TextLayer, dSideAngleVal))
|
|
' Creo testo con angolo di inclinazione
|
|
AddTextToLine(sEntityName & " = " & DoubleToString(dSideAngleVal, 1) & "°", 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)
|
|
m_DripEntityList.Add(New DripEntity(CurrLine, sEntityName, TextLayer, bHaveDripVal))
|
|
' Creo testo con nome lato
|
|
AddTextToLine(sEntityName, TextLayer, CurrLine, 20, dBBoxRad, True)
|
|
End Sub
|
|
|
|
' Funzione che dato un segmento e una distanza, scrive il testo centrato alla sua sinistra (destra se bTextExt)
|
|
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, Point3d.ORIG(), 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)
|
|
' estremi della CurrLine
|
|
Dim ptLineStart As Point3d
|
|
EgtStartPoint(CurrLine, nText, ptLineStart)
|
|
Dim ptLineEnd As Point3d
|
|
EgtEndPoint(CurrLine, nText, ptLineEnd)
|
|
' versore della CurrLine
|
|
Dim vtCurrLine As Vector3d = ptLineEnd - ptLineStart
|
|
vtCurrLine.Normalize()
|
|
' versore perpendicolare alla CurrLine che punta verso il testo
|
|
Dim vtOrtoLine As New Vector3d(vtCurrLine)
|
|
If bTextExt Then
|
|
vtOrtoLine.Rotate(Vector3d.Z_AX(), -90)
|
|
Else
|
|
vtOrtoLine.Rotate(Vector3d.Z_AX(), 90)
|
|
End If
|
|
' eventuale rotazione del testo
|
|
Dim dRotAng As Double = 0
|
|
If bRot Then
|
|
dRotAng = Math.Atan2(vtCurrLine.y, vtCurrLine.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 vtCurrLine.x > 0 Then
|
|
If vtCurrLine.y > 0 Then
|
|
vtptExtptMC = ptMidBBox - New Point3d(ptMinBBox.x, ptMaxBBox.y, 0)
|
|
Else
|
|
vtptExtptMC = ptMidBBox - ptMaxBBox
|
|
End If
|
|
Else
|
|
If vtCurrLine.y > 0 Then
|
|
vtptExtptMC = ptMidBBox - ptMinBBox
|
|
Else
|
|
vtptExtptMC = ptMidBBox - New Point3d(ptMaxBBox.x, ptMinBBox.y, 0)
|
|
End If
|
|
End If
|
|
Else
|
|
If vtCurrLine.x > 0 Then
|
|
If vtCurrLine.y > 0 Then
|
|
vtptExtptMC = ptMidBBox - New Point3d(ptMaxBBox.x, ptMinBBox.y, 0)
|
|
Else
|
|
vtptExtptMC = ptMidBBox - ptMinBBox
|
|
End If
|
|
Else
|
|
If vtCurrLine.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 = Point3d.Media(ptLineStart, ptLineEnd) + vtOrtoLine * (dDistance + (vtOrtoLine * vtptExtptMC))
|
|
EgtMove(nText, (ptTextMC - Point3d.ORIG()))
|
|
Return nText
|
|
End Function
|
|
|
|
' Funzione che crea le geometrie dei gocciolatoi
|
|
Friend Sub CreateDripGeom(nPartId As Integer)
|
|
' Recupero Id layer di contorno esterno
|
|
Dim nOutLoopId = EgtGetFirstNameInGroup(nPartId, NAME_OUTLOOP)
|
|
' Preparo layer con geometria gocciolatoi (svuotandolo o creandolo)
|
|
Dim DripLayer As Integer = EgtGetFirstNameInGroup(nPartId, NAME_DRIPCUT)
|
|
If DripLayer <> GDB_ID.NULL Then
|
|
EgtEmptyGroup(DripLayer)
|
|
Else
|
|
DripLayer = EgtCreateGroup(nPartId)
|
|
EgtSetName(DripLayer, NAME_DRIPCUT)
|
|
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_DripEntityList
|
|
If Entity.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
|
|
' Concateno le curve
|
|
EgtCreateCurveCompoByReorder(DripLayer, vSelId.Count(), vSelId.ToArray(), New Point3d(), True)
|
|
' Eseguo offset dei risultati ed eventuali accorciamenti iniziali e finali
|
|
Dim nCrvId As Integer = EgtGetFirstInGroup(DripLayer)
|
|
While nCrvId <> GDB_ID.NULL
|
|
EgtOffsetCurve(nCrvId, -m_dDripOffset, OFF_TYPE.EXTEND)
|
|
EgtSetColor(nCrvId, New Color3d(255, 165, 0))
|
|
EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth)
|
|
If m_dDripShort > EPS_SMALL Then
|
|
Dim dLen As Double
|
|
EgtCurveLength(nCrvId, dLen)
|
|
EgtTrimCurveEndAtLen(nCrvId, dLen - m_dDripShort)
|
|
EgtTrimCurveStartAtLen(nCrvId, m_dDripShort)
|
|
EgtSetInfo(nCrvId, INFO_STRICT, "1")
|
|
End If
|
|
nCrvId = EgtGetNext(nCrvId)
|
|
End While
|
|
End Sub
|
|
|
|
Private Sub SideCheck_Click(sender As Object, e As RoutedEventArgs) Handles A1.Click, A2.Click, A3.Click, A4.Click, A5.Click, A6.Click, A7.Click, A8.Click, A9.Click, A10.Click
|
|
|
|
Dim CurrCheckBox As CheckBox = e.Source
|
|
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
' Nuovo angolo di inclinazione
|
|
Dim dSideAngle As Double
|
|
' Se checked lo imposto al valore letto dalla TxBx
|
|
If CurrCheckBox.IsChecked() Then
|
|
StringToDouble(Parameter1TxBx.Text, dSideAngle)
|
|
' altrimenti lo imposto a zero
|
|
Else
|
|
dSideAngle = 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 = m_SideAngleEntityList(nCurrSide - 1).sEntityName
|
|
' Lo modifico nella geometria e nella lista inclinazioni
|
|
ModifySideAngle(sCurrSide, dSideAngle)
|
|
' Aggiorno tutti i testi
|
|
RefreshSideAngleText()
|
|
Else
|
|
' Recupero stato entità
|
|
Dim bVal As Boolean = CurrCheckBox.IsChecked()
|
|
' Converto nome checkbox in nome elemento tenendo conto dello slittamento verso il basso
|
|
Dim nCurrSide As Integer = m_DripEntityList.Count() - (10 - CInt(CurrCheckBox.Name.Substring(1)))
|
|
Dim sCurrSide As String = m_DripEntityList(nCurrSide - 1).sEntityName
|
|
' Modifico info gocciolatoi
|
|
ModifyDrip(sCurrSide, bVal)
|
|
' Aggiorno tutti i testi e le geometrie
|
|
RefreshSideAngleText()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub A1TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A1TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(1, A1TxBx)
|
|
End Sub
|
|
|
|
Private Sub A2TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A2TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(2, A2TxBx)
|
|
End Sub
|
|
|
|
Private Sub A3TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A3TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(3, A3TxBx)
|
|
End Sub
|
|
|
|
Private Sub A4TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A4TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(4, A4TxBx)
|
|
End Sub
|
|
|
|
Private Sub A5TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A5TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(5, A5TxBx)
|
|
End Sub
|
|
|
|
Private Sub A6eTxBx_EgtClosed(sender As Object, e As EventArgs) Handles A6TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(6, A6TxBx)
|
|
End Sub
|
|
|
|
Private Sub A7TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A7TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(7, A7TxBx)
|
|
End Sub
|
|
|
|
Private Sub A8TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A8TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(8, A8TxBx)
|
|
End Sub
|
|
|
|
Private Sub A9TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A9TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(9, A9TxBx)
|
|
End Sub
|
|
|
|
Private Sub A10TxBx_EgtClosed(sender As Object, e As EventArgs) Handles A10TxBx.EgtClosed
|
|
SetSideAngleFromTxBx(10, A10TxBx)
|
|
End Sub
|
|
|
|
Private Sub SetSideAngleFromTxBx(SideIndex As Integer, AngleTxBx As EgtWPFLib.EgtTextBox)
|
|
' Nuovo angolo di inclinazione
|
|
Dim dSideAngle As Double
|
|
StringToDouble(AngleTxBx.Text, dSideAngle)
|
|
' Verifico stia nei limiti
|
|
If dSideAngle < -MAX_SIDEANG Then
|
|
dSideAngle = -MAX_SIDEANG
|
|
AngleTxBx.Text = DoubleToString(dSideAngle, 2)
|
|
ElseIf dSideAngle > MAX_SIDEANG Then
|
|
dSideAngle = MAX_SIDEANG
|
|
AngleTxBx.Text = DoubleToString(dSideAngle, 2)
|
|
End If
|
|
' Converto nome checkbox in nome elemento tenendo conto dello slittamento verso il basso
|
|
Dim nCurrSide As Integer = m_SideAngleEntityList.Count() - (10 - SideIndex)
|
|
Dim sCurrSide As String = m_SideAngleEntityList(nCurrSide - 1).sEntityName
|
|
' Lo modifico nella geometria e nella lista inclinazioni
|
|
ModifySideAngle(sCurrSide, dSideAngle)
|
|
' Aggiorno tutti i testi
|
|
RefreshSideAngleText()
|
|
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)
|
|
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)
|
|
' Cancello inclinazione nell'apposito campo info
|
|
Else
|
|
EgtRemoveInfo(CurrEntity.nGeomId, INFO_SIDE_ANGLE)
|
|
End If
|
|
' Aggiorno lista entità con nuova inclinazione
|
|
CurrEntity.dSideAngle = dSideAngle
|
|
Return True
|
|
End Function
|
|
|
|
' Funzione che modifica l'eventuale canalino 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)
|
|
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 DeleteSideAngle()
|
|
' Cancello lista lati inclinati
|
|
If m_Mode = ModeOpt.SIDEANGLE Then
|
|
m_SideAngleEntityList.Clear()
|
|
' Annullo tutti i testi
|
|
A1TxBx.Text = String.Empty
|
|
A2TxBx.Text = String.Empty
|
|
A3TxBx.Text = String.Empty
|
|
A4TxBx.Text = String.Empty
|
|
A5TxBx.Text = String.Empty
|
|
A6TxBx.Text = String.Empty
|
|
A7TxBx.Text = String.Empty
|
|
A8TxBx.Text = String.Empty
|
|
A9TxBx.Text = String.Empty
|
|
A10TxBx.Text = String.Empty
|
|
Else
|
|
m_DripEntityList.Clear()
|
|
' Annullo tutti i CheckBox
|
|
A1.IsChecked = False
|
|
A2.IsChecked = False
|
|
A3.IsChecked = False
|
|
A4.IsChecked = False
|
|
A5.IsChecked = False
|
|
A6.IsChecked = False
|
|
A7.IsChecked = False
|
|
A8.IsChecked = False
|
|
A9.IsChecked = False
|
|
A10.IsChecked = False
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Parameter1TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter1TxBx.EgtClosed
|
|
If m_Mode = ModeOpt.DRIP Then
|
|
' Recupero il valore
|
|
StringToDouble(Parameter1TxBx.Text, m_dDripOffset)
|
|
' Creo le geometrie dei gocciolatoi
|
|
RefreshSideAngleText()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Parameter2TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter2TxBx.EgtClosed
|
|
If m_Mode = ModeOpt.DRIP Then
|
|
' Recupero il valore
|
|
StringToDouble(Parameter2TxBx.Text, m_dDripDepth)
|
|
' Creo le geometrie dei gocciolatoi
|
|
RefreshSideAngleText()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Parameter3TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter3TxBx.EgtClosed
|
|
If m_Mode = ModeOpt.DRIP Then
|
|
' Recupero il valore
|
|
StringToDouble(Parameter3TxBx.Text, m_dDripShort)
|
|
' Creo le geometrie dei gocciolatoi
|
|
RefreshSideAngleText()
|
|
End If
|
|
End Sub
|
|
|
|
Friend Sub WriteSideAngleForNest(nCtx As Integer)
|
|
' Imposto contesto corrente
|
|
EgtSetCurrentContext(nCtx)
|
|
Dim PartId As Integer = EgtGetFirstPart()
|
|
While PartId <> GDB_ID.NULL
|
|
' 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
|
|
|
|
Private 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)
|
|
If Math.Abs(dSideAngle) > EPS_ANG_SMALL Or bSA2 Then
|
|
' Creo testo con angolo di inclinazione
|
|
Dim sText As String = DoubleToString(dSideAngle, 1) & "°"
|
|
If bSA2 Then sText &= "; " & DoubleToString(dSideAngle2, 1) & "°"
|
|
AddTextToLine(sText, TextLayId, LineId, 15, dBBoxRad, False, True)
|
|
End If
|
|
LineId = EgtGetNext(LineId)
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Friend Sub ReLoadSideAnglePage()
|
|
'SideAngleUC_Unloaded(Me, New RoutedEventArgs)
|
|
SideAngleUC_Loaded(Me, New RoutedEventArgs)
|
|
End Sub
|
|
|
|
End Class
|
|
|
|
Friend Class SideAngleEntity
|
|
|
|
Private Shared m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
|
|
|
|
Private m_nGeomId As Integer
|
|
Private m_sEntityName As String
|
|
Private m_nTextId As Integer
|
|
Private m_dSideAngle As Double
|
|
|
|
Public Property nGeomId As Integer
|
|
Get
|
|
Return m_nGeomId
|
|
End Get
|
|
Set(value As Integer)
|
|
m_nGeomId = value
|
|
End Set
|
|
End Property
|
|
|
|
Public ReadOnly Property sEntityName As String
|
|
Get
|
|
Return m_sEntityName
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property nTextId As Integer
|
|
Get
|
|
Return m_nTextId
|
|
End Get
|
|
End Property
|
|
|
|
Public Property dSideAngle As Double
|
|
Get
|
|
Return m_dSideAngle
|
|
End Get
|
|
Set(value As Double)
|
|
m_dSideAngle = value
|
|
End Set
|
|
End Property
|
|
|
|
Sub New(nId As Integer, sEntityName As String, nTextId As Integer, dSideAngle As Double)
|
|
m_nGeomId = nId
|
|
m_sEntityName = sEntityName
|
|
m_nTextId = nTextId
|
|
m_dSideAngle = dSideAngle
|
|
End Sub
|
|
|
|
Friend Shared Function FindEntity(sEntityName As String) As SideAngleEntity
|
|
Dim EntityList As List(Of SideAngleEntity) = Nothing
|
|
If m_MainWindow.m_ActivePage = MainWindow.Pages.Draw Then
|
|
EntityList = m_MainWindow.m_DrawPageUC.m_SideAngleUC.m_SideAngleEntityList
|
|
ElseIf m_MainWindow.m_ActivePage = MainWindow.Pages.Import Then
|
|
EntityList = m_MainWindow.m_ImportPageUC.m_SideAngleUC.m_SideAngleEntityList
|
|
End If
|
|
|
|
If IsNothing(EntityList) Then
|
|
Return Nothing
|
|
End If
|
|
|
|
For Each Entity In EntityList
|
|
If Entity.m_sEntityName = sEntityName Then
|
|
Return Entity
|
|
End If
|
|
Next
|
|
Return Nothing
|
|
End Function
|
|
|
|
End Class
|
|
|
|
Friend Class DripEntity
|
|
|
|
Private Shared m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
|
|
|
|
Private m_nGeomId As Integer
|
|
Private m_sEntityName As String
|
|
Private m_nTextId As Integer
|
|
Private m_bHaveDrip As Boolean
|
|
|
|
Public Property nGeomId As Integer
|
|
Get
|
|
Return m_nGeomId
|
|
End Get
|
|
Set(value As Integer)
|
|
m_nGeomId = value
|
|
End Set
|
|
End Property
|
|
|
|
Public ReadOnly Property sEntityName As String
|
|
Get
|
|
Return m_sEntityName
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property nTextId As Integer
|
|
Get
|
|
Return m_nTextId
|
|
End Get
|
|
End Property
|
|
|
|
Public Property bHaveDrip As Boolean
|
|
Get
|
|
Return m_bHaveDrip
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_bHaveDrip = value
|
|
End Set
|
|
End Property
|
|
|
|
Sub New(nId As Integer, sEntityName As String, nTextId As Integer, bHaveDrip As Boolean)
|
|
m_nGeomId = nId
|
|
m_sEntityName = sEntityName
|
|
m_nTextId = nTextId
|
|
m_bHaveDrip = bHaveDrip
|
|
End Sub
|
|
|
|
Friend Shared Function FindEntity(sEntityName As String) As DripEntity
|
|
Dim EntityList As List(Of DripEntity) = Nothing
|
|
If m_MainWindow.m_ActivePage = MainWindow.Pages.Draw Then
|
|
EntityList = m_MainWindow.m_DrawPageUC.m_SideAngleUC.m_DripEntityList
|
|
ElseIf m_MainWindow.m_ActivePage = MainWindow.Pages.Import Then
|
|
EntityList = m_MainWindow.m_ImportPageUC.m_SideAngleUC.m_DripEntityList
|
|
End If
|
|
|
|
If IsNothing(EntityList) Then
|
|
Return Nothing
|
|
End If
|
|
|
|
For Each Entity In EntityList
|
|
If Entity.m_sEntityName = sEntityName Then
|
|
Return Entity
|
|
End If
|
|
Next
|
|
Return Nothing
|
|
End Function
|
|
|
|
End Class |