Spostare testi lungo orientamento

Il filo

Utente poco attivo
Professione: Architetto
Software: Revit
Regione: Lombardia
Buongiorno a tutti.

Sono un architetto, mi sono iscritto su questo forum anni fa ma, per vari motivi, sono stato lontano dal mondo della progettazione e del CAD per parecchio tempo.
Nell'ultimo periodo mi sono riavvicinato a questo mondo principalmente come disegnatore e, nonostante non abbia incontrato problemi a riprendere in mano i vecchi e familiari software, ho già incontrato delle operazioni che vorrei eseguire ma non so come e se è possibile farle.

Volevo sapere se qualcuno fosse a conoscenza di un modo per muovere più testi in AutoCAD di una data misura lungo il proprio orientamento in una volta sola.
Trovo un'analogia con 3D Studio Max quando voglio muovere più oggetti lungo le proprie coordinate locali tutti assieme.

Purtroppo (e inaspettatamente) non sono riuscito a trovare nulla su un'operazione del genere.

Allego un veloce schizzo, che un'immagine vale più di mille parole.

Grazie anticipatamente a chiunque volesse rispondere.
 

Allegati

Tristan

Moderatore Civil 3D
Membro dello Staff
Professione: Application Engineer
Software: AutoCAD Civil 3D, Revit e altre amenità
Regione: Trentino
Semplicemente in AutoCAD il concetto di coordinata locale non esiste, quindi a meno che tu non abbia un LISP o similari a supporto per queste operazioni, dubito che AutoCAD ne sia capace in maniera nativa
 

Il filo

Utente poco attivo
Professione: Architetto
Software: Revit
Regione: Lombardia
Innanzitutto grazie per la celere risposta.

Purtroppo era quello che sospettavo, il problema è che, nonostante usi già alcuni LISP, non sarei in grado di crearli attualmente.
Quindi o continuo a cercare sperando di trovare un LISP adatto oppure cerco di trovare il tempo per imparare. Vedremo.

Si può lasciare aperta ancora un po' la discussione? Magari qualche altro utente ha la soluzione al mio problema... almeno spero! 😅
 

Legs

Utente Standard
Professione: ingegnere strutturista
Software: Autocad
Regione: Provincia Milano
Effettivamente è una cosa particolarmente noiosa questa di non avere un comando diretto per spostare il testo secondo secondo la normale (o la parallela) del suo orientamento.

Se conosci l'angolo (basta sbirciare nelle proprietà) puoi semplicemente usare uno spostamento relativo impostando lunghezza e rotazione+90.
In pratica la coordinata relativa sarà una cosa del tipo (dove sommo 90 per non farlo a mente o dover prendere la calcolatrice):
@ distanza < (+ angolo 90)

Altra soluzione è quella di impostare l'UCS oggetto selezionando la scritta. A questo punto un semplice sposta e hai finito (ricordandosi di dover reimpostare l'UCS al valore precedente).
 

Il filo

Utente poco attivo
Professione: Architetto
Software: Revit
Regione: Lombardia
Questi metodi vanno bene, ma sempre su una ridotta quantità di elementi.
Nel mio caso, ahimè, si parla di diverse migliaia di testi ruotati nei più disparati modi :eek:

Il metodo che usato finora è stato selezionare col SELERAPID per range di 10° i testi, cambiare provvisoriamente l'UCS e spostare la metà dei testi selezionati verso l'alto e l'altra verso il basso (filtrati col comando TROVA), il tutto ripetuto per 36 volte.
Questo metodo funziona però tra una roba e l'altra mi porta via tra i 40 e i 60 minuti.

Ma se avessi la necessità di spostare i testi esattamente lungo il loro orientamento (cosa che solo per ora non mi è ancora capitata) dovrei ripetere quella procedura 360 volte... un lavoraccio che durerebbe ore!

Comunque grazie della risposta, almeno vedo di non essere l'unico ad essersi posto questo quesito. :)
 

GP.

