-
Compteur de contenus
6 374 -
Inscription
-
Dernière visite
-
Jours gagnés
30
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Patrick_35
-
Si tu lis la fonction get pour obtenir et attributes pour... @+
-
Et le lisp donné en réponse #4 ? @+
-
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 @+
-
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 @+
-
Copier (uniquement) l'attribut COD d'un bloc vers un autre
Patrick_35 a répondu à un(e) sujet de Azerty dans AutoCAD 2014
Oui, c'est exactement ça. @+ -
Copier (uniquement) l'attribut COD d'un bloc vers un autre
Patrick_35 a répondu à un(e) sujet de Azerty dans AutoCAD 2014
Salut Je pense que tu es fatigué Didier ;) Azerty : Avec MAT @+ Mat.zip -
Salut Pour gérer les calques sur plusieurs présentations, tu as GEF @+
-
Salut Par exemple (tblsearch "layer" "0") Avec le code dxf 70 Extrait de l'aide @+
-
Comment faire pour "vider" un (ssget ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Presque @+ -
Comment faire pour "vider" un (ssget ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Eh bien bravo :D Le tout est d'y arriver. Tu peux simplifier ;) @+ -
Comment faire pour "vider" un (ssget ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
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) ) @+ -
Comment faire pour "vider" un (ssget ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
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)) @+ -
Comment faire pour "vider" un (ssget ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Tu as une liste de paires. Regarde les fonctions car, cdr et ensuite cadr, etc... @+ -
Salut Il faudrait que tu passes plus souvent par ici :D @+
-
Comment faire pour "vider" un (ssget ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
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) @+ -
Comment faire pour "vider" un (ssget ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
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 ? @+ -
Comment utiliser la commande "Rechercher" en ligne de commande
Patrick_35 a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
Oui Dans l'aide ou ici @+ -
Salut Pas pour moi, même avec une recherche sur le net. @+
-
Comment utiliser la commande "Rechercher" en ligne de commande
Patrick_35 a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
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. @+ -
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" @+
-
Comment utiliser la commande "Rechercher" en ligne de commande
Patrick_35 a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
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 @+ -
Comment utiliser la commande "Rechercher" en ligne de commande
Patrick_35 a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
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... @+ -
Comment utiliser la commande "Rechercher" en ligne de commande
Patrick_35 a répondu à un(e) sujet de DenisHen dans LISP et Visual LISP
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) ) @+ -
Comment demander deux choses à l'utilisateur ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Ah oui, bien vu Merci Bruno @+ -
Comment demander deux choses à l'utilisateur ?
Patrick_35 a répondu à un(e) sujet de DenisHen dans Débuter en LISP
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") ) @+
