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. Si tu lis la fonction get pour obtenir et attributes pour... @+
  2. Patrick_35

    Bitmap pour DCL

    Et le lisp donné en réponse #4 ? @+
  3. Patrick_35

    Bitmap pour DCL

    Salut Tout est expliqué dans le lien de la réponse #3. L'idée esr de générer un txt (ou une liste) depuis un bmp pour ensuite utiliser la routine LM:DisplayBitmap qui appel la fonction vector_image @+
  4. Salut Allez, en pur vl avec commentaires ;) (defun c:matt(/ doc ent sel) (setq doc (vla-get-activedocument (vlax-get-acad-object))) ; Pointer sur le document actif (vla-startundomark doc) ; Activer le début de l'undo (and (ssget (list (cons 0 "insert") (cons 66 1))) ; Sélection des blocs avec attributs (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) ; Boucle pour parcourir la sélection avec mémorisation de la sélection (and (eq (vla-get-effectivename ent) "MON_BLOC") ; Test le nom du bloc (vla-put-textstring (nth 0 (vlax-invoke ent 'getattributes)) "MA_VALEUR") ; Changer la valeur du 1er attribut. (vlax-invoke ent 'getattributes) retourne la liste des attributs ) ) (vla-delete sel) ; Effacer la sélection. Impératif si on veut éviter plus tard des erreurs de sélection ) ) (vla-endundomark doc) ; Fin de l'undo (princ) ) Maintenant, comment faire pour bien comprendre Directement au clavier sur Autocad et en regardant les résultats Pointer sur le document actif (setq doc (vla-get-activedocument (vlax-get-acad-object))) #<VLA-OBJECT IAcadDocument 000000002d263278> Sélection des blocs avec attributs (ssget (list (cons 0 "insert") (cons 66 1))) Choix des objets: --> <Selection set: c5> Pointer sur le jeu de sélection (setq sel (vla-get-activeselectionset doc)) #<VLA-OBJECT IAcadSelectionSet 000000002dd293f8> Pointer sur le 1er élément du jeu de sélection (setq ent (vla-item sel 0)) #<VLA-OBJECT IAcadBlockReference 000000002dc631b8> Voir les propriétés de mon bloc (vlax-dump-object ent T) Liste des attributs (setq att (vlax-invoke ent 'getattributes)) (#<VLA-OBJECT IAcadAttributeReference 000000002d794978> #<VLA-OBJECT IAcadAttributeReference 000000002d794a98> #<VLA-OBJECT IAcadAttributeReference 000000002d793bf8> #<VLA-OBJECT IAcadAttributeReference 000000002d793d18> #<VLA-OBJECT IAcadAttributeReference 000000002d793e38> #<VLA-OBJECT IAcadAttributeReference 000000002d794df8> #<VLA-OBJECT IAcadAttributeReference 000000002d794f18>) Voir les propriétés du 1er attribut de la liste (vlax-dump-object (nth 0 att)) Modifier la valeur du 1er attribut de la liste (vla-put-textstring (nth 0 att) "MA_VALEUR") nil mais je regarde à l'écran le résultat @+
  5. Oui, c'est exactement ça. @+
  6. Salut Je pense que tu es fatigué Didier ;) Azerty : Avec MAT @+ Mat.zip
  7. Salut Pour gérer les calques sur plusieurs présentations, tu as GEF @+
  8. Salut Par exemple (tblsearch "layer" "0") Avec le code dxf 70 Extrait de l'aide @+
  9. Presque @+
  10. Eh bien bravo :D Le tout est d'y arriver. Tu peux simplifier ;) @+
  11. Regarde comment sont les listes. Deux liens http://docs.autodesk.com/MAP/2014/ESP/index.html?url=filesACD/GUID-F0E08704-2854-4E05-9096-3A3ACEA007EB.htm,topicNumber=ACDd30e564256 http://knowledge.autodesk.com/support/autocad/getting-started/caas/CloudHelp/cloudhelp/2016/ITA/AutoCAD-AutoLISP/files/GUID-877B87BA-6FA2-4894-9F94-184E7DF25B7D-htm.html Regarde les valeurs que prends la variable PosLst dans la boucle foreach (foreach PosLst LstCalq (terpri)(princ PosLst) ) @+
  12. Salut Dans ta liste de paires, tu indiques comme valeurs des chaines de caractères. Quand tu fais une recherche dans la table des calques, il est demandé une chaine de caractères. Un rtos est fait pour convertir un réel en chaine de caractères. Au vu de ce que je t'ai décrit, tu devrais voir où se situe l'erreur. Pour bien comprendre l'utilisation de car, cadr, cdr, etc..., rien de mieux que des tests. Essaye (car '(1 . 2)) (cdr '(1 . 2)) (cadr '(1 . 2)) (car '(1 2)) (cdr '(1 2)) (cadr '(1 2)) @+
  13. Tu as une liste de paires. Regarde les fonctions car, cdr et ensuite cadr, etc... @+
  14. Patrick_35

    DILEADER

    Salut Il faudrait que tu passes plus souvent par ici :D @+
  15. C'est selon la sensibilité de chacun et pour jouer du mapcar. A toi de l'adapter selon ta liste (un bon exo ;) ) ps : foreach = mapcar (en gros) @+
  16. Salut Pour répondre à ta question (mapcar '(lambda(a B) (if (tblsearch "layer" a) (progn (command "-calque" "n" b "") (command "fuscalques" "n" a "" "n" b "o") ) ) ) '("1" "2" "3") '("TOPO_PT_MATRI" "VEG_ARBRE" "MOBILIER_URBAIN") ) Et pourquoi ne pas utiliser _rename ? @+
  17. Oui Dans l'aide ou ici @+
  18. Patrick_35

    Champs vide - - - -

    Salut Pas pour moi, même avec une recherche sur le net. @+
  19. Salut Je n'avais pas compris que tu souhaitais changer le calque de certains textes. La solution de Gégé est la plus simple. Pour le niveau de lisp, qu'importe, seul le résultat compte. C'est à force d'en faire que l'on se perfectionne et que l'on prend de l'assurance. @+
  20. Salut Tout est dit. J'allais proposer JAV, mais pas d'utilisation de lisp, de .net, etc... dans une LT Donc adieu aussi à "Radical Purge" @+
  21. Salut Par rapport à tes commentaires (and (ssget (list (cons 0 "TEXT,MTEXT"))); Si je sélectionne des textes (setq tx1 (getstring T "\nTexte à rechercher : ")); Si j'indique le texte à rechercher (setq tx2 (getstring T "\nTexte remplacant : ")); Si j'indique le texte remplacant (progn ; alors .... L'idée du and est que tant que la condition est remplie, il passe au suivant. Si je sélectionne un/des texte(s) --> Si j'indique le texte à rechercher --> Si j'indique le texte remplacant --> alors... Non, parcours la sélection (vla-get-activeselectionset ...) avec une boucle (vlax-for ...) Un cond fonctionne de la manière suivante. Si la première condition est remplie, je fais ce qui est demandé et je sors du cond sinon je passe à la condition suivante. Si la seconde condition est remplie, je fais ce qui est demandé et je sors du cond sinon je passe à la condition suivante. etc... L'idée du T est de dire, comme les autres conditions ne sont pas remplie, c'est forcément celle-ci. Dans la recherche de texte; je regarde le début, la fin et comme ce n'est ni l'un, ni l'autre, c'est forcément à l'intérieur @+
  22. Non. Dans le lisp que tu as modifié, tu fais un jeu de sélection sur les textes. Ensuite, tu parcoures ce jeu de sélection pour y regarder si les caractères "0000" s'y trouvent pour ensuite les remplacer par rien. C'est au moment où tu regardes tes caractères que tu peux inclure d'autres chaines de caractères pour y faire autre chose. Synopsis 1) Selection des textes 2) Début de la boucle pour regarder le jeu de sélection 2.1) Regarder la chaine de caractères 2.1.1) Correspond à "0000" 2.1.1.1) Les supprimer 2.1.2) Correspond à .... 2.1.2.1) Mon action 2.1.3) Etc... @+
  23. Salut Quatre routines dans ma besace ; Remplacer un morceau de texte dans un bloc (defun c:atx(/ blo doc ent tx1 tx2 txt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "insert") (cons 66 1))) (setq tx1 (getstring T "\nTexte à rechercher : ")) (setq tx2 (getstring T "\nTexte remplacant : ")) (progn (vlax-for blo (setq sel (vla-get-activeselectionset doc)) (foreach ent (vlax-invoke blo 'getattributes) (and (wcmatch (setq txt (vla-get-textstring ent)) (strcat "*" tx1 "*")) (cond ((wcmatch txt (strcat tx1 "*")) (setq txt (strcat tx2 (substr txt (1+ (strlen tx1))))) ) ((wcmatch txt (strcat "*" tx1)) (setq txt (strcat (substr txt 1 (- (strlen txt) (strlen tx1))) tx2)) ) (T (setq txt (strcat (substr txt 1 (vl-string-search tx1 txt)) tx2 (substr txt (+ (vl-string-search tx1 txt) (strlen tx1) 1)) ) ) ) ) (vla-put-textstring ent txt) ) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) ; Remplacer un morceau de texte (defun c:rtx(/ doc ent tx1 tx2 txt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "TEXT,MTEXT"))) (setq tx1 (getstring T "\nTexte à rechercher : ")) (setq tx2 (getstring T "\nTexte remplacant : ")) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (and (wcmatch (setq txt (vla-get-textstring ent)) (strcat "*" tx1 "*")) (cond ((wcmatch txt (strcat tx1 "*")) (setq txt (strcat tx2 (substr txt (1+ (strlen tx1))))) ) ((wcmatch txt (strcat "*" tx1)) (setq txt (strcat (substr txt 1 (- (strlen txt) (strlen tx1))) tx2)) ) (T (setq txt (strcat (substr txt 1 (vl-string-search tx1 txt)) tx2 (substr txt (+ (vl-string-search tx1 txt) (strlen tx1) 1)) ) ) ) ) (vla-put-textstring ent txt) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) ; Ajouter un morceau de texte (prefix) (defun c:ptx(/ doc ent tx1 tx2 txt) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "TEXT,MTEXT"))) (setq tx1 (getstring "\nTexte à ajouter : ")) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vla-put-textstring ent (strcat tx1 (vla-get-textstring ent))) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) ; Ajouter un morceau de texte (suffix) (defun c:stx(/ doc ent tx1 tx2 txt) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "TEXT,MTEXT"))) (setq tx1 (getstring "\nTexte à ajouter : ")) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vla-put-textstring ent (strcat (vla-get-textstring ent) tx1)) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) @+
  24. Ah oui, bien vu Merci Bruno @+
  25. Bonjour zebulon_ (or (setq EtiqXY (vlax-ldata-get "DenisH" "EtiqPTRL_XY")) (setq EtiqXY "Oui") ) Revient à faire (if (not (setq EtiqXY (vlax-ldata-get "DenisH" "EtiqPTRL_XY"))) (setq EtiqXY "Oui") ) @+
×
×
  • 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é