cg-Cad

Lisp »Tips 'n Tricks »Un campo recintato

CAMPO

;|
   CAMPO.LSP (12 Luglio 2005)
   Copyright (C) 2005 Claudio Piccini.
   All rights reserved
   www.cg-cad.com

   Genera un campo recintato con le liste in stile 'array'
   (vedi Tutorial n.56 'Lisp & Array') 

   Salva la lista A nel file CAMPO.TXT
|;

(defun vArray ( ii jj valore / i j e rigo X )
 (setq i 0)
 (while (< i NR)
  (setq j 0)
  (while (< j NC)
   (setq e (nth j (nth i A)))
   (if (and (= j jj)(= i ii))
    (setq rigo (append rigo (list valore)))
    (setq rigo (append rigo (list e))) 
   )
   (setq j (1+ j))
  )
  (setq X (append X (list rigo))) 
  (setq rigo nil)
  (setq i (1+ i))
 )
 (setq X X)
)

(defun ScriveFile ( NR NC lista / nDir nf f1 i j e )
 (setq nDir (getvar "dwgprefix"))
 (setq nf (strcat nDir "campo.txt"))
 (setq f1 (open nf "w"))
 (setq i 1)
 (while (< i NR)
  (setq j 1)
  (while (< j NC)
   (setq e (nth j (nth i lista)))
   (princ e f1)
   (setq j (1+ j))
  )
  (princ "\n" f1)
  (setq i (1+ i))
 )
 (close f1)
)

(defun c:campo ( / NR NC A L i j )
 ; eco OFF
 (setvar "cmdecho" 0)
 ;|
   inizializza le variabili
   della matrice
 |;
 (setq NR 12) ; numero righe
 (setq NC 12) ; numero colonne
 ;|
   Uno spazio vuoto
 |;
 (setq i 0)
 (while (< i NR)
  (setq j 0)
  (while (< j NC)
   (setq L (append L (list nil)))
   (setq j (1+ j))
  )
  (setq A (append A (list L)))
  (setq L nil)
  (setq i (1+ i))
 )
 (princ "\nUno spazio vuoto...\n")
 (princ A)
 ;|
    Il campo...
 |; 
 (setq i 1)
 (while (< i (1- NR))
  (setq j 1)
  (while (< j (1- NC))
   (setq A (vArray i j " "))
   (setq j (1+ j))
  )
  (setq A (append A (list L)))
  (setq L nil)
  (setq i (1+ i))
 )
 (princ "\nUn campo...\n")
 (princ A)
 ;|
    ...una siepe a sinistra
    e una siepe a destra...
 |;
 (setq i 1)
 (while (< i (1- NR))
  (setq A (vArray i 1 "%"))        ; siepe a sinistra
  (setq A (vArray i (- NC 2) "%")) ; siepe a destra
  (setq i (1+ i))
 )
 (princ "\nIl campo e' recintato a destra e a sinistra con una siepe...\n")
 (princ A)
 ;|
    ...una siepe in alto
    e una siepe in basso...
 |;
 (setq i 1)
 (while (< i (1- NC))
  (setq A (vArray 1 i "%"))        ; siepe in alto
  (setq A (vArray (- NR 2) i "%")) ; siepe in basso
  (setq i (1+ i))
 )
 (princ "\nIl campo e' recintato in alto e in basso con una siepe...\n")
 (princ A)
 ;|
    ...e poi archivia il campo in CAMPO.TXT
 |;
 (ScriveFile (- NR 1)(- NC 1) A)
 ; eco ON
 (setvar "cmdecho" 1)
 (princ)
)
;;;eof

Test del Lisp

Command: campo

Uno spazio vuoto...
(
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil)
(nil nil nil nil nil nil nil nil nil nil nil nil))

Un campo...
(
(nil nil nil nil nil nil nil nil nil nil nil nil) 
(nil                     nil) 
(nil                     nil) 
(nil                     nil) 
(nil                     nil) 
(nil                     nil) 
(nil                     nil) 
(nil                     nil) 
(nil                     nil) 
(nil                     nil) 
(nil                     nil) 
(nil nil nil nil nil nil nil nil nil nil nil nil) nil)
Il campo e' recintato a destra e a sinistra con una siepe...
(
(nil nil nil nil nil nil nil nil nil nil nil nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil nil nil nil nil nil nil nil nil nil nil nil))
Il campo e' recintato in alto e in basso con una siepe...
(
(nil nil nil nil nil nil nil nil nil nil nil nil) 
(nil % % % % % % % % % % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil %                 % nil) 
(nil % % % % % % % % % % nil) 
(nil nil nil nil nil nil nil nil nil nil nil nil))
CAMPO.TXT:

%%%%%%%%%%
%        %
%        %
%        %
%        %
%        %
%        %
%        %
%        %
%%%%%%%%%%

Lisp »Tips 'n Tricks

Ultimo Aggiornamento_Last Update: 12 Luglio 2005