Programmation Ilisp

  Bonjour à tous.

 

Je voudrais modifier une macro venant de l'un de mes logiciels de CFAO.

Ce logiciel travail en ilisp. Je ne connais pas du tout cette programmation....

 

Pour faire simple, cette macro copie des colonnes excel et les transforme en  rectangle sur le logiciel de découpe. (type autocad)

 

Le souci, c'est que la macro est lu à l'envers. Quand j'ai ma liste de rectangle, le premier est le dernier de la liste etc....

 

Voici en pièce jointe la macro, si quelqu'un sait comment modifier ça, ce serait simpa =)

 

Merci !

 


import.lsp

Voici le fichier en texte pour ceux qui ne peuve pas l'ouvrir.

 

(SETQ txt (CLIP-GET))
(SETQ YGAP 100)
(IF (NOT txt) (QUIT "*Cancel*"))
(SETQ txt (STRREPLACE txt "\t" " "))
(SETQ txt (STRREPLACE txt "\n" ")("))
(SETQ txt (STRREPLACE txt "\r" ""))
(SETQ txt (STRREPLACE txt "," "."))
(SETQ txt (STRCAT "((" (SUBSTR txt 1 (1- (STRLEN txt))) "))"))
(SETQ txtlist (READ txt))
(SETQ basep (LIST 0 0))
(FOREACH s txtlist
  (SETQ ymax 0)
    (SETQ x (CAR s) y (CADR s))
    (IF (> y ymax) (SETQ ymax y))
    (CAD-RECTANGLE basep (LIST (+ (CAR basep) x) (+ (CADR basep) y)) 7)
  (SETQ basep (LIST 0 (+ (CADR basep) ymax YGAP)))
)
(REDRAW)

 

 

1 « J'aime »

Bonjour, il manquerais pas un peu de code ? 

Avec ce code, j'ai une macro fonctionnelle qui exporte l'excel en rectangle dxf

 

Pourquoi, il manquerai quoi pour toi?

 

La macro fonctionne comme ça :

 

Je tape mes la longueur et largeur de pièces sur excel dans 2 colonnes.

Colonne A longueur, colonne B Largeur.

Puis je fais un "copier" de la liste puis en cliquant sur ma macro cela colle le tout en transformant les données en côtes en mm

1 « J'aime »

Quand vous sléectionnez la zone dans XL, classiquement, vous partez de la cellule en haut à gauche pour finir en bas à doite. Que se passe-t-il si vous faites de bas droit à haut gauche, ou de bas gauche à haut droit (le but c'est de terminer la sélection en haut) ?

A tout hasard, j'ai trouvé un peu d'info sur ce langage là : http://igems.se/pdf/English-Ilisp.pdf

Voir page 23 la commande PRINC pour l'explication de \t, \n et \r.

Merci Stef, j'avais déjà téléchargé ce fichier d'aide.

Mais je ne comprenais rien....

Je l'ai traduit et imprimé. Je le lirais ce soir à tête reposée =)

 

Je vous tiens au courant bien sûr =)

Est-ce que tu connais le Lisp (langage utilisé pour les macro Autocad au début)

J'ai ajouté qq commentaires

(SETQ txt (CLIP-GET)) ; on récupère le contenu du presse-papier

(SETQ YGAP 100) ; on initialise

(IF (NOT txt) (QUIT "*Cancel*")) ; on vérifie que le contenu n'est pas vide
(SETQ txt (STRREPLACE txt "\t" " ")); on remplace le séparateur de colonne (tabulation) par un espace
(SETQ txt (STRREPLACE txt "\n" ")(")) ; on remplace le changement de ligne par un )(
(SETQ txt (STRREPLACE txt "\r" "")) ; je ne sais pas ce qu'est return (dans ce qui est récupéré du presse-papier
(SETQ txt (STRREPLACE txt "," ".")) ; on remplace le , par .


(SETQ txt (STRCAT "((" (SUBSTR txt 1 (1- (STRLEN txt))) "))")) ; on complète pour avoir une ( au début et une ) à la fin

(SETQ txtlist (READ txt)) ; on converti la chaine de caractères en forme compréhensible par le langage

(SETQ basep (LIST 0 0)) ; on initialise

(FOREACH s txtlist
  (SETQ ymax 0)
    (SETQ x (CAR s) y (CADR s))
    (IF (> y ymax) (SETQ ymax y))
    (CAD-RECTANGLE basep (LIST (+ (CAR basep) x) (+ (CADR basep) y)) 7)
  (SETQ basep (LIST 0 (+ (CADR basep) ymax YGAP)))
)
(REDRAW)

Le système des "list", caractéristique du Lisp, fait qu'en ayant ajouté les couples (), on récupère directement les couples "s" de coordonnées, qui sont eux-même des listes.

CAR et CADR permet d'extraire les sous-parties du couple de coordonnées. Pour info on peut combiner les a et d pour extraire un élèment particulier d'une liste comportant beaucoup d'élèment (typiquement le résultat de la commande "liste" appliquée à un élèment ou à une famille d'élèment (auquel cas on a une list de list, et ça peut aller loin) ).

Je ne sais pas pourquoi il y a un test sur ymax, ni à quoi servent basep et YGAP