diff --git a/VeinMatching/VeinMatchingWindow.xaml.vb b/VeinMatching/VeinMatchingWindow.xaml.vb index 9ae2f64..ec8996f 100644 --- a/VeinMatching/VeinMatchingWindow.xaml.vb +++ b/VeinMatching/VeinMatchingWindow.xaml.vb @@ -4,6 +4,7 @@ Imports System.Collections.ObjectModel Imports System.Runtime.InteropServices Imports EgtUILib Imports EgtWPFLib +Imports OmagCUT.VeinMatchingWindow Public Class VeinMatchingWindow @@ -19,6 +20,11 @@ Public Class VeinMatchingWindow Private m_nIdToSel As Integer = GDB_ID.NULL Private m_nIdToDesel As Integer = GDB_ID.NULL + Enum ALETTE + F = 2 + A = 1 + End Enum + Private Sub Window_Initialized(sender As Object, e As EventArgs) ' Assegnazione scena all'host e posizionamento nella PlacePageGrid VeinMatchingSceneHost.Child = VeinMatchingScene @@ -267,7 +273,7 @@ Friend Module VeinMatching Dim nRegId As Integer = EgtGetFirstInGroup(nRegLayId) While nRegId <> GDB_ID.NULL If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then - Exit While + Exit While End If nRegId = EgtGetNext(nRegId) End While @@ -364,19 +370,21 @@ Friend Module VeinMatching ' Imposto il contesto del progetto EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) ' Riattivo il gruppo di lavoro - EgtSetCurrMachGroup( EgtGetFirstMachGroup()) + EgtSetCurrMachGroup(EgtGetFirstMachGroup()) ' Verifico quali pezzi sono nel grezzo, per dichiararlo al VM - nId = EgtGetFirstPartInRawPart( CamAuto.GetCurrentRaw()) + nId = EgtGetFirstPartInRawPart(CamAuto.GetCurrentRaw()) While nId <> GDB_ID.NULL ' Dichiaro pezzo nel grezzo per VM - VeinMatching.OnInsertPartInRaw( nId) + VeinMatching.OnInsertPartInRaw(nId) ' Passo al pezzo successivo nId = EgtGetNextPartInRawPart(nId) End While ' Ripristino visualizzazione di eventuali pezzi in parcheggio ShowParkedParts() ' Ripristino il contesto corrente - EgtSetCurrentContext( nCurrCtx) + EgtSetCurrentContext(nCurrCtx) + + ' EgtSaveFile("C:\EgtData\OmagCUT\Temp\MyVeinMatch.nge", NGE.TEXT) Return True End Function @@ -422,11 +430,11 @@ Friend Module VeinMatching nCurrId = EgtGetFirstNameInGroup(nVeinId2, NAME_PREVIEW) EgtSetStatus(nCurrId, GDB_ST.OFF) ' Se esiste OutLoop.orig OutLoop -> OutLoop.mach e OutLoop.orig -> OutLoop - Dim nOutLoopOrig As Integer = EgtGetFirstNameInGroup( nVeinId2, NAME_OUTLOOP & ".orig") + Dim nOutLoopOrig As Integer = EgtGetFirstNameInGroup(nVeinId2, NAME_OUTLOOP & ".orig") If nOutLoopOrig <> GDB_ID.NULL Then - Dim nOutLoop As Integer = EgtGetFirstNameInGroup( nVeinId2, NAME_OUTLOOP) - EgtSetName( nOutLoop, NAME_OUTLOOP & ".mach") - EgtSetName( nOutLoopOrig, NAME_OUTLOOP) + Dim nOutLoop As Integer = EgtGetFirstNameInGroup(nVeinId2, NAME_OUTLOOP) + EgtSetName(nOutLoop, NAME_OUTLOOP & ".mach") + EgtSetName(nOutLoopOrig, NAME_OUTLOOP) End If ' Se necessario, ripristino il contesto originale If nCurrCtx > 0 Then EgtSetCurrentContext(nCurrCtx) @@ -555,8 +563,8 @@ Friend Module VeinMatching ' Se richiesto, eseguo deselezione If bDeselect Then EgtDeselectObj(nId) - End If - EgtDraw() + End If + EgtDraw() EgtSetCurrentContext(nMainCtx) Return True End Function @@ -1039,37 +1047,44 @@ Friend Module VeinMatching End Function Friend Function MoveAlettaSolid(ByRef Item As Aletta, ByRef ThicknessRaw As Double) As Boolean - + ' A: alzatina, F: frontalino Dim nType As Integer If Not EgtGetInfo(Item.IdSideRef, "AF", nType) Then Return False - Dim ptSRef, ptERef, ptE As Point3d + Dim ptSRef, ptERef, ptS, ptE As Point3d + ' Piano cucina If Not EgtStartPoint(Item.IdSideRef, GDB_ID.ROOT, ptSRef) Then Return False If Not EgtEndPoint(Item.IdSideRef, GDB_ID.ROOT, ptERef) Then Return False + ' AlzFront + If Not EgtStartPoint(Item.SideId, GDB_ID.ROOT, ptS) Then Return False If Not EgtEndPoint(Item.SideId, GDB_ID.ROOT, ptE) Then Return False + ' vettore lato cucina + Dim vtRotRef As Vector3d = ptERef - ptSRef + ' vettore lato AlzFront + Dim vtRot As Vector3d = ptE - ptS + ' ruoto il solido intorno al lato di riferimento - Dim vtRot As Vector3d = ptERef - ptSRef - If nType = 1 Then - EgtRotate(Item.PartId, ptE, vtRot, -90, GDB_RT.GLOB) - ElseIf nType = 2 Then + If nType = ALETTE.A Then EgtRotate(Item.PartId, ptE, vtRot, 90, GDB_RT.GLOB) + ElseIf nType = ALETTE.F Then + EgtRotate(Item.PartId, ptE, vtRot, -90, GDB_RT.GLOB) End If ' punto di riferimento per la traslazione sul solido Dim ptSolid As Point3d - If nType = 1 Then + If nType = ALETTE.A Then ' cerco id della curva che definisce la front face Dim nSolidGrp As Integer = EgtGetFirstNameInGroup(Item.PartId, NAME_VM_SOLID) Dim nFrontCrvId As Integer = EgtGetFirstInGroup(nSolidGrp) - EgtStartPoint(nFrontCrvId, ptSolid) - ElseIf nType = 2 Then - EgtStartPoint(Item.SideId, ptSolid) + EgtStartPoint(nFrontCrvId, GDB_ID.ROOT, ptSolid) + ElseIf nType = ALETTE.F Then + EgtStartPoint(Item.SideId, GDB_ID.ROOT, ptSolid) End If - Dim ItemFrame As New Frame3d - If Not EgtGetGroupGlobFrame(Item.PartId, ItemFrame) Then Return False - ptSolid.ToGlob(ItemFrame) + ' Dim ItemFrame As New Frame3d + ' If Not EgtGetGroupGlobFrame(Item.PartId, ItemFrame) Then Return False + ' ptSolid.ToGlob(ItemFrame) 'punto di riferimento per la traslazione sul piano cucina Dim ptKitchen As Point3d = ptERef @@ -1077,6 +1092,16 @@ Friend Module VeinMatching Dim vtMove As Vector3d = ptKitchen - ptSolid EgtMove(Item.PartId, vtMove, GDB_RT.GLOB) + ' eventualmente ruoto per allineare l'alzatina al piano cucina + Dim dLRef, dAngVRef, dAngHRef As Double + vtRotRef.ToSpherical(dLRef, dAngVRef, dAngHRef) + Dim dL, dAngV, dAngH As Double + vtRot.Rotate(Vector3d.Z_AX, 180) + vtRot.ToSpherical(dL, dAngV, dAngH) + Dim dDelta As Double = dAngHRef - dAngH + If Math.Abs(dDelta) < EPS_ANG_SMALL Then Return True + EgtRotate(Item.PartId, ptKitchen, Vector3d.Z_AX, dDelta, GDB_RT.GLOB) + Return True End Function @@ -1206,7 +1231,7 @@ Friend Module VeinMatching ' Se necessario, cambio contesto If m_nVeinCtx <> nCurrCtx Then If EgtSetCurrentContext(m_nVeinCtx) Then - Return If( nCurrCtx > 0, nCurrCtx, -2) + Return If(nCurrCtx > 0, nCurrCtx, -2) Else Return 0 End If @@ -1268,7 +1293,7 @@ Friend Module VeinMatching While nId <> GDB_ID.NULL Dim nOriId As Integer If EgtGetInfo(nId, KEY_ORI_ID, nOriId) AndAlso nOriId = nPartId Then - Exit While + Exit While End If nId = EgtGetNextPart(nId) End While