Utente Senior
Professione: Nientologo
Software: uozapp
Regione: Vercelli
Vedi se funziona. 😷
Codice:
(defun c:tt (/ txt t1 p1)
    (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))   
    (princ "\Selezionare i testi da spostare")
    (setq txt (ssget '((0 . "TEXT"))))
    (setq d (cond
                ( (getdist (strcat "\nDistanza di spostamento" (if d (strcat " <" (rtos d 2 2) ">: ")": "))) )
                ( d )
    )       )   
    (if (and txt d)
        (repeat (setq n (sslength txt))
            (vla-move (vlax-ename->vla-object (setq t1 (ssname txt (setq n (1- n)))))
                      (vlax-3d-point (setq p1 (cdr (assoc 10 (entget t1)))))
                      (vlax-3d-point (polar p1 (+ (cdr (assoc 50 (entget t1))) (/ pi 2)) d)))
        )
    )
    (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))   
    (princ)
)
 

Il filo

Utente poco attivo
Professione: Architetto
Software: Revit
Regione: Lombardia
Vedi se funziona. 😷
Codice:
(defun c:tt (/ txt t1 p1)
    (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))  
    (princ "\Selezionare i testi da spostare")
    (setq txt (ssget '((0 . "TEXT"))))
    (setq d (cond
                ( (getdist (strcat "\nDistanza di spostamento" (if d (strcat " <" (rtos d 2 2) ">: ")": "))) )
                ( d )
    )       )  
    (if (and txt d)
        (repeat (setq n (sslength txt))
            (vla-move (vlax-ename->vla-object (setq t1 (ssname txt (setq n (1- n)))))
                      (vlax-3d-point (setq p1 (cdr (assoc 10 (entget t1)))))
                      (vlax-3d-point (polar p1 (+ (cdr (assoc 50 (entget t1))) (/ pi 2)) d)))
        )
    )
    (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))  
    (princ)
)
Wow!
Assolutamente lo proverò appena posso, che in questo istante non sono davanti a AutoCAD.

Un SUPER-grazie anticipato!
Appena provo ti faccio sapere.
 

Il filo

Utente poco attivo
Professione: Architetto
Software: Revit
Regione: Lombardia
Eccomi.

Ok, ammetto di essere abbastanza ignorante in materia di macro, LISP e programmazione in generale.

Tutto questo codice ho provato a incollarlo nella riga di comando ma non riesco a capire se sta funzionando o meno.
Forse queste stringhe non sono da incollare lì?
 

Cristallo

Utente Standard
Professione: Leggo e confronto
Software: Lettura critica
Regione: Fuori dalla cerchia
devi creare un file di testo, con estensione LSP (ad esempio TT.lsp) e ci copi dentro tutto il codice. Dopo averlo salvato, lo carichi in autocad mediante appload
Da quel momento, per lanciarlo, da tastiera dai TT seguito da invio.

@GP.
ovviamente (che te lo dico a fa) funziona esattamente come filo voleva, l'unico neo è che lavora solo sui testi puri, non sugli mtext (tipo di entità differente? piu problematica? o solo questione di ssget?)
 

Il filo

Utente poco attivo
Professione: Architetto
Software: Revit
Regione: Lombardia
@Cristallo
Grazie per la delucidazione, Cristallo. Era esattamente il passaggio che mi mancava.

@GP.
Non so che dire se non GRAZIE!
Funziona esattamente come avrei voluto.
Ti ringrazio infinitamente per aver letto e aver risolto un mio problema impiegandoci pure del tempo.

Un po' di informazioni per tutti dopo qualche prova:
  • Ho provato anch'io cogli mtext e confermo che non funziona, va solo coi testi normali (che, egoisticamente parlando, era quello che mi interessava)
  • Ho provato a spostare diversi testi con giustificazioni diverse e quest'ultime non sembrano influire minimamente sul risultato.
  • Posso spostare sia di un valore positivo che negativo.
Probabilmente sono prove un po' inutili ma le ho fatte ugualmente.
 

Il filo

Utente poco attivo
Professione: Architetto
Software: Revit
Regione: Lombardia
@GP.
Ti chiedo un'ultima cosa.
Questo mio quesito l'ho formulato anche su un altro forum, senza però giungere ad alcun risultato assieme agli altri utenti.
Dato che adesso una soluzione esiste, mi daresti il permesso di condividerla anche lì?
Che magari potrebbe servire anche a qualcun'altro oltre a me.

PS. Ovviamente non la spaccerei come farina del mio sacco, eh! :p
 

GP.

Utente Senior
Professione: Nientologo
Software: uozapp
Regione: Vercelli