Risultati da 1 a 3 di 3
  1. #1
    Utente poco attivo
    Iscritto dal
    2016
    Messaggi
    3
    Professione
    Studente
    Regione
    Liguria
    Software
    Solidworks

    Predefinito Errore macro per importazione punti da txt

    Salve a tutti, mi chiamo Omar e sono nuovo del forum. Sono uno studente di ingegneria meccanica (laureando) e ho appena iniziato ad utilizzare Solidworks.
    Non avendo trovato un comando per importare una serie di punti, ho cercato su internet una macro che mi permettesse di farlo. Ne ho trovata una che sembrava funzionare e che riporto di seguito:

    Sub main()

    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    swApp.ActiveDoc.ActiveView.FrameState = 1
    Dim skPoint As Object

    Open "C:\Users\Omar\Desktop\materiale tesi\voluta\linee\prova.txt" For Input As #1
    Part.SketchManager.Insert3DSketch True
    Do While Not EOF(1)
    Input #1, X, Y, Z
    Set skPoint = Part.SketchManager.CreatePoint(X, Y, Z)
    Loop
    Close #1

    End Sub

    Dico sembrava perché i valori dei punti vengono distorti, es. 45.888 diventa 45888, 451.888444 diventa 451888.444, cioè tutti i numeri vengono maggiorati di un fattore 1000; inoltre per valori della terna "piccoli" (diciamo sotto la decina, anche se in realtà sembra abbastanza random), i numeri vengono letti direttamente come 0 (per "risolvere" avevo pensato di dare in input valori ridotti di un fattore 1000 o dividere per 1000 X,Y e Z nella macro).
    Per le mie capacità tutto ciò appare come "misterioso", qualcuno mi sa dare delle spiegazioni? Grazie

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

    Predefinito

    Ciao,
    la macro funziona bene e come dicevi tu devi dividere le coordinate per 1000, questo perché la "chiamata" alle Api "CreatePoint", richiede i valori in metri, questo per tutto quello che riguarda la programmazione in SolidWorks.
    Ti consiglio di dichiarare sempre le variabili giuste per il tipo di dato da contenere, nel tuo caso Double (doppia virgola mobile, è un tipo di dato numero con minimo due decimali, es. trasforma 35 in 35.00).
    L'Api CreatePoint richiede di passargli tre coordinate Double, Vba non sempre, ma fa per te questa "traduzione".

    Mi raccomando sempre al separatore decimale, nel tuo caso il "." che deve coincidere con quello impostato nelle Impostazioni Aggiuntive dentro a Paese e lingua nel Pannello di controllo di Windows, altrimenti il computer interpreta i numeri in modo diverso.

    Mi sono permesso di modificare la macro dichiarando in modo diverso la varibile "swapp" e dichiarando X,Y,Z come Double.
    Inoltre ho inserito di non vedere l'inserimento grafico delle entità in fase di creazione dentro allo schizzo, questo velocizza in modo esponenziale la macro in fase di esecuzione, soprattutto quando i punti diventano tanti.
    Al termine ho chiuso lo schizzo.

    P.S.:Come magari saprai, se davanti a tutto quello che scrivi metti un ' (apostrofo), la riga si dice commentata e appare in verde e non viene letta in fase di esecuzione.

    Buona giornata
    Jenuary

    Ecco il codice aggiornato

    Dim X As Double
    Dim Y As Double
    Dim Z As Double
    Dim swApp As SldWorks.SldWorks
    Dim Part As SldWorks.ModelDoc2
    Sub main()

    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    swApp.ActiveDoc.ActiveView.FrameState = 1

    Dim skPoint As SldWorks.SketchPoint

    Open "C:\prova.txt" For Input As #1
    Part.SketchManager.Insert3DSketch True
    'Per congelare la grafica in fase di inserimento, tutto è molto più veloce
    Part.SketchManager.AddToDB = True

    Do While Not EOF(1)
    Input #1, X, Y, Z
    Set skPoint = Part.SketchManager.CreatePoint(X / 1000, Y / 1000, Z / 1000)
    Loop
    Close #1
    'Ripristino l'inserimento grafico
    Part.SketchManager.AddToDB = False
    'Chiudo lo schizzo
    Part.SketchManager.Insert3DSketch False
    End Sub

  3. Il seguente utente ha ringraziato jenuary per questo post

    omar91 (17-02-2016)

  4. #3
    Utente poco attivo
    Iscritto dal
    2016
    Messaggi
    3
    Professione
    Studente
    Regione
    Liguria
    Software
    Solidworks

    Predefinito

    Grazie jenuary! Probabilmente quando avevo provato a dividere per 1000 nella macro avevo sbagliato qualcosa e quindi restituiva 0.
    Ti ringrazio ulteriormente anche per le migliorie che hai apportato e che ora proverò. Nel mio caso specifico (diciamo quello più urgente, per la tesi) il numero di punti è limitato (alcuni txt da circa 50 punti), ma per curiosità avevo provato anche con un txt contenente un numero di punti molto più elevato ed effettivamente dopo un po' SW andava in crash.


  • Discussioni Simili

    1. Risposte: 1
      Ultimo Messaggio: 05-02-2012, 01: 46
    2. Macro coordinate punti
      Di erf nel forum Solidworks
      Risposte: 21
      Ultimo Messaggio: 02-11-2011, 17: 54
    3. Macro importazione punti
      Di iron72 nel forum Inventor
      Risposte: 3
      Ultimo Messaggio: 13-06-2010, 15: 24
    4. importazione nuvola di punti .asc in pro-e
      Di jackorion nel forum Creo Parametric (ex Pro/E)
      Risposte: 17
      Ultimo Messaggio: 27-01-2009, 19: 51
    5. SWX 2008: importazione punti 3D da file XLS
      Di czar nel forum Solidworks
      Risposte: 7
      Ultimo Messaggio: 04-06-2008, 14: 08

    Tag per Questa Discussione

    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