Matlab vs. Autolisp – Disegno di un grafico

I dati analitici o sperimentali devono in alcuni casi essere presentati in modo accurato e unico. A volte non è sufficiente utilizzare tutte le opzioni grafiche dei programmi di matematica o dei fogli di calcolo. Per gestire i dati di un grafico nel modo più versatile e potente, può essere utile importare i dati numerici di un grafico all’interno di un software CAD. La rappresentazione grafica deve essere preparata in anticipo prima dell’esportazione, mentre la suddivisione di ogni grafico in un layer specifico permette di effettuare qualsivoglia modifica sul CAD.

Funzioni y=f(x) importate all’interno di un CAD
Il codice riportato è un esempio di creazione di un file Autolisp. Il file consente di disegnare due curve lineari e due istogrammi. I dati appartenenti a ciascun grafico sono caricati in quattro layer distinti all’interno del CAD. Il file lisp “grafici.lsp” viene caricato in autocad effettuando un load dalla riga di comando. Tutti i comandi in autolisp vanno racchiusi tra parentesi tonde.
  1. (load "d:\grafici.lsp")
Dopo aver caricato il file in autocad bisogna far partire la funzione presente, definita in precedenza. In questo caso la funzione creata si chiama: disegno_grafici (). Il codice è scritto in linguaggio matlab.
  1. (dis_grafici)
 
  1. function scrivi_lsp (fattore,larghezza,altezza)
  2.  
  3. % Autori
  4. % Prof. Danilo Pasquini IPSIA Parodi Delfino, Colleferro (Roma)
  5. % Prof. Paolo Sordi IPSIA A. Pacinotti, Pontedera (Pisa) 
  6. % Creazione file LISP per importazione di grafici in Autocad
  7. %
  8. close all
  9.  
  10. x = -10:0.1:10;
  11. y = 0.15* x.^2;
  12. plot(x,y)
  13. y1  = 10+0.01*x.^3; 
  14.  
  15. fid = fopen('d:\grafici.lsp', 'wt');
  16. fprintf(fid, ['(defun disegno_grafici () \n']);
  17.  
  18. fprintf(fid, ['(command "._layer" "_M" "LAYER1" "")  \n']);
  19. fprintf(fid, ['(command "._layer" "_M" "LAYER2" "")  \n']);
  20. fprintf(fid, ['(command "._layer" "_M" "LAYER3" "")  \n']);
  21. fprintf(fid, ['(command "._layer" "_M" "LAYER4" "")  \n']);
  22.  
  23. for i=2:length(y)
  24. %       fprintf(fid, ['(command "_color" "T" "' num2str(100) ',' num2str(100) ',' num2str(100) '" )\n']);
  25.         fprintf(fid, ['(setvar "CLAYER" "LAYER1")\n']);
  26. 		fprintf(fid, ['(command "_line" "' num2str(x(i-1),'% 10.2f') ',' num2str(y(i-1),'% 10.2f') '" "' num2str(x(i),'% 10.2f') ',' num2str(y(i),'% 10.2f') '" "") \n']);
  27.  
  28.         if (rem(i,3) == 0)
  29.             fprintf(fid, ['(setvar "CLAYER" "LAYER3")\n']);
  30.             min_y = min(y(i-1),y(i))
  31.             fprintf(fid, ['(command "_line" "' num2str(x(i-1),'% 10.2f') ',' num2str(min_y,'% 10.2f') '" "' num2str(x(i-1),'% 10.2f') ',' num2str(0,'% 10.2f') '" "") \n']);
  32.             fprintf(fid, ['(command "_line" "' num2str(x(i),'% 10.2f')   ',' num2str(min_y,'% 10.2f') '" "' num2str(x(i),'% 10.2f')   ',' num2str(0,'% 10.2f') '" "") \n']);
  33.             fprintf(fid, ['(command "_line" "' num2str(x(i),'% 10.2f')   ',' num2str(min_y,'% 10.2f') '" "' num2str(x(i-1),'% 10.2f') ',' num2str(min_y,'% 10.2f') '" "") \n']);
  34.             fprintf(fid, ['(command "_line" "' num2str(x(i),'% 10.2f')   ',' num2str(0,'% 10.2f')     '" "' num2str(x(i-1),'% 10.2f') ',' num2str(0,'% 10.2f') '" "") \n']);
  35.         end
  36. %       fprintf(fid, ['(command "_color" "T" "' num2str(150) ',' num2str(150) ',' num2str(150) '" )\n']);
  37.         fprintf(fid, ['(setvar "CLAYER" "LAYER2")\n']);
  38. 		fprintf(fid, ['(command "_line" "' num2str(x(i-1),'% 10.2f') ',' num2str(y1(i-1),'% 10.2f') '" "' num2str(x(i),'% 10.2f') ',' num2str(y1(i),'% 10.2f') '"  "") \n']);
  39.         if (rem(i,4) == 0)
  40.             fprintf(fid, ['(setvar "CLAYER" "LAYER4")\n']);
  41.             min_y = max(y1(i-1),y1(i))
  42.             fprintf(fid, ['(command "_line" "' num2str(x(i-1),'% 10.2f') ',' num2str(min_y,'% 10.2f') '" "' num2str(x(i-1),'% 10.2f') ',' num2str(20,'% 10.2f') '" "") \n']);
  43.             fprintf(fid, ['(command "_line" "' num2str(x(i),'% 10.2f')   ',' num2str(min_y,'% 10.2f') '" "' num2str(x(i),'% 10.2f')   ',' num2str(20,'% 10.2f') '" "") \n']);
  44.             fprintf(fid, ['(command "_line" "' num2str(x(i),'% 10.2f')   ',' num2str(min_y,'% 10.2f') '" "' num2str(x(i-1),'% 10.2f') ',' num2str(min_y,'% 10.2f') '" "") \n']);
  45.             fprintf(fid, ['(command "_line" "' num2str(x(i),'% 10.2f')   ',' num2str(20,'% 10.2f')     '" "' num2str(x(i-1),'% 10.2f') ',' num2str(20,'% 10.2f') '" "") \n']);
  46.         end        
  47. end
  48.  
  49. fprintf(fid, [') \n']);
  50. plot (x,y)
  51. hold on
  52. plot (x,y1)
  53. fclose(fid)
  1. (defun dis_grafici () 
  2. (command "._layer" "_M" "LAYER1" "")  
  3. (command "._layer" "_M" "LAYER2" "")  
  4. (command "._layer" "_M" "LAYER3" "")  
  5. (command "._layer" "_M" "LAYER4" "")  
  6. (setvar "CLAYER" "LAYER1")
  7. (command "_line" "-10.00,15.00" "-9.90,14.70" "") 
  8. (setvar "CLAYER" "LAYER2")
  9. (command "_line" "-10.00,0.00" "-9.90,0.30"  "") 
  10. (setvar "CLAYER" "LAYER1")
  11. (command "_line" "-9.90,14.70" "-9.80,14.41" "") 
  12. (setvar "CLAYER" "LAYER3")
  13. (command "_line" "-9.90,14.41" "-9.90,0.00" "") 
  14. (setvar "CLAYER" "LAYER2")
  15. (command "_line" "-9.90,0.30" "-9.80,0.59"  "") 
  16. (setvar "CLAYER" "LAYER1")
  17. (command "_line" "-9.80,14.41" "-9.70,14.11" "") 
  18. (setvar "CLAYER" "LAYER2")
  19. (command "_line" "-9.80,0.59" "-9.70,0.87"  "") 
  20. (setvar "CLAYER" "LAYER2")
  21. (command "_line" "9.90,19.70" "10.00,20.00"  "") 
  22. )