VDH-Bruno
Membres-
Compteur de contenus
1 146 -
Inscription
-
Dernière visite
-
Jours gagnés
20
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par VDH-Bruno
-
Bonjour, Je te comprends, je bricole et patauge toujours et encore dans la semoule comme toi, car à chaque fois que j’apprends et progresse, le curseur des difficultés auxquelles je m’attèle ce déplace également.. La frustration tu l’as toujours, mais elle s’efface rapidement devant la satisfaction que tu retires à solutionner un problème, c’est la raison pour laquelle il est important de se fixer des objectifs raisonnables. Personnellement je n’ai jamais eu l’occasion de suivre de formation (bien que je pense que cela permet de gagner en temps),n’étant pas anglophone j’ai appris l’essentielle sur ce forum (le soir en le parcourant en large et en travers) et en testant des expressions dans la console VLisp , pour les points qui m’ont posé (et me pose) problème, j’ai fait appel à la communauté qui m’a bien dépanné avec une mention spéciale à (gile) pour sa disponibilité et la pédagogie de ses réponses. Sinon avant de poser une question sur le forum rédige-la, meilleur sera sa rédaction et plus pertinentes seront les réponses. De plus c’est tentant la rédaction de ta question que bien souvent tu obtiens les éléments de ta réponse. Pour ce qui est du pré-requis, être un bon utilisateur AutoCAD me semble un bon atout, je ne pense pas qui en faille d’autre pour commencer. Sinon l’envie de comprendre, de la constance et du travail.. Bonne continuation
-
Bonsoir, Je n’ai pas d’AutoCAD 13, pour la recherche ASCII et UNICODE l’astuce dont je me sers : Dans l’éditeur de texte multiligne -> liste déroulant insérer un symbole -> Autre… -> Pour lancer depuis AutoCAD la Table des caractères Dans la police spécifiée sélectionné le caractère voulu en bas de la table s’affiche le code Unicode et la frappe équivalente ASCII (quant elle existe) Sinon personnellement pour tous les caractères en exposant (comme le cube), je me sers souvent de la fonction d’empilement de l’éditeur de texte, exemple : 3^3 (+ empilement pour une tolérance sup. et inf.) 3^ (+ empilement pour un exposant supérieure) ^3 (+ empilement pour un exposant inférieur) Idem pour les fractions 3/3 , 3/ pour numérateur seul, /3 pour dénominateur seul.. De plus pour les versions récentes que j’ai pu tester dans l’éditeur un double clic sur des caractères empilés permet d’accéder à la propriété de l’empilement pour un réglage plus fin. A+ et bonnes vacances
-
Bonsoir, Nouvelle version à tester: (defun c:lili1 (/ pt i sel edxf val ent compt x) (setq compt 0) (or (and (setq sel (cadr (ssgetfirst))) (= 1 (sslength sel)) (setq ent (ssname sel 0)) ) (while (not ent) (prompt "\nPointez un texte en référence des textes à éléver..." ) (and (setq sel (ssget "_+.:E:S" '((0 . "*TEXT")))) (setq ent (ssname sel 0)) ) ) ) (sssetfirst nil nil) (repeat (setq i (if (setq sel (ssget "_X" (list '(0 . "*TEXT") (assoc 8 (entget ent)) ) ) ) (sslength sel) 0 ) x i ) (setq edxf (entget (ssname sel (setq i (1- i))))) (setq pt (cdr (assoc 10 edxf))) (cond ((numberp (setq val (read (cdr (assoc 1 edxf))))) (entmod (subst (cons 10 (list (car pt) (cadr pt) val)) (cons 10 pt) edxf ) ) (setq compt (1+ compt)) ) ) ) (alert (strcat (itoa x) " texte" (if (< 1 x) "s " " " ) "sélectionné" (if (< 1 x) "s..." "..." ) "\n" (itoa compt) " texte" (if (< 1 compt) "s " " " ) "traité" (if (< 1 compt) "s!!!" "!!!" ) ) ) (princ) ) J’ai modifié la sélection en proposant de sélectionner un texte en référence, puis en filtrant selon tes critères (la fonction supporte maintenant la sélection avant). En espérant que cela convienne, car pour une autre amélioration je crains qu’il faille attendre 3 semaines après mon retour de vacances, car ma fin de semaine s’annonce chargé. Pour lili2 ne connaissant pas covadis, en te lisant j’ai eu un doute en pensant que ta commande "cov-edition => Texte => Attribut" avec l'option du dessin d'un point. «Montait» un bloc point sans modifier le z de son attribut, c’est dans cette optique qu’avait été écrit lili2. A+
-
Bonjour, Avec l’instruction pause ou les fonctions getxxx dans un appel à la fonction command Un exemple d’utilisation de pause pour une ligne définie par 2 points (command "_line" pause pause "" ) ou (command "_line" (getpoint) (getpoint (getvar 'lastpoint)) "") Autre exemple un classique pour un nombre de saisie utilisateur indéterminé ((lambda () (command "_line") (while (< 0 (getvar 'cmdactive)) (command pause)))) ou ((lambda () (command "_line" (getpoint)) (while (< 0 (getvar 'cmdactive)) (initget "Clore _Clore") (command (getpoint (getvar 'lastpoint)))) ) ) A+
-
Re, Sinon au cas où, une petite dernière tapé à la va-vite, qui met le Z de l’attribut à la même valeur que le Z du point d’insertion de la référence de bloc correspondante.. ;; Positionne les attributs au même Z (SCG) que la référence de bloc (defun c:lili2 (/ pt i sel eblk ent edxf zpins) (prompt "\nSélectionnez les références de blocs dont les attributs sont à traiter...") (repeat (setq i (if (setq sel (ssget '((0 . "INSERT") (66 . 1)))) (sslength sel) 0 ) ) (setq eblk (ssname sel (setq i (1- i))) zpins (caddr (cdr (assoc 10 (entget eblk)))) ent (entnext eblk) ) (while (= "ATTRIB" (cdr (assoc 0 (setq edxf (entget ent))))) (entmod (subst (cons 10 (list (car (setq pt (cdr (assoc 10 edxf)))) (cadr pt) zpins)) (assoc 10 edxf) edxf) ) (setq ent (entnext ent)) ) (entupd eblk) ) (princ) ) A+
-
Bonjour lili2006 Au risque de répondre à côté, ne connaissant rien de covadis, si didier est dans le vrai : Les routines de la discussion suivante font cela : http://cadxp.com/index.php?/topic/33778-resolu-point-topographique-covadis-2d-3d/page__p__182436__fromsearch__1#entry182436 Sinon si c’est des textes ou textes multiples à élever teste ses quelques lignes de codes, voir si cela peut dépanner.. ;; Positionne en Z (SCG) des textes et des mtext suivant la valeur de leur texte (code 1) (defun c:lili1 (/ pt i sel edxf val) (prompt "\nSélectionnez les textes à éléver à leurs altitudes respectives...") (repeat (setq i (if (setq sel (ssget '((0 . "*TEXT")))) (sslength sel) 0 ) ) (setq edxf (entget (ssname sel (setq i (1- i))))) (setq pt (cdr (assoc 10 edxf))) (if (numberp (setq val (read (cdr (assoc 1 edxf))))) (entmod (subst (cons 10 (list (car pt) (cadr pt) val)) (cons 10 pt) edxf)) ) ) (princ) ) Cordialement,
-
Salut, Juste une petite précision au cas ou ? Et qui ne figure pas dans le lien qu’a indiqué (gile) pour éviter les déboires décrit par Didier en réponse n°14 sous Windows 7 : Ne pas oublier de faire un clic droit sur les fichiers puis dans propriétés penser à débloquer les fichiers.. A+
-
Bonsoir, L’erreur est ici dans le code (while (<= 0 par) Remplace par (while (< 0 par) Cela devrait fonctionner beaucoup mieux, car plus en cohérence avec cette ligne (setq par 0) qui doit permettre ta sortie de boucle. (Ps : Il aurait était plus logique d’utiliser dist ou distpar dans ton cas comme valeur de sortie de boucle comme l’avais écrit (gile). La tu test la non existance de pointpar pour savoir qu’il faut mettre par à 0, par atteindre la condition de sortie de boucle du while, c’est un peu moins lisible. ) Cordialement
-
Re, Sans vouloir ajouter de confusion, juste pour compléter encore un peu, il possible d’assimiler l'opérateur binaire "&" (AND) dans les filtres de sélections, au fonctionnement de la fonction lisp logand (qui retourne le résultat d'une opération logique AND). Pour t’en convaincre test l’expression suivante sur différent type de "POLYLINE" puis regarde les valeurs en retour. (logand (cdr (assoc 70 (entget (car (entsel))))) (+ 16 32 64)) Et tu verras que l’on pourra écrire à titre d’illustration, un équivalent lisp à la sélection suivante: ;; Renvoie une sélection dans le cas de polylignes 2d et 3d ;; et nil dans le cas maillage, ou autre.. (ssget "_+.:E:S" (list '(0 . "POLYLINE") '(-4 . "<NOT") '(-4 . "&") (cons 70 (+ 16 32 64)) '(-4 . "NOT>")) ) Comme ceci : ;; Renvoie T dans le cas de polylignes 2d et 3d ;; et nil dans le cas maillage, ou autre.. (and (setq ent (car (entsel))) (= (cdr (assoc 0 (setq ent (entget ent)))) "POLYLINE") (zerop (logand (cdr (assoc 70 ent)) (+ 16 32 64))) ) En espérant avoir été complet sur le sujet. A+
-
Re, Pour compléter la réponse de (gile), je pense qu’une petite explication de l’opérateur relationnel "&" du filtre de sélection (-4 . "&") serai peut-être la bienvenu... C'est ce que fait le filtre. Dans les filtres de sélection, comme pour les groupages logiques ("<and", "and>", "<or", "or>", "<xor", "xor>", "<not" et"not>"). Il est possible d’utiliser des tests relationnels classiques (">", ">", "*", "=", "<>" et "!=" ) ainsi que des tests relationnels plus spécifique que sont "&" et "&=" dit opérateurs binaires (permettant de tester la présence ou non de code binaire). Dans notre cas l'opérateur binaire AND, "&" est vérifié si un des bits spécifiés (+ 16 32 64) soit 112 dans le code 70 et présent. Puis le groupage logique NOT permet d’exclure l’entité correspondant de la sélection. (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>") En espérant avoir été suffisament explicite. A+
-
Salut, Juste une remarque en passant, dans le filtre de (gile) il y a une petite coquille, pour sélectionner les objets POLYLINE et écarter les maillages à l'aide du code 70 et d'opérateurs logiques. Il faut remplacer cette ligne (0 . "POLYLINE,POLYLINE,ARC,LINE,LWPOLYLINE,MLINE,SPLINE,XLINE") par la suivante : (0 . "ARC,LINE,LWPOLYLINE,MLINE,SPLINE,XLINE") Sinon en l’état, il serait préférable de supprimer XLINE du filtre comme suggéré par bryce pour éviter une erreur du type : Cordialement
-
Magnifique (gile), écrit comme cela c’est une évidence, pourtant il me semble que je suis toujours passé à coté. Tes codes en plus d’être formateur sont toujours très agréable à lire. A+ et merci.
-
Oui mais attention T ne peut être utilisé comme nil, car il symbolise seulement le vrai et pas une valeur définit.. (< T 1); erreur: type d'argument de comparaison incorrect: T 1 Alors que nil et magnifique il symbolise le néant en toute chose… (liste, atom, boléen(faux), ensemble vide) Cette discution me rappel une de mes premieres lectures sur le forum débutant, qui m’a tenu éveillé presque toute la nuit… http://cadxp.com/index.php?/topic/1814-nil/ Amicalement
-
Salut bonuscad Lorsque j’ai commencé à m’intéresser au lisp, j’ai également buté sur ce que tu viens d’écrire, pour m’en sortir, j’ai traduit nil par (), puis j’ai lu littéralement ensemble vide en lieu et place de nil. Ce qui revient à dire que l’ensemble vide ne peut être supérieur à une valeur numérique, (> () -1e99); nil (> () 0); nil (> () -1e99); nil Et donc qu’il est inférieur à toutes valeurs numériques (< () -1e99); T (< () 0); T (< () -1e99); T Je ne sais pas si cette explication et très orthodoxe, mais elle m’a permis de surmonter cette difficulté, pour résumer si il s’agit de liste, je pense nil, si il s’agit de nombre je pense aux ensembles mathématiques. Voilà mon explication si cela peut faire avancer la discussion. A+
-
DECOMPOS tous les BLOCK visible
VDH-Bruno a répondu à un(e) sujet de yusukens82 dans Débuter en LISP
1+ Clap, Clap, Clap… QAFLAGS les petites astuces qui font toutes la différence , c’est beau bravo A+ -
DECOMPOS tous les BLOCK visible
VDH-Bruno a répondu à un(e) sujet de yusukens82 dans Débuter en LISP
Bonjour yusukens82 Tout d’abord ce que tu appelles bloc dans un dessin et une référence de bloc soit une entité "INSERT", pour t’en convaincre, tape ce code dans ta console Visual Lisp et sélectionne une référence de bloc. _$ [b](entget (car (entsel)))[/b] ((-1 . <Nom d'entité: 7ef92458>) (0 . "INSERT") (330 . <Nom d'entité: 7ef90cf8>) (5 . "18B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "TEST POTEAU") (10 1042.04 1618.44 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) Une entité "BLOCK", est ce que l’on appelle une définition de bloc, elle est définie dans le table des blocs, qui n’est pas directement accessible avec ssget, mais plutôt avec les fonctions tblnext tblobjname tblsearch. Un petit sujet qu’il peut être util de lire ou relire - Blocs et imbrications - http://cadxp.com/index.php?/topic/30082-blocs-et-imbrications/ Maintenant plus concrètement pour l’exemple que tu viens de poster la commande DECOMPOS (_explode) fait partie des quelques commandes qui ne fonctionne en lisp qu’avec des objets uniques. Extrait de l’aide AutoCAD : Donc une fois que tu as créé ta sélection au moyen de l’instruction ssget _$ (ssget "_x" '((0 . "INSERT"))) <Selection set: da> Il te faut parcourir le jeu de sélection obtenue pour appliquer la commande _explode à chaques entités. Tu trouveras pour cela une fonction nommée ssmap fort pratique et très bien expliqué dans le sujet Arguments et Variables. http://cadxp.com/index.php?/topic/28642-arguments-et-variables/ Pour ma part j’ai monté un petit exemple avec ssnamex et une boucle pour traiter les blocs imbriqués (defun c:TEST (/ jeu-sel) (while (setq jeu-sel (ssget "_x" '((0 . "INSERT")))) (mapcar '(lambda (e) (command "_explode" (cadr e))) (ssnamex (ssget "_x" '((0 . "INSERT"))))) ) (princ) ) Cordialement - Edit - supprimé "" en trop dans le code -
connaitre rayon d'un arc dans une polyligne
VDH-Bruno a répondu à un(e) sujet de PHILPHIL dans Routines LISP
Bonsoir, Bien vue l’astuce Eric, ça me donnera peut être envie d’activer la saisie dynamique.. Sinon comme je n’ai pas souvent eu l’occasion d’utiliser grread et que le défi ne me semblait pas très compliqué, voici un code qui devrait répondre à la demande et qui renvoi le rayon. Au passage j’ai très peu de mérite, j’ai pillé l’essentielle du code chez (gile) dans PolySegments téléchargeable sur cette page : http://cadxp.com/index.php?/topic/14427-les-lisp-de-gile/ Le code principal (defun c:rayon (/ gr ent pl par ray val) (vl-load-com) (prompt "Positionnez le pointeur sur les segments courbes des polylignes...") (while (= 5 (car (setq gr (grread t 13 2)))) (if (and (setq ent (nentselp (cadr gr))) (setq pl (vlax-ename->vla-object (car ent))) (= (vla-get-ObjectName pl) "AcDbPolyline") (setq par (fix (vlax-curve-getParamAtPoint pl (trans (osnap (cadr ent) "_nea") 1 0) ) ) ) (not (zerop (vla-getBulge pl par))) ) (progn (redraw) (HighlightSegment pl par) (setq ray (cadr (polyarc-data (vla-getBulge pl par) (vlax-curve-getPointAtParam pl par) (vlax-curve-getPointAtParam pl (+ par 1)) ) ) ) (cond ((equal ray val 1e-9)) (T (print (setq val ray))) ) ) ) ) (redraw) (princ) ) Les routines associées puisés chez (gile) ;;================================================================;; ;;; Polyarc-data ;;; Retourne la liste des données d'un arc de polyligne (centre rayon angle). (defun polyarc-data (bu p1 p2 / ang rad cen area cg) (setq ang (* 2 (atan bu)) rad (/ (distance p1 p2) (* 2 (sin ang)) ) cen (polar p1 (+ (angle p1 p2) (- (/ pi 2) ang)) rad ) ) (list cen (abs rad) ang) ) ;;================================================================;; ;; HighlightSegment ;; Met un segment de polyligne en surbrillance ;; ;; Arguments ;; pl : la polyligne (vla-object) ;; par : l'indice du segment (defun HighlightSegment (pl par / p1 p2 n lst) (and (setq p1 (vlax-curve-getPointAtParam pl par)) (setq p1 (trans p1 0 1)) (setq p2 (vlax-curve-getPointAtParam pl (+ par 1))) (setq p2 (trans p2 0 1)) (if (zerop (vla-getBulge pl par)) (grvecs (list -255 p1 p2)) (progn (setq n 0) (repeat 100 (setq lst (cons (trans (vlax-curve-getPointAtParam pl (+ n par)) 0 1) lst ) n (+ n 0.01) ) ) (grvecs (cons -255 (apply 'append (mapcar 'list lst (cdr lst)))) ) ) ) ) ) ;;================================================================;; Bon test A+ -
Codes DXF et noms d'entités
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Merci à toi et à (gile), pour le retour, vos réflexions mon permis d’avancer un peu sur le sujet, je me suis aperçu qu’une relecture voir plus du manuel d’utilisation DXF > Concepts DXF avancés me serai des plus profitables.. Je n’ai plus trop le temps matériels pour continuer sur le sujet, mais je pense bien revenir dessus avec des interrogations plus ciblé. A+ -
Bonjour bryce, Rapidement une suggestion vis-à-vis de ma remarque formulé plus haut : Je verrai bien alors une micro modif dans ton code, pour faire une majZ+ il suffirait de varianter la séquence suivante : (if (= blk (vla-get-effectivename B)) (if (and (setq ins (vlax-get b 'InsertionPoint)) (setq ins (caddr ins))) (putattvalue b att (rtos ins 2 precision)) ) ) ;if b = blk Par (if (= blk (vla-get-effectivename B)) ;; (if (and (setq ins (vlax-get b 'InsertionPoint)) (setq ins (caddr ins))) ;; (putattvalue b att (rtos ins 2 precision)) (putattvalue b att (strcat "%<\\AcObjProp Object(%<\\_ObjId " (gc:GetObjectIdString B) ">%).InsertionPoint \\f \"%lu2%pt4%pr" (itoa precision) "\">%" ) ) ;;) ) ;if b = blk Puis de terminer avec un (vla-regen acdoc acActiveViewport) en sortie de code. Voilà histoire mettre tout le monde d’accord sur le sujet ;) A+ (Ps : le code de la routine associée écrite par (gile)) ;; gc:GetObjectIdString ;; Retourne l'ObjectId de 'obj' sous forme de chaîne représentant un entier 32 ou 64 bits ;; ;; Argument ;; obj : l'objet dont on cherche l'ObjectId (vla-object) (defun gc:GetObjectIdString (obj) (or *util* (setq *util* (vla-get-Utility (vla-get-ActiveDocument (vlax-get-acad-object))))) (if (vlax-method-applicable-p *util* 'GetObjectIdString) (vla-GetObjectIdString *util* obj :vlax-false) (itoa (vla-get-ObjectId obj)) ) )
-
Emmener les extrémités de linéaires proches d'un point cible
VDH-Bruno a répondu à un(e) sujet de fabcad dans Routines LISP
Heureux que cela conviennent, à noter que je n’ai pas spécialisé spécifiquement la routine pour de la 2D, ce qui veut dire que si le point cible à un Z différent du SCU. Les lignes auront à l’extrémité déplacé un Z indentique au point cible, contrairement aux lwpolylines qui garderont leurs Z de définitions. A+ -
Emmener les extrémités de linéaires proches d'un point cible
VDH-Bruno a répondu à un(e) sujet de fabcad dans Routines LISP
Bonjour, Ma proposition à tester voir si cela convient… (defun c:strech_lines_same_point (/ pt i sel ldxf) (cond ((setq pt (trans (getpoint "\nPoint cible: ") 1 0)) (prompt "\nSélectionner les entités linéaires à rattacher au point cible..") (repeat (setq i (sslength (setq sel (ssget '((0 . "LINE,LWPOLYLINE")))))) (setq ldxf (entget (ssname sel (setq i (1- i))))) (entmod (cond ((= (cdr (assoc 0 ldxf)) "LWPOLYLINE") (subst (cons 10 pt) (if (< (distance pt (cdr (assoc 10 ldxf))) (distance pt (cdr (assoc 10 (reverse ldxf))))) (assoc 10 ldxf) (assoc 10 (reverse ldxf)) ) ldxf ) ) ((= (cdr (assoc 0 ldxf)) "LINE") (if (< (distance pt (cdr (assoc 10 ldxf))) (distance pt (cdr (assoc 11 ldxf)))) (subst (cons 10 pt) (assoc 10 ldxf) ldxf) (subst (cons 11 pt) (assoc 11 ldxf) ldxf) ) ) ) ) ) ) ) (princ) ) (Ps : J’ai limité le traitement des objets linéaires aux lignes et polyligne optimisés.. pour ces dernières j’ai considéré seulement les points de départ et de fin, pas les sommets intermédiaires) -
Codes DXF et noms d'entités
VDH-Bruno a répondu à un(e) sujet de VDH-Bruno dans Pour aller plus loin en LISP
Bonsoir, C’est un peu normal, car je ne pose pas vraiment de questions, j’essaie de comprendre et de me faire une représentation de l’organisation de tout ceci, cela me semble effectivement tortueux et me pose des difficultés qui trouveront certainement leurs solutions au fil du temps (si j'arrive à me dégager suffisamment de temps pour... ). Ce n’est pas tant la signification des codes, mais bien le pourquoi /comment de leurs organisations au sein des listes entget que j’aimerai mieux saisir. Un bon résumé de ce que je veux me démontrer. :) Merci de vos retour. A+ -
Bonjour, Voilà, lorsque l’on interroge une entitée de dessin au moyen d’entget, on obtient en -1 le nom d’entité (ename), son type en 0 et souvent d’autres noms d’entités suivent dans les codes 330 à 369 et -2. Que l'on peut interroger avec la séquence suivante par exemple : (entget (cdr (assoc 330 (entget (car (entsel)))))) et ainsi de suite… En pensant finalement me promener dans la base de données du dessin via les noms d’entités contenues dans les codes dxf des entités interrogés.. (un peu comme on le ferait en Visual Lisp avec le modèle objet pour faire une analogie). Pour proposer un exemple, et une base de discussion, j’ai ouvert un dessin vierge et dessiné une ligne que j'ai interrogé. Pour éviter les expressions à rallonge du type : (entget (cdr (assoc 330 (entget (cdr (assoc 330 (entget (entlast)))))))) J’ai rapidement écrit la petite fonction suivante : (defun exploredxf (l e) (if l (entget (cdr (assoc (car l) (exploredxf (cdr l) e)))) (entget e) ) ) Donc en interrogeant les noms d’entités inclut dans les définitions d’entités voilà un peu ce que cela donne : Bon j’ai pas eu le courage d’aller complètement au bout de la démarche, et je ne suis pas certain d’avoir bien compris la logique de tout cela, donc en attendant que je murisse ceci dans mon esprit... Je souhaitais savoir si certain sur le forum avait déjà planché sur ces questions, et si oui qu’elles étaient les enseignements qu’ils en avaient tiré, car j’ai personnellement l’impression de ne pas être plus avancé... Merci
-
Bonjour, Voici un lien sur un sujet similaire.. (il y en a beaucoup d’autres) http://cadxp.com/index.php?/topic/33778-resolu-point-topographique-covadis-2d-3d/page__p__182436__fromsearch__1#entry182436 En réponse n°6 tu trouveras un code et une explication sur les constantes à modifier pour l’adapter à ton cas. As-tu le lien du lisp que tu cites ? Personnellement je pense que pour ce type de situation quant c’est possible les champs me semblent plus adapté qu’un lisp. A+
-
Re, Pour le plaisir le code que j’avais écrit (adapté avec getenv) testé en limitant la recherche à un arrangement de 1 à 3 caractères en se limitant aux caractères alphabétiques, tu verras cela mouline déjà un peu.. (apply 'append (mapcar '(lambda (v) (if (getenv v) (list v) ) ) (mapcar '(lambda (x) (apply 'strcat x)) (ar-1:n '("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z") 3 ) ) ) ) Pour info cela me retourne les 2 variables suivantes ("OS" "TMP") Pas mieux… ;) La preuve plus haut.. Merci (gile), pour le tuyau je ne connaissais pas.. faut dire que question d'environnement en dehors d’AutoCAD je suis très limité mais grace à vos contributions à tous, petit à petit je m’améliore.. A+
