Imports EgtUILib Public Module CamAuto Private m_MainWindow As MainWindow = Application.Current.MainWindow Friend Function AddMachinings(nPartId As Integer, bPreview As Boolean, bToolpath As Boolean) As Boolean EgtLuaCreateGlobTable("CAM") SetLuaStandardCamParams() EgtLuaSetGlobIntVar("CAM.PARTID", nPartId) EgtLuaSetGlobBoolVar("CAM.PREVIEW", bPreview) EgtLuaSetGlobBoolVar("CAM.TOOLPATH", bToolpath) Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua") bOk = bOk AndAlso EgtLuaCallFunction("CAM.Add") Dim nErr As Integer = 999 EgtLuaGetGlobIntVar("CAM.ERR", nErr) EgtLuaResetGlobVar("CAM") If nErr <> 0 Then bOk = False EgtOutLog("Error in CamAuto : " & nErr.ToString()) End If m_MainWindow.m_CurrentProjectPageUC.ResetOrderMachiningFlag() Return bOk End Function Friend Function EraseMachinings(nPartId As Integer) As Boolean EgtLuaCreateGlobTable("CAM") EgtLuaSetGlobIntVar("CAM.PARTID", nPartId) Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua") bOk = bOk AndAlso EgtLuaCallFunction("CAM.Erase") Dim nErr As Integer = 999 EgtLuaGetGlobIntVar("CAM.ERR", nErr) EgtLuaResetGlobVar("CAM") If nErr <> 0 Then bOk = False EgtOutLog("Error in CamAuto : " & nErr.ToString()) End If m_MainWindow.m_CurrentProjectPageUC.ResetOrderMachiningFlag() Return bOk End Function Friend Function UpdateAllMachiningsToolpaths() As Boolean EgtLuaCreateGlobTable("CAM") SetLuaStandardCamParams() Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua") bOk = bOk AndAlso EgtLuaCallFunction("CAM.UpdateAllTp") Dim nErr As Integer = 999 EgtLuaGetGlobIntVar("CAM.ERR", nErr) EgtLuaResetGlobVar("CAM") If nErr <> 0 Then bOk = False EgtOutLog("Error in CamAuto : " & nErr.ToString()) End If Return bOk End Function Friend Function SortAllMachinings() As Boolean EgtLuaCreateGlobTable("CAM") SetLuaStandardCamParams() Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua") bOk = bOk AndAlso EgtLuaCallFunction("CAM.Sort") Dim nErr As Integer = 999 EgtLuaGetGlobIntVar("CAM.ERR", nErr) EgtLuaResetGlobVar("CAM") If nErr <> 0 Then bOk = False EgtOutLog("Error in CamAuto : " & nErr.ToString()) End If Return bOk End Function Friend Function DeactivateAllMachinings() As Boolean Return EgtSetAllOperationsMode(False) End Function Friend Function ActivateAllMachinings() As Boolean Return EgtSetAllOperationsMode(True) End Function Friend Function HideAllMachinings() As Boolean Dim nId As Integer = EgtGetFirstOperation() While nId <> GDB_ID.NULL If EgtGetOperationType(nId) <> MCH_OY.DISP Then EgtSetOperationStatus(nId, False) End If nId = EgtGetNextOperation(nId) End While Return True End Function Friend Function ShowAllCurrPhaseMachinings() As Boolean ' Parto dalla prima lavorazione successiva alla disposizione di fase Dim nId As Integer = EgtGetPhaseDisposition(EgtGetCurrPhase()) nId = EgtGetNextOperation(nId) ' Finchè c'è una lavorazione While nId <> GDB_ID.NULL ' Se disposizione sono alla fase successiva If EgtGetOperationType(nId) = MCH_OY.DISP Then Exit While ' Se abilitata If EgtGetOperationMode(nId) Then EgtSetOperationStatus(nId, True) End If ' Passo alla successiva nId = EgtGetNextOperation(nId) End While Return True End Function Friend Function RemoveFinalHome() As Boolean Dim nId As Integer = EgtGetLastActiveOperation() Return EgtRemoveOperationHome(nId) End Function Friend Function VerifySetup(ByRef sMissingTools As String) As Boolean Dim bOk As Boolean = True Dim bIsMultiCut = (EgtGetHeadId("H101") <> GDB_ID.NULL) sMissingTools = String.Empty Dim nId As Integer = EgtGetFirstOperation() While nId <> GDB_ID.NULL If IsValidMachining(nId) Then Dim nType As Integer = MCH_OY.NONE EgtGetMachiningParam(MCH_MP.TYPE, nType) Dim sTool As String = String.Empty EgtGetMachiningParam(MCH_MP.TOOL, sTool) If nType = MCH_OY.SAWING Or nType = MCH_OY.SAWROUGHING Or nType = MCH_OY.SAWFINISHING Then If bIsMultiCut Then ' L'utensile sulla seconda testa ha lo stesso nome di quello sulla prima con suffisso "-2" If sTool.Substring(sTool.Length() - 2) = "-2" Then sTool = sTool.Remove(sTool.Length() - 2) End If End If If String.Compare(sTool, m_MainWindow.m_CurrentMachine.sCurrSaw) <> 0 Then bOk = False If sMissingTools.IndexOf(sTool) = -1 Then sMissingTools = sMissingTools & sTool & ", " End If End If ElseIf nType = MCH_OY.DRILLING Then If String.Compare(sTool, m_MainWindow.m_CurrentMachine.sCurrDrill) <> 0 Then bOk = False If sMissingTools.IndexOf(sTool) = -1 Then sMissingTools = sMissingTools & sTool & ", " End If End If ElseIf nType = MCH_OY.MILLING Then If String.Compare(sTool, m_MainWindow.m_CurrentMachine.sCurrMill) <> 0 Then bOk = False If sMissingTools.IndexOf(sTool) = -1 Then sMissingTools = sMissingTools & sTool & ", " End If End If End If End If nId = EgtGetNextOperation(nId) End While Return bOk End Function Friend Function TestAllMachiningsForStrict() As Boolean Dim bModified As Boolean = False ' Affondamento ridotto Dim dReducedDepth As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_REDUCEDDEPTH, 1, m_MainWindow.GetMachIniFile()) ' Ciclo sulle lavorazioni Dim nOperId As Integer = EgtGetFirstOperation() While nOperId <> GDB_ID.NULL ' verifico sia una lavorazione valida If IsValidMachining(nOperId) Then ' verifica interferenza Dim nFlag As Integer = FMI_TYPE.NONE If Not VerifyComposedMachining(nOperId, nFlag) Then nFlag = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO End If ' sistemazione lavorazione, se necessario If AdjustMachining(nOperId, nFlag, dReducedDepth) Then bModified = True End If End If nOperId = EgtGetNextOperation(nOperId) End While Return bModified End Function Friend Function VerifyComposedMachining(nOperId As Integer, ByRef nFlag As Integer) As Boolean ' verifico sia una lavorazione If Not EgtSetCurrMachining(nOperId) Then Return False ' determino eventuali lavorazioni inglobate Dim vOthId As New List(Of Integer) Dim sInfo As String = String.Empty If EgtGetInfo(nOperId, INFO_MCH_OTHMID, sInfo) Then Dim sItems() As String = sInfo.Split(",".ToCharArray) For Each sId In sItems vOthId.Add(CInt(sId)) Next End If ' layer di origine Dim sLay As String = String.Empty EgtGetInfo(nOperId, "Lay", sLay) ' verifica interferenza nFlag = FMI_TYPE.NONE If sLay = NAME_OUTLOOP Then Dim nRes As Integer = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO If Not EgtVerifyMachining(nOperId, nRes) Then Return False nFlag = nFlag Or nRes For Each nId As Integer In vOthId nRes = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO If Not EgtVerifyMachining(nId, nRes) Then Return False nFlag = nFlag Or nRes Next End If Return True End Function Friend Function AdjustMachining(nOperId As Integer, nFlag As Integer, dReducedDepth As Double) As Boolean Dim bModified As Boolean = False ' abilitazione Dim bEnabled As Boolean = Not EgtExistsInfo(nOperId, INFO_MCH_USER_OFF) ' restringo lavorazione abilitata ma con interferenza If bEnabled And nFlag <> FMI_TYPE.NONE Then Dim bStart As Boolean = (nFlag And FMI_TYPE.LI) Dim bEnd As Boolean = (nFlag And FMI_TYPE.LO) SetCutStrict(nOperId, bStart, bEnd) ' se risulta lavorazione vuota, provo a diminuire l'affondamento If EgtIsMachiningEmpty() Then ResetCutStrict(nOperId, bStart, bEnd) SetCutDepth(nOperId, dReducedDepth) ' ripeto verifica nFlag = FMI_TYPE.NONE If Not VerifyComposedMachining(nOperId, nFlag) Then nFlag = FMI_TYPE.LI Or FMI_TYPE.RM Or FMI_TYPE.LO End If ' se non superata la stringo If nFlag <> FMI_TYPE.NONE Then bStart = (nFlag And FMI_TYPE.LI) bEnd = (nFlag And FMI_TYPE.LO) SetCutStrict(nOperId, bStart, bEnd) End If End If bModified = True End If Return bModified End Function Friend Function SetCutDepth(nMchId As Integer, dDepth As Double) As Boolean ' Imposto la lavorazione corrente If Not EgtSetCurrMachining(nMchId) Then Return False ' Imposto l'affondamento EgtSetMachiningParam(MCH_MP.DEPTH, dDepth) ' Ricalcolo il preview UpdateMachiningPreview(nMchId, True) Return True End Function Friend Function SetCutStrict(nMchId As Integer, bStart As Boolean, bEnd As Boolean) As Boolean ' Recupero sicurezza su tagli Dim dSafeLen As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_CUT, 0, m_MainWindow.GetMachIniFile()) ' Imposto la lavorazione corrente If Not EgtSetCurrMachining(nMchId) Then Return False Dim bModif As Boolean = False ' Se richiesto, restringo l'attacco If bStart Then ' Recupero tipo attacco originale e lo salvo se non già fatto Dim nOriLeadIn As Integer = MCH_SAW_LI.CENT EgtGetMachiningParam(MCH_MP.LEADINTYPE, nOriLeadIn) If Not EgtExistsInfo(nMchId, INFO_MCH_ORILEADIN) Then EgtSetInfo(nMchId, INFO_MCH_ORILEADIN, nOriLeadIn) End If ' Se attacco cambiato, aggiorno e accorcio della sicurezza sui tagli If nOriLeadIn <> MCH_SAW_LI.STRICT Then EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.STRICT) Dim dAddLen As Double = 0 EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen) EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen - dSafeLen) bModif = True End If End If ' Se richiesto, restringo l'uscita If bEnd Then ' Recupero tipo uscita originale e lo salvo se non già fatto Dim nOriLeadOut As Integer = MCH_SAW_LO.CENT EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nOriLeadOut) If Not EgtExistsInfo(nMchId, INFO_MCH_ORILEADOUT) Then EgtSetInfo(nMchId, INFO_MCH_ORILEADOUT, nOriLeadOut) End If ' Se uscita cambiata, aggiorno e accorcio della sicurezza sui tagli If nOriLeadOut <> MCH_SAW_LO.STRICT Then EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.STRICT) Dim dAddLen As Double = 0 EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen) EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen - dSafeLen) bModif = True End If End If ' Se modificato, ricalcolo il preview If bModif Then UpdateMachiningPreview(nMchId, True) End If Return True End Function Friend Function ResetCutStrict(nMchId As Integer, bStart As Boolean, bEnd As Boolean) As Boolean ' Recupero sicurezza su tagli Dim dSafeLen As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_CUT, 0, m_MainWindow.GetMachIniFile()) ' Imposto la lavorazione corrente If Not EgtSetCurrMachining(nMchId) Then Return False Dim bModif As Boolean = False ' Se richiesto, ripristino l'attacco If bStart Then ' Recupero tipo attacco originale Dim nOriLeadIn As Integer = MCH_SAW_LI.CENT EgtGetInfo(nMchId, INFO_MCH_ORILEADIN, nOriLeadIn) Dim nCurrLeadIn As Integer = MCH_SAW_LI.CENT EgtGetMachiningParam(MCH_MP.LEADINTYPE, nCurrLeadIn) ' Se attacco cambiato, aggiorno e allungo della sicurezza sui tagli If nOriLeadIn <> nCurrLeadIn Then EgtSetMachiningParam(MCH_MP.LEADINTYPE, nOriLeadIn) Dim dAddLen As Double = 0 EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen) EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen + dSafeLen) bModif = True End If End If ' Se richiesto, ripristino l'uscita If bEnd Then ' Recupero tipo uscita originale Dim nOriLeadOut As Integer = MCH_SAW_LO.CENT EgtGetInfo(nMchId, INFO_MCH_ORILEADOUT, nOriLeadOut) Dim nCurrLeadOut As Integer = MCH_SAW_LO.CENT EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nCurrLeadOut) ' Se uscita cambiata, aggiorno If nOriLeadOut <> nCurrLeadOut Then EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, nOriLeadOut) Dim dAddLen As Double = 0 EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen) EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen + dSafeLen) bModif = True End If End If ' Se modificato, ricalcolo il preview If bModif Then UpdateMachiningPreview(nMchId, True) End If Return True End Function Friend Function UpdateMachiningPreview(nMchId As Integer, bMoveOnPart As Boolean) As Boolean ' Imposto la lavorazione corrente If Not EgtSetCurrMachining(nMchId) Then Return False ' Ricalcolo il preview EgtPreviewMachining(True) ' Se non devo spostarlo nel pezzo, esco If Not bMoveOnPart Then Return True End If ' Indice gruppo di preview nella lavorazione Dim nMchPvId As Integer = EgtGetFirstNameInGroup(nMchId, NAME_PREVIEW) ' Indice gruppo di preview nel pezzo Dim nPartPvId As Integer = GDB_ID.NULL EgtGetInfo(nMchPvId, INFO_PV_ONPART_ID, nPartPvId) ' Svuoto il preview nel pezzo EgtEmptyGroup(nPartPvId) ' Rimuovo anche il preview di lavorazioni inglobate Dim sInfo As String = String.Empty If EgtGetInfo(nMchId, INFO_MCH_OTHMID, sInfo) Then Dim sItems() As String = sInfo.Split(",".ToCharArray) For Each sId In sItems ' Indice gruppo di preview nella lavorazione Dim nMchPvId2 As Integer = EgtGetFirstNameInGroup(CInt(sId), NAME_PREVIEW) ' Indice gruppo di preview nel pezzo Dim nPartPvId2 As Integer = GDB_ID.NULL EgtGetInfo(nMchPvId2, INFO_PV_ONPART_ID, nPartPvId2) ' Svuoto il preview nel pezzo EgtEmptyGroup(nPartPvId2) Next End If ' Lo sposto dalla lavorazione al pezzo Dim nId As Integer = EgtGetFirstInGroup(nMchPvId) While nId <> GDB_ID.NULL EgtRelocateGlob(nId, nPartPvId) nId = EgtGetFirstInGroup(nMchPvId) End While Return True End Function Friend Function RemoveMachiningPreview(nMchId As Integer) As Boolean ' Indice gruppo di preview nella lavorazione Dim nMchPvId As Integer = EgtGetFirstNameInGroup(nMchId, NAME_PREVIEW) ' Lo svuoto Return EgtEmptyGroup(nMchPvId) End Function Friend Function IsValidMachining(nOperId As Integer) As Boolean ' Deve essere una lavorazione If Not EgtSetCurrMachining(nOperId) Then Return False ' Deve contenere qualcosa If EgtIsMachiningEmpty() Then Return False ' Deve essere abilitata oppure disabilitata direttamente dall'utente If Not (EgtGetOperationMode(nOperId) Or EgtExistsInfo(nOperId, INFO_MCH_USER_OFF)) Then Return False ' E' valida Return True End Function Private Function SetLuaStandardCamParams() As Boolean Dim sSawMch As String = m_MainWindow.m_CurrentMachine.sCurrSawing Dim sMillMch As String = m_MainWindow.m_CurrentMachine.sCurrMilling Dim sDrillMch As String = m_MainWindow.m_CurrentMachine.sCurrDrilling Dim dReducedDepth As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_REDUCEDDEPTH, 1, m_MainWindow.GetMachIniFile()) Dim dHolesOffset As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_HOLES_OFFSET, 0, m_MainWindow.GetMachIniFile()) Dim dHolesOverlap As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_HOLES_OVERLAP, 0, m_MainWindow.GetMachIniFile()) Dim dCornerSafety As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 1, m_MainWindow.GetMachIniFile()) Dim bOneHoleIntCorner As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_ONEHOLE_INTCORNER, 0, m_MainWindow.GetMachIniFile()) <> 0) dCornerSafety = Math.Max(dCornerSafety, 10 * EPS_SMALL) EgtLuaSetGlobStringVar("CAM.SAWMCH", sSawMch) EgtLuaSetGlobStringVar("CAM.MILLMCH", sMillMch) EgtLuaSetGlobStringVar("CAM.DRILLMCH", sDrillMch) EgtLuaSetGlobNumVar("CAM.REDUCEDDEPTH", dReducedDepth) EgtLuaSetGlobNumVar("CAM.HOLESOFFSET", dHolesOffset) EgtLuaSetGlobNumVar("CAM.HOLESOVERLAP", dHolesOverlap) EgtLuaSetGlobBoolVar("CAM.ONEHOLEINTCORNER", bOneHoleIntCorner) EgtLuaSetGlobNumVar("CAM.CORNERSAFETY", dCornerSafety) EgtLuaSetGlobNumVar("CAM.RAWHEIGHT", GetRawHeight()) Return True End Function Friend Function GetRawBox(ByRef ptRawMin As Point3d, ByRef ptRawMax As Point3d) As Boolean Return GetRawBox(EgtGetFirstRawPart(), ptRawMin, ptRawMax) End Function Friend Function GetRawBox(ByRef b3RawBox As BBox3d) As Boolean Return GetRawBox(EgtGetFirstRawPart(), b3RawBox) End Function Friend Function GetRawBox(nRawId As Integer, ByRef ptRawMin As Point3d, ByRef ptRawMax As Point3d) As Boolean ' Recupero identificativo del grezzo e del suo solido Dim nSolidRawId As Integer = EgtGetFirstNameInGroup(nRawId, NAME_RAW_SOLID) If nSolidRawId = GDB_ID.NULL Then Return False ' Ne recupero il box EgtGetBBoxGlob(nSolidRawId, GDB_BB.STANDARD, ptRawMin, ptRawMax) Return True End Function Friend Function GetRawBox(nRawId As Integer, ByRef b3RawBox As BBox3d) As Boolean ' Recupero identificativo del grezzo e del suo solido Dim nSolidRawId As Integer = EgtGetFirstNameInGroup(nRawId, NAME_RAW_SOLID) If nSolidRawId = GDB_ID.NULL Then Return False ' Ne recupero il box EgtGetBBoxGlob(nSolidRawId, GDB_BB.STANDARD, b3RawBox) Return True End Function Friend Function GetRawCenter(nRawId As Integer, ByRef ptCent As Point3d) As Boolean Dim nCentId As Integer = EgtGetFirstNameInGroup(nRawId, NAME_RAW_CENTER) Return EgtStartPoint(nCentId, GDB_ID.ROOT, ptCent) End Function Friend Function GetRawHeight() As Double Dim ptRawMin, ptRawMax As Point3d If GetRawBox(ptRawMin, ptRawMax) Then Return (ptRawMax.z - ptRawMin.z) Else Return 0 End If End Function Friend Function IsMachiningInActiveRaw(nMchId As Integer) As Boolean EgtSetCurrMachining(nMchId) ' Recupero la prima entità geometrica della lavorazione Dim nId, nSub As Integer If Not EgtGetMachiningGeometry(0, nId, nSub) Then Return False ' Recupero il pezzo di appartenenza Dim nPartId = EgtGetParent(EgtGetParent(nId)) If nPartId = GDB_ID.NULL Then Return False ' Recupero la fase di appartenenza della lavorazione Dim nPhase As Integer = EgtGetOperationPhase(nMchId) ' Verifico se il pezzo è nei grezzi della fase indicata Dim nRawId As Integer = EgtGetFirstRawPart() While nRawId <> GDB_ID.NULL If EgtVerifyRawPartPhase(nRawId, nPhase) Then Dim nPirId As Integer = EgtGetFirstPartInRawPart(nRawId) While nPirId <> GDB_ID.NULL If nPartId = nPirId Then Return True nPirId = EgtGetNextPartInRawPart(nPirId) End While End If nRawId = EgtGetNextRawPart(nRawId) End While Return False End Function Friend Function AddFrameMachinings() As Boolean ' Cancello tutte le lavorazioni EgtRemoveAllOperations() ' Recupero il grezzo corrente Dim nRawId As Integer = EgtGetFirstRawPart() If nRawId = GDB_ID.NULL Then Return False ' Se non ci sono pezzi, esco If EgtGetPartInRawPartCount(nRawId) = 0 Then Return True ' Aggiungo sgrossatura If Not AddFrameSawRoughing() Then Return False ' Aggiungo finitura If Not AddFrameSawFinishing() Then Return False ' Aggiungo spatolatura If Not AddFrameSawSideFinishing() Then Return False Return True End Function Friend Function AddFrameSawRoughing() As Boolean ' Cancello la lavorazione di sgrossatura Dim nId As Integer = EgtGetOperationId(NAME_FRAME_SAWROU) EgtRemoveOperation(nId) ' Recupero il grezzo corrente Dim nRawId As Integer = EgtGetFirstRawPart() If nRawId = GDB_ID.NULL Then Return False ' Se non ci sono pezzi, esco If EgtGetPartInRawPartCount(nRawId) = 0 Then Return True ' Recupero la lavorazione corrente di sgrossatura con lama Dim sCurrSawRoughing = m_MainWindow.m_CurrentMachine.sCurrSawRoughing If String.IsNullOrEmpty(sCurrSawRoughing) Then Return True ' Inserisco la lavorazione corrente Dim nMchId As Integer = EgtAddMachining(NAME_FRAME_SAWROU, sCurrSawRoughing) If nMchId = GDB_ID.NULL Then Return False ' La sposto all'inizio delle lavorazioni (subito dopo la disposizione) Dim nDispId As Integer = EgtGetPhaseDisposition(1) If Not EgtRelocate(nMchId, nDispId, GDB_POS.AFTER) Then EgtErase(nMchId) Return False End If ' Recupero sezioni e prima guida dei pezzi nel grezzo Dim nCount As Integer = EgtGetPartInRawPartCount(nRawId) Dim vId(nCount) As Integer Dim nInd As Integer = 0 Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawId) vId(nCount) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_GUIDE)) While nPartId <> GDB_ID.NULL vId(nInd) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_SECT)) nInd += 1 nPartId = EgtGetNextPartInRawPart(nPartId) End While ' Imposto la geometria EgtSetMachiningGeometry(vId) ' Applico la lavorazione Return EgtApplyMachining(False) End Function Friend Function AddFrameSawFinishing() As Boolean ' Cancello la lavorazione di finitura Dim nId As Integer = EgtGetOperationId(NAME_FRAME_SAWFIN) EgtRemoveOperation(nId) ' Recupero il grezzo corrente Dim nRawId As Integer = EgtGetFirstRawPart() If nRawId = GDB_ID.NULL Then Return False ' Se non ci sono pezzi, esco If EgtGetPartInRawPartCount(nRawId) = 0 Then Return True ' Recupero la lavorazione corrente di finitura con lama Dim sCurrSawFinishing = m_MainWindow.m_CurrentMachine.sCurrSawFinishing If String.IsNullOrEmpty(sCurrSawFinishing) Then Return True ' Inserisco la lavorazione corrente Dim nMchId As Integer = EgtAddMachining(NAME_FRAME_SAWFIN, sCurrSawFinishing) If nMchId = GDB_ID.NULL Then Return False ' La sposto prima di una eventuale spatolatura Dim nSideFinId As Integer = EgtGetFirstOperation() While nSideFinId <> GDB_ID.NULL Dim sName As String = String.Empty If EgtGetOperationName(nSideFinId, sName) AndAlso String.Compare(sName, NAME_FRAME_SAWSIDEFIN, True) = 0 Then Exit While End If nSideFinId = EgtGetNextOperation(nSideFinId) End While If nSideFinId <> GDB_ID.NULL Then If Not EgtRelocate(nMchId, nSideFinId, GDB_POS.BEFORE) Then EgtErase(nMchId) Return False End If End If ' Recupero sezioni e prima guida dei pezzi nel grezzo Dim nCount As Integer = EgtGetPartInRawPartCount(nRawId) Dim vId(nCount) As Integer Dim nInd As Integer = 0 Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawId) vId(nCount) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_GUIDE)) While nPartId <> GDB_ID.NULL vId(nInd) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_SECT)) nInd += 1 nPartId = EgtGetNextPartInRawPart(nPartId) End While ' Imposto la geometria EgtSetMachiningGeometry(vId) ' Applico la lavorazione Return EgtApplyMachining(False) End Function Friend Function AddFrameSawSideFinishing() As Boolean ' Cancello la lavorazione di spatolatura Dim nId As Integer = EgtGetOperationId(NAME_FRAME_SAWSIDEFIN) EgtRemoveOperation(nId) ' Recupero il grezzo corrente Dim nRawId As Integer = EgtGetFirstRawPart() If nRawId = GDB_ID.NULL Then Return False ' Se non ci sono pezzi, esco If EgtGetPartInRawPartCount(nRawId) = 0 Then Return True ' Recupero la lavorazione corrente di spatolatura con lama Dim sCurrSawSideFinishing = m_MainWindow.m_CurrentMachine.sCurrSawSideFinishing If String.IsNullOrEmpty(sCurrSawSideFinishing) Then Return True ' Inserisco la lavorazione corrente Dim nMchId As Integer = EgtAddMachining(NAME_FRAME_SAWSIDEFIN, sCurrSawSideFinishing) If nMchId = GDB_ID.NULL Then Return False ' Recupero sezioni e prima guida dei pezzi nel grezzo Dim nCount As Integer = EgtGetPartInRawPartCount(nRawId) Dim vId(nCount) As Integer Dim nInd As Integer = 0 Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawId) vId(nCount) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_GUIDE)) While nPartId <> GDB_ID.NULL vId(nInd) = EgtGetFirstInGroup(EgtGetFirstNameInGroup(nPartId, NAME_SECT)) nInd += 1 nPartId = EgtGetNextPartInRawPart(nPartId) End While ' Imposto la geometria EgtSetMachiningGeometry(vId) ' Applico la lavorazione Return EgtApplyMachining(False) End Function End Module