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. Merci Bonus, un oeil expert et il est vrai que je me suis inspiré d'une autre source mais avec des commandes dos ;), mais quand les idées sont bonnes... Je l'avais constaté sur des plate-formes XP, ce qui m'obligeait de faire par la suite un findfile alors que sur NT, j'ai le chemin complet Ca simplifie mes routines. Merci encore @+
  2. :) Quelle réactivité ! :) @+
  3. Oui votre honneur, c'est vrai que le montant n'est pas excessif et que tout le monde peut faire une donation, mais une idée pour inciter, plutôt que de mettre un filtre sur les auteurs, pourquoi ne pas le faire sur la recherche des sujets résolus/non résolus @+
  4. Salut Pour les xrefs, regarde ce sujet et pour le fichier, regarde la fonction lisp findfile @+
  5. C'est bon, j'ai trouvé Désolé, c'est une erreur de ma part, j'ai mis un entnext en trop donc le lisp remanié @+ (defun c:mat(/ bl ent js n modif sel tot val) (vl-load-com) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (if (setq sel (nentsel "\nSélectionnez une étiquette : ")) (if (= (cdr (assoc 0 (entget (car sel)))) "ATTRIB") (if (setq val (getstring t "\nNouvelle valeur : ")) (progn (setq bl (tblnext "block" t) sel (entget (car sel)) tot 0) (while bl (if (and (= (logand (cdr (assoc 70 bl)) 2) 2) (/= (logand (cdr (assoc 70 bl)) 4) 4)) (progn (setq ent (cdr (assoc -2 bl))) (while ent (setq ent (entget ent)) (if (and (= (cdr (assoc 0 ent)) "ATTDEF") (= (cdr (assoc 2 ent)) (cdr (assoc 2 sel)))) (if (setq js (ssget "x" (list (cons 0 "INSERT") (assoc 2 bl)))) (progn (setq n 0) (while (ssname js n) (setq modif (entget (entnext (ssname js n)))) (while (/= (cdr (assoc 0 modif)) "SEQEND") (if (= (cdr (assoc 2 modif)) (cdr (assoc 2 sel))) (progn (setq modif (subst (cons 1 val) (assoc 1 modif) modif) tot (1+ tot)) (entmod modif) (entupd (cdr (assoc -1 modif))) ) ) (setq modif (entget (entnext (cdr (assoc -1 modif))))) ) (setq n (1+ n)) ) ) ) ) (setq ent (entnext (cdr (assoc -1 ent)))) ) ) ) (setq bl (tblnext "block")) ) (princ (strcat "\nModification de " (itoa tot) " étiquette(s)")) ) ) (princ "\nCe n'est pas une étiquette.") ) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (princ) )
  6. Enfin, à mon avis, il serait plus avisé que ce ne soit pas que les donateurs qui résolvent les sujets. Quand un non-donateur à vu son problème réglé et qu'il veut le faire savoir, il ne peut pas alors que c'est seulement lui qui peut juger si c’est bon ou pas (à part notre cher webmaster peut-être). Du coup, c'est toute la communauté qui en pâtit @+
  7. Je ne comprends pas J'ai testé chez moi, et ça fonctionne parfaitement Le programme fonctionne comme ceci Tu sélectionnes un attribut Si c'est un attribut, tu donnes la valeur à propager Je parcours la table des blocs à la recherche d'un nom d'attribut qui correspond à celui qui a été sélectionné et aussi pour retrouver le nom du/des bloc(s) Dès que j'en ai un, je fais une sélection de tous les blocs insérés dans le dessin dudit bloc Je recherche ensuite l'attribut dans le bloc et dès que je l'ai, je lui affecte la nouvelle valeur Le plus simple, et que tu mettes un dessin à dispo et dire ce que tu souhaites modifier afin que je puisse regarder @+
  8. Mets un (vl-load-com) en tête ou remplace le (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) par un (command "_.undo" "_group") et le (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) par un (command "_.undo" "_end") @+
  9. Salut, comme je vois que tu as un peu de mal avec tes attributs, voici un lisp que change la valeur d'une étiquette dans tous tes blocs, quels que soient leurs noms @+ (defun c:mat(/ bl ent js n modif sel tot) (vla-startundomark (vla-get-activedocument (vlax-get-acad-object))) (if (setq sel (nentsel "\nSélectionnez une étiquette : ")) (if (= (cdr (assoc 0 (entget (car sel)))) "ATTRIB") (if (setq val (getstring t "\nNouvelle valeur : ")) (progn (setq bl (tblnext "block" t) sel (entget (car sel)) tot 0) (while bl (if (and (= (logand (cdr (assoc 70 bl)) 2) 2) (/= (logand (cdr (assoc 70 bl)) 4) 4)) (progn (setq ent (entnext (cdr (assoc -2 bl)))) (while ent (setq ent (entget ent)) (if (and (= (cdr (assoc 0 ent)) "ATTDEF") (= (cdr (assoc 2 ent)) (cdr (assoc 2 sel)))) (if (setq js (ssget "x" (list (cons 0 "INSERT") (assoc 2 bl)))) (progn (setq n 0) (while (ssname js n) (setq modif (entget (entnext (ssname js n)))) (while (/= (cdr (assoc 0 modif)) "SEQEND") (if (= (cdr (assoc 2 modif)) (cdr (assoc 2 sel))) (progn (setq modif (subst (cons 1 val) (assoc 1 modif) modif) tot (1+ tot)) (entmod modif) (entupd (cdr (assoc -1 modif))) ) ) (setq modif (entget (entnext (cdr (assoc -1 modif))))) ) (setq n (1+ n)) ) ) ) ) (setq ent (entnext (cdr (assoc -1 ent)))) ) ) ) (setq bl (tblnext "block")) ) (princ (strcat "\nModification de " (itoa tot) " étiquettes")) ) ) (princ "\nCe n'est pas une étiquette.") ) ) (vla-endundomark (vla-get-activedocument (vlax-get-acad-object))) (princ) )
  10. Tu es bien gentil Tramber, pour ma part, je ne prends même pas la peine de lire @+
  11. bonjour à tous Certes, mais je trouve la réponse de Gile beaucoup plus appropriée. @+
  12. Salut Je t'ai un peu modifié le lisp (sans vérification). Tu dois avoir deux boucles. La première qui parcoure ton jeu de sélection, et la seconde qui regarde les entités qui composent ton bloc (le SEQEND est pour dire quand c'est fini) @+ (defun c:AZZ (/ ent sel att n att_name att_ett att_lay car_att val_ett cart_att_ett) (setq att (car (nentsel "\nSélectionnez l'étiquette à modifier: "))) (setq att_name (entget att)) (setq att_ett (cdr (assoc 2 att_name))) (setq att_lay (cdr (assoc 8 att_name))) (setq cart_att_ett (substr att_lay 13 3)) (setq val_ett (getstring T "\nEntrer la nouvelle valeur de l'étiquette : ")) (if (= cart_att_ett "EXI") (setq sel (ssget "x" (list (cons 0 "INSERT") (cons 2 "Cartouche_EXI_att")))) (setq sel (ssget "x" (list (cons 0 "INSERT") (cons 2 "Cartouche_PRO_att")))) ) (if sel (progn (setq n 0) (while (= (ssname sel n)) (setq ent (entget (entnext (ssname sel n)))) (while (/= (cdr (assoc 0 ent)) "SEQEND") (if (= (cdr (assoc 2 ent)) att_ett) (progn (setq ent (subst (cons 1 val_ett) (assoc 1 ent) ent)) (entmod ent) (entupd (cdr (assoc -1 ent))) ) ) (setq ent (entget (entnext (cdr (assoc -1 ent))))) ) (setq n (1+ n)) ) ) ) (princ) )
  13. Salut, tu as le cours n°1 et sa solution ainsi que le n°2 fait par Rimbo pour commencer @+
  14. Ah, dommage, mais qui sait.... @+
  15. Salut, le plus simple est de passer par un ssget (setq sel (ssget "x" (list (cons 0 "INSERT") (cons 2 "MON_BLOC")))) de tester que la sélection n'est pas vide (if sel de faire une boucle (setq n 0) (while (ssname sel n) de choisir le bloc dans la sélection (setq ent (entget (entnext (ssname sel n)))) (while (= (cdr (assoc 2 ent)) "SEQEND") de rechercher son étiquette (if (= (cdr (assoc 2 ent)) "MON_ETIQUETTE") (progn et de modifier la valeur recherché (setq ent (subst (cons 1 "MA_VALEUR") (assoc 1 ent) ent)) (entmod ent) (entupd (cdr (assoc -1 ent))) ) ) et de passer au suivant (setq ent (entnext (cdr (assoc -1 ent)))) ) et de passer au bloc suivant (du même nom) (setq n (1+ n)) puis pour finir le lisp ) ) (princ) C'est du non testé et un premier jet, mais ça devrait te donner la marche à suivre @+
  16. Patrick_35

    problème de clic

    Oui, mais le scroll n’est pas assez précis à mon goût. Et puis je me suis fait des raccourcis avec ze (zoom etendu), za (zoom précédent), zt (zoom total), etc... Du coup, deux touches + 1 clic droit et le tour est joué Et la cendre sur le clavier ? :cool: @+
  17. Tu as bien appris à programmer sur les calculatrices pendant tes études. Ce n’est pas évident au premier abord, mais petit à petit... @+
  18. Bon, ben je viens de l'améliorer pour la dernière fois @+
  19. Salut, Je teste si tu es en mono ou multidessin (variable SDI) et si en mono, je regarde si tu as besoin de sauvegarder (variable DBMOD) Je teste si tu es en mono ou multidessin pour eviter une erreur en mono avec le _.close C'est pour finir mon if J'ai modifié ce matin mon lisp, car j'avais constaté un bug Le script tel qu'il est fait prend les noms de répertoires+fichiers avec les espaces, accents....
  20. Salut, Un lisp qui te crée un script de la partie personnalisable d'un répertoire complet que tu choisis Le script est créé dans le répertoire choisi sous le nom de SCRIPT.SCR @+ (defun c:scr(/ fic fscr lst n rep) (if (setq fic (getfiled "Choisissez un fichier de référence" (getvar "dwgprefix") "dwg" 8)) (progn (setq rep (vl-string-translate "\\" "/" (strcat (vl-filename-directory (findfile fic)) "\\"))) (setq lst (acad_strlsort (vl-directory-files rep "*.dwg" 1)) fscr (open (strcat rep "SCRIPT.SCR") "w") n 0) (while (nth n lst) (if (= n 0) (progn (write-line "(if (and (not (zerop (getvar \"dbmod\"))) (not (zerop (getvar \"sdi\"))))" fscr) (write-line " (command \"_.qsave\"))" fscr) ) ) (write-line (strcat "(command \"_.open\" \"" rep (nth n lst) "\")") fscr) ;======================================================================================= ; Début de Partie personnalisable ;======================================================================================= (write-line "exc" fscr) ;======================================================================================= ; Fin de Partie personnalisable ;======================================================================================= (write-line "(if (not (zerop (getvar \"dbmod\")))" fscr) (write-line " (command \"_.qsave\"))" fscr) (write-line "(if (zerop (getvar \"sdi\"))" fscr) (write-line " (command \"_.close\"))" fscr) (setq n (1+ n)) ) (close fscr) (princ "\nScript créé.") ) ) (princ) ) [Edité le 29/7/2005 par Patrick_35]
  21. Tivi, je vais te dire comme De Gaulle à Alger ;) Sincèrement, je ne comprends pas où est le problème. Cette commande est assez simple il me semble :casstet: @+
  22. Salut, Si un jour tu souhaites te lancer dans la prog, regarde ici et là @+
  23. Patrick_35

    problème de clic

    Moi, avec le clavier et les habitudes sont dures à changer @+
  24. Les express sont des outils que l'on ajoute à autocad. Tu peux les télécharger ici, là, ou encore ici @+
  25. Patrick_35

    Incrémenter

    Salut Ici @+
×
×
  • 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é