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. Plutôt qu'un long discours https://autode.sk/2Ephoe2 C'est vrai que ça aide, mais il faut aussi, à un moment, s'en séparer. @+
  2. Salut Travailler avec Autocad sans formation, c'est comme apprendre le vélo sans les petites roues. A moins de tomber sur le Mozart de la pédale, on devine assez vite le résultat. Pour répondre à ta problématique, pour dupliquer la valeur d'un attribut vers d'autres attributs (du même bloc ou pas) : 1) Tu édites l'attribut du bloc. 2) Clic droit dans la zone d'édition --> insérer un champ... 3) Dans les noms de champ, tu choisis Objet --> Sélection d'un ou du même bloc --> Choix de l'attribut --> Valider. 4) Manip à répéter autant de fois que l'on veut reporter la valeur. @+
  3. Salut Ou encore avec LSTATT @+
  4. Salut Et même des challenges, car on apprend énormément de choses et aussi de voir d'autres style d'écriture et manières de résoudre un problème. @+
  5. Salut Gexl s'utilise sur le fichier exporté. L'idée est de créer un fichier par présentation et que sur ce fichier, n'apparaisse que les objets visibles sur ladite présentation. Comme j'utilise ObjectDbx pour travailler sur l'exportation, qu'il est impossible de modifier les xdatas d'un viewport (fenêtre) en lisp/vlisp sauf avec l'outil fournit par (gile) (avec la dll fournit avec le lisp) mais celui-ci ne travaille qu'avec des ename et non des objets vl. Pour palier à cela, j'ouvre le/les fichier(s) exporté(s) et j'utilise gexl pour retrouver l'état de mes fenêtres (c'est scriptable si on a plusieurs fichiers). @+
  6. Bonjour Ce n'est pas normal. Je viens de m'apercevoir que la classe filedependencies a été supprimée à partir de la version 2018. Sympa Autodesk de virer des propriétés vlisp sans prévenir. J'espère que c'est la seule. Donc, j'ai mis à jour le lisp (v3.02) pour palier à ce problème. @+
  7. Ce qui veut dire que le site se meurt...... @+
  8. Merci. @+
  9. Bonjour Alors merci de lui remonter ce sujet. @+
  10. Si, mais la demande est tellement claire que les réponses résultent de ce que l'on a pu déduire.
  11. Salut Par exemple (defun c:test(/ routine_1 routine_2 routine_3 routine_4 var1 var2) (defun routine_1(arg1 arg2 / var1) (setq var1 (+ arg1 arg2)) ) (defun routine_2(arg1 arg2 / var1) (setq var1 (- arg1 arg2)) ) (defun routine_3(arg1 arg2 / var1) (setq var1 (* arg1 arg2)) ) (defun routine_4(arg1 arg2 / var1) (setq var1 (/ arg1 arg2)) ) (setq var1 10) (setq var2 10) (alert (strcat "Résultat de routine_1 : " (itoa (routine_1 var1 var2)))) (alert (strcat "Résultat de routine_2 : " (itoa (routine_2 var1 var2)))) (alert (strcat "Résultat de routine_3 : " (itoa (routine_3 var1 var2)))) (alert (strcat "Résultat de routine_4 : " (itoa (routine_4 var1 var2)))) (princ) ) Ou plus simplement (defun c:test(/ routine_1 routine_2 routine_3 routine_4 var1 var2) (defun routine_1(arg1 arg2) (+ arg1 arg2) ) (defun routine_2(arg1 arg2) (- arg1 arg2) ) (defun routine_3(arg1 arg2) (* arg1 arg2) ) (defun routine_4(arg1 arg2) (/ arg1 arg2) ) (setq var1 10) (setq var2 10) (alert (strcat "Résultat de routine_1 : " (itoa (routine_1 var1 var2)))) (alert (strcat "Résultat de routine_2 : " (itoa (routine_2 var1 var2)))) (alert (strcat "Résultat de routine_3 : " (itoa (routine_3 var1 var2)))) (alert (strcat "Résultat de routine_4 : " (itoa (routine_4 var1 var2)))) (princ) ) @+
  12. Salut Non, ça fonctionne bien. j'ai juste repris le lisp pour lister les process afin de vérifier. (defun appli(/ apps item lst meth1 meth2 WMI) (setq WMI (vlax-create-object "WbemScripting.SWbemLocator") meth1 (vlax-invoke WMI 'ConnectServer nil nil nil nil nil nil nil nil) meth2 (vlax-invoke meth1 'ExecQuery "Select * from Win32_Process") ) (vlax-for item meth2 (setq lst (cons (vlax-get item 'CommandLine) lst)) ) (foreach item (list WMI meth1 meth2) (vlax-release-object item) ) (vl-remove nil lst) ) @+
  13. Salut Une modification de CAT pour recopier la valeur des étiquettes si elles ont le même nom. ;;;================================================================= ;;; ;;; CATP.LSP V1.00 ;;; ;;; Copier des attributs si les étiquettes sont identiques ;;; ;;; Copyright (C) Patrick_35 ;;; ;;;================================================================= (defun c:catp(/ att bl doc ent s sel *errcat*) ;========================================================================= ; Gestion des erreurs ;========================================================================= (defun *errcat* (msg) (or (member (strcase msg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) (vla-endundomark doc) (setq *error* s) (princ) ) (vl-load-com) (setq s *error* *error* *errcat* doc (vla-get-activedocument (vlax-get-acad-object)) ) (vla-startundomark doc) (and (setq ent (entsel "\nSélectionnez le bloc d'origine : ")) (setq ent (vlax-ename->vla-object (car ent))) (eq (vla-get-objectname ent) "AcDbBlockReference") (eq (vla-get-hasattributes ent) :vlax-true) (setq att (vlax-invoke ent 'getattributes)) (progn (while (setq ent (entsel "\nSélectionnez les blocs destinataires : ")) (setq ent (vlax-ename->vla-object (car ent))) (and (eq (vla-get-objectname ent) "AcDbBlockReference") (mapcar '(lambda(a / B) (foreach b (vlax-invoke ent 'getattributes) (and (eq (strcase (vla-get-tagstring a)) (strcase (vla-get-tagstring B))) (vla-put-textstring b (vla-get-textstring a)) ) ) ) att ) ) ) ) ) (vla-endundomark doc) (setq *error* s) (princ) ) (setq nom_lisp "CATP") (if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter."))) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter."))) (setq nom_lisp nil) (princ) @+
  14. Tu remplaces (vl-cmdf "_.quit") par (vl-cmdf "_.close") @+
  15. Salut Je viens de télécharger RBLOC depuis le lien que tu donnes et je retrouve bien le DCL :huh: @+
  16. Le plus simple est que tu nous donnes deux exemples initiaux, puis le résultat attendu. @+
  17. Lst_max retourne le coin haut droit d'une sélection. Lst_min, le coin bas gauche. Un peu comme extmin et extmax. La sélection peut se faire sur tout le dessin. Avec, comme l'indique (gile), la fonction trans, tu vas du SGC au SGU. @+
  18. Salut Un exemple pour déterminer le point max et min d'une sélection (ssget) (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (vla-getboundingbox ent 'hd 'bg) (if lst_max (setq lst_max (mapcar 'max (vlax-safearray->list hd) (vlax-safearray->list bg) lst_max)) (setq lst_max (mapcar 'max (vlax-safearray->list hd) (vlax-safearray->list bg))) ) (if lst_min (setq lst_min (mapcar 'min (vlax-safearray->list hd) (vlax-safearray->list bg) lst_min)) (setq lst_min (mapcar 'min (vlax-safearray->list hd) (vlax-safearray->list bg))) ) ) (vla-delete sel) @+
  19. Salut Pour ma part, une routine = fonction ou commande. Une sous-routine ou sous-fonction est une fonction interne à la fonction/commande. En aucun cas, je n'ai accès directement à une sous-fonction. C'est dans la même logique des variables globales/locales. Par exemple (defun c:fonction(/ s_fonction1 s_fonction2) (defun s_fonction1() .... ) (defun s_fonction2() .... ) .... ) @+
  20. Salut Il n'y a pas 50 solutions. 1) Quand des fonctions sont répétitives d'un lisp à l'autre, elles ont toujours le même nom. 2) Avoir le nom d'une fonction la plus clair pour soi. Par exemple, une fonction qui supprime les espaces --> (defun supprimer_espace()) 3) Ne pas hésiter à faire des commentaires. 4) Un exemple de commentaires. ;;;================================================================= ;;; ;;; Description de la fonction ;;; Avec les paramètres si besoin ;;; ;;;================================================================= ;;;--------------------------------------------------------------- ;;; ;;; Description de la sous-routine ;;; Avec les paramètres si besoin ;;; ;;;--------------------------------------------------------------- @+
  21. Patrick_35

    stagiaire

    Salut Sauf si c'est une expression lisp. Par exemple (/ 1.5 2.5) fonctionne. @+
  22. Salut Par exemple (defun c:rha(/ blo doc ent hachure nouvelle tot) ;;; =========================================================================== ;;; Paramètres à définir par l'utilisateur ; L'hachure à remplacer (setq hachure "SOLID") ; L'hachure remplacante (setq nouvelle "ANSI31") ;;; Fin des paramètres à définir par l'utilisateur ;;; =========================================================================== (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) tot 0 ) (vla-startundomark doc) (vlax-for blo (vla-get-blocks doc) (and (= (vla-get-isxref blo) :vlax-false) (vlax-for ent blo (and (eq (vla-get-objectname ent) "AcDbHatch") (eq (strcase (vla-get-patternname ent)) (strcase hachure)) (setq tot (1+ tot)) (vla-setpattern ent acHatchPatternTypePreDefined nouvelle) ) ) ) ) (vla-regen doc :vlax-true) (vla-endundomark doc) (princ (strcat "\nModification de " (itoa tot) " hachure(s).")) (princ) ) Ne pas oublier de changer "SOLID" et "ANSI31" dans les paramètres à définir par l'utilisateur afin de faire correspondre au besoin. @+
  23. Salut Bonus C'est bien ce qu'indique la doc, mais pour avoir travaillé avec ObjectDbx, j'ai eu la mauvaise surprise de constater que cela ne fonctionnait pas. Pas de sauvegarde. Peut-être que les modifs via le lisp n'étaient pas prises en compte pour que le (vla-close ... :vlax-true) fonctionne. La parade, vla-saveas. @+
  24. Salut Vite fait. La sauvegarde est faite même si un dessin ouvert n'est pas modifié (DBMOD = 0). Si le dessin est en lecture seul, la sauvegarde ne fonctionnera pas. (defun C:QuitAll ( / cur dwg) (vl-load-com) (vlax-for dwg (vla-get-documents (vlax-get-acad-object)) (if (equal (vla-get-activedocument (vlax-get-acad-object)) dwg) (setq cur dwg) (progn (vl-catch-all-apply 'vla-saveas (list dwg (vla-get-fullname dwg))) (vla-close dwg :vlax-false) ) ) ) (vl-catch-all-apply 'vla-saveas (list cur (vla-get-fullname cur))) (vl-cmdf "_.quit") (princ) ) @+
  25. Patrick_35

    stagiaire

    Salut On peut faire la même chose avec sa paye, en centimes plutôt qu'en euros. Il va vite comprendre ;) @+
×
×
  • 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é