Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Lisp
Lisp Forum d'entraide sur la programmation en langages fonctionnels Lisp et Common Lisp
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/03/2011, 09h44   #1
Seifko
Invité de passage
 
Inscription : 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 !
Seifko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 10h23   #2
Seifko
Invité de passage
 
Inscription : juin 2005
Messages : 17
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 17
Points : 2
Points : 2
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
Seifko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 10h32   #3
Seifko
Invité de passage
 
Inscription : 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)
Seifko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 15h15   #4
clovis
Membre régulier
 
Inscription : juin 2002
Messages : 158
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 158
Points : 83
Points : 83
[...
(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
clovis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 16h29   #5
Seifko
Invité de passage
 
Inscription : juin 2005
Messages : 17
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 17
Points : 2
Points : 2
Oh merci clovis !

J'entre tout de suite ça dans ma routine ! Merci !
Seifko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 15h03   #6
clovis
Membre régulier
 
Inscription : juin 2002
Messages : 158
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 158
Points : 83
Points : 83
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)
)
clovis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h34.


 
 
 
 
Partenaires

Hébergement Web