Pagina 2 di 2 PrimaPrima 12
Risultati da 11 a 18 di 18
  1. #11
    Utente Standard
    Iscritto dal
    2012
    Messaggi
    702
    Professione
    Leggo e confronto
    Regione
    Fuori dalla cerchia
    Software
    Lettura critica

    Predefinito

    grazie

  2. #12
    Utente Standard
    Iscritto dal
    2012
    Messaggi
    702
    Professione
    Leggo e confronto
    Regione
    Fuori dalla cerchia
    Software
    Lettura critica

    Predefinito

    Allora...
    partendo dal "la" di GP ho sistemato un pò il listato ed ora il lisp aggiunge/sottrae un delta da un blocco con singolo attributo, conservandone un eventuale testo seguente la quota.
    Ad esempio due blocchi contenenti "3.50" e "-3.50 estradosso", aggiungendo un delta di 0.30 risulteranno "3.80" e "-3.20 estradosso".
    La selezione dei blocchi su cui operare avviene mediante pick del blocco (è il lisp ad ottenere il nome blocco ed il tag dell'attributo) e successivamente sulla selezione dei blocchi da modificare (il lisp seleziona solo quelli soddisfcenti i requisiti del pick precedente).

    Fin qui tutto bene, ora le note dolenti.

    Nella versione 3 tutto funziona bene, ma se si seleziona un blocco dinamico il risultato del nome blocco sarà *Uetc (i blocchi dinamici si presentano così) ed ovviamente non ci sarà selezione a cui applicare il delta.
    Nella versione 4 ho risolto, aggiungendo il recupero dell'effective name del blocco anonimo, ma quando vado a selezionare con ssget non c'e' un blocco che rispetti la condizione ssget: e per forza! io seleziono magari un blocco di nome "Planiquo", il lisp trova una marea di blocchi di nome "*Uetc"
    Come gli faccio selezionare un blocco dinamico, ma che rispetti le condizioni del blocco dinamico scelto con il pick?

    Non fate caso al fatto che le variabili restano piene dopo l'esecuzione del lisp, essendo in fase embrionale l'ho lasciato così per avere sottomano il valore delle variabili al momento del crash.
    File Allegati File Allegati

  3. #13
    Utente Senior L'avatar di GP.
    Iscritto dal
    2008
    Messaggi
    2097
    Professione
    Nientologo
    Regione
    Vercelli
    Software
    uozapp

    Predefinito

    Codice:
    ;cattura tutti i blocchi
    (setq blk1 (ssget "_X" '((0 . "INSERT"))))
    
    ;inizializza il gruppo di selezione blk
    (setq blk (ssadd))
    
    ;loop su tutti i blocchi: se il nome effettivo corrisponde a quello voluto (NB) aggiunge il blocco a blk
    (repeat (setq n (sslength blk1))
        (if (= NB (vlax-get-property (vlax-ename->vla-object (setq b (ssname blk1 (setq n (1- n))))) 'EffectiveName))
            (setq blk (ssadd b blk))
        )
    )

  4. #14
    Utente Standard
    Iscritto dal
    2012
    Messaggi
    702
    Professione
    Leggo e confronto
    Regione
    Fuori dalla cerchia
    Software
    Lettura critica

    Predefinito

    Soluzione intelligentemente semplice ad un problema apparentemente insormontabile.
    Ovviamente funziona, anche se pare che ho avuto qualche problemino passando dagli anonimi ai normali, ma lo affinerò.

  5. #15
    Utente Senior L'avatar di GP.
    Iscritto dal
    2008
    Messaggi
    2097
    Professione
    Nientologo
    Regione
    Vercelli
    Software
    uozapp

    Predefinito

    Citazione Originariamente Scritto da Cristallo Visualizza Messaggio
    ...ho avuto qualche problemino passando dagli anonimi ai normali...
    Con 'EffectiveName dovrebbe essere ininfluente il tipo di blocco.

  6. #16
    Utente Standard
    Iscritto dal
    2012
    Messaggi
    702
    Professione
    Leggo e confronto
    Regione
    Fuori dalla cerchia
    Software
    Lettura critica

    Predefinito

    Citazione Originariamente Scritto da GP. Visualizza Messaggio
    Con 'EffectiveName dovrebbe essere ininfluente il tipo di blocco.
    Si lo pensavo anche io. Ma al secondo ciclo (con altro blocco) la selezione BLK1 restava vuoto nonostante NB (nome blocco) fosse corretto.
    Ho pensato che fosse una questione di svuotamento di qualche variabile (che in fase bozza non vengono resettate), ma non ho potuto approfondire per tempo.

    Visto che ci sei, ti pongo un nuovo quesito. Ammettiamo che il valore dell'attributo non inizi per un numero, ma vi sia una stringa iniziale, tipo "Quota 11.23" e diciamo che lo assegno alla var. VALORE.
    In questo caso tutto il lisp va in crisi.
    Ho provato ad isolare la sola parte iniziale mediante (read VALORE) e correttamente mi restituisce QUOTA, ma se cerco di sostituirlo nella stringa (setq VALORE2 (subst "" (read VALORE) VALORE)) mi restituisce errore.
    Indagando il risultato di read lo vede come SYM e non come stringa, quindi il subst non va.
    C'e' modo di cambiare la tipologia di dato che legge READ?

  7. #17
    Utente Senior L'avatar di GP.
    Iscritto dal
    2008
    Messaggi
    2097
    Professione
    Nientologo
    Regione
    Vercelli
    Software
    uozapp

    Predefinito

    Partendo da
    (setq VALORE "Quota 11.23")

    ;imposto a 0 il contatore dei caratteri della stringa
    (setq n 0)

    ;scorre tutti i caratteri fino a quando trova un numero (*), il valore di n si blocca quindi sul numero che corrisponde alla posizione nella stringa
    (while (not (<= 48 (ascii (substr VALORE (setq n (1+ n)) 1)) 57)))

    (setq v1 (substr VALORE 1 (1- n))) -> restituisce "Quota "

    (setq V2 (substr VALORE n (strlen VALORE))) -> restituisce "11.23"


    Modifichi il valore di v2 e poi con
    (setq VALORE (strcat v1 v2)) ripristini la stringa dell'attributo.


    (*) I caratteri ASCII da 48 a 57 sono numeri.

  8. Il seguente utente ha ringraziato GP. per questo post

    Cristallo (14-02-2018)

  9. #18
    Utente Standard
    Iscritto dal
    2012
    Messaggi
    702
    Professione
    Leggo e confronto
    Regione
    Fuori dalla cerchia
    Software
    Lettura critica

    Predefinito

    Guazie delle spiegazioni. Avevo immaginato che dall'alto dei tuoi magheggi ci fosse una via più semplice, invece bisogna scorrere tutta la stringa carattere per carattere.
    Ma va bene così.


  • Pagina 2 di 2 PrimaPrima 12

    Discussioni Simili

    1. Risposte: 7
      Ultimo Messaggio: 11-04-2017, 15: 41
    2. Risposte: 3
      Ultimo Messaggio: 28-09-2013, 11: 19
    3. Ricerca di blocchi con un determinato valore di attributo
      Di zintonio nel forum Lisp per Autocad
      Risposte: 2
      Ultimo Messaggio: 20-04-2010, 15: 41
    4. Scelta multipla valore attributo
      Di battiesgiuscia nel forum Lisp per Autocad
      Risposte: 1
      Ultimo Messaggio: 17-10-2009, 12: 51

    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