Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'Tooling
- Function T_RECT1(ByVal XS As Double, ByVal XD As Double, ByVal YI As Double, ByVal YS As Double) As String
- N1 = Round(XS, 2)
- N2 = Round(XD, 2)
- N3 = Round(YI, 2)
- N4 = Round(YS, 2)
- If XS > XD Then
- XS = N2
- XD = N1
- End If
- If YI > YS Then
- YI = N4
- YS = N3
- End If
- ''********************
- 'If YI < -4 Then
- 'YI = -4
- 'End If
- ''********************
- XC = (XS + XD) / 2
- YC = (YI + YS) / 2
- WDTJ = Abs(XS - XD)
- HGTJ = Abs(YI - YS)
- T_RECT1 = T_RECT2(XC, YC, WDTJ, HGTJ)
- If T_RECT1 = "" Then MsgBox ("ATTENZIONE ERRORE SPACCO RETTANGOLARE SU") & " " & ACT_MOD
- End Function
- Function T_RECT2(ByVal XC As Double, ByVal YC As Double, ByVal WDT As Double, ByVal HGT As Double) As String
- 'ESEGUE UNA LAVORAZIONE RETTANGOLARE
- 'XC = X CENTRO RETTANGOLO YC= Y CENTRO RETTANGOLO
- 'WDT = LARGHEZZA RETTANGOLO HGT= ALTEZZA RETTANGOLO
- WDT = Round(WDT, 2)
- HGT = Round(HGT, 2)
- XC = Round(XC, 2)
- YC = Round(YC, 2)
- XSX = XC - WDT / 2
- YLW = YC - HGT / 2
- If XSX <= 0 Then LSX = 1 Else LSX = 0
- If YLW <= 0 Then LNF = 1 Else LNF = 0
- TX = LAB_2(WDT, HGT)
- TXQ = LAB_7(WDT, HGT)
- ' --------------------------- COMPARIAMO I RISULTATI FRA QUADRI E RETTANGOLI:
- RQ = 0
- If TX <> "" Then RQ = ((1 * Right(TX, InStr(1, StrReverse(TX), " ", vbTextCompare) - 1)) ^ 2) / (WDT * HGT) ' INDICE DELLA LAVORAZIONE COL QUADRO
- If TXQ <> "" Then
- MLR = Right(TXQ, Len(TXQ) - InStr(1, TXQ, " ", vbBinaryCompare))
- MDX = NUM(Right(MLR, InStr(1, StrReverse(MLR), " ", vbTextCompare) - 1))
- MSX = NUM(Left(MLR, InStr(1, MLR, " ", vbTextCompare)))
- End If
- RR = 0
- RR = (MDX * MSX) / (WDT * HGT) ' INDICE DELLA PRESTAZIONE CON RETTANGOLO
- If ACT_MOD = "1006715" And InStr(1, TXQ, "30 5") > 0 Then 'ELIMINARE
- RR = 0
- End If
- If ACT_MOD = "1014657" And InStr(1, TXQ, "32,6 22,6") > 0 Then 'ELIMINARE
- RR = 0
- End If
- If TX & TXQ = "" Then GoTo UUUUUU
- If RQ > RR Then
- TLBL = Left(TX, InStr(1, TX, " ", vbBinaryCompare) - 1) 'ETICHETTA DELL'UTENSILE QUADRO SELEZIONATO
- SQRV = Right(TX, Len(TX) - InStr(1, TX, " ", vbBinaryCompare)) 'LATO DELL'UTENSILE QUADRO SELEZIONATO
- MIN_LAT = -(WDT * (WDT <= HGT) + HGT * (WDT > HGT)) 'LATO MINIMO DEL RETTANGOLO
- DIFF = MIN_LAT - SQRV
- Select Case DIFF
- Case Is > 0 'RODITURA X-Y
- NPX = WDT / SQRV
- If NPX > 1 Then
- NPX = Int(NPX)
- PX = Round((WDT - SQRV) / NPX, 2)
- End If
- NPY = HGT / SQRV
- If NPY > 1 Then
- NPY = Int(NPY)
- PY = Round((HGT - SQRV) / NPY, 2)
- End If
- Select Case LSX & LNF
- Case "00" ' SCANTONATURA DX ALTA
- XPC = XC + (WDT / 2 - SQRV / 2)
- YPC = YC + (HGT / 2 - SQRV / 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G37 = "G37/I-" & PX & "/P" & NPX & "/J-" & PY & "/K" & NPY & "/" & TLBL & "/*SQ*/>"
- Case "11" ' SCANTONATURA SX BASSA
- XPC = XC - (WDT / 2 - SQRV / 2)
- YPC = YC - (HGT / 2 - SQRV / 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G37 = "G37/I" & PX & "/P" & NPX & "/J" & PY & "/K" & NPY & "/" & TLBL & "/*SQ*/>"
- Case "10" ' SCANTONATURA SX ALTA
- XPC = XC - (WDT / 2 - SQRV / 2)
- YPC = YC + (HGT / 2 - SQRV / 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G37 = "G37/I" & PX & "/P" & NPX & "/J-" & PY & "/K" & NPY & "/" & TLBL & "/*SQ*/>"
- Case "01" ' SCANTONATURA DX BASSA
- XPC = XC + (WDT / 2 - SQRV / 2)
- YPC = YC - (HGT / 2 - SQRV / 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G37 = "G37/I-" & PX & "/P" & NPX & "/J" & PY & "/K" & NPY & "/" & TLBL & "/*SQ*/>"
- End Select
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G37))
- Case Is = 0
- If HGT - WDT = 0 Then 'COLPO SINGOLO
- XPC = XC
- YPC = YC
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/>"
- T_RECT2 = ST64(Jcdf(G90))
- Else
- If WDT > HGT Then 'RODITURA X
- NPX = WDT / SQRV
- If NPX > 1 Then
- NPX = Int(NPX)
- PX = Round((WDT - SQRV) / NPX, 2)
- End If
- If LSX = 1 Then '-------DA DX A SX <<<<<<
- XPC = Round(XC - (WDT / 2 - SQRV / 2), 2)
- YPC = Round(YC, 2)
- REP_X = XPC - 2000
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G28 = "G28/I" & PX & "/J0./K" & NPX & "/" & TLBL & "/*SQ*/>"
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- Else '-------DA SX A DX >>>>>>>
- XPC = Round(XC + (WDT / 2 - SQRV / 2), 2)
- YPC = Round(YC, 2)
- REP_X = XPC - 2000
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G28 = "G28/I" & PX & "/J180./K" & NPX & "/" & TLBL & "/*SQ*/>"
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- End If
- Else 'RODITURA Y
- NPY = HGT / SQRV
- If NPY > 1 Then
- NPY = Int(NPY)
- PY = Round((HGT - SQRV) / NPY, 2)
- End If
- If LNF = 1 Then '------DALL'BASSO ALL'ALTO
- XPC = Round(XC, 2)
- YPC = Round(YC - (HGT / 2 - SQRV / 2), 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G28 = "G28/I" & PY & "/J90./K" & NPY & "/" & TLBL & "/*SQ*/>"
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- Else '-------DALL'ALTO AL BASSO
- XPC = Round(XC, 2)
- YPC = Round(YC + HGT / 2 - SQRV / 2, 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G28 = "G28/I" & PY & "/J-90./K" & NPY & "/" & TLBL & "/*SQ*/>"
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- End If
- End If
- End If
- Case Is < 0
- End Select
- Else '---------------------- DEFINIAMO LA LAVORAZIONE FATTA DI RETTANGOLO
- UTE = Left(TXQ, InStr(1, TXQ, " ", vbBinaryCompare) - 1)
- ANG = Right(UTE, InStr(1, StrReverse(UTE), "_", vbBinaryCompare) - 1)
- TLBL = Left(UTE, InStr(1, UTE, "_", vbBinaryCompare) - 1)
- If Right(ANG, 1) = "I" Then TLBL = TLBL & "C" & Replace(ANG, "I", "") & "."
- MLR = Right(TXQ, Len(TXQ) - InStr(1, TXQ, " ", vbBinaryCompare))
- Select Case ANG
- Case "0", "0I"
- XXX = NUM(Left(MLR, InStr(1, MLR, " ", vbTextCompare)))
- YYY = NUM(Right(MLR, InStr(1, StrReverse(MLR), " ", vbTextCompare) - 1))
- Case "90", "90I"
- XXX = NUM(Right(MLR, InStr(1, StrReverse(MLR), " ", vbTextCompare) - 1))
- YYY = NUM(Left(MLR, InStr(1, MLR, " ", vbTextCompare)))
- Case Else
- MsgBox "ERROR RECT TOOL ANGLE"
- End Select
- RX = "0"
- RY = "0"
- If WDT > XXX Then RX = "1"
- If HGT > YYY Then RY = "1"
- Select Case RX & RY
- Case "00" 'COLPO -------------------------------------------------------------------------------------
- XPC = XC
- YPC = YC
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/>"
- T_RECT2 = ST64(Jcdf(G90))
- Case "11" 'RODITURA XY -------------------------------------------------------------------------------------
- NPX = WDT / XXX
- If NPX > 1 Then
- NPX = Int(NPX)
- PX = Round((WDT - XXX) / NPX, 3)
- End If
- NPY = HGT / YYY
- If NPY > 1 Then
- NPY = Int(NPY)
- PY = Round((HGT - YYY) / NPY, 3)
- End If
- Select Case LSX & LNF
- Case "00" ' SCANTONATURA DX ALTA
- XPC = XC + (WDT / 2 - XXX / 2)
- YPC = YC + (HGT / 2 - YYY / 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G37 = "G37/I-" & PX & "/P" & NPX & "/J-" & PY & "/K" & NPY & "/" & TLBL & "/*SQ*/>"
- Case "11" ' SCANTONATURA SX BASSA
- XPC = XC - (WDT / 2 - XXX / 2)
- YPC = YC - (HGT / 2 - YYY / 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G37 = "G37/I" & PX & "/P" & NPX & "/J" & PY & "/K" & NPY & "/" & TLBL & "/*SQ*/>"
- Case "10" ' SCANTONATURA SX ALTA
- XPC = XC - (WDT / 2 - XXX / 2)
- YPC = YC + (HGT / 2 - YYY / 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G37 = "G37/I" & PX & "/P" & NPX & "/J-" & PY & "/K" & NPY & "/" & TLBL & "/*SQ*/>"
- Case "01" ' SCANTONATURA DX BASSA
- XPC = XC + (WDT / 2 - XXX / 2)
- YPC = YC - (HGT / 2 - YYY / 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G37 = "G37/I-" & PX & "/P" & NPX & "/J" & PY & "/K" & NPY & "/" & TLBL & "/*SQ*/>"
- End Select
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G37))
- Case "01" 'RODITURA IN Y
- NPY = HGT / YYY
- If NPY > 1 Then
- NPY = Int(NPY)
- PY = Round((HGT - YYY) / NPY, 2)
- End If
- If LNF = 1 Then '------DALL'BASSO ALL'ALTO
- XPC = Round(XC, 2)
- YPC = Round(YC - (HGT / 2 - YYY / 2), 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G28 = "G28/I" & PY & "/J90./K" & NPY & "/" & TLBL & "/*SQ*/>"
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- Else '-------DALL'ALTO AL BASSO
- XPC = Round(XC, 2)
- YPC = Round(YC + HGT / 2 - YYY / 2, 2)
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G28 = "G28/I" & PY & "/J-90./K" & NPY & "/" & TLBL & "/*SQ*/>"
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- End If
- Case "10"
- NPX = WDT / XXX
- If NPX > 1 Then
- NPX = Int(NPX)
- PX = Round((WDT - XXX) / NPX, 2)
- End If
- If LSX = 1 Then '-------DA DX A SX <<<<<<
- XPC = Round(XC - (WDT / 2 - XXX / 2), 2)
- YPC = Round(YC, 2)
- REP_X = XPC - 2000
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G28 = "G28/I" & PX & "/J0./K" & NPX & "/" & TLBL & "/*SQ*/>"
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- Else '-------DA SX A DX >>>>>>>
- XPC = Round(XC + (WDT / 2 - XXX / 2), 2)
- YPC = Round(YC, 2)
- REP_X = XPC - 2000
- G90 = "G90/X" & XPC & "/Y" & YPC & "/" & TLBL & "/*SQI*/>"
- G28 = "G28/I" & PX & "/J180./K" & NPX & "/" & TLBL & "/*SQ*/>"
- T_RECT2 = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- End If
- Case "11"
- MsgBox "ERROR RECT NIBBLING", vbCritical
- Case Else
- MsgBox "ERROR RECT NIBBLING", vbCritical
- End Select
- End If
- If T_RECT2 = "" Then MsgBox "T_RECT2 FAILED ON DRAWING " & ACT_MOD, vbCritical
- Exit Function
- UUUUUU:
- T_RECT2 = ""
- If T_RECT2 = "" Then MsgBox "T_RECT2 FAILED ON DRAWING " & ACT_MOD, vbCritical
- End Function
- Function T_RECT3(ByVal XC As Double, ByVal YC As Double, ByVal WDT As Double, ByVal HGT As Double) As String
- 'ESEGUE UNA LAVORAZIONE RETTANGOLARE A COLPO SINGOLO
- 'XC = X CENTRO RETTANGOLO YC= Y CENTRO RETTANGOLO
- 'WDT = LARGHEZZA RETTANGOLO HGT= ALTEZZA RETTANGOLO
- For i = 1 To 46
- If UCase(TOOL_VAR(NHD, i, 6)) = "RETTANGOLO" Then
- If (TOOL_VAR(NHD, i, 3) = WDT And TOOL_VAR(NHD, i, 4) = HGT) Then
- TX = TOOL_VAR(NHD, i, 1)
- Exit For
- End If
- End If
- Next i
- T_RECT3 = ST64("G90/X" & XC & "/Y" & YC & "/" & TX & "/>")
- If TX = "" Then
- MsgBox ("ERRORE SU SPACCO RETTANGOLARE A COLPO SINGOLO"), vbCritical
- T_RECT3 = ""
- End If
- End Function
- Function T_CIRC(ByVal X As Double, ByVal Y As Double, ByVal DIAMETER As String) As String
- 'ESEGUE UNA LAVORAZIONE CIRCOLARE A COLPO SINGOLO
- If DIAMETER = "10" Then DIAMETER = "10.1"
- If DIAMETER = "20" Then DIAMETER = "20.2"
- If DIAMETER = "7" Then DIAMETER = "7.2"
- If DIAMETER = "4,5" Then DIAMETER = "4.2"
- If DIAMETER = "4" Then DIAMETER = "4.2"
- If DIAMETER = "6.1" Then DIAMETER = "6"
- LAB_TOOL = LAB_1(DIAMETER)
- If LAB_TOOL = "" Then
- 'If DIAMETER = "36,5" Then
- 'T_CIRC = T_SECTOR(X, Y, DIAMETER)
- 'GoTo END_TCIRC:
- 'End If
- MsgBox ("RODITURA CIRCOLARE DI DIAMETRO " & DIAMETER)
- DIAM_RID = Round(Val(DIAMETER) * 0.75, 1) + 0.1
- For kk = 1 To 10000
- LAB_TOOL = LAB_1(DIAM_RID)
- If LAB_TOOL <> "" Then Exit For
- DIAM_RID = DIAM_RID - 0.05
- DIAM_RID = Round(DIAM_RID, 2)
- If DIAM_RID < 0.55 * Val(DIAMETER) Then
- MsgBox "RODITURA CIRCOLARE FALLITA SU " & ACT_MOD
- T_CIRC = ""
- Exit Function
- End If
- Next kk
- If Val(DIAM_RID) < 8 Then QLR = 0.6 Else QLR = 2 'QUALITA' RODITURA
- G90 = "G90/G72/X" & X & "/Y" & Y & "/*SQI*/>"
- G68 = "G68/I" & Val(DIAMETER) / 2 & "/J180./K-360./P-" & DIAM_RID & "/Q" & QLR & "./" & LAB_TOOL & "/*SQ*/>" 'CONTROLLO VAL
- T_CIRC = ST64(Jcdf(G90)) & ST64(Jcdf(G68))
- Else
- G90 = "G90/X" & X & "/Y" & Y & "/" & LAB_TOOL & "/>"
- T_CIRC = ST64(Jcdf(G90))
- End If
- End Function
- Function T_SECTOR(ByVal X As Double, ByVal Y As Double, ByVal DIAM As Double) ' LAVORAZIONE CIRCOLARE DI 48, DI 36.5 O DI 30
- 'PER AUMENTARE I COLPI ANDARE AD AGIRE SULL'ARCO
- Select Case DIAM
- Case 36.5
- ANGL = 270
- DST = 12
- ARCO = 73 'GRADI
- MsgBox "CONTROLLARE DIAMETRO " & DIAM, vbCritical
- Case 48
- ANGL = 90
- DST = 12
- ARCO = 55 'GRADI
- 'MsgBox "CONTROLLARE DIAMETRO " & DIAM, vbCritical
- Case 50
- ANGL = 90
- DST = 12
- ARCO = 55 'GRADI
- MsgBox "CONTROLLARE DIAMETRO " & DIAM, vbCritical
- Case Else
- MsgBox ("ERROR OF ANGLE IN THE FUNCTION T_SECTOR")
- End Select
- N_RP = (360 / ARCO)
- If Int(N_RP) <> N_RP Then N_RP = Int(N_RP) + 1 Else N_RP = Int(N_RP)
- PIG = 3.14159265358 'PIGRECO
- UTLS = "BI_RAD"
- For RP = 1 To N_RP
- RADN = (ARCO * (RP - 1) * 2 * PIG) / 360
- If ANGL > 360 Then ANGL = ANGL - 360
- SCT1 = SCT1 & T_SPECIAL(X + (DIAM / 2 - DST) * Cos(RADN), Y + (DIAM / 2 - DST) * Sin(RADN), UTLS, "C" & ANGL & ".")
- ANGL = ANGL + ARCO
- Next RP
- T_SECTOR = SCT1
- End Function
- Function T_HEX(ByVal X As Double, ByVal Y As Double, ByVal LARG As Double) As String
- 'ESEGUE UNA LAVORAZIONE ESAGONALE A COLPO SINGOLO
- LARG = Int(LARG)
- BG_LAB:
- Key = "SPECIALE"
- LAB_TOOL = ""
- For i = 1 To 46
- If UCase(TOOL_VAR(NHD, i, 6)) = Key Then
- If Replace(TOOL_VAR(NHD, i, 3), ",", ".") = Replace(LARG, ",", ".") & "EX" Then
- LAB_TOOL = TOOL_VAR(NHD, i, 1)
- Exit For
- End If
- End If
- Next i
- If LAB_TOOL = "" Then
- MsgBox ("NON TROVATO UTENSILE ESAGONALE") & " !!!!!!!!!", vbCritical
- Else
- G90 = "G90/X" & X & "/Y" & Y & "/" & LAB_TOOL & "/>"
- T_HEX = ST64(Jcdf(G90))
- End If
- End Function
- Function T_SLOT(ByVal X As Double, ByVal Y As Double, ByVal LENG As String, ByVal HGT As String, ByVal ROT As Single) As String
- 'ESEGUE UNA LAVORAZIONE AD ASOLA IN COLPO SINGOLO O RODITURA
- 'If HGT = "7,2" Then HGT = "7" 'da eliminare
- If HGT = "5,5" And LENG = "8" And ROT = 0 Then
- '5 COLPI CON IL TONDO DI 5.5
- T_SLOT = T_CIRC(X, Y, 5.5) & T_CIRC(X + 1.25, Y, 5.5) & T_CIRC(X - 1.25, Y, 5.5) & T_CIRC(X + 0.625, Y, 5.5) & T_CIRC(X - 0.625, Y, 5.5)
- Exit Function
- End If
- LENG = Jcdf(LENG)
- HGT = Jcdf(HGT)
- RODITURA = 0
- BG_LAB:
- Key = "Asola"
- '******************************* CERCA UN'ASOLA FISSA
- LAB_TOOL = ""
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key Then
- If TOOL_VAR(NHD, i, 3) = LENG And TOOL_VAR(NHD, i, 4) = HGT & "A" Then
- If TOOL_VAR(NHD, i, 5) = Trim(STR(ROT)) Then
- LAB_TOOL = TOOL_VAR(NHD, i, 1)
- G90 = "G90/X" & X & "/Y" & Y & "/" & LAB_TOOL & "/>"
- T_SLOT = ST64(Jcdf(G90))
- Exit For
- End If
- End If
- If RODITURA = 0 And (Val(Jcdf(TOOL_VAR(NHD, i, 3))) < Val(LENG) And TOOL_VAR(NHD, i, 4) = HGT & "A") Then
- If TOOL_VAR(NHD, i, 5) = Trim(STR(ROT)) Then
- LAB_TOOL = TOOL_VAR(NHD, i, 1)
- PMAX = Val(TOOL_VAR(NHD, i, 3)) - Val(TOOL_VAR(NHD, i, 4))
- XX = ((Vbdf(LENG)) - Val(Vbdf(TOOL_VAR(NHD, i, 3)))) / PMAX
- If XX > Int(XX) Then XX = Int(XX) + 1
- PP = (Vbdf(LENG) - TOOL_VAR(NHD, i, 3)) / XX
- DST = XX / 2 * PP
- PPJ = Jcdf(PP)
- Select Case ROT
- Case 0
- G90 = "G90/X" & X - DST & "/Y" & Y & "/" & LAB_TOOL & "/>"
- G28 = ST64("G28/I" & PPJ & "/J0./K" & XX & "/" & LAB_TOOL & "/>")
- Case 90
- G90 = "G90/X" & X & "/Y" & Y - DST & "/" & LAB_TOOL & "/>"
- G28 = ST64("G28/I" & PPJ & "/J90./K" & XX & "/" & LAB_TOOL & "/>")
- Case Else
- GoTo NLAB
- End Select
- T_SLOT = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- End If
- End If
- End If
- Next i
- '******************************* CERCA UN'ASOLA ROTANTE
- If LAB_TOOL = "" Then
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key Then
- If TOOL_VAR(NHD, i, 3) = LENG And TOOL_VAR(NHD, i, 4) = HGT & "A" Then
- If TOOL_VAR(NHD, i, 5) = "0I" Then
- LAB_TOOL = TOOL_VAR(NHD, i, 1)
- G90 = "G90/X" & X & "/Y" & Y & "/" & LAB_TOOL & "C" & ROT & "./>"
- T_SLOT = ST64(Jcdf(G90))
- Exit For
- End If
- End If
- If RODITURA = 0 And (Val(Jcdf(TOOL_VAR(NHD, i, 3))) < Val(LENG) And TOOL_VAR(NHD, i, 4) = HGT & "A") Then 'AGGIUNTA RODITURA CON ASOLA ROTANTE
- If TOOL_VAR(NHD, i, 5) = "0I" Then
- LAB_TOOL = TOOL_VAR(NHD, i, 1)
- PMAX = Val(TOOL_VAR(NHD, i, 3)) - Val(TOOL_VAR(NHD, i, 4))
- XX = ((Vbdf(LENG)) - Val(Vbdf(TOOL_VAR(NHD, i, 3)))) / PMAX
- If XX > Int(XX) Then XX = Int(XX) + 1
- PP = (Vbdf(LENG) - TOOL_VAR(NHD, i, 3)) / XX
- DST = XX / 2 * PP
- PPJ = Jcdf(PP)
- Select Case ROT
- Case 0
- G90 = "G90/X" & X - DST & "/Y" & Y & "/" & LAB_TOOL & "C" & ROT & "/>"
- G28 = ST64("G28/I" & PPJ & "/J" & ROT & "./K" & XX & "/" & LAB_TOOL & "/>")
- Case 90
- G90 = "G90/X" & X & "/Y" & Y - DST & "/" & LAB_TOOL & "C" & ROT & "/>"
- G28 = ST64("G28/I" & PPJ & "/J" & ROT & "./K" & XX & "/" & LAB_TOOL & "/>")
- End Select
- T_SLOT = ST64(Jcdf(G90)) & ST64(Jcdf(G28))
- End If
- End If 'FINE AGGIUNTA RODITURA CON ASOLA ROTANTE
- End If
- Next i
- End If
- If RODITURA = 1 Then GoTo NLAB
- If LAB_TOOL = "" Then
- RODITURA = 1
- GoTo BG_LAB
- End If
- NLAB:
- If LAB_TOOL = "" Then
- MsgBox ("NON TROVATO UTENSILE ASOLA") & " " & LENG & " x " & HGT & " - " & ROT & " " & ("INSERIRE ALTRO VALORE")
- LENG = InputBox("LENG")
- HGT = InputBox("HGT")
- GoTo BG_LAB
- End If
- End Function
- Function T_SPECIAL(ByVal X As Double, ByVal Y As Double, ByVal TL_LAB As String, ByVal STR_IND As String) As String
- 'ESEGUE UNA LAVORAZIONE SPECIALE A COLPO SINGOLO
- BG_LAB:
- LAB_TOOL = LAB_3(TL_LAB, STR_IND)
- If LAB_TOOL = "" Then
- MsgBox ("NON TROVATO UTENSILE SPECIALE"), vbCritical
- Exit Function
- End If
- G90 = "G90/X" & X & "/Y" & Y & "/" & LAB_TOOL & STR_IND & "/>"
- T_SPECIAL = ST64(Jcdf(G90))
- End Function
- Function LAB_1(ByVal DIAM As String) As String
- 'DEFINISCE UTENSILE X LAVORAZIONE TONDA A COLPO SINGOLO
- Key = "Tondo"
- LAB_1 = ""
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key Then
- If Replace(TOOL_VAR(NHD, i, 3), ",", ".") = Replace(DIAM, ",", ".") Then
- LAB_1 = TOOL_VAR(NHD, i, 1)
- Exit For
- End If
- End If
- Next i
- End Function
- Function LAB_2(ByVal X As Double, ByVal Y As Double) As String
- 'DEFINISCE L'UTENSILE QUADRO X LAVORAZIONE RETTANGOLARE LAB_2= <ETICHETTA LATOUTENSILE>
- Key = "Quadro"
- SQRV = -(X * (X <= Y) + Y * (X > Y))
- If X < 13 Or Y < 13 Then SVP = 10 Else SVP = 20 'PERCENTUALE SOVRAPPOSIZIONE MINIMA COLPI RODITURA
- Dim NDX(100) As String
- Dim LTR(100) As Double
- RRT = 0
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key And TOOL_VAR(NHD, i, 5) <> "45" Then
- If TOOL_VAR(NHD, i, 5) = "0I" Then AGG = "C0." Else AGG = ""
- RRT = RRT + 1
- NDX(RRT) = TOOL_VAR(NHD, i, 1) & AGG
- LTR(RRT) = Val(TOOL_VAR(NHD, i, 3))
- End If
- Next i
- COUNT_T = RRT
- SRCL2: 'BLOCCO CHE ORDINA IN MODO DECRESCENTE DI DIMENSIONE GLI UTENSILI QUADRI
- For i = 1 To COUNT_T - 1
- If LTR(i) < LTR(i + 1) Then
- LTR(0) = LTR(i)
- LTR(i) = LTR(i + 1)
- LTR(i + 1) = LTR(0)
- NDX(0) = NDX(i)
- NDX(i) = NDX(i + 1)
- NDX(i + 1) = NDX(0)
- GoTo SRCL2
- End If
- Next i
- For i = 1 To COUNT_T
- DFR = LTR(i) - SQRV
- Select Case DFR
- Case Is > 0
- If i = COUNT_T Then
- 'MsgBox "ERRORE UTENSILE SPACCO RETTANGOLARE " & ACT_MOD, vbCritical
- Exit For
- End If
- Case Is = 0
- LAB_2 = NDX(i) & " " & LTR(i)
- Exit For
- Case Is < 0
- If SQRV / LTR(i) >= 1 + SVP / 100 Then
- LAB_2 = NDX(i) & " " & LTR(i)
- Exit For
- End If
- End Select
- Next i
- Erase NDX, LTR
- End Function
- Function LAB_3(ByVal TL_LAB As String, ByVal STR_IND As String) As String
- 'DEFINISCE UTENSILE X LAVORAZIONE SPECIALE A COLPO SINGOLO
- LAB_3 = ""
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 3) = TL_LAB Then
- If InStr(1, TOOL_VAR(NHD, i, 3), "RD", vbBinaryCompare) = 0 Then GoTo LLL
- If TOOL_VAR(NHD, i, 5) = Mid(STR_IND, 2, InStr(1, STR_IND, ".") - 2) Then
- LLL:
- LAB_3 = TOOL_VAR(NHD, i, 1)
- Exit For
- End If
- End If
- Next i
- End Function
- Function LAB_4(ByVal WDT As Double, ByVal LGT As Double, ByVal DRZ As String) As String
- 'DEFINISCE UTENSILE RETTANGOLARE
- Dim LAB_LAB(10) As String
- NN = 0
- Key = "RETTANGOLO"
- LAB_4 = ""
- L4 = ""
- For i = 1 To 46
- L4 = ""
- If UCase(TOOL_VAR(NHD, i, 6)) = Key Then
- If (TOOL_VAR(NHD, i, 3) = WDT And TOOL_VAR(NHD, i, 4) <= LGT) Or (TOOL_VAR(NHD, i, 4) = WDT And TOOL_VAR(NHD, i, 3) <= LGT) Then
- If TOOL_VAR(NHD, i, 3) = WDT Then LL = TOOL_VAR(NHD, i, 4)
- If TOOL_VAR(NHD, i, 4) = WDT Then LL = TOOL_VAR(NHD, i, 3)
- LB_ANG = TOOL_VAR(NHD, i, 5)
- LB_IND = TOOL_VAR(NHD, i, 2)
- Select Case DRZ
- Case "X+", "X-"
- If LB_ANG = "0I" Then L4 = TOOL_VAR(NHD, i, 1) & "C0." & "*" & LL
- If LB_ANG = "0" Then L4 = TOOL_VAR(NHD, i, 1) & "*" & LL
- Case "Y+", "Y-"
- If LB_ANG = "0I" Then L4 = TOOL_VAR(NHD, i, 1) & "C90." & "*" & LL
- If LB_ANG = "90" Then L4 = TOOL_VAR(NHD, i, 1) & "*" & LL
- Case Else
- MsgBox ("ERRORE SU RODITURA RETTANGOLARE")
- End Select
- If L4 <> "" Then
- NN = NN + 1
- LAB_LAB(NN) = L4
- End If
- End If
- End If
- Next i
- If NN = 1 Then LAB_4 = LAB_LAB(1)
- If NN > 1 Then
- LAB_4 = ""
- AAAAAA:
- For SSRY = 1 To NN - 1 'METTO IN FILA DAL PIù CORTO AL PIù LUNGO
- If Val(Right(LAB_LAB(SSRY), InStr(1, StrReverse(LAB_LAB(SSRY)), "*", vbBinaryCompare) - 1)) > Val(Right(LAB_LAB(SSRY + 1), InStr(1, StrReverse(LAB_LAB(SSRY + 1)), "*", vbBinaryCompare) - 1)) Then
- ZFRTY = LAB_LAB(SSRY)
- LAB_LAB(SSRY) = LAB_LAB(SSRY + 1)
- LAB_LAB(SSRY + 1) = ZFRTY
- GoTo AAAAAA
- End If
- Next SSRY
- NN = 2
- For SSRX = 1 To NN
- If LGT > Val(Right(LAB_LAB(SSRY), InStr(1, StrReverse(LAB_LAB(SSRY)), "*", vbBinaryCompare) - 1)) Then LAB_4 = LAB_LAB(SSRX)
- Next SSRX
- End If
- End Function
- Function LAB_5(ByVal X As Double, ByVal Y As Double) As String
- 'DEFINISCE L'UTENSILE X LAVORAZIONE RETTANGOLARE LAB_2= <ETICHETTA LATOUTENSILE>
- Key = "Rettangolo"
- Dim NDX(100) As String
- Dim LTR(100) As Double
- RRT = 0
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key And TOOL_VAR(NHD, i, 5) = "0" Then
- If TOOL_VAR(NHD, i, 3) = X And TOOL_VAR(NHD, i, 4) = Y Then
- RRT = RRT + 1
- LAB_5 = TOOL_VAR(NHD, i, 1)
- End If
- End If
- Next i
- If LAB_5 = "" Then
- RRT = 0
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key And TOOL_VAR(NHD, i, 5) = "90" Then
- If TOOL_VAR(NHD, i, 3) = Y And TOOL_VAR(NHD, i, 4) = X Then
- RRT = RRT + 1
- LAB_5 = TOOL_VAR(NHD, i, 1)
- End If
- End If
- Next i
- End If
- If LAB_5 = "" Then
- RRT = 0
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key And TOOL_VAR(NHD, i, 5) = "0I" Then
- If TOOL_VAR(NHD, i, 3) = Y And TOOL_VAR(NHD, i, 4) = X Then
- RRT = RRT + 1
- LAB_5 = TOOL_VAR(NHD, i, 1)
- End If
- End If
- Next i
- End If
- Erase NDX, LTR
- End Function
- Function LAB_6(ByVal LATO As String) As String
- 'DEFINISCE UTENSILE QUADRO A 45
- Key = "Quadro"
- LAB_6 = ""
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key Then
- If Replace(TOOL_VAR(NHD, i, 3), ",", ".") = Replace(LATO, ",", ".") Then
- If TOOL_VAR(NHD, i, 5) = "0I" Then
- LAB_6 = TOOL_VAR(NHD, i, 1)
- Exit For
- End If
- End If
- End If
- Next i
- End Function
- Function LAB_7(ByVal X As Double, ByVal Y As Double) As String
- 'DEFINISCE L'UTENSILE X LAVORAZIONE RETTANGOLARE LAB_2= <ETICHETTA LATOUTENSILE>
- Key = "Rettangolo"
- Dim NDX(100, 6) As String
- RRT = 0
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key And TOOL_VAR(NHD, i, 5) = "0" Then
- If NUM(TOOL_VAR(NHD, i, 3)) <= X And NUM(TOOL_VAR(NHD, i, 4)) <= Y Then
- RRT = RRT + 1
- NDX(RRT, 1) = i
- NDX(RRT, 2) = TOOL_VAR(NHD, i, 5)
- NDX(RRT, 3) = TOOL_VAR(NHD, i, 3)
- NDX(RRT, 4) = TOOL_VAR(NHD, i, 4)
- End If
- End If
- Next i
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key And TOOL_VAR(NHD, i, 5) = "90" Then
- If NUM(TOOL_VAR(NHD, i, 3)) <= Y And NUM(TOOL_VAR(NHD, i, 4)) <= X Then
- RRT = RRT + 1
- NDX(RRT, 1) = i
- NDX(RRT, 2) = TOOL_VAR(NHD, i, 5)
- NDX(RRT, 3) = TOOL_VAR(NHD, i, 4)
- NDX(RRT, 4) = TOOL_VAR(NHD, i, 3)
- End If
- End If
- Next i
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key And TOOL_VAR(NHD, i, 5) = "0I" Then 'INDEXRR A 0 GRADI
- If NUM(TOOL_VAR(NHD, i, 3)) <= X And NUM(TOOL_VAR(NHD, i, 4)) <= Y Then
- RRT = RRT + 1
- NDX(RRT, 1) = i
- NDX(RRT, 2) = TOOL_VAR(NHD, i, 5)
- NDX(RRT, 3) = TOOL_VAR(NHD, i, 3)
- NDX(RRT, 4) = TOOL_VAR(NHD, i, 4)
- End If
- End If
- Next i
- For i = 1 To 46
- If TOOL_VAR(NHD, i, 6) = Key And TOOL_VAR(NHD, i, 5) = "0I" Then 'INDEXRR
- If NUM(TOOL_VAR(NHD, i, 3)) <= Y And NUM(TOOL_VAR(NHD, i, 4)) <= X Then
- RRT = RRT + 1
- NDX(RRT, 1) = i
- NDX(RRT, 2) = "90I"
- NDX(RRT, 3) = TOOL_VAR(NHD, i, 3)
- NDX(RRT, 4) = TOOL_VAR(NHD, i, 4)
- End If
- End If
- Next i
- NDX(0, 1) = 0 ' VARIABILE IN CUI REGISTRO IL VALORE DI COPERTURA PIU'ALTO
- NDX(0, 2) = 0 ' VARIABILE IN CUI REGISTRO L'INDICE CHE GENERA IL VALORE DI COPERTURA PIU'ALTO
- If RRT > 0 Then
- For RGQ = 1 To RRT
- Select Case NDX(RGQ, 2)
- Case "0", "90", "0I"
- XXX = NUM(NDX(RGQ, 3)) 'INGOMBRO X DELL UTENSILE
- YYY = NUM(NDX(RGQ, 4)) 'INGOMBRO Y DELL UTENSILE
- Case "90I"
- YYY = NUM(NDX(RGQ, 3)) 'INGOMBRO X DELL UTENSILE
- XXX = NUM(NDX(RGQ, 4)) 'INGOMBRO Y DELL UTENSILE
- Case Else
- MsgBox "FUNCTION LAB_7: ANGLE ERROR", vbCritical
- End Select
- svpq = 1.27 'percentuale di sovrapposizione
- FX = (X / XXX)
- FY = (Y / YYY)
- If FX = 1 Or FY = 1 Then GoTo FAI_LAVR
- If FX > svpq And FY > svpq Then
- FAI_LAVR:
- NDX(RGQ, 5) = (XXX * YYY) / (X * Y)
- If InStr(1, STIPITI, ACT_MOD) > 0 Or InStr(1, STIPITI_PORTALI, ACT_MOD) > 0 Then 'aggiunta
- If XXX = 50 And YYY = 5 Then NDX(RGQ, 5) = 0
- End If
- If (X = 112 And Y = 6.7) Or (X = 7.3 And Y = 112) Or (X = 6.7 And Y = 112) Then GoTo no_bislunghi
- If Val(XXX) / Val(YYY) > 7 Or Val(YYY) / Val(XXX) > 7 Then If XXX <> X And YYY <> Y Then NDX(RGQ, 5) = 0 ' UTENSILI BISLUNGHI VIETATI NELLE RODITURE
- no_bislunghi:
- If 1 * NDX(RGQ, 5) > 1 * NDX(0, 1) Then
- NDX(0, 1) = NDX(RGQ, 5)
- NDX(0, 2) = NDX(RGQ, 1)
- NDX(0, 3) = NDX(RGQ, 3)
- NDX(0, 4) = NDX(RGQ, 4)
- NDX(0, 5) = NDX(RGQ, 2)
- Else
- If 1 * NDX(RGQ, 5) = 1 * NDX(0, 1) Then
- If XXX = X Or YYY = Y Then
- NDX(0, 1) = NDX(RGQ, 5)
- NDX(0, 2) = NDX(RGQ, 1)
- NDX(0, 3) = NDX(RGQ, 3)
- NDX(0, 4) = NDX(RGQ, 4)
- NDX(0, 5) = NDX(RGQ, 2)
- Else
- '************* VA A VEDERE L'ANGOLAZIONE CON LA MIGLIORE SOVRAPPOSIZIONE *****************
- If NDX(RGQ, 5) > 0 Then
- If NDX(0, 3) <> "" And NDX(0, 4) <> "" Then
- If NDX(0, 3) <> X And NDX(0, 4) <> Y And NDX(0, 4) <> X And NDX(0, 3) <> Y Then
- SVRPP = 0
- If NDX(0, 5) = "0I" Then SVRPP = ((X / Val(NDX(0, 3))) + (Y / Val(NDX(0, 4))))
- If NDX(0, 5) = "90I" Then SVRPP = ((X / Val(NDX(0, 4))) + (Y / Val(NDX(0, 3))))
- If (FX + FY) > SVRPP Then
- NDX(0, 1) = NDX(RGQ, 5)
- NDX(0, 2) = NDX(RGQ, 1)
- NDX(0, 3) = NDX(RGQ, 3)
- NDX(0, 4) = NDX(RGQ, 4)
- NDX(0, 5) = NDX(RGQ, 2)
- End If
- End If
- End If
- End If
- '**********************************************************************
- End If
- End If
- End If
- End If
- Next RGQ
- If NDX(0, 1) > 0 Then LAB_7 = TOOL_VAR(NHD, NDX(0, 2), 1) & "_" & NDX(0, 5) & " " & TOOL_VAR(NHD, NDX(0, 2), 3) & " " & TOOL_VAR(NHD, NDX(0, 2), 4)
- End If
- Erase NDX
- End Function
- Function MR_Y(ByVal VALORE As Double, ByVal DY As Double, ByVal ACT As Byte) As Double
- Select Case ACT
- Case 1
- MR_Y = VALORE
- Case 2
- MR_Y = DY - VALORE
- Case Else
- MsgBox ("ERRORE"), vbCritical, ("MR_Y")
- End Select
- End Function
- Function MR_X(ByVal VALORE As Double, ByVal DX As Double, ByVal ACT As Byte) As Double
- Select Case ACT
- Case 1
- MR_X = VALORE
- Case 2
- MR_X = DX - VALORE
- Case Else
- MsgBox ("ERRORE"), vbCritical, ("MR_X")
- End Select
- End Function
- Function T_BLQ(ByVal XI As Double, ByVal YI As Double, ByVal Xf As Double, ByVal YF As Double, ByVal SVPI As Double, ByVal SVPF As Double) As String
- 'FUNZIONE PER IL TAGLIO OBLIQUO DA FARE E VERIFICARE
- T_BLQ = TG_R(7.5, XI, YI, Xf, YF, SVPI, SVPF)
- 'If ind = 0 Then
- 'G90 = "G90/X" & X & "/Y" & Y & "/" & LAB_TOOL & "/>"
- 'Else
- 'G90 = "G90/X" & X & "/Y" & Y & "/" & LAB_TOOL & "C" & ind & "./>"
- 'End If
- End Function
- Function TG_R(ByVal DU As Double, ByVal XI As Double, ByVal YI As Double, ByVal Xf As Double, ByVal YF As Double, ByVal SVPI As Double, ByVal SVPF As Double) As String
- 'DU = LATO DELL'UTENSILE QUADRO UTILIZZATO PER IL TAGLIO OBLIQUO ; SI GIRA INTORNO AL PUNZONE IN SENSO ANTIORARIO
- Select Case DU
- Case 7.5
- LAB = LAB_3("7SQ", 0) '45
- Case 20
- LAB = LAB_2(20, 20)
- Case Else
- MsgBox ("ERRORE UTENSILE QUADRO X TAGLIO OBLIQUO"), vbCritical
- End Select
- ANG = 9999
- If Xf > XI And YI = YF Then ANG = 0
- If Xf = XI And YI < YF Then ANG = 90
- If Xf < XI And YI = YF Then ANG = 180
- If Xf = XI And YI > YF Then ANG = 270
- If Not ANG = 9999 Then GoTo NNG
- EEA = (YF - YI) / (Xf - XI)
- ANG = (Atn(EEA) * 180) / 3.14159265358979
- ANG = Round(ANG, 5)
- If Xf > XI And YF > YI Then ANG = ANG
- If Xf < XI And YF > YI Then ANG = 180 + ANG
- If Xf < XI And YF < YI Then ANG = ANG + 180
- If Xf > XI And YF < YI Then ANG = 360 + ANG
- If ANG = 360 Then ANG = 0
- NNG:
- ANG = 360 - ANG
- DR = DU / 2
- ANG_R = (ANG * 3.14159265358979) / 180
- DXI = SVPI * Cos(ANG_R)
- DYI = SVPI * Sin(ANG_R)
- DXF = SVPF * Cos(ANG_R)
- DYFF = SVPF * Sin(ANG_R)
- LTA = Round(((YF - YI) ^ 2 + (Xf - XI) ^ 2) ^ (0.5), 2)
- XXX = (Xf + XI) / 2
- YYY = (YF + YI) / 2
- XI = XI - DXI
- YI = YI + DYI
- Xf = Xf + DXF
- YF = YF - DYFF
- LT = Round(((YF - YI) ^ 2 + (Xf - XI) ^ 2) ^ (0.5), 2)
- ''If DU > LT Then DU = LT
- NN = Int(LT / DU)
- PP = Round((LT - DU) / NN, 3) 'PASSO RODITURA
- AU = 90 - ANG 'ANGOLOUTENSILE
- AR = ANG 'ANGOLORODITURA
- XC = XI + DR * (Cos(ANG_R) + Sin(ANG_R))
- YC = YI + DR * (-Sin(ANG_R) + Cos(ANG_R))
- XC = Jcdf(Round(XC, 2))
- YC = Jcdf(Round(YC, 2))
- AR = Jcdf(Round(AR, 2))
- AU = Jcdf(Round(AU, 0))
- If LTA > DU Then
- ST1 = ST64("G90/X" & XC & "/Y" & YC & "/" & LAB & AU & "./>")
- ST2 = ST64("G28/I" & PP & "/J-" & AR & "./K" & NN & "/" & LAB & AU & "./>")
- Else
- XKK = Jcdf(Round(XXX + DR * Sin(ANG_R), 2))
- YKK = Jcdf(Round(YYY + DR * Cos(ANG_R), 2))
- ST1 = ST64("G90/X" & XKK & "/Y" & YKK & "/" & LAB & AU & "./>")
- ST2 = ""
- End If
- TG_R = ST1 & ST2
- End Function
- Function T_PUNCH(ByVal X As Double, ByVal Y As Double, ByVal LAB As String, ByVal ind As Double) As String
- 'ESEGUE UNA LAVORAZIONE A COLPO SINGOLO SECONDO ETICHETTA STABILITA
- LAB_TOOL = LAB
- If ind = 0 Then
- G90 = "G90/X" & X & "/Y" & Y & "/" & LAB_TOOL & "/>"
- Else
- G90 = "G90/X" & X & "/Y" & Y & "/" & LAB_TOOL & "C" & ind & "./>"
- End If
- T_PUNCH = ST64(Jcdf(G90))
- End Function
- Function T_DATAMATRIX(ByVal VALORE As String, ByVal X0 As Double, ByVal Y0 As Double, ByVal VERSO As String)
- PS = 2.5 'PASSO
- Dim R(18) As String
- Dim RC(18, 18) As Byte
- Dim RC2(18, 18) As Byte
- '-------------------------------------------------------
- ' Dichiarazione dell'oggetto array di stringhe
- Dim DATA_MAT() As String
- Dim fn As Object
- ' Creazione dell'oggetto esterno per la logica
- Set fn = CreateObject("Wittur.Amada.Utils.Datamatix")
- ' Viene richiamata la funzione di conversione
- ' 1° Parametro = codice a 8 cifre da decodificare
- ' 2° Parametro = valore booleano che indica se è necessario escludere il perimetro esterno fisso
- DATA_MAT = fn.GetBinaryMatrix(VALORE, False, True) 'CONSIDERO ANCHE IL CONTORNO - (CODICE A 8 CIFRE, CONTORNO, QUADRATO O RETTANGOLARE)
- '-------------------------------------------------------
- Select Case VERSO
- Case "V"
- For TY = 0 To 7
- R(TY + 1) = DATA_MAT(TY) 'RIGA MATRICE DATAMATRIX
- Next TY
- Q_INT = ""
- NORIPET = ""
- For TC = 1 To 8 'RIGA
- For TC1 = 1 To Len(R(TC)) 'COLONNA
- RC2(TC, TC1) = Mid(R(TC), TC1, 1) 'MATRICE PUNTO PER PUNTO
- Next TC1
- Next TC
- For TR = 1 To 18 'FACCIO LA TRASPOSTA DELLA MATRICE
- For TR2 = 1 To 8
- RC(TR, TR2) = RC2(TR2, TR)
- Next TR2
- Next TR
- For kk = 1 To 18 'CONTATORE DI RIGA
- For NN = 1 To 8 'CONTATORE DI COLONNA
- 'GoTo NOASOLE
- '***************************************************************************************ASOLA VERTICALE
- If Not kk > 16 Then
- If Not (InStr(1, NORIPET, "_" & kk & NN & "_") > 0 Or InStr(1, NORIPET, "_" & kk + 1 & NN & "_") > 0 Or InStr(1, NORIPET, "_" & kk + 2 & NN & "_") > 0) Then
- If RC(kk, NN) = 1 And RC(kk + 1, NN) = 1 And RC(kk + 2, NN) = 1 Then
- Q_INT = Q_INT & T_SLOT(X0 + (NN - 1) * PS, Y0 + (kk + 1) * PS, 7, 2, 90)
- NORIPET = NORIPET & "_" & kk & NN & "_" & kk + 1 & NN & "_" & kk + 2 & NN & "_"
- End If
- End If
- End If
- '***************************************************************************************ASOLA ORIZZONTALE
- If Not NN > 6 Then
- If Not (InStr(1, NORIPET, "_" & kk & NN & "_") > 0 Or InStr(1, NORIPET, "_" & kk & NN + 1 & "_") > 0 Or InStr(1, NORIPET, "_" & kk & NN + 2 & "_") > 0) Then
- If RC(kk, NN) = 1 And RC(kk, NN + 1) = 1 And RC(kk, NN + 2) = 1 Then
- Q_INT = Q_INT & T_SLOT(X0 + (NN) * PS, Y0 + (kk) * PS, 7, 2, 0)
- NORIPET = NORIPET & "_" & kk & NN & "_" & kk & NN + 1 & "_" & kk & NN + 2 & "_"
- End If
- End If
- End If
- NOASOLE:
- '*****************************************************************************************TONDO
- If Not InStr(1, NORIPET, "_" & kk & NN & "_") > 0 Then
- If RC(kk, NN) = 1 Then Q_INT = Q_INT & T_CIRC(X0 + (NN - 1) * PS, Y0 + (kk) * PS, 2)
- End If
- Next NN
- Next kk
- T_DATAMATRIX = QORIGINE & QASSEY & QASSEX & Q_INT & QTM_Y & QTM_X
- Case "O"
- For TY = 0 To 7
- R(TY + 1) = DATA_MAT(TY) 'RIGA MATRICE DATAMATRIX
- Next TY
- Q_INT = ""
- NORIPET = ""
- For TC = 1 To 8 'RIGA
- For TC1 = 1 To Len(R(TC)) 'COLONNA
- RC(TC, TC1) = Mid(R(TC), TC1, 1) 'MATRICE PUNTO PER PUNTO
- Next TC1
- Next TC
- For kk = 1 To 8 'CONTATORE DI RIGA
- For NN = 1 To 18 'CONTATORE DI COLONNA
- 'GoTo NOASOLE2
- '***************************************************************************************ASOLA VERTICALE
- If Not kk > 6 Then
- If Not (InStr(1, NORIPET, "_" & kk & NN & "_") > 0 Or InStr(1, NORIPET, "_" & kk + 1 & NN & "_") > 0 Or InStr(1, NORIPET, "_" & kk + 2 & NN & "_") > 0) Then
- If RC(kk, NN) = 1 And RC(kk + 1, NN) = 1 And RC(kk + 2, NN) = 1 Then
- Q_INT = Q_INT & T_SLOT(X0 + (NN - 1) * PS, Y0 + (8 - kk - 1) * PS, 7, 2, 90)
- NORIPET = NORIPET & "_" & kk & NN & "_" & kk + 1 & NN & "_" & kk + 2 & NN & "_"
- End If
- End If
- End If
- '***************************************************************************************ASOLA ORIZZONTALE
- If Not NN > 16 Then
- If Not (InStr(1, NORIPET, "_" & kk & NN & "_") > 0 Or InStr(1, NORIPET, "_" & kk & NN + 1 & "_") > 0 Or InStr(1, NORIPET, "_" & kk & NN + 2 & "_") > 0) Then
- If RC(kk, NN) = 1 And RC(kk, NN + 1) = 1 And RC(kk, NN + 2) = 1 Then
- Q_INT = Q_INT & T_SLOT(X0 + (NN) * PS, Y0 + (8 - kk) * PS, 7, 2, 0)
- NORIPET = NORIPET & "_" & kk & NN & "_" & kk & NN + 1 & "_" & kk & NN + 2 & "_"
- End If
- End If
- End If
- NOASOLE2:
- '*****************************************************************************************TONDO
- If Not InStr(1, NORIPET, "_" & kk & NN & "_") > 0 Then
- If RC(kk, NN) = 1 Then Q_INT = Q_INT & T_CIRC(X0 + (NN - 1) * PS, Y0 + (8 - kk) * PS, 2)
- End If
- Next NN
- Next kk
- T_DATAMATRIX = QORIGINE & QASSEY & QASSEX & Q_INT & QTM_Y & QTM_X
- Case Else
- MsgBox ("ERRORE VERSO DATAMATRIX")
- End Select
- End Function
- Function T_RAD(ByVal XC As Double, ByVal YC As Double, ANGOLO As String)
- 'RAGGIATURA
- Select Case ANGOLO
- Case "1"
- ANGOLO = "-90"
- Case "2"
- ANGOLO = "0"
- Case "3"
- ANGOLO = "90"
- Case "4"
- ANGOLO = "180"
- Case Else
- MsgBox ("errore")
- End Select
- Offset = 0.65
- Select Case ANGOLO
- Case "0"
- T_RAD = T_SPECIAL(XC - Offset, YC + Offset, "RAG-3", "C0.")
- Case "180"
- T_RAD = T_SPECIAL(XC + Offset, YC - Offset, "RAG-3", "C0.")
- Case "90"
- T_RAD = T_SPECIAL(XC - Offset, YC - Offset, "RAG-3", "C0.")
- Case "-90"
- T_RAD = T_SPECIAL(XC + Offset, YC + Offset, "RAG-3", "C0.")
- Case Else
- MsgBox (("ERROR ANGLE 5RD"))
- End Select
- End Function
- Function T_RAG(ByVal X As Double, ByVal Y As Double, ByVal LATO As Integer)
- DSP = 2.9 '2.6
- Select Case LATO
- Case 1 'BASSO SINISTRO
- Y = Y - DSP
- X = X - DSP
- Case 2 'ALTO SINISTRO
- Y = Y + DSP
- X = X - DSP
- Case 3 'ALTO DESTRO
- Y = Y + DSP
- X = X + DSP
- Case 4 'BASSO DESTRO
- Y = Y - DSP
- X = X + DSP
- Case Else
- MsgBox ("ERRORE NELL'ANGOLO DEL RAGGIATORE")
- End Select
- T_RAG = T_SPECIAL(X, Y, "3S", "C0.")
- End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement