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. Non, on appelle directement la fonction, pas une liste En général, tu vois (mapcar '(lambda(x)(print x)) (vl-sort lst '<)) car lambda est une fonction anonyme (defun imprime(doc) (print doc) ) (mapcar 'imprime (vl-sort lst '<)) fonctionne aussi tout comme (mapcar 'print (vl-sort lst '<)) Si tu regardes certaines réponses de Bonus, tu verras qu'il se sert de la fonction lambda pour réaliser une routine Par exemple ps : ici, on pourrait très bien utiliser un foreach car le retour du mapcar importe peu, mais c'est pour économiser les variables. @+
  2. Tu peux reprendre le code, au contraire :D Mais une chose , tu as déjà un filtre qui évite les doublons avec (or (vl-position (vla-get-layer ent) lst)... Traduction avec le or --> Si je n'ai pas la position du calque dans la liste, alors ... Ensuite, on peut aussi faire (mapcar 'print (vl-sort lst '<)) Ce qui évite une variable @+
  3. Salut La même réponse que Denis qui a été le plus rapide. Je donne quand même ma solution. (defun c:lstc(/ ent lst sel) (and (ssget) (progn (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (or (vl-position (vla-get-layer ent) lst) (setq lst (cons (vla-get-layer ent) lst)) ) ) (vla-delete sel) (mapcar 'print lst) ) ) (princ) ) @+
  4. Patrick_35

    débats...

    Salut Filtre @+
  5. Ben oui, il faut s'habituer à utiliser plus souvent apply. @+
  6. Patrick_35

    MsgBox

    Non, pas du tout. Et je viens de me souvenir que j'avais déjà donné cette solution. J'ai confondu avec InputBox. Faut pas vieillir :huh: @+
  7. Salut Avec (getenv "os") ? @+
  8. Les codes 40 et 41 suivent le code 10. Donc tu dois pouvoir t'y retrouver. Sinon, en vlisp sur une poly ouverte (setq poly (vlax-ename->vla-object (car (entsel)))) (setq segs (/ (length (vlax-get poly 'coordinates)) 2)) (setq seg 0) (repeat segs (vla-getwidth poly seg 'deb 'fin) (princ (strcat "\nSegment " (itoa (1+ seg)) " - Début : " (rtos deb) " - Fin : " (rtos fin))) (setq seg (1+ seg)) ) @+
  9. Salut Un exemple qui modifie tous les codes 40 et 41 d'une poly (mapcar '(lambda(x) (cond ((eq (car x) 40) (cons 40 0.0) ) ((eq (car x) 41) (cons 41 0.0) ) (T x ) ) ) (entget (car (entsel))) ) Sinon, il reste la commande _.pedit @+
  10. Patrick_35

    MsgBox

    Bonjour Je viens de faire une recherche pour afficher une boite de dialogue et j'ai trouvé ceci. Enfin une boite de dialogue avec icone possible sans utiliser vba. Donc traduction en vlisp. (defun msgbox(titre message bouton / wsh) ; Types de bouton ; Valeur Description ; 0 Affiche le bouton OK. ; 1 Affiche les boutons OK et Cancel. ; 2 Affiche les boutons Abort, Retry et Ignore. ; 3 Affiche les boutons Yes, No et Cancel. ; 4 Affiche les boutons Yes et No. ; 5 Affiche les boutons Retry et Cancel. ; Types d'icônes ; Valeur Description ; 16 Affiche l'icône "Stop". ; 32 Affiche l'icône "Point d'interrogation". ; 48 Affiche l'icône "Point d'exclamation". ; 64 Affiche l'icône "Informations". ; Valeurs de retour ; Valeur Description ; 1 Bouton OK ; 2 Bouton Cancel ; 3 Bouton Abort ; 4 Bouton Retry ; 5 Bouton Ignore ; 6 Bouton Yes ; 7 Bouton No (setq wsh (vlax-create-object "WScript.Shell") res (vlax-invoke wsh 'popup message nil titre bouton) ) (vlax-release-object wsh) res ) Pour tester (msgbox "Mon alerte" "Autocad coule..." (+ 2 16)) ps : le timer pour fermer automatiquement la bd n'a pas l'air de fonctionner sur Autocad (remplacer le nil dans la fonction par un chiffre (secondes)). @+
  11. Salut Tu as aussi BIBLES, lisp créé pour une v14, cela ne nous rajeunie pas. @+
  12. Salut Oui, mais avec une récursive, difficile de faire autrement, à moins de créer une fonction comme ma 1ere version. J'ai pensé remettre la liste à plat, et cela revient à la demande initiale. @+
  13. Salut Avec la commande insérer --> parcourir. Il te propose de redéfinir le bloc. Si tu souhaites automatiser la tâche, tu peux aussi faire insérer --> Nom_bloc="c:\\patati\\patata\\Nom_bloc.dwg" @+
  14. Je t'ai indiqué la propriété en vlisp Ou sinon, avec la commande zoom --> ...xp @+
  15. Oui Toujours extrait de l'aide @+
  16. Bonjour à tous Ma version (defun rch_che(rep) (cons rep (mapcar '(lambda(x) (rch_che (if (= (substr rep (strlen rep) 1) "\\") (strcat rep x) (strcat rep "\\" x) ) ) ) (if (= (substr rep (strlen rep) 1) "\\") (vl-directory-files rep "*.*" -1) (cddr (vl-directory-files rep "*.*" -1)) ) ) ) ) @+
  17. Salut En vlisp avec la propriété CustomScale Pour le dxf, extrait de l'aide @+
  18. Oui Non Une liste suffit Je viens de mette la main dessus. On est tous passé par là ;) Oh, de rien A la vu du nom, je dirais que non, mais avec tout ce que j'ai fait... @+
  19. Il faut modifier la liste des xdatas. Le principe est simple. Le code dxf 1003 correspond au nom du calque et s'il est présent --> Gel dans la fenêtre. Avec les outils que t'a donné (gile), tu devrais y arriver. ps : il m'avait aussi fait une dll pour GEF --> vplayerlisp.dll, à rechercher sur le site de (gile) @+
  20. Salut C'est dans les xdatas de la fenêtre. Pour vérifier, tu gèles un calque dans une fenêtre et tu utilises ensuite xdlist des express. @+
  21. Une piste, une racine a toujours 3 caractères. @+
  22. Exact, comme avec le strcat @+
  23. Salut Tu as les répertoires "." et ".." qui apparaissent dans la liste. Pour éviter de les trouver, tu peux utiliser la fonction cdr + cdr = cddr pour le retour de la fonction vl-directory-files. @+
  24. Salut Avec le lisp de ce message ou tout simplement su supprimant le lien pour intégrer la photo dans le dessin (ouverture avec Paint --> Copier dans Paint et coller dans Autocad) @+
  25. Salut Je suis d'accord, le mapcar n'est pas nécessaire, mais il n'est pas si innocent ;) ps : j'attends demain pour proposer ma solution. @+
×
×
  • 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é