Selezione di un testo

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#1
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
#2
ma nel programmino non usi "_text" da nessuna parte...
 

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#3
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: AutoCad, GstarCAD, CadWorx, Excel, Lisp, VBA
Regione: Sicilia
#4
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

Angelo2449

Utente Junior
Professione: Pensionato
Software: Autocad
Regione: Lombardia
#6
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
#7
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.