Aller au contenu

command find


formula1

Messages recommandés

Bonjours @ tous,

J'aimerais faire un bouton avec comme macro la commande FIND et qu'il remplace tous les %%C par des HA.

Comment dois-je procédé, j'ai essayeé ceci mais il m'ouvre la boite de dialogue de la commande FIND et s'arrete :

 

^C^C_find;F(%%C);R(HA);RA;

 

Merci d'avance a tous ceux qui m'aurons aider

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

(defun c:test (/ ss n txt elst)
 (and (setq ss (ssget "_X" '((0 . "TEXT,MTEXT,DIMENSION"))))
      (setq n 0)
      (while (setq txt (ssname ss n))
 (setq elst (entget txt))
 (entmod
   (subst (cons	1
		(vl-string-translate "%%C" "HA" (cdr (assoc 1 elst)))
	  )
	  (assoc 1 elst)
	  elst
   )
 )
 (entupd txt)
 (setq n (1+ n))
      )
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Ah oui, tiens !

Je n'avais pas testé, ça doit être une subtilité de la fonction vl-string-translate avec les caractères spéciaux...

 

(defun c:test (/ ss n txt elst str)
 (and (setq ss (ssget "_X" '((0 . "TEXT,MTEXT,DIMENSION"))))
      (setq n 0)
      (while (setq txt (ssname ss n))
 (setq elst (entget txt)
       str  (cdr (assoc 1 elst))
 )
 (while	(vl-string-search "%%C" str)
   (setq str (vl-string-subst "HA" "%%C" str))
 )
 (entmod (subst (cons 1 str) (assoc 1 elst) elst))
 (entupd txt)
 (setq n (1+ n))
      )
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Cette version traite les attributs et les texte contenus dans les blocs insérés.

 

(defun c:test (/ ss n txt elst str)

 (defun rep-txt (elst / str)
   (setq str (cdr (assoc 1 elst)))
   (while (vl-string-search "%%C" str)
     (setq str (vl-string-subst "HA" "%%C" str))
   )
   (entmod (subst (cons 1 str) (assoc 1 elst) elst))
   (entupd (cdr (assoc -1 elst)))
 )

 (and (setq ss (ssget "_X" '((0 . "TEXT,MTEXT,DIMENSION,INSERT") (410 . "Model"))))
      (setq n 0)
      (while (setq txt (ssname ss n))
 (setq elst (entget txt))
 (if (= (cdr (assoc 0 elst)) "INSERT")
   (progn
     (setq ent (entnext txt))
     (while (and ent
		 (/= (cdr (assoc 0 (setq elst (entget ent)))) "SEQEND")
	    )
       (if (member (cdr (assoc 0 elst))
		   '("TEXT"
		     "MTEXT"
		     "DIMENSION"
		     "ATTRIB"
		    )
	   )
	 (rep-txt elst)
       )
       (setq ent (entnext ent))
     )
   )
   (rep-txt elst)
 )
 (setq n (1+ n))
      )
 )
 (princ)
) 

[Edité le 24/4/2008 par (gile)][Edité le 25/4/2008 par (gile)]

 

[Edité le 26/4/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour formula1,

Est des %%C ou alt+0216 ou alt+0248 car Autocad ne le gére pas de la même mariére, en affichage cela donne la même chose mais pas en texte : alt+0216 ou alt+0248 sont reconnu comme si c'etait une lettre (a,b,c,..) tandis que %%C est du code pur Autocad

Cyprien

Utilisateur AutoCAD depuis la R12

Longue Vie à CADxp

 

Lien vers le commentaire
Partager sur d’autres sites

Est-il possible que c'est du fait que j'ai une version full et en anglais?

Il y a de fortes chances, oui !

Il doit manquer des "_" par ci par là.

 

Absolument pas, la version full est nécessaire pour le LISP (LT est "bridée" de ce côté là) et la langue de la version n'a rien à voir là dedans.

Pour info, les underscores (_) sont utilisés pour internationaliser les noms de commande anglais. Exemples :

(command "ligne" p1 p2 "") ne fonctionne que sur une version française

(command "line" p1 p2 "") ne fonctionne que sur une version anglaise

(command "_line" p1 p2 "") fonctionne sur toutes les versions.

Je suis depuis longtemps un fervent défenseur de l'usage du langage international (en LISP comme dans les macro de commande) et ce, ic comme sur les sites anglo-saxon que je fréquente.

 

Pour clore la question, le LISP donné plus haut, ne fait aucun usage de la fonction command, donc le le problème du langage des noms de commande ne se pose pas.

 

formula1, est-ce que la commande _FIND fonctionne sur ces attributs ?

 

Ces attributs, ne sont-ils pas des attributs constants ?

 

Si c'est le cas, tu peux modifier l'attribut d'un bloc avec la commande _DDEDIT, tous les blocs du dessin seront mis à jour.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Merci pour ces infos (gile).

 

Pour info, les underscores (_) sont utilisés pour internationaliser les noms de commande anglais. Exemples :

 

C'est la raison pour laquelle j'ai pensé à ça,..

 

Je suis depuis longtemps un fervent défenseur de l'usage du langage international (en LISP comme dans les macro de commande) et ce, ic comme sur les sites anglo-saxon que je fréquente.

 

Y m'semblait bien aussi, mais bon, c'aurait pu ne pas être le cas,... ;)

 

Merci encore.

Civil 3D 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é