423 lines
13 KiB
VB.net
423 lines
13 KiB
VB.net
Imports EgtUILib.EgtInterface
|
|
|
|
Public Class PartSolidM
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
Private m_PartId As Integer = -1
|
|
Public ReadOnly Property PartId As Integer
|
|
Get
|
|
Return m_PartId
|
|
End Get
|
|
End Property
|
|
|
|
Private m_SurfId As Integer = -1
|
|
Public ReadOnly Property SurfId As Integer
|
|
Get
|
|
Return m_SurfId
|
|
End Get
|
|
End Property
|
|
|
|
Private m_TextureName As String = String.Empty
|
|
Public ReadOnly Property TextureName As String
|
|
Get
|
|
Return m_TextureName
|
|
End Get
|
|
End Property
|
|
|
|
Private m_PartSolidId As Integer = -1
|
|
Public Property PartSolidId As Integer
|
|
Get
|
|
If m_PartSolidId = GDB_ID.NULL Then
|
|
EgtGetInfo(PartId, CHILD, m_PartSolidId)
|
|
End If
|
|
Return m_PartSolidId
|
|
End Get
|
|
Set(value As Integer)
|
|
m_PartSolidId = value
|
|
Dim nSolidL As Integer = EgtGetFirstNameInGroup(m_PartSolidId, SOLID)
|
|
m_SolidId = EgtGetFirstInGroup(nSolidL)
|
|
End Set
|
|
End Property
|
|
|
|
Private m_SolidId As Integer = -1
|
|
Public Property SolidId As Integer
|
|
Get
|
|
If m_SolidId = GDB_ID.NULL Then
|
|
EgtGetInfo(PartId, MYSOLIDSURF, m_SolidId)
|
|
End If
|
|
Return m_SolidId
|
|
End Get
|
|
Set(value As Integer)
|
|
m_SolidId = value
|
|
m_PartSolidId = EgtGetParent(EgtGetParent(m_SolidId))
|
|
End Set
|
|
End Property
|
|
|
|
Private m_bbSolid As New BBox3d
|
|
Public Property bbSolid As BBox3d
|
|
Get
|
|
EgtGetBBoxGlob(m_SolidId, 0, m_bbSolid)
|
|
Return m_bbSolid
|
|
End Get
|
|
Set(value As BBox3d)
|
|
m_bbSolid = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_nIdLineAxisRotate As Integer = -1
|
|
Public Property nIdLineAxisRotate As Integer
|
|
Get
|
|
Return m_nIdLineAxisRotate
|
|
End Get
|
|
Set(value As Integer)
|
|
m_nIdLineAxisRotate = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_nIdLineFirst As Integer = -1
|
|
Public Property nIdLineFirst As Integer
|
|
Get
|
|
Return m_nIdLineFirst
|
|
End Get
|
|
Set(value As Integer)
|
|
m_nIdLineFirst = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_nIdLineSecond As Integer = -1
|
|
Public Property nIdLineSecond As Integer
|
|
Get
|
|
Return m_nIdLineSecond
|
|
End Get
|
|
Set(value As Integer)
|
|
m_nIdLineSecond = value
|
|
End Set
|
|
End Property
|
|
|
|
Public Function IsPaired() As Boolean
|
|
Dim sPaired As String = String.Empty
|
|
EgtGetInfo(PartId, PAIRED, sPaired)
|
|
' se trovo una virgola allora ho
|
|
Dim nIndex = sPaired.IndexOf(",")
|
|
If nIndex = -1 Then
|
|
Return False
|
|
Else
|
|
Return True
|
|
End If
|
|
End Function
|
|
|
|
Private m_nGroupCode As Integer = 0
|
|
Public Property nGroupCode As Integer
|
|
Get
|
|
Return m_nGroupCode
|
|
End Get
|
|
Set(value As Integer)
|
|
If value = -1 Then Return
|
|
m_nGroupCode = value
|
|
EgtSetInfo(PartId, GROUP, value)
|
|
End Set
|
|
End Property
|
|
|
|
|
|
Private m_nIdSurfFirst As Integer = -1
|
|
Public Property nIdSurfFirst As Integer
|
|
Get
|
|
Return m_nIdSurfFirst
|
|
End Get
|
|
Set(value As Integer)
|
|
m_nIdSurfFirst = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_nIdSurfSecond As Integer = -1
|
|
Public Property nIdSurfSecond As Integer
|
|
Get
|
|
Return m_nIdSurfSecond
|
|
End Get
|
|
Set(value As Integer)
|
|
m_nIdSurfSecond = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_vtNormFirst As New Vector3d
|
|
Public Property vtNormFirst As Vector3d
|
|
Get
|
|
Return m_vtNormFirst
|
|
End Get
|
|
Set(value As Vector3d)
|
|
m_vtNormFirst = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_vtNormSecond As New Vector3d
|
|
Public Property vtNormSecond As Vector3d
|
|
Get
|
|
Return m_vtNormSecond
|
|
End Get
|
|
Set(value As Vector3d)
|
|
m_vtNormSecond = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_TernaId As Integer = -1
|
|
Public Property TernaId As Integer
|
|
Get
|
|
Return m_TernaId
|
|
End Get
|
|
Set(value As Integer)
|
|
m_TernaId = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_vtDrag As New Vector3d
|
|
Public Property vtDrag As Vector3d
|
|
Get
|
|
Return m_vtDrag
|
|
End Get
|
|
Set(value As Vector3d)
|
|
m_vtDrag = value
|
|
End Set
|
|
End Property
|
|
|
|
Private m_nLayTempId As Integer = -1
|
|
|
|
#End Region ' Fields & Properties
|
|
|
|
#Region "CONSTRUCTOR"
|
|
|
|
Sub New(nId As Integer)
|
|
' salvo il riferimento della VeinMatchingWindow
|
|
Dim nPartId As Integer = -1
|
|
' se serve recupero il parent e poi capisco se è il Part o il SOLIDpart
|
|
If Not EgtIsPart(nId) Then
|
|
nPartId = EgtGetParent(EgtGetParent(nId))
|
|
Else
|
|
nPartId = nId
|
|
End If
|
|
Dim sName As String = String.Empty
|
|
EgtGetName(nPartId, sName)
|
|
If sName = SOLID.ToUpper() Then
|
|
' salvo i dati del part solid
|
|
m_PartSolidId = nPartId
|
|
Dim nSolidL As Integer = EgtGetFirstNameInGroup(nPartId, SURFACE)
|
|
Dim nSolidId As Integer = EgtGetFirstInGroup(nSolidL)
|
|
While EgtGetType(nSolidId) <> GDB_TY.SRF_MESH And nSolidId <> GDB_ID.NULL
|
|
nSolidId = EgtGetNext(nSolidId)
|
|
End While
|
|
m_SolidId = nSolidId
|
|
' recupero i dati del part
|
|
EgtGetInfo(nPartId, PARENT, m_PartId)
|
|
Dim nSurfL As Integer = EgtGetFirstNameInGroup(nPartId, REGION)
|
|
Dim nSurfId As Integer = EgtGetFirstInGroup(nSurfL)
|
|
While EgtGetType(nSurfId) <> GDB_TY.SRF_FRGN And nSurfId <> GDB_ID.NULL
|
|
nSurfId = EgtGetNext(nSurfId)
|
|
End While
|
|
m_SurfId = nSurfId
|
|
Else
|
|
' salvo i dati del part
|
|
m_PartId = nPartId
|
|
Dim nSurfL As Integer = EgtGetFirstNameInGroup(nPartId, REGION)
|
|
Dim nSurfId As Integer = EgtGetFirstInGroup(nSurfL)
|
|
While EgtGetType(nSurfId) <> GDB_TY.SRF_FRGN And nSurfId <> GDB_ID.NULL
|
|
nSurfId = EgtGetNext(nSurfId)
|
|
End While
|
|
m_SurfId = nSurfId
|
|
' recupero i dati del part solid
|
|
EgtGetInfo(nPartId, CHILD, m_PartSolidId)
|
|
Dim nSolidL As Integer = EgtGetFirstNameInGroup(m_PartSolidId, SURFACE)
|
|
Dim nSolidId As Integer = EgtGetFirstInGroup(nSolidL)
|
|
While EgtGetType(nSolidId) <> GDB_TY.SRF_MESH And nSolidId <> GDB_ID.NULL
|
|
nSolidId = EgtGetNext(nSolidId)
|
|
End While
|
|
m_SolidId = nSolidId
|
|
End If
|
|
|
|
'recupero il layer temp nel Part del solid
|
|
m_nLayTempId = EgtGetFirstNameInGroup(PartSolidId, TEMP)
|
|
|
|
' recupero o creo le informazioni di accoppiamento
|
|
Dim sPaired As String = String.Empty
|
|
EgtGetInfo(m_PartId, PAIRED, sPaired)
|
|
' se ho solo un numero nel paired lo aggiorno con l'id effettivo del pezzo
|
|
Dim vPaired As Array = sPaired.Split(CChar(","))
|
|
If sPaired = "" Or vPaired.Length = 1 Then
|
|
SolidManagerM.UpdatePairInfoSingle(PartId, PartId.ToString, 0)
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' Constructor
|
|
|
|
#Region "METHODS"
|
|
|
|
Public Sub SelectSinglePart()
|
|
If EgtIsSelectedObj(m_PartId) Then Return
|
|
Dim bOk As Boolean = EgtSelectObj(m_PartId)
|
|
Dim bOk1 As Boolean = EgtSelectObj(m_PartSolidId)
|
|
End Sub
|
|
|
|
Public Sub SelectPart()
|
|
If IsSelected() Then Return
|
|
Dim lPair As List(Of Integer) = SolidManagerM.PairList(PartId)
|
|
For Each nId As Integer In lPair
|
|
Dim PartSolidSel As PartSolidM = SolidManagerM.GetPartSolid(nId)
|
|
PartSolidSel.SelectSinglePart()
|
|
Next
|
|
' importo la terna per il gumball come temporanea
|
|
If Not EgtInsertFile(Map.refMainWindowVM.MainWindowM.sVein3DDir & "\" & TERNA_FILENAME) Then Return
|
|
m_TernaId = EgtGetLastPart()
|
|
EgtSetInfo(PartId, TERNA, m_TernaId)
|
|
EgtSetName(m_TernaId, TERNA)
|
|
EgtSetLevel(m_TernaId, GDB_LV.TEMP)
|
|
'creo gli assi per la rotazione e li nascondo
|
|
Dim vtMove As Vector3d = Center() - New Point3d(0, 0, 0)
|
|
Dim Lay_X As Integer = EgtCreateGroup(TernaId)
|
|
Dim Line_X As Integer = EgtCreateLine(Lay_X, New Point3d(-(100 + bbSolid.DimX / 2), 0, 0), New Point3d(100 + bbSolid.DimX / 2, 0, 0), GDB_RT.GLOB)
|
|
EgtSetColor(Line_X, New Color3d(255, 0, 0))
|
|
EgtSetName(Lay_X, AXISX)
|
|
EgtSetStatus(Lay_X, GDB_ST.OFF)
|
|
|
|
Dim Lay_Y As Integer = EgtCreateGroup(TernaId)
|
|
Dim Line_Y As Integer = EgtCreateLine(Lay_Y, New Point3d(0, -(100 + bbSolid.DimY / 2), 0), New Point3d(0, 100 + bbSolid.DimY / 2, 0), GDB_RT.GLOB)
|
|
EgtSetColor(Line_Y, New Color3d(0, 255, 0))
|
|
EgtSetName(Lay_Y, AXISY)
|
|
EgtSetStatus(Lay_Y, GDB_ST.OFF)
|
|
|
|
Dim Lay_Z As Integer = EgtCreateGroup(TernaId)
|
|
Dim Line_Z As Integer = EgtCreateLine(Lay_Z, New Point3d(0, 0, -(200 + bbSolid.DimZ / 2)), New Point3d(0, 0, 200 + bbSolid.DimZ / 2), GDB_RT.GLOB)
|
|
EgtSetColor(Line_Z, New Color3d(0, 0, 255))
|
|
EgtSetName(Lay_Z, AXISZ)
|
|
EgtSetStatus(Lay_Z, GDB_ST.OFF)
|
|
|
|
EgtMove(m_TernaId, vtMove)
|
|
|
|
''''''GESTIONE DELLA TERNA SE HO PIù OPZIONI: GLOBALE, LOCALE, ETC..
|
|
'If RefVMW.RefType.SelectedItem.Equals("Global") Then
|
|
' ' sono già a posto
|
|
' EgtMove(m_TernaId, vtMove)
|
|
'ElseIf RefVMW.RefType.SelectedItem.Equals("Local") Then
|
|
' ' devo orientare la terna con asse z come la normale della superficie principale e asse x come la dimensione principale di quella faccia
|
|
' Dim ptCenter As Point3d = Center()
|
|
' Dim vtNorm As New Vector3d
|
|
' EgtSurfFrNormVersor(SurfId, GDB_RT.GLOB, vtNorm)
|
|
' Dim nCount As Integer = 0
|
|
' Dim nExtLoopId As Integer = EgtExtractSurfFrChunkLoops(SurfId, 0, m_nLayTempId, nCount)
|
|
' Dim frFrameLoc As New Frame3d
|
|
' EgtCurveMinAreaRectangleXY(nExtLoopId, GDB_RT.LOC, frFrameLoc)
|
|
' EgtErase(nExtLoopId)
|
|
' Dim frFrameSolid As New Frame3d
|
|
' EgtGetGroupGlobFrame(PartSolidId, frFrameSolid)
|
|
' frFrameSolid.ChangeOrigin(Center())
|
|
' 'frFrameSolid.ChangeOrigin(New Point3d())
|
|
' frFrameLoc.ToGlob(frFrameSolid)
|
|
' EgtChangeGroupFrame(m_TernaId, frFrameLoc)
|
|
'End If
|
|
End Sub
|
|
|
|
Public Sub DeselectSinglePart()
|
|
EgtDeselectObj(m_PartId)
|
|
EgtDeselectObj(m_PartSolidId)
|
|
' cancello la terna e resetto l'id
|
|
EgtErase(m_TernaId)
|
|
EgtSetInfo(PartId, TERNA, "")
|
|
ResetData()
|
|
m_TernaId = -1
|
|
End Sub
|
|
|
|
Public Sub DeselectPart()
|
|
Dim lPair As List(Of Integer) = SolidManagerM.PairList(PartId)
|
|
For Each nId As Integer In lPair
|
|
Dim PartSolidSel As PartSolidM = SolidManagerM.GetPartSolid(nId)
|
|
PartSolidSel.DeselectSinglePart()
|
|
Next
|
|
End Sub
|
|
|
|
Public Sub Mark()
|
|
EgtSetMark(m_nIdLineAxisRotate)
|
|
EgtSetMark(m_nIdLineFirst)
|
|
EgtSetMark(m_nIdLineSecond)
|
|
End Sub
|
|
|
|
Public Sub ResetMark()
|
|
EgtResetMark(m_nIdLineAxisRotate)
|
|
EgtResetMark(m_nIdLineFirst)
|
|
EgtResetMark(m_nIdLineSecond)
|
|
End Sub
|
|
|
|
Public Sub ShowAxis()
|
|
EgtSetStatus(EgtGetFirstNameInGroup(TernaId, AXISX), GDB_ST.ON_)
|
|
EgtSetStatus(EgtGetFirstNameInGroup(TernaId, AXISY), GDB_ST.ON_)
|
|
EgtSetStatus(EgtGetFirstNameInGroup(TernaId, AXISZ), GDB_ST.ON_)
|
|
End Sub
|
|
|
|
Public Sub HideAxis()
|
|
EgtSetStatus(EgtGetFirstNameInGroup(TernaId, AXISX), GDB_ST.OFF)
|
|
EgtSetStatus(EgtGetFirstNameInGroup(TernaId, AXISY), GDB_ST.OFF)
|
|
EgtSetStatus(EgtGetFirstNameInGroup(TernaId, AXISZ), GDB_ST.OFF)
|
|
End Sub
|
|
|
|
Public Function Center() As Point3d
|
|
Dim ptCen As New Point3d
|
|
If SolidId <> GDB_ID.NULL Then
|
|
EgtCentroid(SolidId, GDB_ID.ROOT, ptCen)
|
|
ElseIf SurfId <> GDB_ID.NULL Then
|
|
EgtCentroid(SurfId, GDB_ID.ROOT, ptCen)
|
|
Else
|
|
Dim nLoopLay As Integer = EgtGetFirstNameInGroup(PartId, "OutLoop")
|
|
Dim nLoopId As Integer = EgtGetFirstInGroup(nLoopLay)
|
|
EgtStartPoint(nLoopId, GDB_ID.ROOT, ptCen)
|
|
End If
|
|
Return ptCen
|
|
End Function
|
|
|
|
Public Sub ResetData()
|
|
ResetMark()
|
|
m_nIdLineAxisRotate = -1
|
|
m_nIdLineFirst = -1
|
|
m_nIdLineSecond = -1
|
|
m_vtNormFirst = New Vector3d
|
|
m_vtNormSecond = New Vector3d
|
|
m_nIdSurfFirst = -1
|
|
m_nIdSurfSecond = -1
|
|
End Sub
|
|
|
|
Public Function GetLineInfo(nInfo As Integer) As String
|
|
Dim sAnswer As String = String.Empty
|
|
Select Case nInfo
|
|
Case 0
|
|
Dim dLen As Double = 0
|
|
EgtCurveLength(m_nIdLineFirst, dLen)
|
|
'sAnswer = LenToString(dLen, 2) & "mm"
|
|
sAnswer = dLen.ToString & MILLIMETER
|
|
Case 1
|
|
Dim vtDir As New Vector3d
|
|
EgtStartVector(m_nIdLineFirst, GDB_ID.ROOT, vtDir)
|
|
sAnswer = vtDir.ToString
|
|
Case 2
|
|
Dim ptStart As New Point3d
|
|
EgtStartPoint(m_nIdLineFirst, GDB_ID.ROOT, ptStart)
|
|
sAnswer = ptStart.ToString
|
|
Case 3
|
|
Dim ptEnd As New Point3d
|
|
EgtEndPoint(m_nIdLineFirst, GDB_ID.ROOT, ptEnd)
|
|
sAnswer = ptEnd.ToString
|
|
End Select
|
|
Return sAnswer
|
|
End Function
|
|
|
|
Public Sub MakeTransparent()
|
|
EgtSetAlpha(SolidId, 70)
|
|
End Sub
|
|
|
|
Public Sub MakeOpaque()
|
|
EgtSetAlpha(SolidId, 100)
|
|
End Sub
|
|
|
|
Public Function IsSelected() As Boolean
|
|
Return EgtIsSelectedObj(PartId)
|
|
End Function
|
|
|
|
#End Region ' Methods
|
|
|
|
End Class
|