6c01a2f821
- gestione Cplane/Grid - gestione visualizza/nascondi - aggiunta spezza entità sul punto.
1115 lines
38 KiB
VB.net
1115 lines
38 KiB
VB.net
'----------------------------------------------------------------------------
|
|
' EgalTech 2014-2014
|
|
'----------------------------------------------------------------------------
|
|
' File : Controller.vb Data : 04.11.14 Versione : 1.5k1
|
|
' Contenuto : Classe Controller (parte di MCV).
|
|
'
|
|
'
|
|
'
|
|
' Modifiche : 04.11.14 DS Creazione modulo.
|
|
'
|
|
'
|
|
'----------------------------------------------------------------------------
|
|
|
|
Imports Microsoft.VisualBasic
|
|
Imports System.Globalization
|
|
Imports TestEIn.EgtInterface
|
|
|
|
Public Class Controller
|
|
|
|
' Events
|
|
Public Enum IBT As Integer
|
|
TY_NULL = 0
|
|
TY_DOUBLE
|
|
TY_POINT3D
|
|
End Enum
|
|
Public Event SetInputBox(ByVal sTitle As String, ByVal sLabel As String, ByVal nType As IBT)
|
|
Public Event UpdateUI(ByVal sender As Object, ByVal bReloadUI As Boolean)
|
|
|
|
' Documento e vista
|
|
Private m_Scene As Scene
|
|
|
|
' Stato e comandi
|
|
Public Enum CMD As Integer
|
|
NULL = 0
|
|
GRID
|
|
GRID_ELEVATION
|
|
GRID_ORIGIN
|
|
GRID_ROTATE
|
|
GRID_3P
|
|
NEWPART
|
|
NEWLAYER
|
|
SETCURRPARTLAYER
|
|
RESETCURRPARTLAYER
|
|
LAYERCOLOR
|
|
SHOW
|
|
HIDE
|
|
POINT
|
|
LINE2P
|
|
ARCCSE
|
|
ARC3P
|
|
CIRCLECR
|
|
PLANE
|
|
EXTRUDE
|
|
REVOLVE
|
|
DELETE
|
|
CHANGECOLOR
|
|
RESETCOLOR
|
|
INVERTCRVSURF
|
|
BREAKCURVE
|
|
JOINCURVE
|
|
SEPARATECURVE
|
|
MOVE
|
|
COPY
|
|
ROTATE
|
|
ROTATE3D
|
|
MIRROR
|
|
End Enum
|
|
Public Enum GRID_TYPE As Integer
|
|
NONE = 0
|
|
TOP
|
|
FRONT
|
|
RIGHT
|
|
BACK
|
|
LEFT
|
|
BOTTOM
|
|
End Enum
|
|
Private m_nLastCmd As CMD = CMD.NULL
|
|
Private Enum EST As Integer
|
|
NULL = 0
|
|
GRID_ELEVATION_1
|
|
GRID_ORIGIN_1
|
|
GRID_ROTATE_1
|
|
GRID_ROTATE_2
|
|
GRID_ROTATE_3
|
|
GRID_3P_1
|
|
GRID_3P_2
|
|
GRID_3P_3
|
|
POINT_1
|
|
LINE2P_1
|
|
LINE2P_2
|
|
CIRCLECR_1
|
|
CIRCLECR_2
|
|
ARCCSE_1
|
|
ARCCSE_2
|
|
ARCCSE_3
|
|
ARC3P_1
|
|
ARC3P_2
|
|
ARC3P_3
|
|
EXTRUDE_1
|
|
REVOLVE_1
|
|
REVOLVE_2
|
|
BREAKCURVE_1
|
|
MOVE_1
|
|
MOVE_2
|
|
COPY_1
|
|
COPY_2
|
|
ROTATE_1
|
|
ROTATE_2
|
|
ROTATE_3
|
|
ROTATE3D_1
|
|
ROTATE3D_2
|
|
ROTATE3D_3
|
|
MIRROR_1
|
|
MIRROR_2
|
|
End Enum
|
|
Private m_nStatus As EST = EST.NULL
|
|
Private m_ptP1 As Point3d
|
|
Private m_ptP2 As Point3d
|
|
Private m_ptLast As Point3d
|
|
Private m_dLast As Double = 0
|
|
Private m_nLast1 As Integer = 0
|
|
Private m_nLast2 As Integer = 0
|
|
|
|
' Metodi
|
|
Public Sub SetScene(ByRef scene As Scene)
|
|
m_Scene = scene
|
|
End Sub
|
|
|
|
Public Sub SetLastPoint3d(ByRef ptP As Point3d)
|
|
m_ptLast = ptP
|
|
End Sub
|
|
|
|
Public Sub SetLastDouble(ByVal dVal As Double)
|
|
m_dLast = dVal
|
|
End Sub
|
|
|
|
Public Sub SetLastIntegers(ByVal nVal1 As Integer, ByVal nVal2 As Integer)
|
|
m_nLast1 = nVal1
|
|
m_nLast2 = nVal2
|
|
End Sub
|
|
|
|
Private Function GetDoubleFromString(ByRef sText As String, ByRef dVal As Double) As Boolean
|
|
Return Double.TryParse(sText, NumberStyles.Float, CultureInfo.InvariantCulture, dVal)
|
|
End Function
|
|
|
|
Private Function GetPoint3dFromString(ByRef sText As String, ByRef PtVal As Point3d) As Boolean
|
|
Dim sItems() As String = sText.Split(",".ToCharArray)
|
|
Dim bOk As Boolean = False
|
|
PtVal = Point3d.ORIG
|
|
If sItems.Count() >= 1 Then
|
|
bOk = Double.TryParse(sItems(0), NumberStyles.Float, CultureInfo.InvariantCulture, PtVal.x)
|
|
If sItems.Count() >= 2 Then
|
|
bOk = Double.TryParse(sItems(1), NumberStyles.Float, CultureInfo.InvariantCulture, PtVal.y) And bOk
|
|
If sItems.Count() >= 3 Then
|
|
bOk = Double.TryParse(sItems(2), NumberStyles.Float, CultureInfo.InvariantCulture, PtVal.z) And bOk
|
|
End If
|
|
End If
|
|
End If
|
|
Return bOk
|
|
End Function
|
|
|
|
Public Sub ResetStatus()
|
|
m_nStatus = EST.NULL
|
|
m_Scene.ResetStatus()
|
|
End Sub
|
|
|
|
Public Function RepeatLastCommand() As Boolean
|
|
Return ExecuteCommand(m_nLastCmd)
|
|
End Function
|
|
|
|
Public Function ExecuteCommand(ByVal nCmd As CMD) As Boolean
|
|
' posso partire solo con stato libero
|
|
If m_nStatus <> EST.NULL Then
|
|
Return False
|
|
End If
|
|
' eseguo il comando
|
|
Select Case nCmd
|
|
Case CMD.GRID
|
|
Dim frNew As New Frame3d
|
|
Select Case m_nLast1
|
|
Case GRID_TYPE.TOP
|
|
frNew.Setup(Point3d.ORIG, Vector3d.X_AX, Vector3d.Y_AX, Vector3d.Z_AX)
|
|
Case GRID_TYPE.FRONT
|
|
frNew.Setup(Point3d.ORIG, Vector3d.X_AX, Vector3d.Z_AX, -Vector3d.Y_AX)
|
|
Case GRID_TYPE.RIGHT
|
|
frNew.Setup(Point3d.ORIG, Vector3d.Y_AX, Vector3d.Z_AX, Vector3d.X_AX)
|
|
Case GRID_TYPE.BACK
|
|
frNew.Setup(Point3d.ORIG, -Vector3d.X_AX, Vector3d.Z_AX, Vector3d.Y_AX)
|
|
Case GRID_TYPE.LEFT
|
|
frNew.Setup(Point3d.ORIG, -Vector3d.Y_AX, Vector3d.Z_AX, -Vector3d.X_AX)
|
|
Case GRID_TYPE.BOTTOM
|
|
frNew.Setup(Point3d.ORIG, -Vector3d.X_AX, Vector3d.Y_AX, -Vector3d.Z_AX)
|
|
Case Else
|
|
Return False
|
|
End Select
|
|
EgtSetGridFrame(frNew)
|
|
EgtDraw()
|
|
Case CMD.GRID_ELEVATION
|
|
' non serve il gruppo di drag
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per elevazione griglia
|
|
m_nStatus = EST.GRID_ELEVATION_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("GRID", "Insert Elevation", IBT.TY_DOUBLE)
|
|
Case CMD.GRID_ORIGIN
|
|
' non serve il gruppo di drag
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per origine griglia
|
|
m_nStatus = EST.GRID_ORIGIN_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("GRID", "Insert Origin", IBT.TY_POINT3D)
|
|
Case CMD.GRID_ROTATE
|
|
' non serve il gruppo di drag
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per rotazione griglia
|
|
m_nStatus = EST.GRID_ROTATE_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("GRID ROTATE", "Insert First Point on Axis", IBT.TY_POINT3D)
|
|
Case CMD.GRID_3P
|
|
' non serve il gruppo di drag
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per rotazione griglia
|
|
m_nStatus = EST.GRID_3P_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("GRID 3 POINTS", "Insert Origin", IBT.TY_POINT3D)
|
|
Case CMD.NEWPART
|
|
' inserisco un nuovo gruppo (piece) sotto la radice
|
|
Dim nIdNewPart As Integer = EgtCreateGroup(GDB_ID.ROOT)
|
|
' inserisco un nuovo gruppo (layer) sotto quello appena creato
|
|
Dim nIdNewLayer As Integer = EgtCreateGroup(nIdNewPart)
|
|
' se ok, salvo nuova situazione
|
|
If nIdNewPart <> GDB_ID.NULL And nIdNewLayer <> GDB_ID.NULL Then
|
|
m_nCurrPart = nIdNewPart
|
|
m_nCurrLayer = nIdNewLayer
|
|
SetModified()
|
|
End If
|
|
Case CMD.NEWLAYER
|
|
' inserisco un nuovo gruppo (layer) sotto il pezzo corrente
|
|
Dim nIdNewLayer As Integer = EgtCreateGroup(m_nCurrPart)
|
|
' se ok, salvo nuova situazione
|
|
If nIdNewLayer <> GDB_ID.NULL Then
|
|
m_nCurrLayer = nIdNewLayer
|
|
SetModified()
|
|
End If
|
|
Case CMD.SETCURRPARTLAYER
|
|
SetCurrPartLayer(m_nLast1, m_nLast2)
|
|
Case CMD.RESETCURRPARTLAYER
|
|
ResetCurrPartLayer()
|
|
Case CMD.LAYERCOLOR
|
|
Dim nCurrId As Integer
|
|
If m_nCurrPart <> GDB_ID.NULL Then
|
|
nCurrId = m_nCurrPart
|
|
If m_nCurrLayer <> GDB_ID.NULL Then
|
|
nCurrId = m_nCurrLayer
|
|
End If
|
|
Else
|
|
Return False
|
|
End If
|
|
Dim ColDlg As New ColorDialog
|
|
ColDlg.AnyColor = True
|
|
Dim colObj As Color3d
|
|
EgtGetCalcColor(nCurrId, colObj)
|
|
ColDlg.Color = colObj.ToColor()
|
|
ColDlg.FullOpen = True
|
|
If ColDlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
|
|
colObj.FromColor(ColDlg.Color)
|
|
EgtSetColor(nCurrId, colObj)
|
|
SetModified()
|
|
EgtDraw()
|
|
End If
|
|
Case CMD.SHOW
|
|
If m_nLast1 <> GDB_ID.NULL Then
|
|
Dim nStat As GDB_ST = GDB_ST.ON_
|
|
EgtGetStatus(m_nLast1, nStat)
|
|
If nStat = GDB_ST.OFF Then
|
|
EgtSetStatus(m_nLast1, GDB_ST.ON_)
|
|
SetModified(False)
|
|
EgtDraw()
|
|
End If
|
|
End If
|
|
Case CMD.HIDE
|
|
If m_nLast1 <> GDB_ID.NULL Then
|
|
Dim nStat As GDB_ST = GDB_ST.ON_
|
|
EgtGetStatus(m_nLast1, nStat)
|
|
If nStat <> GDB_ST.OFF Then
|
|
EgtSetStatus(m_nLast1, GDB_ST.OFF)
|
|
SetModified(False)
|
|
EgtDraw()
|
|
End If
|
|
End If
|
|
Case CMD.POINT
|
|
' posso partire solo se esiste un gruppo corrente
|
|
If GetCurrLayer() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' non serve il gruppo di drag
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per point
|
|
m_nStatus = EST.POINT_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("POINT", "Insert Point ", IBT.TY_POINT3D)
|
|
Case CMD.LINE2P
|
|
' posso partire solo se esiste un gruppo corrente
|
|
If GetCurrLayer() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' creo il gruppo di drag
|
|
If Not m_Scene.CreateDragGroup() Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per Line2P
|
|
m_nStatus = EST.LINE2P_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("LINE", "Insert Start Point ", IBT.TY_POINT3D)
|
|
Case CMD.CIRCLECR
|
|
' posso partire solo se esiste un gruppo corrente
|
|
If GetCurrLayer() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' creo il gruppo di drag
|
|
If Not m_Scene.CreateDragGroup() Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per CircleCR
|
|
m_nStatus = EST.CIRCLECR_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("CIRCLE", "Insert Center", IBT.TY_POINT3D)
|
|
Case CMD.ARCCSE
|
|
' posso partire solo se esiste un gruppo corrente
|
|
If GetCurrLayer() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' creo il gruppo di drag
|
|
If Not m_Scene.CreateDragGroup() Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per ArcCSE
|
|
m_nStatus = EST.ARCCSE_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("ARC", "Insert Center", IBT.TY_POINT3D)
|
|
Case CMD.ARC3P
|
|
' posso partire solo se esiste un gruppo corrente
|
|
If GetCurrLayer() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' creo il gruppo di drag
|
|
If Not m_Scene.CreateDragGroup() Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per Arc3P
|
|
m_nStatus = EST.ARC3P_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("ARC", "Insert Start Point", IBT.TY_POINT3D)
|
|
Case CMD.PLANE
|
|
' posso partire solo se esiste un gruppo corrente
|
|
If GetCurrLayer() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' creo la superficie piana (a partire da un contorno selezionato)
|
|
EgtCreateSurfTriMeshByContour(GetCurrLayer(), EgtGetFirstSelectedObj(), EPS_STM)
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' reset stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
Case CMD.EXTRUDE
|
|
' posso partire solo se esiste un gruppo corrente
|
|
If GetCurrLayer() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' creo il gruppo di drag
|
|
If Not m_Scene.CreateDragGroup() Then
|
|
Return False
|
|
End If
|
|
' imposto stato a lunghezza di estrusione
|
|
m_nStatus = EST.EXTRUDE_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("EXTRUSION", "Insert length", IBT.TY_DOUBLE)
|
|
Case CMD.REVOLVE
|
|
' posso partire solo se esiste un gruppo corrente
|
|
If GetCurrLayer() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per Revolve
|
|
m_nStatus = EST.REVOLVE_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("REVOLVE", "Insert First Point on Axis", IBT.TY_POINT3D)
|
|
Case CMD.DELETE
|
|
If m_nLast1 <> GDB_ID.NULL Then
|
|
EgtErase(m_nLast1)
|
|
If m_nLast1 = m_nCurrPart Then
|
|
ResetCurrPartLayer()
|
|
ElseIf m_nLast1 = m_nCurrLayer Then
|
|
SetCurrPartLayer(m_nCurrPart, EgtGetFirstGroupInGroup(m_nCurrPart))
|
|
End If
|
|
' reset
|
|
m_Scene.ResetStatus()
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
End If
|
|
Case CMD.CHANGECOLOR
|
|
' verifico ci sia qualcosa di selezionato
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
If nId = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' lancio dialogo scelta colore
|
|
Dim ColDlg As New ColorDialog()
|
|
ColDlg.AnyColor = True
|
|
Dim colObj As Color3d
|
|
EgtGetCalcColor(nId, colObj)
|
|
ColDlg.Color = colObj.ToColor()
|
|
ColDlg.FullOpen = True
|
|
If ColDlg.ShowDialog() <> Windows.Forms.DialogResult.OK Then
|
|
Return False
|
|
End If
|
|
' assegno nuovo colore
|
|
colObj.FromColor(ColDlg.Color)
|
|
EgtSetColor(GDB_ID.SEL, colObj)
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' reset stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
Case CMD.RESETCOLOR
|
|
' verifico ci sia qualcosa di selezionato
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
If nId = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' reset colore
|
|
EgtResetColor(GDB_ID.SEL)
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' reset stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
Case CMD.INVERTCRVSURF
|
|
' lancio l'inversione delle curve/superfici
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
While nId <> GDB_ID.NULL
|
|
Select Case EgtGetType(nId)
|
|
Case GDB_TY.CRV_LINE, GDB_TY.CRV_ARC, GDB_TY.CRV_BEZ, GDB_TY.CRV_COMPO
|
|
EgtInvertCurve(nId)
|
|
Case GDB_TY.SRF_MESH
|
|
EgtInvertSurface(nId)
|
|
End Select
|
|
nId = EgtGetNextSelectedObj()
|
|
End While
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' reset stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
Case CMD.BREAKCURVE
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a punto per BreakCurve
|
|
m_nStatus = EST.BREAKCURVE_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("BREAK", "Insert Point on Curve", IBT.TY_POINT3D)
|
|
Case CMD.JOINCURVE
|
|
' posso partire solo se esiste un gruppo corrente
|
|
If GetCurrLayer() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' creo vettore di entità selezionate
|
|
Dim nCrvNum As Integer = 0
|
|
Dim nCrvIds(EgtGetSelectedObjNbr() - 1) As Integer
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
While nId <> GDB_ID.NULL
|
|
nCrvIds(nCrvNum) = nId
|
|
nCrvNum = nCrvNum + 1
|
|
nId = EgtGetNextSelectedObj()
|
|
End While
|
|
' creo la curva composita (concatenando le curve selezionate)
|
|
EgtCreateCurveCompoByChain(GetCurrLayer(), nCrvNum, nCrvIds, New Point3d, True)
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' reset stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
Case CMD.SEPARATECURVE
|
|
' divido la curva composita nelle curve componenti
|
|
EgtSeparateCurveCompo(EgtGetFirstSelectedObj())
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' reset stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
Case CMD.MOVE
|
|
' verifico condizioni e preparo per il drag
|
|
If Not PrepareTransform() Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per Move
|
|
m_nStatus = EST.MOVE_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("MOVE", "Insert Base Point", IBT.TY_POINT3D)
|
|
Case CMD.COPY
|
|
' verifico condizioni e preparo per il drag
|
|
If Not PrepareTransform() Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per Move
|
|
m_nStatus = EST.COPY_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("COPY", "Insert Base Point", IBT.TY_POINT3D)
|
|
Case CMD.ROTATE
|
|
' verifico condizioni e preparo per il drag
|
|
If Not PrepareTransform() Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per Rotate
|
|
m_nStatus = EST.ROTATE_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("ROTATE", "Insert Center", IBT.TY_POINT3D)
|
|
Case CMD.ROTATE3D
|
|
' verifico condizioni e preparo per il drag
|
|
If Not PrepareTransform() Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per Rotate3d
|
|
m_nStatus = EST.ROTATE3D_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("ROTATE3D", "Insert First Point on Axis", IBT.TY_POINT3D)
|
|
Case CMD.MIRROR
|
|
' verifico condizioni e preparo per il drag
|
|
If Not PrepareTransform() Then
|
|
Return False
|
|
End If
|
|
m_Scene.SetStatusSelPoint()
|
|
' imposto stato a primo punto per Mirror
|
|
m_nStatus = EST.MIRROR_1
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("MIRROR", "Insert Start Point", IBT.TY_POINT3D)
|
|
Case Else
|
|
m_nLastCmd = CMD.NULL
|
|
Return False
|
|
End Select
|
|
' salvo l'ultimo comando
|
|
m_nLastCmd = nCmd
|
|
Return True
|
|
End Function
|
|
|
|
Private Function PrepareTransform() As Boolean
|
|
' posso partire solo da stato libero
|
|
If m_nStatus <> EST.NULL Then
|
|
Return False
|
|
End If
|
|
' verifico ci sia qualcosa di selezionato
|
|
If EgtGetFirstSelectedObj() = GDB_ID.NULL Then
|
|
Return False
|
|
End If
|
|
' creo il gruppo di drag e vi copio le entità selezionate
|
|
If Not m_Scene.CreateDragGroup() Then
|
|
Return False
|
|
End If
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
While nId <> GDB_ID.NULL
|
|
If Not m_Scene.AddToDragGroup(nId) Then
|
|
m_Scene.EraseDragGroup()
|
|
Return False
|
|
End If
|
|
nId = EgtGetNextSelectedObj()
|
|
End While
|
|
Return True
|
|
End Function
|
|
|
|
Public Function GoToNextStatus() As Boolean
|
|
Select Case m_nStatus
|
|
' Grid origin
|
|
Case EST.GRID_ELEVATION_1
|
|
' recupero il piano di griglia corrente
|
|
Dim frCurr As New Frame3d
|
|
EgtGetGridFrame(frCurr)
|
|
' cambio l'elevazione dell'origine
|
|
frCurr.Move(EgtGetGridVersZ() * m_dLast)
|
|
' imposto nuova griglia
|
|
EgtSetGridFrame(frCurr)
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
RaiseEvent UpdateUI(Me, False)
|
|
Case EST.GRID_ORIGIN_1
|
|
' recupero il piano di griglia corrente
|
|
Dim frCurr As New Frame3d
|
|
EgtGetGridFrame(frCurr)
|
|
' ne modifico l'origine
|
|
frCurr.Move(m_ptLast - frCurr.Orig())
|
|
' imposto nuova griglia
|
|
EgtSetGridFrame(frCurr)
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
RaiseEvent UpdateUI(Me, False)
|
|
Case EST.GRID_ROTATE_1
|
|
m_ptP1 = m_ptLast
|
|
m_ptP2 = m_ptP1
|
|
m_nStatus = EST.GRID_ROTATE_2
|
|
RaiseEvent SetInputBox("GRID ROTATE", "Insert Second Point on Axis", IBT.TY_POINT3D)
|
|
Case EST.GRID_ROTATE_2
|
|
m_ptP2 = m_ptLast
|
|
m_nStatus = EST.GRID_ROTATE_3
|
|
RaiseEvent SetInputBox("GRID ROTATE", "Insert angle", IBT.TY_DOUBLE)
|
|
Case EST.GRID_ROTATE_3
|
|
' eseguo rotazione
|
|
Dim VtAx As Vector3d = m_ptP2 - m_ptP1
|
|
Dim frCurr As New Frame3d
|
|
EgtGetGridFrame(frCurr)
|
|
frCurr.Rotate(m_ptP1, VtAx, m_dLast)
|
|
EgtSetGridFrame(frCurr)
|
|
' reset
|
|
m_Scene.ResetStatus()
|
|
m_nStatus = EST.NULL
|
|
RaiseEvent UpdateUI(Me, False)
|
|
Case EST.GRID_3P_1
|
|
m_ptP1 = m_ptLast
|
|
m_ptP2 = m_ptP1
|
|
m_nStatus = EST.GRID_3P_2
|
|
RaiseEvent SetInputBox("GRID 3 POINTS", "Insert Point on X Axis", IBT.TY_POINT3D)
|
|
Case EST.GRID_3P_2
|
|
m_ptP2 = m_ptLast
|
|
m_nStatus = EST.GRID_3P_3
|
|
RaiseEvent SetInputBox("GRID 3 POINTS", "Insert Point Near Y Axis", IBT.TY_POINT3D)
|
|
Case EST.GRID_3P_3
|
|
' calcolo griglia per 3 punti
|
|
Dim frCurr As New Frame3d
|
|
If Not frCurr.Setup(m_ptP1, m_ptP2, m_ptLast) Then
|
|
m_Scene.ResetStatus()
|
|
m_nStatus = EST.NULL
|
|
Return False
|
|
End If
|
|
EgtSetGridFrame(frCurr)
|
|
' reset
|
|
m_Scene.ResetStatus()
|
|
m_nStatus = EST.NULL
|
|
RaiseEvent UpdateUI(Me, False)
|
|
' Point
|
|
Case EST.POINT_1
|
|
' creo il punto (i dati sono in globale)
|
|
EgtCreateGeoPoint(GetCurrLayer(), m_ptLast.Loc(GetCurrLayer()))
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Line2P
|
|
Case EST.LINE2P_1
|
|
m_ptP1 = m_ptLast
|
|
m_nStatus = EST.LINE2P_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("LINE", "Insert End Point ", IBT.TY_POINT3D)
|
|
Case EST.LINE2P_2
|
|
' reset scena
|
|
m_Scene.ResetStatus(False)
|
|
' creo la linea (i punti sono in globale)
|
|
EgtCreateCurveLine(GetCurrLayer(), m_ptP1.Loc(GetCurrLayer()), m_ptLast.Loc(GetCurrLayer()))
|
|
EgtDraw()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' CircleCR
|
|
Case EST.CIRCLECR_1
|
|
m_ptP1 = m_ptLast
|
|
m_nStatus = EST.CIRCLECR_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("CIRCLE", "Insert Point", IBT.TY_POINT3D)
|
|
Case EST.CIRCLECR_2
|
|
' reset scena
|
|
m_Scene.ResetStatus(False)
|
|
' creo la circonferenza (i punti sono in globale)
|
|
EgtCreateCurveCircleCPN(GetCurrLayer(), m_ptP1.Loc(GetCurrLayer()), m_ptLast.Loc(GetCurrLayer()), EgtGetGridVersZ())
|
|
EgtDraw()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' ArcCSE
|
|
Case EST.ARCCSE_1
|
|
m_ptP1 = m_ptLast
|
|
m_nStatus = EST.ARCCSE_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("ARC", "Insert Start Point", IBT.TY_POINT3D)
|
|
Case EST.ARCCSE_2
|
|
m_ptP2 = m_ptLast
|
|
m_nStatus = EST.ARCCSE_3
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("ARC", "Insert Point Near End", IBT.TY_POINT3D)
|
|
Case EST.ARCCSE_3
|
|
' reset scena
|
|
m_Scene.ResetStatus(False)
|
|
' creo l'arco (i punti sono in globale)
|
|
EgtCreateCurveArcC2PN(GetCurrLayer(), m_ptP1.Loc(GetCurrLayer()), m_ptP2.Loc(GetCurrLayer()), m_ptLast.Loc(GetCurrLayer()), EgtGetGridVersZ())
|
|
EgtDraw()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Arc3P
|
|
Case EST.ARC3P_1
|
|
m_ptP1 = m_ptLast
|
|
m_nStatus = EST.ARC3P_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("ARC", "Insert End Point", IBT.TY_POINT3D)
|
|
Case EST.ARC3P_2
|
|
m_ptP2 = m_ptLast
|
|
m_nStatus = EST.ARC3P_3
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("ARC", "Insert Mid Point", IBT.TY_POINT3D)
|
|
Case EST.ARC3P_3
|
|
' reset scena
|
|
m_Scene.ResetStatus(False)
|
|
' creo l'arco (i punti sono in globale)
|
|
EgtCreateCurveArc3P(GetCurrLayer(), m_ptP1.Loc(GetCurrLayer()), m_ptLast.Loc(GetCurrLayer()), m_ptP2.Loc(GetCurrLayer()))
|
|
EgtDraw()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Extrude
|
|
Case EST.EXTRUDE_1
|
|
' reset scena
|
|
m_Scene.ResetStatus(False)
|
|
' creo la superficie di estrusione (a partire da un contorno selezionato)
|
|
Dim VtExtr As Vector3d = EgtGetGridVersZ().Loc(GetCurrLayer()) * m_dLast
|
|
EgtCreateSurfTriMeshByExtrusion(GetCurrLayer(), EgtGetFirstSelectedObj(), VtExtr, EPS_STM)
|
|
EgtDeselectAll()
|
|
EgtDraw()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Revolve
|
|
Case EST.REVOLVE_1
|
|
m_ptP1 = m_ptLast
|
|
m_nStatus = EST.REVOLVE_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("REVOLVE", "Insert Second Point on Axis", IBT.TY_POINT3D)
|
|
Case EST.REVOLVE_2
|
|
' reset scena
|
|
m_Scene.ResetStatus(False)
|
|
' creo la superficie di rivoluzione (i punti sono in globale)
|
|
Dim vtAx As Vector3d = m_ptLast - m_ptP1
|
|
EgtCreateSurfTriMeshByScrewing(GetCurrLayer(), EgtGetFirstSelectedObj(),
|
|
m_ptP1.Loc(GetCurrLayer()), vtAx.Loc(GetCurrLayer()),
|
|
360, 0, EPS_STM)
|
|
EgtDeselectAll()
|
|
EgtDraw()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Break Curve
|
|
Case EST.BREAKCURVE_1
|
|
' eseguo spezzatura
|
|
EgtSplitCurveAtPoint(EgtGetFirstSelectedObj(), m_ptLast)
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Move
|
|
Case EST.MOVE_1
|
|
m_ptP1 = m_ptLast
|
|
m_nStatus = EST.MOVE_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("MOVE", "Insert Target Point", IBT.TY_POINT3D)
|
|
Case EST.MOVE_2
|
|
' eseguo movimento
|
|
EgtMoveGlob(GDB_ID.SEL, (m_ptLast - m_ptP1))
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Copy
|
|
Case EST.COPY_1
|
|
m_ptP1 = m_ptLast
|
|
m_nStatus = EST.COPY_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("COPY", "Insert Target Point", IBT.TY_POINT3D)
|
|
Case EST.COPY_2
|
|
' reset scena
|
|
m_Scene.ResetStatus(False)
|
|
' eseguo copia e movimento
|
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
|
While nId <> GDB_ID.NULL
|
|
Dim nCopyId As Integer = EgtCopyGlob(nId, GetCurrLayer())
|
|
EgtMoveGlob(nCopyId, (m_ptLast - m_ptP1))
|
|
nId = EgtGetNextSelectedObj()
|
|
End While
|
|
EgtDeselectAll()
|
|
EgtDraw()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Rotate
|
|
Case EST.ROTATE_1
|
|
m_ptP1 = m_ptLast
|
|
m_nStatus = EST.ROTATE_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("ROTATE", "Insert Base Point", IBT.TY_POINT3D)
|
|
Case EST.ROTATE_2
|
|
m_ptP2 = m_ptLast
|
|
m_nStatus = EST.ROTATE_3
|
|
m_Scene.EnableDrag()
|
|
EgtSetGeoLine(m_ptP1, m_ptLast)
|
|
RaiseEvent SetInputBox("ROTATE", "Insert Rotation Point", IBT.TY_POINT3D)
|
|
Case EST.ROTATE_3
|
|
' eseguo rotazione
|
|
Dim dAngRotDeg As Double = 0
|
|
Dim bDet As Boolean = True
|
|
EgtGetVectorRotation((m_ptP2 - m_ptP1), (m_ptLast - m_ptP1), EgtGetGridVersZ(), dAngRotDeg, bDet)
|
|
EgtRotateGlob(GDB_ID.SEL, m_ptP1, EgtGetGridVersZ(), dAngRotDeg)
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Rotate3d
|
|
Case EST.ROTATE3D_1
|
|
m_ptP1 = m_ptLast
|
|
m_ptP2 = m_ptP1
|
|
m_nStatus = EST.ROTATE3D_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("ROTATE3D", "Insert Second Point on Axis", IBT.TY_POINT3D)
|
|
Case EST.ROTATE3D_2
|
|
m_ptP2 = m_ptLast
|
|
m_nStatus = EST.ROTATE3D_3
|
|
m_dLast = 0
|
|
' abilito dialogo
|
|
RaiseEvent SetInputBox("ROTATE3D", "Insert angle", IBT.TY_DOUBLE)
|
|
Case EST.ROTATE3D_3
|
|
' eseguo rotazione
|
|
Dim VtAx As Vector3d = m_ptP2 - m_ptP1
|
|
EgtRotateGlob(GDB_ID.SEL, m_ptP1, VtAx, m_dLast)
|
|
EgtDeselectAll()
|
|
' reset
|
|
m_Scene.ResetStatus()
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
' Mirror
|
|
Case EST.MIRROR_1
|
|
m_ptP1 = m_ptLast
|
|
m_ptP2 = m_ptP1
|
|
m_nStatus = EST.MIRROR_2
|
|
m_Scene.EnableDrag()
|
|
RaiseEvent SetInputBox("MIRROR", "Insert End Point", IBT.TY_POINT3D)
|
|
Case EST.MIRROR_2
|
|
' eseguo mirror
|
|
Dim VtNorm As Vector3d = (m_ptLast - m_ptP1) ^ EgtGetGridVersZ()
|
|
If VtNorm.Len > EPS_SMALL Then
|
|
EgtMirrorGlob(GDB_ID.SEL, m_ptP1, VtNorm)
|
|
End If
|
|
EgtDeselectAll()
|
|
' reset stato scena
|
|
m_Scene.ResetStatus()
|
|
' aggiorno stato
|
|
m_nStatus = EST.NULL
|
|
SetModified()
|
|
Case Else
|
|
Return False
|
|
End Select
|
|
Return True
|
|
End Function
|
|
|
|
Public Function ExecuteDrag() As Boolean
|
|
Select Case m_nStatus
|
|
Case EST.GRID_ROTATE_2, EST.GRID_ROTATE_3
|
|
EgtSetGeoLine(m_ptP1, m_ptP2)
|
|
EgtDraw()
|
|
Case EST.LINE2P_2
|
|
' durante la creazione di oggetti il gruppo di Drag ha riferimento globale
|
|
Dim nId As Integer = EgtGetFirstInGroup(m_Scene.GetDragGroup())
|
|
If nId = GDB_ID.NULL Then
|
|
EgtCreateCurveLine(m_Scene.GetDragGroup(), m_ptP1, m_ptLast)
|
|
Else
|
|
EgtModifyCurveEndPoint(nId, m_ptLast)
|
|
End If
|
|
EgtDraw()
|
|
Case EST.CIRCLECR_2
|
|
' durante la creazione di oggetti il gruppo di Drag ha riferimento globale
|
|
' durante la creazione di oggetti il gruppo di Drag ha riferimento globale
|
|
Dim nId As Integer = EgtGetFirstInGroup(m_Scene.GetDragGroup())
|
|
If nId = GDB_ID.NULL Then
|
|
EgtCreateCurveCircleCPN(m_Scene.GetDragGroup(), m_ptP1, m_ptLast, EgtGetGridVersZ())
|
|
Else
|
|
EgtModifyCurveCircleCPN(nId, m_ptLast)
|
|
End If
|
|
EgtDraw()
|
|
Case EST.ARCCSE_2, EST.ARC3P_2
|
|
' durante la creazione di oggetti il gruppo di Drag ha riferimento globale
|
|
Dim nId As Integer = EgtGetFirstInGroup(m_Scene.GetDragGroup())
|
|
If nId = GDB_ID.NULL Then
|
|
EgtCreateCurveLine(m_Scene.GetDragGroup(), m_ptP1, m_ptLast)
|
|
Else
|
|
EgtModifyCurveEndPoint(nId, m_ptLast)
|
|
End If
|
|
EgtDraw()
|
|
Case EST.ARCCSE_3
|
|
' durante la creazione di oggetti il gruppo di Drag ha riferimento globale
|
|
Dim nId As Integer = EgtGetFirstInGroup(m_Scene.GetDragGroup())
|
|
If EgtGetType(nId) <> GDB_TY.CRV_ARC Then
|
|
EgtErase(nId)
|
|
nId = GDB_ID.NULL
|
|
End If
|
|
If nId = GDB_ID.NULL Then
|
|
EgtCreateCurveArcC2PN(m_Scene.GetDragGroup(), m_ptP1, m_ptP2, m_ptLast, EgtGetGridVersZ())
|
|
Else
|
|
EgtModifyCurveArcC2PN(nId, m_ptLast)
|
|
End If
|
|
EgtDraw()
|
|
Case EST.ARC3P_3
|
|
' durante la creazione di oggetti il gruppo di Drag ha riferimento globale
|
|
Dim nId As Integer = EgtGetFirstInGroup(m_Scene.GetDragGroup())
|
|
If EgtGetType(nId) <> GDB_TY.CRV_ARC Then
|
|
EgtErase(nId)
|
|
nId = GDB_ID.NULL
|
|
End If
|
|
If nId = GDB_ID.NULL Then
|
|
EgtCreateCurveArc3P(m_Scene.GetDragGroup(), m_ptP1, m_ptLast, m_ptP2)
|
|
Else
|
|
EgtModifyCurveArc3P(nId, m_ptLast)
|
|
End If
|
|
EgtDraw()
|
|
Case EST.EXTRUDE_1
|
|
' cancello eventuale vecchia superficie di estrusione
|
|
EgtErase(EgtGetFirstInGroup(m_Scene.GetDragGroup()))
|
|
' creo la superficie di estrusione (a partire da un contorno selezionato)
|
|
Dim VtExtr As New Vector3d(0, 0, m_dLast)
|
|
EgtCreateSurfTriMeshByExtrusion(m_Scene.GetDragGroup(), EgtGetFirstSelectedObj(), VtExtr, EPS_STM)
|
|
EgtDraw()
|
|
Case EST.REVOLVE_2
|
|
EgtSetGeoLine(m_ptP1, m_ptLast)
|
|
EgtDraw()
|
|
Case EST.MOVE_2
|
|
' ripristino lo stato iniziale
|
|
EgtChangeGroupFrame(m_Scene.GetDragGroup(), Frame3d.GLOB)
|
|
' eseguo tutto il movimento
|
|
EgtMoveGlob(m_Scene.GetDragGroup(), (m_ptLast - m_ptP1))
|
|
EgtSetGeoLine(m_ptP1, m_ptLast)
|
|
EgtDraw()
|
|
Case EST.COPY_2
|
|
' ripristino lo stato iniziale
|
|
EgtChangeGroupFrame(m_Scene.GetDragGroup(), Frame3d.GLOB)
|
|
' eseguo tutto il movimento
|
|
EgtMoveGlob(m_Scene.GetDragGroup(), (m_ptLast - m_ptP1))
|
|
EgtSetGeoLine(m_ptP1, m_ptLast)
|
|
EgtDraw()
|
|
Case EST.ROTATE_2
|
|
EgtSetGeoLine(m_ptP1, m_ptLast)
|
|
EgtDraw()
|
|
Case EST.ROTATE_3
|
|
EgtSetGeoLine(m_ptP1, m_ptLast)
|
|
' ripristino lo stato iniziale
|
|
EgtChangeGroupFrame(m_Scene.GetDragGroup(), Frame3d.GLOB)
|
|
' eseguo rotazione
|
|
Dim dAngRotDeg As Double = 0
|
|
Dim bDet As Boolean = True
|
|
EgtGetVectorRotation((m_ptP2 - m_ptP1), (m_ptLast - m_ptP1), EgtGetGridVersZ(), dAngRotDeg, bDet)
|
|
EgtRotateGlob(m_Scene.GetDragGroup(), m_ptP1, EgtGetGridVersZ(), dAngRotDeg)
|
|
EgtDraw()
|
|
Case EST.ROTATE3D_2
|
|
EgtSetGeoLine(m_ptP1, m_ptLast)
|
|
EgtDraw()
|
|
Case EST.ROTATE3D_3
|
|
EgtSetGeoLine(m_ptP1, m_ptP2)
|
|
' ripristino lo stato iniziale
|
|
EgtChangeGroupFrame(m_Scene.GetDragGroup(), Frame3d.GLOB)
|
|
' eseguo rotazione
|
|
Dim VtAx As Vector3d = m_ptP2 - m_ptP1
|
|
EgtRotateGlob(m_Scene.GetDragGroup(), m_ptP1, VtAx, m_dLast)
|
|
EgtDraw()
|
|
Case EST.MIRROR_2
|
|
' ripristino lo stato iniziale, tramite annullo mirror precedente
|
|
Dim VtNorm As Vector3d = (m_ptP2 - m_ptP1) ^ EgtGetGridVersZ()
|
|
If VtNorm.Len > EPS_SMALL Then
|
|
EgtMirrorGlob(m_Scene.GetDragGroup(), m_ptP1, VtNorm)
|
|
End If
|
|
' eseguo mirror
|
|
VtNorm = (m_ptLast - m_ptP1) ^ EgtGetGridVersZ()
|
|
If VtNorm.Len > EPS_SMALL Then
|
|
EgtMirrorGlob(m_Scene.GetDragGroup(), m_ptP1, VtNorm)
|
|
End If
|
|
' salvo il punto
|
|
m_ptP2 = m_ptLast
|
|
EgtDraw()
|
|
Case Else
|
|
Return False
|
|
End Select
|
|
Return True
|
|
End Function
|
|
|
|
|
|
'-------------------------------- Currente Part and Layer ----------------------------------------
|
|
Private m_nCurrPart = GDB_ID.NULL
|
|
Private m_nCurrLayer = GDB_ID.NULL
|
|
|
|
Public Function GetCurrPart() As Integer
|
|
Return m_nCurrPart
|
|
End Function
|
|
|
|
Public Function GetCurrLayer() As Integer
|
|
Return m_nCurrLayer
|
|
End Function
|
|
|
|
Private Function SetCurrPartLayer(ByVal nPart As Integer, ByVal nLayer As Integer) As Boolean
|
|
' reset
|
|
m_nCurrPart = GDB_ID.NULL
|
|
m_nCurrLayer = GDB_ID.NULL
|
|
' verifico esistenza e validità pezzo
|
|
If EgtExistsObj(nPart) And EgtGetParent(nPart) = GDB_ID.ROOT Then
|
|
m_nCurrPart = nPart
|
|
Else
|
|
Return False
|
|
End If
|
|
' verifico esistenza e validità layer
|
|
If EgtExistsObj(nLayer) And EgtGetParent(nLayer) = nPart Then
|
|
m_nCurrLayer = nLayer
|
|
Else
|
|
Return False
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
Private Function ResetCurrPartLayer() As Boolean
|
|
' reset
|
|
m_nCurrPart = GDB_ID.NULL
|
|
m_nCurrLayer = GDB_ID.NULL
|
|
' cerco il primo pezzo
|
|
Dim nIdPart As Integer = EgtGetFirstGroupInGroup(GDB_ID.ROOT)
|
|
If nIdPart <> GDB_ID.NULL Then
|
|
' assegno il pezzo corrente
|
|
m_nCurrPart = nIdPart
|
|
' cerco il primo layer del pezzo
|
|
Dim nIdLayer As Integer = EgtGetFirstGroupInGroup(m_nCurrPart)
|
|
If nIdLayer <> GDB_ID.NULL Then
|
|
' assegno il layer corrente
|
|
m_nCurrLayer = nIdLayer
|
|
End If
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
|
|
'-------------------------------- Modified Status ------------------------------------------------
|
|
Private m_sCurrFile As String = String.Empty
|
|
Private m_bModified As Boolean = False
|
|
|
|
Public Sub SetCurrFile(ByRef sFile As String)
|
|
m_sCurrFile = sFile
|
|
End Sub
|
|
|
|
Public Sub ResetCurrFile()
|
|
m_sCurrFile = String.Empty
|
|
End Sub
|
|
|
|
Public Function GetCurrFile() As String
|
|
Return m_sCurrFile
|
|
End Function
|
|
|
|
Public Sub SetModified(Optional ByVal bReloadUI As Boolean = True)
|
|
m_bModified = True
|
|
RaiseEvent UpdateUI(Me, bReloadUI)
|
|
End Sub
|
|
|
|
Public Sub ResetModified(Optional ByVal bReloadUI As Boolean = True)
|
|
m_bModified = False
|
|
RaiseEvent UpdateUI(Me, bReloadUI)
|
|
End Sub
|
|
|
|
Public Function GetModified() As Boolean
|
|
Return m_bModified
|
|
End Function
|
|
|
|
Public Function ManageModified() As Boolean
|
|
' se non modificato, procedo normalmente
|
|
If Not m_bModified Then
|
|
Return True
|
|
End If
|
|
' chiedo cosa fare
|
|
Dim sMsg As String = "Salvare le modifiche"
|
|
If Not String.IsNullOrEmpty(m_sCurrFile) Then
|
|
sMsg += " a " + m_sCurrFile
|
|
End If
|
|
sMsg += " ?"
|
|
Dim nRes = MessageBox.Show(sMsg, "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
|
|
Select Case nRes
|
|
Case Windows.Forms.DialogResult.Yes
|
|
m_Scene.SaveProject(m_sCurrFile)
|
|
Return True
|
|
Case Windows.Forms.DialogResult.No
|
|
Return True
|
|
Case Else
|
|
Return False
|
|
End Select
|
|
End Function
|
|
|
|
End Class
|