Pagina 8 di 9 PrimaPrima ... 6789 UltimaUltima
Risultati da 71 a 80 di 81
  1. #71
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    59
    Professione
    Ingegnere Meccanico
    Regione
    Emilia Romagna
    Software
    SolidWorks, Solid Edge, Inventor, Autocad

    Predefinito

    Ne approfitto per chiederti una piccola cosa: sto cercando di completare la parte di codice relativa alla flag che si apre ogni qual volta si debba decidere quanti punti inserire nello schizzo.
    Io ho cercato di distinguere il caso in cui l'utente inserisca un valore non numerico da quello in cui l'utente inserisca un valore numerico negativo o minore di 1.

    Il codice è questo:

    Codice:
    Dim no_of_items As Single
    Dim flag As Integer
     flag = 1
     While flag = 1
     On Error Resume Next
     no_of_items = InputBox("In quanti punti si desidera suddividere la traiettoria?")
     If (Err.Number <> 0) Then
     MsgBox "Devi inserire un numero"
     flag = 1
     ElseIf (no_of_items < 1) Or (Int(no_of_items) <> no_of_items) Then
     MsgBox "Devi inserire un numero maggiore di zero"
     Else
     flag = 0
     End If
     Wend
    Il mio problema è questo: se io ad esempio mi fossi sbagliato a far partire la macro, non appena appare la finestra mi verrebbe da premere il tasto "annulla" presente nella flag, oppure la "X" in alto a destra. Il problema è che sia il tasto "Annulla" che la "X" non mi permettono di uscire dalla finestra. In pratica una volta fatta comparire questa finestra non si può più tornare indietro, ma bisogna per forza eseguire tutta la macro.

    Dopo qualche prova credo di aver capito che il tasto "Annulla" e la "X" fanno capo al caso "Err.Number > 0". Ti tornano i conti?
    Il problema è che a Err.Number > 0 fanno anche capo tutti quei valori non numerici che l'utente potrebbe inserire.
    C'è un modo per far sì che, se io premo il tasto "Annulla" o la "X", la flag si chiuda e la macro non venga eseguita?

    Grazie

  2. #72
    Utente Standard L'avatar di jenuary
    Iscritto dal
    2007
    Messaggi
    385
    Professione
    Progettista e Programmatore VB.Net
    Regione
    Veneto
    Software
    Solidworks

    Predefinito

    Citazione Originariamente Scritto da alxG88 Visualizza Messaggio
    Ne approfitto per chiederti una piccola cosa: sto cercando di completare la parte di codice relativa alla flag che si apre ogni qual volta si debba decidere quanti punti inserire nello schizzo.
    Io ho cercato di distinguere il caso in cui l'utente inserisca un valore non numerico da quello in cui l'utente inserisca un valore numerico negativo o minore di 1.

    Il codice è questo:

    Codice:
    Dim no_of_items As Single
    Dim flag As Integer
     flag = 1
     While flag = 1
     On Error Resume Next
     no_of_items = InputBox("In quanti punti si desidera suddividere la traiettoria?")
     If (Err.Number <> 0) Then
     MsgBox "Devi inserire un numero"
     flag = 1
     ElseIf (no_of_items < 1) Or (Int(no_of_items) <> no_of_items) Then
     MsgBox "Devi inserire un numero maggiore di zero"
     Else
     flag = 0
     End If
     Wend
    Il mio problema è questo: se io ad esempio mi fossi sbagliato a far partire la macro, non appena appare la finestra mi verrebbe da premere il tasto "annulla" presente nella flag, oppure la "X" in alto a destra. Il problema è che sia il tasto "Annulla" che la "X" non mi permettono di uscire dalla finestra. In pratica una volta fatta comparire questa finestra non si può più tornare indietro, ma bisogna per forza eseguire tutta la macro.

    Dopo qualche prova credo di aver capito che il tasto "Annulla" e la "X" fanno capo al caso "Err.Number > 0". Ti tornano i conti?
    Il problema è che a Err.Number > 0 fanno anche capo tutti quei valori non numerici che l'utente potrebbe inserire.
    C'è un modo per far sì che, se io premo il tasto "Annulla" o la "X", la flag si chiuda e la macro non venga eseguita?

    Grazie

    Inserisci un Exit sottole righe MsgBox e vedrai che funziona.

    Ciao

  3. #73
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    59
    Professione
    Ingegnere Meccanico
    Regione
    Emilia Romagna
    Software
    SolidWorks, Solid Edge, Inventor, Autocad

    Predefinito

    Citazione Originariamente Scritto da jenuary Visualizza Messaggio
    Inserisci un Exit sottole righe MsgBox e vedrai che funziona.
    Si si quello lo so, ma il mio problema (se così si può chiamare) è un altro: come faccio a distinguere il caso in cui l'utente prema il tasto "Annulla" da quello in cui scriva un carattere che non sia un numero?
    Perchè al momento entrambi i casi sono contemplati nella riga di codice: "If (Err.Number <> 0)"
    Diciamo che non è essenziale, ma mi piacerebbe distinguere le due casistiche: se l'utente preme "Annulla" vorrei che si uscisse dalla finestra, mentre se l'utente scrive un carattere non numerico vorrei che lo si avvisasse dell'errore mantenendo però aperta la inputbox, in modo che possa fare un nuovo tentativo senza dover riavviare la macro.

    Ciao

  4. #74
    Utente Standard L'avatar di jenuary
    Iscritto dal
    2007
    Messaggi
    385
    Professione
    Progettista e Programmatore VB.Net
    Regione
    Veneto
    Software
    Solidworks

    Predefinito

    Dai un occhiata qui
    http://forum.html.it/forum/showthread/t-537260.html
    o qui
    http://forum.html.it/forum/showthread/t-862295.html

    In rete tutti hanno piu o meno gli stessi problemi e spesso le soluzioni sono a portata di mano (per fortuna che c'è internet).

    Ciao

  5. #75
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    59
    Professione
    Ingegnere Meccanico
    Regione
    Emilia Romagna
    Software
    SolidWorks, Solid Edge, Inventor, Autocad

    Predefinito

    In questo periodo ho utilizzato la macro e devo dire che funziona benissimo!
    Avrei un consiglio da chiederti: avrei bisogno di calcolare la lunghezza della mia curva. Ho visto sul web che esiste un'istruzione chiamata "GetLength3(StartParam, EndParam)" che permette di farlo, ma necessita dell'inserimento di due parametri relativi al punto iniziale e finale della mia curva (che come sai bene è un'insieme di diversi tratti, che vengono poi uniti in un'unica spline). Ho provato ma non riesco bene a capire come impostare il codice per calcolarmi la lunghezza della curva. Hai idea di come si possa fare?

    Grazie mille

  6. #76
    Utente Standard L'avatar di jenuary
    Iscritto dal
    2007
    Messaggi
    385
    Professione
    Progettista e Programmatore VB.Net
    Regione
    Veneto
    Software
    Solidworks

    Predefinito

    Ciao, ho modificato la macro e alla fine di tutto il processo, all'interno della Sub Main,
    ho inserito la misurazione dello schizzo, funziona in questo modo:
    - Gli si passa lo schizzo
    - Vengono scartate le linee di costruzione, che nel nostro caso erano le entità che hanno formato la spline.
    - Viene ritornato la lunghezza totale (nel nostro caso abbiamo solo una spline).

    Valuta se puo andarti bene
    File Allegati File Allegati

  7. #77
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    59
    Professione
    Ingegnere Meccanico
    Regione
    Emilia Romagna
    Software
    SolidWorks, Solid Edge, Inventor, Autocad

    Predefinito

    Ti ringrazio per la risposta. Si va benissimo grazie! Io avevo provato a calcolare la lunghezza in un modo differente: lo avevo fatto all'interno del Sub Punti () e avevo scritto questo:
    Codice:
        Dim swApp                                       As SldWorks.SldWorks
        Dim swModel                                     As SldWorks.ModelDoc2
        Dim boolstatus                                  As Boolean
        Dim nLength                                     As Double
        Dim SelectionManager                         As Object
        Dim SketchSegment                           As Object
    
        'Misurazione della lunghezza totale della curva
        Set swApp = Application.SldWorks
        Set swModel = swApp.ActiveDoc
        
        boolstatus = swModel.Extension.SelectByID2("Spline" & vID(1) & "@" & MySketchName, "EXTSKETCHSEGMENT", -2.26303320559162, 0.274955752667652, 0, True, 0, Nothing, 0)
        Debug.Print "Spline" & vID(1) & "@" & MySketchName
        
        Set SelectionManager = swModel.SelectionManager()
        Set SketchSegment = SelectionManager.GetSelectedObject6(1, 0)
        nLength = SketchSegment.GetLength()               'Lunghezza della spline risultante
    Secondo te è corretto questo codice oppure in questo modo non si calcola la lunghezza della spline?

    Grazie

  8. #78
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    59
    Professione
    Ingegnere Meccanico
    Regione
    Emilia Romagna
    Software
    SolidWorks, Solid Edge, Inventor, Autocad

    Predefinito

    Intanto che ci sono ne approfitto per chiederti una cosa che mi preme un po': secondo te sarebbe complicato se io volessi scrivere sul file txt le tre coordinate dopo averle moltiplicate (o divise) per alcuni coefficienti?
    Mi spiego meglio: mettiamo il caso che io abbia un punto di coordinate x =1 y = 2 z = 3. Se io volessi riportare sul file txt una cosa del tipo:
    x = 1*8 y = 2+5 z = (3*4)+2, sarebbe una cosa molto complicata?

    Posso svolgere i calcoli direttamente al momento in cui scrivo sul file txt?

    Codice:
    f.writeline Format(Round(swMathPt.ArrayData(0) * 1000#, 3)) & " " & _
                                        Format(Round(swMathPt.ArrayData(1) * 1000#, 3)) & " " & _
                                        Format(Round(swMathPt.ArrayData(2) * 1000#, 3))
                             
                                    i = i + 1
    oppure mi conviene svolgerli prima?

    Ti ringrazio in anticipo, perchè è una cosa a cui sto pensando da parecchio e che mi preme abbastanza, ma non so bene da dove partire.

    ciao

  9. #79
    Utente Standard L'avatar di jenuary
    Iscritto dal
    2007
    Messaggi
    385
    Professione
    Progettista e Programmatore VB.Net
    Regione
    Veneto
    Software
    Solidworks

    Predefinito

    Ciao alxG88,
    relativamente ai calcoli:
    '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''
    f.writeline Format(Round(swMathPt.ArrayData(0) * 1000#, 3)) & " " & _
    Format(Round(swMathPt.ArrayData(1) * 1000#, 3)) & " " & _
    Format(Round(swMathPt.ArrayData(2) * 1000#, 3))

    i = i + 1
    '''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''
    io condivido il codice, cioè trasformerei i numeri durante la scrittura nel file, questo per non intaccare le coordinate originali, utili per eventuali calcoli futuri se implementerai la macro.
    Inoltre creeresti ulteriori variabili al tuo codice che comunque dovrai poi scrivere nel file di testo.

    Per la selezione e la misurazione della spline risultante, il codice che avevi scritto è corretto, anche se meno dinamico, infatti
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''
    boolstatus = swModel.Extension.SelectByID2("Spline" & vID(1) & "@" & MySketchName, "EXTSKETCHSEGMENT", -2.26303320559162, 0.274955752667652, 0, True, 0, Nothing, 0)
    Debug.Print "Spline" & vID(1) & "@" & MySketchName
    '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''
    ti permette di selezionare la spline, ma non è detto che domani tu non abbia bisogno di aggiungere altre curve al tuo schizzo, dovendo implementare la tua selezione con altri SelectBiID2.
    La strada più flessibile è quella della scansione delle entità, anche se in fase di creazione del codice sappiamo entrambi che non è la più veloce.

    Ottimo lavoro comunque, e ....mi piacerebbe, se possibile e se posso chiedere, vedere un piccolo video della mini fresa in movimento...mi piacciono queste cose.

    Buona giornata a tutti

  10. #80
    Utente Junior
    Iscritto dal
    2013
    Messaggi
    59
    Professione
    Ingegnere Meccanico
    Regione
    Emilia Romagna
    Software
    SolidWorks, Solid Edge, Inventor, Autocad

    Predefinito

    Citazione Originariamente Scritto da jenuary Visualizza Messaggio
    mi piacerebbe, se possibile e se posso chiedere, vedere un piccolo video della mini fresa in movimento...mi piacciono queste cose.
    Certamente!Al momento non ho ancora testato questa macro sulla fresa, ma entro 15/20 giorni dovrei iniziare a fare le prove pratiche, quindi non appena riuscirò a farle compiere qualche piccola lavorazione farò un video e te lo farò vedere!!...

    Ciao e a presto


  • Pagina 8 di 9 PrimaPrima ... 6789 UltimaUltima

    Discussioni Simili

    1. Calcolare il volume
      Di fapalti27 nel forum Altri CAD per la Meccanica
      Risposte: 5
      Ultimo Messaggio: 18-09-2017, 19: 31
    2. Macro coordinate punti
      Di erf nel forum Solidworks
      Risposte: 21
      Ultimo Messaggio: 02-11-2011, 17: 54
    3. Calcolare il peso
      Di ciccino nel forum AutoCAD
      Risposte: 3
      Ultimo Messaggio: 05-11-2010, 21: 20
    4. Risposte: 14
      Ultimo Messaggio: 13-09-2010, 15: 33
    5. Calcolare un'espressione
      Di Shaba nel forum OneSpace Designer Modeling
      Risposte: 26
      Ultimo Messaggio: 14-01-2008, 09: 45

    Segnalibri

    Segnalibri

    Permessi di Scrittura

    • Tu non puoi inviare nuove discussioni
    • Tu non puoi inviare risposte
    • Tu non puoi inviare allegati
    • Tu non puoi modificare i tuoi messaggi
    •  





    CAD3D.it - la community dei progettisti