Selezione di un testo

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
Salve a tutti,
il seguente programmino funziona, sicuramente non sarà una lezione di stile, ma funziona.
Codice:
    (defun C:AAAA (/ Oggetto Stringa Entita NomePunto)

    (setq Oggetto "Gruppo")
    (regapp Oggetto)
    (setq Stringa (entget (car (entsel)) '("Gruppo")))
    (setq Entita (cdr Stringa))
    (setq NP (assoc 1 Entita))
    (setq NomePunto (cdr NP))
    (setq XYZ (assoc 10 Entita))
    (setq GaussBoaga (strcat (rtos (cadr XYZ)) "," (rtos (caddr XYZ))))

    (setq TheData (list -3 (list Oggetto (cons 1000 NomePunto) (cons 1000 "Ecef") (cons 1000 GaussBoaga) (cons 1000 Stazione) (cons 1000 "Definito"))))

    (setq Lista (append Entita (list TheData)))
    (setq Xlist (assoc -3 Lista))

    (entmod Lista)

    (princ "\n")
    (princ "Entita  >>>>>>>> ")
    (princ Entita)
    (princ "\n")

    (princ "\n")
    (princ "NP  >>>>>>>> ")
    (princ NP)
    (princ "\n")

    (princ "\n")
    (princ "NomePunto  >>>>>>>> ")
    (princ NomePunto)
    (princ "\n")

    (princ "\n")
    (princ "XYZ  >>>>>>>> ")
    (princ XYZ)
    (princ "\n")

    (princ "\n")
    (princ "GaussBoaga >>>>>>> ")
    (princ GaussBoaga)
    (princ "\n")

    (princ "Lista >>>>>>> ")
    (princ Lista)
    (princ "\n")

    )

Il programmino prevede la selezione di un testo (Stringa) al quale vengono attaccati i 5 dati (TheData).
Se io volessi, anziché eseguire la selezione manuale di un testo, selezionarne uno appena creato col comando "_text", come dovrei modificare il programmino affinché funzioni?
Se qualcuno vuole darmi lezioni di stile, è ben accetto!
Grazie.
 

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
ma nel programmino non usi "_text" da nessuna parte...
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
In questo programmino non uso il comando "_text" ma vorrei che una stringa creata con "_text" venga trattata come nel programmino ovvero, anziché selezionare manualmente la stringa :
> (setq Stringa (entget (car (entsel)) '("Gruppo"))) <, il programmino la selezioni e ............
Codice:
(command "_text" ............ Stringa)
Selezione automatica di Stringa
    (setq Entita (cdr Stringa))
    (setq NP (assoc 1 Entita))
    (setq NomePunto (cdr NP))
    (setq XYZ (assoc 10 Entita))
    .......
    ........
Grazie.
 

rpor66

Utente Standard
Professione: Programmatore
Software: Lisp, Vba per Autocad, BricsCad e GstarCAD, CadWorx
Regione: Sicilia
Ho riscritto la routine (a me non funzionava, rinominato alcune variabili), divisa in comando (c:AAAA) e funzione (AAAA_motore NomeEntita), con AAAA hai il comando classico, con AAAA_motore la puoi richiamare da qualsiasi parte passandogli il nome dell'entità.
Per recuperare il nome dell'ultima entità inserita, puoi usare (ssname (ssget "_L") 0) oppure la funzione che ho inserito nel file lisp fnNomeLastEnt(), fa la stessa cosa ma è più bella.
 

Allegati

  • Selezione di un testo.lsp
    1.4 KB · Views : 2

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
Ciao rpor66,
come vedi sono già qui, mi sono studiato la tua modifica ed ho imparato ancora qualcosa!
Ho un altro quesito :
vorrei applicare la routine che hai reso funzionante ad un testo appena creato dalle routine stessa.
Mi spiego meglio :
creo un testo con > (command "_text" ...... Stringa)
anziché selezionare Stringa con : (setq oldList (entget NomeEntita))
la vorrei selezionare automaticamente per poi proseguire con la routine.
Lo scopo è quello di creare un Punto col suo nome e associargli i dati che desidero, esattamente come nella routine.
Grazie.
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
Rispondo a me stesso avendo trovato la soluzione al quesito :
Codice:
(defun C:ATTRUNO (/ NomeEntita GaussBoaga OldList NomePunto XYZ NP NomeEntita NewList TheData Oggetto)

        (setq GaussBoaga "1498789.9620,5042438.9823")
        (command "_text" GaussBoaga 0.40 0 "Punto")
        (setq NomeEntita (entlast))

        (setq Oggetto "Gruppo")
    
        (if (not (tblsearch "APPID" Oggetto))
            (regapp Oggetto)
        )
 
        (setq OldList (entget NomeEntita))

        (setq NP (assoc 1 OldList))
        (setq NomePunto (cdr NP))
        (setq XYZ (cdr (assoc 10 OldList)))
        (setq GaussBoaga (strcat (rtos (car XYZ)) "," (rtos (cadr XYZ))))

        (setq TheData (list -3 (list Oggetto (cons 1000 NomePunto) (cons 1000 "Ecef") (cons 1000 GaussBoaga) (cons 1000 Stazione) (cons 1000 "Definito"))))

        (setq NewList (append OldList (list TheData))) 
        (entmod NewList)
)

Naturalmente nel codice esistono delle ripetizioni (GaussBoaga) ma dimostrano il buon funzionamento della routine.
Grazie.
 

Statistiche forum

Discussioni
58,591
Messaggi
499,643
Utenti registrati
104,344
Ultimo utente registrato
narduz

Staff online

Top