Aller au contenu

Patrick_35

Membres
  • Compteur de contenus

    6 374
  • Inscription

  • Dernière visite

  • Jours gagnés

    30

Tout ce qui a été posté par Patrick_35

  1. Salut J'ai attendu avant de poster ma solution. Je sens que l"on peut faire mieux, mais en attendant... (defun rch_che(rep / che lst) (defun che(rep) (setq lst (cons rep lst)) (mapcar '(lambda(x) (che (strcat rep "\\" x)) ) (cddr (vl-directory-files rep "*.*" -1)) ) ) (che rep) (reverse lst) ) @+
  2. Tu nous fais un petit coup de grisou ? Allez Didier, tu apportes tellement autrement. @+
  3. Quand on le voit, cela parait tellement simple. Encore faut-il l'écrire. Je n'ai qu'un mot : respect Merci
  4. Salut Didier Je suis d'accord avec lecrabe. Tu peux très bien vivre sans le récursif. Tu peux aussi essayer celui-ci. @+
  5. A mon avis, le problème se situe dans le retour de la fonction avec la variable rep @+
  6. Bonjour Bravo pour vos efforts :D @gégé Comme le dis (gile), tu as réussi et c'est le principal. Quelle satisfaction de réussir ce type de challenge car ce qui est énervant, c'est que l'on sent que la solution n'est pas loin, mais qu'on n'y arrive pas. On a beau essayer de passer à autre chose, mais quand ça trotte dans un coin de la tête ;) On peut aussi optimiser encore un peu (defun doublon (lst) (and lst (if (member (car lst) (cdr lst)) t (doublon (cdr lst)) ) ) ) @x_all Tu y es presque, ta fonction ne marche pas avec par exemple (doublon '(1 2 3 4 5 2 6 7 8 9 3)) @Fraid Encore un effort, et avec les exemples postés, cela peut t'orienter. Bien vu (gile) avec vl-some. j'ai fais une fonction proche de celle de Bonus, mais en récursif et moins bien que celle de gégé (defun doublon(lst / dbl) (defun dbl(lst) (if lst (cons (vl-position T (mapcar '(lambda(x) (equal (car lst) x)) (cdr lst))) (dbl (cdr lst))) ) ) (not (apply '= (dbl lst))) ) (defun doublon(lst / dbl) (defun dbl(lst) (if lst (cons (equal (length (vl-remove (car lst) lst)) (1- (length lst))) (dbl (cdr lst))) ) ) (not (apply '= (dbl lst))) ) @+
  7. Oui, mais cela ne m'empêche pas d'apprécier une autre manière de faire. Le challenge reste une récursive. @+
  8. C'est justement le but du challenge. Se triturer les méninges. Allez Denis, allez Denis, allez.... Allez Denis, allez Denis, allez.... @+
  9. Bravo Bonus. je ne l'avais pas vu comme ça, mais chapeau :D @+
  10. Oui, tu as raison. Et à tous ceux qui pensent facilement récursif. @+
  11. Tu peux toujours utiliser l'itératif. C'était plus pour éviter l'utilisation des variables et c'est aussi pour travailler sur le récursif. Essaye une itérative sans variable. Il n'y a qu'un seul cas à ma connaissance qui nécessite le récursif, c'est l'arborescence. @+
  12. Bonjour Pour faire suite à ce sujet, rien ne vaut un bon exercice. L'idée est de déterminer si j'ai un double dans une liste, et de manière récursive. (gile), comme tu es notre maitre à tous, tu as un handicap d'une journée ;) Exemples : (doublon '(1 2 3 4 5 6 7 8 9)) --> nil (doublon '(1 2 3 4 5 6 7 8 9 1)) --> T (doublon '(1 2 3 4 5 1 6 7 8 9)) --> T (doublon '((1 2) (2 3) (4 5) (6 7) (8 9))) --> nil (doublon '((1 2) (2 3) (4 5) (6 7) (8 9) (1 2))) --> T (doublon '((1 2 3) (2 3) (4 5) (6 7) (8 9) (1 2))) --> nil (doublon '((1 2 3) (2 3) (4 5) (6 7) (8 9) (1 2 3))) --> T @+
  13. Salut Les variables a b c sont des arguments propres à la fonction, donc local. Le résultat attendu est conforme. @+
  14. C'est là où l'on comprend tout l'intérêt de définir ses variables/fonctions en local, voire de créer des fonctions qui renvoient des valeurs pour éviter les variables globales, donc potentiellement des effets de bords. Par exemple (defun c:mon_lisp(/ result total) (defun result (a b c) (+ a b c) ) (setq total (result 2 4 6)) (princ (strcat "Résultat : " (itoa total))) (princ) ) Une manière de tester si je n'ai pas de variables qui traines dans mon lisp Avant de lancer le lisp, je fais (setq mes_variables (atoms-family 1)) Je lance mon lisp et je teste toutes les fonctions afin de lancer un max de variables. Une fois fini, je fais (vl-remove-if '(lambda(x)(vl-position x mes_variables)) (atoms-family 1)) Et je vois ce qui traine. @+
  15. Patrick_35

    Question fonction

    Salut Je suis d'accord avec (gile). Pas simple de comprendre ton besoin. Le plus simple est de donner un exemple avec les données d'entrées et le résultat souhaité. @+
  16. Salut La solution est de se passer de l'éditeur de bloc. De créer son bloc comme un dessin et d'utiliser ensuite la commande bloc. @+
  17. Salut Un petit tour sur le wiki @+
  18. Patrick_35

    LISP pour Xref

    Hi lecrabinou Passage en v1.13 @+
  19. Salut Pour vérifier que l'objet sélectionné est un bloc (setq cart (car (entsel "\nSelectionner un cartouche"))) (if (= (cdr (assoc 0 (entget cart))) "INSERT") (alert "C'est un bloc") (alert "Ce n'est pas un bloc") ) Pour vérifier que tu as bien écrit dans ton attribut (if (vl-catch-all-error-p (vl-catch-all-apply 'setpropertyvalue (list cart "ECHELLE" ech))) (alert "Erreur") (alert "OK") ) @+
  20. Salut Denis. Alors, tu récupères bien tes données maintenant avec les xdatas ? @+
  21. Patrick_35

    Lisps de Patrick_35

    Salut Au début du lisp, dans la fonction (defun initialisation(pos / lay lst), tu remplaces (setq liste_lay (mapcar 'cdr (vl-sort lst '(lambda (a B)(< (car a) (car B))))) n 0) par (setq liste_lay (cons "Model" (layoutlist)) n 0) @+
  22. Salut Je comprends bien, mais combien as-tu de routines que tu ne maitrises pas totalement et qui fonctionnent ? Le plus dur est de s'y mettre. @+
  23. Salut Et avec LATT ? @+
  24. La version multiple (pour les présentations) (defun ImportPresent (Dessin Present / TC_ImportPresent dbx doc new) (defun TC_ImportPresent (Dessin / dbx) (princ "\nÉcrit par Patrick_35 de CadXP.com\n") (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16) (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument")) (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2)))) ) ;_ Fin de if (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx Dessin))) nil dbx ) ;_ Fin de if ) (if (setq dbx (TC_ImportPresent Dessin)) (progn (setq doc (vla-get-activedocument (vlax-get-acad-object))) (setq new (vla-CopyObjects dbx (vlax-safearray-fill (vlax-make-safearray vlax-vbObject (cons 0 (1- (length Present)))) (mapcar '(lambda(x) (vla-item (vla-get-layouts dbx) x)) Present) ) ;_ Fin de vlax-safearray-fill (vla-get-layouts doc) ) ;_ Fin de vla-CopyObjects ) (vla-put-activelayout doc (car (vlax-safearray->list (vlax-variant-value new)))) (vlax-release-object dbx) T ) nil ) ) (if (ImportPresent (findfile "TC_Lotissement.dwg") '("PdV" "Ong1" "Ong2")) (alert "Présentation's) importée(s).") (alert "Dessin non trouvé.") ) Pour tes vlax-ldata, tu as songé la xdatas tout simplement ? @+
  25. Le lisp corrigé (defun TC_ImportPresent (Dessin / dbx) (princ "\nÉcrit par Patrick_35 de CadXP.com\n") (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16) (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument")) (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2)))) ) ;_ Fin de if (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx Dessin))) nil dbx ) ;_ Fin de if ) (setq dbx (TC_ImportPresent (findfile "TC_Lotissement.dwg"))) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (setq new (vla-CopyObjects dbx (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list (vla-item (vla-get-layouts dbx) "PdV")) ) ;_ Fin de vlax-safearray-fill (vla-get-layouts doc) ) ;_ Fin de vla-CopyObjects ) (vla-put-activelayout doc (car (vlax-safearray->list (vlax-variant-value new)))) (vlax-release-object dbx) Le tout dans une fonction (defun ImportPresent (Dessin Present / TC_ImportPresent dbx doc new) (defun TC_ImportPresent (Dessin / dbx) (princ "\nÉcrit par Patrick_35 de CadXP.com\n") (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16) (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument")) (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2)))) ) ;_ Fin de if (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx Dessin))) nil dbx ) ;_ Fin de if ) (if (setq dbx (TC_ImportPresent Dessin)) (progn (setq doc (vla-get-activedocument (vlax-get-acad-object))) (setq new (vla-CopyObjects dbx (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list (vla-item (vla-get-layouts dbx) Present)) ) ;_ Fin de vlax-safearray-fill (vla-get-layouts doc) ) ;_ Fin de vla-CopyObjects ) (vla-put-activelayout doc (car (vlax-safearray->list (vlax-variant-value new)))) (vlax-release-object dbx) T ) nil ) ) (if (ImportPresent (findfile "TC_Lotissement.dwg") "PdV") (alert "Présentation importée.") (alert "Dessin non trouvé.") ) @+
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité