Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Invité de passage
    Inscrit en
    juin 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 17
    Points : 2
    Points
    2

    Par défaut Rechercher un mot puis le remplacer

    Bonjour

    Je suis confronté à un petit problème.

    Je cherche à faire une routine qui me recherche un mot ou une chaîne de caractère dans ma feuille autocad et me le remplace par un autre. et ce mot ne doit pas être dans un attribut, c'est juste un élément "TEXT".

    Après mes recherche sur internet, j'avais bien trouver RECHMOT.lsp sur http://ma83.free.fr/info/acadlisp.htm mais le lien de téléchargement est mort ...

    Autant que j'ai fais des programmes pour changer les attribut d'un bloc mais je n'arrive nullement à faire la sélection des éléments texte de la feuille ...

    En gros, mon lisp devrait faire pareil que la commande, édition / remplacer sous autocad ... Si quelqu'un peut m'ouvrir une piste pour me décoincer :/

    Merci d'avance et bonne journée !

  2. #2
    Invité de passage
    Inscrit en
    juin 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 17
    Points : 2
    Points
    2

    Par défaut

    bon, j'ai trouvé comment répondre à ma question, j'ai trouver une autre lisp et je l'ai modifié à ma guise grace à des réponse de Patrick35 donné à un autre utilisateur, celà ma donne ça :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     (setq ptr 0)
     (setq selection (ssget "x"))
     (repeat (sslength selection)               ;Pour chaque élément de la sélection...
      (setq entite(ssname selection ptr))       ;Obtient le nom de l'entite de la base de données.
      (setq propriete(entget entite))           ;Obtient la liste des propriétés de l'entité.
      (if (= (cdr(assoc '0 propriete)) "TEXT")  ;L'entité est un texte.
       (progn
        (setq mot (cdr(assoc '1 propriete)))
        (if
         (or
         (= mot "MOT A SUPPRIMER")
         )
         (progn
         (setq mot "")
         )
        )
        (progn
         (setq propriete(subst (cons '1 mot) (assoc '1 propriete) propriete))    ;Affecte la nouvelle valeur de texte à la liste des propriétés.
         (entmod propriete)                          ;Mise à jour de la liste des propriétés.
         (entupd entite)                             ;Regénération de l'entité.
        )
       )
      )
      (setq ptr(+ 1 ptr))
     )
     (princ)
    Si vous comprenez bien, je remplace le mot "MOT A SUPPRIMER" par "" (rien du tout donc). Ca à donc pour effet de faire disparaitre MOT A SUPPRIMER de mon écran par contre .... ça n'efface pas la zone de texte (et donc, je ne peux purger le calque associé).

    Pouvez-vous me dire comment supprimé cette éléments texte définitivement ?

    Merci d'avance

  3. #3
    Invité de passage
    Inscrit en
    juin 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 17
    Points : 2
    Points
    2

    Par défaut Ajout de la balise code (bouton # en haut à droite de l'éditeur)

    J'ai trouvé

    Voici pour ceux que ça pourrait intéresser.

    *Débutant inside*
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    (setq ptr 0)
     (setq selection (ssget "x"))
     (repeat (sslength selection)               ;Pour chaque élément de la sélection...
      (setq entite(ssname selection ptr))       ;Obtient le nom de l'entite de la base de données.
      (setq propriete(entget entite))           ;Obtient la liste des propriétés de l'entité.
      (if (= (cdr(assoc '0 propriete)) "TEXT")  ;L'entité est un texte.
       (progn
        (setq mot (cdr(assoc '1 propriete)))
        (if
         (or
         (= mot "MOT A SUPPRIMER")
         )
         (progn
         (entdel entite)
         )
        )
       )
      )
      (setq ptr(+ 1 ptr))
     )
     (princ)

  4. #4
    Membre régulier
    Inscrit en
    juin 2002
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 162
    Points : 91
    Points
    91

    Par défaut

    [...
    (setq selection (ssget "x" '((0 . "TEXT"))))
    [/QUOTE]
    pour éviter de tester le type d'entité que tu traites et donc sélectionner uniquement les textes

  5. #5
    Invité de passage
    Inscrit en
    juin 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 17
    Points : 2
    Points
    2

    Par défaut

    Oh merci clovis !

    J'entre tout de suite ça dans ma routine ! Merci !

  6. #6
    Membre régulier
    Inscrit en
    juin 2002
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 162
    Points : 91
    Points
    91

    Par défaut

    tu peux aussi regarder du côté de vlisp
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    (defun c:cleanText ( / mod )
    	(setq 	mod(vlax-get(vlax-get(vlax-get-acad-object)'activedocument)'modelspace))
    	(vlax-for ent mod
    		(if (=(vlax-get ent 'ObjectName) "AcDbText")
    			(if (or (=(vlax-get ent 'TextString)"")
    					(=(strcase(vlax-get ent 'TextString))"MOT A SUPPRIMER")
    				)
    				(vla-delete ent)
    			)
    		)
    	)
    	(princ)
    )

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •