• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

テーブルエクセルに示されている寸法から始まるオートキャドで長方形を作成します。

  • Thread starter Thread starter Marcochiara
  • Start date Start date

Marcochiara

Guest
buongiorno,

avendo a disposizione una tabella excel di due colonne, in cui sono riportate l'altezza e la larghezza di centinaia di rettangoli, vorremmo creare un disegno cad di tutti i suddetti rettangoli. è possibile importare il file excel in autocad per automatizzare il disegno dei rettangoli, evitando così di doverli disegnare uno ad uno?

nello specifico utilizziamo autocad per mac (versioni 2014, 2017 o 2018)

grazie infinite,
marco e chiara
 
ok per le dimensioni, ma il problema è dire ad autocad dove disegnarli.
prendi spunto da questa discussione (vedi la gif), prova ad impostare il punto d'inserimento aggiungendo alla coordinata x, di volta in volta, la dimensione della base, avresti in autocad tutti i rettangoli uno di fianco all'altro.
sperando che la procedura funzioni su mac
 
io farei così:
esporto tutti i dati numerici in un semplice file di testo creando una cosa del tipo:
30.0 40.3
120.0 50.0
130.2 30.0
...
fai attenzione a sostituire alla virgola il punto. si fa con la ricerca e sostituzione in automatico.
a questo punto utilizzi un piccolo autolisp come questo (è molto artigianale. da per scontato tante cose. ricordati di disattivare gli osnap prima di usarlo):

Code:
(defun c:disegna( / x0 y0 deltax f lst b h pt1 pt2)
    (setq f (open "dati.txt" "r"))
    
    (setq x0 0.0
          y0 0.0
          deltax 5.0)
        
    (while (setq riga (read-line f))
        (setq lst (read (strcat "(" riga ")")))
        (setq b (car lst))
        (setq h (cadr lst))
        (setq pt1 (list x0 y0))
        (setq pt2 (list (+ x0 b) (+ y0 h)))
        (command "rectangle" pt1 pt2)
        (setq x0 (+ x0 b deltax)))
    (close f))

il programma è un po' rozzo e non fa alcun controllo sull'esistenza del file etc...
ho fatto delle ipotesi del tipo: i dati vengono memorizzati nel file dati.txt all'interno della cartella documenti.

carica il file disegna.lsp in autocad (vai in tools - load application per farlo) poi scrivi disegna nella finestra dei comandi di autocad (ricordati di disattivare gli osnap usando f3).

p.s.
consiglio di usare bbedit con l'evidenziazione dei comandi autolisp. è molto comodo per scrivere il codice.
comunque ti allego il codice e il file di esempio che ho usato. mi raccomando di mettere il file coi dati nella cartella documenti se no non funziona.
il programma l'ho testato con autocad for mac 2019 e funziona perfettamente.
la variabile deltax contiene la distanza tra i rettangoli. modificane pure il valore come credi.
 

Attachments

p.s.
mi sono accorto di aver dimenticato il trattino di sottolineature davanti a rectangle.
se qualcuno volesse utilizzare il programma con una versione in lingua diversa dall'inglese si ricordi di aggiungerlo o di cambiare il comando rectangle con il corrispondente nella sua lingua.
altra cosa: il file dati.txt potete metterlo dove volete ma ricordatevi di utilizzare il percorso per raggiungerlo.
ad esempio se volessi metterlo sulla scrivania del mac dovrei usare un nome completo:
/users/nomeutente/desktop/dati.txt
dove chiaramente al posto di nomeutente va messo il proprio.
 
devi impostare il foglio di excel in questo modo:
formato celle: testo, altrimenti le virgole creano strani effetti in excel
prima cella es. a1, metti il nome del comando rectang o _rectang
seconda cella, b1, la prima coppia di coordinate separate dalla virgola, es. 100,200
terza cella, c1, la seconda coppia di coordinate, es. 550.10,1000.50
e ripeti l'operazione sulle righe successive per ogni rettangolo.
se hai già le coordinate inserite nel file di excel e sono in singole celle, le devi unire a coppie (coordinata x,y primo punto, coord. x,y secondo punto) con la funzione "concatena"
eventualmente vedi questo mio video che spiega un'operazione simile.
poi copia tutto e vai nella linea di comando di autocad e incolla, dovrebbero comparire tutti i rettangoli e,
se le coordinate sono riferite allo zero dell'ucs corrente, come credo, questi si posizioneranno automaticamente nello spazio di autocad.
 
ho voluto rivedere il mio codice e ho tolto l'inutile y0 che avevo inserito perché avevo immaginato di poter muovermi anche secondo la y. in realtà non serve. allineo tutto rispetto a y=0.0 e amen.
ho inserito anche un controllo sull'esistenza del file e tolta la necessità di disattivare gli osnap. adesso non serve più. puoi lasciarli attivi.
ho messo in evidenza il valore del gap così uno può modificarlo come gli pare.
avrei potuto metterlo come parametro della funzione ma preferisco così. se no va a finire che uno si annoia a doverlo reinserire ogni volta.

allego il nuovo codice:
Code:
; disegno di rettangoli allineati alla base

(defun c:disegna( / x0 deltax f lst b h pt1 pt2)

    (setq deltax 5.0) ; gap tra i rettangoli - modificarlo a piacere

    (if (setq f (open "dati.txt" "r"))

        (progn
            (setq modo (getvar "osmode"))
            (setvar "osmode" 0)
            (setq x0 0.0)
            (while (setq riga (read-line f))
                (setq lst (read (strcat "(" riga ")"))
                       b (car lst)
                       h (cadr lst)
                       pt1 (list x0 0.0)
                       pt2 (list (+ x0 b) h))
                (command "_rectangle" pt1 pt2)
                (setq x0 (+ x0 b deltax)))
            (close f)
            (setvar "osmode" modo)
            (print "comando terminato"))

        (print "file non trovato"))
    (princ))

peccato che non si possa colorarlo come nell'editor.
allego comunque il nuovo codice.

ciao. il codice l'ho ritestato e funziona perfettamente.
 

Attachments

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top