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, c'est juste que tu parlais de blocs, pour éviter que si tu utilises le lisp sur des poly, mtext, etc..., celui-ci plante et donne un message d'erreur. C'est alors à toi d'envisager toutes les combinaisons possibles par l'utilisateur du lisp. L'idée est de pointer de dernier objet dans le dessin, puis de décomposer le bloc. Ainsi, les objets décomposés sont ajoutés à la suite du dernier objet pointé auparavant. Donc un (entnext (entlast)) donne le 1er objet décomposé (dans l'idée). Si, un bloc est une référence et les objets qui le composent le sont aussi. De plus, tu peux avoir des blocs imbriqués dans des blocs. C'est comme tout, c'est en forgeant qu'on devient forgeron. @+
  2. Salut 1) Tester si l'objet choisit est bien un bloc. 2) Pointer sur le dernier objet du dessin. 3) Décomposer le bloc. 4) Commencer une boucle depuis le dernier objet pointé (avec entnext). 5) Changer les objets de calque. 6) Fermer la boucle. @+
  3. Patrick_35

    Qui ne tente rien…

    L'extension du fichier ne sert que pour indiquer les données qui sont sauvées avec quel logiciel et comment. Comme le lisp utilise directement Excel, que c'est Excel qui charge le fichier, cela ne change en rien les fonctionnalités. Donc, logiquement, même l'outil donné par (gile) devrait fonctionner s'il permet de pointer un xlsm. @+
  4. Patrick_35

    Qui ne tente rien…

    Salut Tu remplaces (getfiled "Veuillez sélectionner un fichier Excel" chemin_fichier_excel "xls" 16) par (getfiled "Veuillez sélectionner un fichier Excel" chemin_fichier_excel "xls;xlsx" 16) ou (getfiled "Veuillez sélectionner un fichier Excel" chemin_fichier_excel "xlsx;xlx" 16) en fonction de la position que tu préfères pour l'extension @+
  5. Cela suppose qu'Autocad doit-être ouvert. Sinon, après une recherche rapide. Ou encore ici et là. @+
  6. Ne maitrisant pas vba, difficile de te répondre. Néanmoins, tu as un exemple dans le lien que j'ai donné et je me pose la question si tu as fait le lien avec Autocad du style : Set objAcad = CreateObject("autocad.application") @+
  7. Salut Soit tu utilises \\ ou /, mais pas l'inverse. Sinon, tu peux utiliser la méthode InsertBlock. @+
  8. Salut L'utilisation des noms court vient de l'utilisation du clavier. En effet, comme c'est un lisp, tu n'as pas en base le bouton, le menu, le raccourci, etc... et se coltiner au clavier une commande longue, sans erreur de frappe car il n'y avait pas à l'époque, la saisie dynamique, devient vite galère. De plus, c'est aussi l'habitude d'utiliser les raccourcis clavier qui ont aussi abrégé le nom des lisps. On reste dans la même logique d'appel de commandes. Cela est devenue une habitude et en rien une limitation d'Autocad, car je suis bien d'accord, rien n'est moins parlant un abrégé, qu'une commande longue. @+
  9. Salut Regarde la fonction startapp @+
  10. Patrick_35

    objectDcl ou openDcl ?

    Salut Pour moi, aucun des deux pour plusieurs raisons. - Pérennité de l'éditeur. - Comptabilité entre les différentes versions d'autocad. - Portage des lisps vers d'autres services de la société. Ensuite - Le DCL de base permet énormément de choses. - Maximiser l'utilisation des Activex (comme browseforfolder, msgbox, etc.…) Mais c'est selon chacun et ses besoins. @+
  11. Non, l'idée est de récupérer le nom de l'étiquette, même sur des blocs différents et de propager ces valeurs vers d'autres blocs qui ont la même étiquette. Tu n'as pas de limites pour la sélection des attributs, ni de blocs pour recopier les valeurs. @+
  12. Dans le nom du calque, tu as des points d'interrogations et dans le lien que je t'ai indiqué, le ? signifie un caractère unique. Pour que le point d'interrogation reste tel quel et non un caractère spécial, il faut ajouter devant l'apostrophe inversé. Donc, ceci devrait fonctionner (wcmatch (vla-get-layer o) "*Model`?Unit`?-`?Zone`?Category") @+
  13. Oui, en remplaçant (not (vl-position (vla-get-layer o) '("Calque 1" "Calque 2" "Calque 3"))) par (not (wcmatch (vla-get-layer o) "truc?*")) Une aide sur les caractères génériques (wilcard) @+
  14. Patrick_35

    fenêtre début

    Salut Regarde la variable STARTUP @+
  15. Salut Tu remplaces (and (wcmatch (vla-get-ObjectName o) "AcDb*Hatch") (= (vla-get-PatternName o) "SOLID") ) par (and (wcmatch (vla-get-ObjectName o) "AcDb*Hatch") (= (vla-get-PatternName o) "SOLID") (not (vl-position (vla-get-layer o) '("Calque 1" "Calque 2" "Calque 3"))) ) @+
  16. Salut Une autre manière de procéder (defun c:dat(/ att doc ent ele lst tag toa tob) (setq doc (vla-get-activedocument(vlax-get-acad-object)) toa 0 tob 0 ) (vla-startundomark doc) (while (setq ent (nentsel "\nSélectionnez des attributs : ")) (and (setq att (vlax-ename->vla-object (car ent))) (eq (vla-get-objectname att) "AcDbAttribute") (not (assoc (vla-get-tagstring att) lst)) (setq lst (cons (list (vla-get-tagstring att) (vla-get-textstring att) att) lst)) (redraw (vlax-vla-object->ename att) 3) ) ) (mapcar '(lambda(x)(redraw (vlax-vla-object->ename (caddr x)) 4)) lst) (and lst (ssget (list (cons 0 "insert") (cons 66 1))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (setq tag nil) (foreach att (vlax-invoke ent 'getattributes) (and (setq ele (assoc (vla-get-tagstring att) lst)) (not (equal att (caddr ele))) (setq toa (1+ toa) tag T ) (vla-put-textstring att (cadr ele)) ) ) (and tag (setq tob (1+ tob))) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ (strcat "\nModification de " (itoa tob) " bloc(s) et de " (itoa toa) " attribut(s).")) (princ) ) @+
  17. Tu sélectionnes tous les blocs que tu veux modifier (et pas forcément avec le même nom). Selon ton exemple, NUMERO est en 1ère position et ALT en 2em Dans la palette des propriétés, dans la section Attributs, tu modifies à la mano le 1er et 2em. C'est déjà une 1ère approche. @+
  18. Salut Tu sélectionnes tous tes blocs, et ensuite, dans les propriétés (ctrl+1), tu fais ce que tu veux avec les attributs. ps : Cat est en v2.01 @+
  19. Salut +1 avec Denis @+
  20. Juste en jouant avec les codes dxf (defun c:CopieCalq (Calq / n ent ss) (setq n 0) (and (setq ss (ssget)) (while (setq ent (ssname ss n)) (setq ent (vl-remove-if '(lambda(x)(vl-position (car x) '(-1 5))) (entget ent))) (entmake (subst (cons 8 Calq) (assoc 8 ent) ent)) (setq n (1+ n)) ) ) (princ (strcat "\n" (itoa n) " objet(s) copié(s) sur le calque : " Calq)) (princ) ) @+
  21. Comme j'avais 5 mn ;) (defun c:CopieCalq (Calq / cmd der ss) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (or (tblsearch "layer" Calq) (vl-cmdf "_.layer" "_make" Calq "") ) (and (setq ss (ssget)) (progn (setq der (entlast)) (vl-cmdf "_.copy" ss "" "0,0,0" "0,0,0") (while (setq der (entnext der)) (vl-cmdf "_.chprop" der "" "_layer" Calq "") ) (princ (strcat "\n" (itoa (sslength ss)) " objet(s) copié(s) sur le calque : " Calq)) ) ) (setvar "cmdecho" cmd) (princ) ) @+
  22. Salut Utilises la commande copier (_.copy), puis la commande chprop pour changer de calque. Si tu restes en Autolisp, que tu veux que ce soit les objets copiés (et non la sélection) qui changent de calque, il faut pointer avant la commande copier le dernier objet (entlast), faire la copie. Tu retrouveras les objets copiés avec (entnext (entlast)), puis (entnext (entnext (entlast))), etc... ps : tes objets copiés doivent être superposés à la sélection. @+
  23. Salut L'astuce que je t'ai donné fonctionne pour les options de commandes. Si tu veux connaitre la version anglaise d'une commande, tu as la fonction lisp getcname @+
  24. Une astuce qui fonctionne toujours. @(gile) Une fonction que je ne connaissais pas. Merci @+
  25. Salut Tu as la variable SPLMETHOD. @+
×
×
  • 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é