Aller au contenu

Commande script rechercher


Messages recommandés

Posté(e)

bonjour tout le monde,

 

Je cherche à utiliser un script me permettant de rechercher tous les A2 d'un dessin et de les remplacer par un DF.

 

Hors je ne connais pas la commande pour rechercher sans ouvrir une fenêtre, "rechercher" ne marche pas "-rechercher" non plus, même avec filedia et cmddia tous deux à zéro.

 

Et rechercher "autocad script rechercher" sur google... ça se mord un peu la queue :(

 

Une idée?

 

Merci d'avance!

Posté(e)

Bonjour,

 

Hors je ne connais pas la commande pour rechercher sans ouvrir une fenêtre, "rechercher" ne marche pas "-rechercher" non plus, même avec filedia et cmddia tous deux à zéro.

 

:(

En effet, cette commande RECHERCHER appelle toujours sa boite de dialogue. Elle n'a pas d'équivalent en ligne de commande.

 

Cette spécificité empêche l'usage de cette commande dans un script, à moins que ce soit la toute dernière commande exécutée (un script ne reprends pas la main après la fermeture d'une boite de dialogue, comme il ne permet pas de faire des sélections variées, il n'est pas possible de prévoir le nombre de pause à faire dans un script lors de sélection manuelle)

 

Seule solution possible, un lisp qui pourrait faire la même chose (il doit en exister sur le forum)

 

Si le lisp ne requiert pas de sélection utilisateur il pourra être chargé et exécuté par un script de façon à réaliser les modifications sur plusieurs dessins.

 

Je suis presque sur que ce sujet à été déjà évoqué.

 

Pour une proposition éventuelle, des précisions supplémentaires seront nécessaires. Texte, MultiTextes, Attributs, imbriquée ou pas ?....

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Par exemple ce lisp peut être exécuté depuis un script

 

(defun match_replace (string pattern target / l_str l_pat l_trg n tmp l_rv)
 (cond
   ((and (eq (type string) 'STR) (eq (type pattern) 'STR) (eq (type target) 'STR))
     (setq
       l_str (vl-string->list string)
       l_pat (vl-string->list pattern)
       l_trg (vl-string->list target)
     )
     (while l_str
       (repeat (setq n (length l_pat))
         (setq tmp (cons (nth (setq n (1- n)) l_str) tmp))
       )
       (cond
         ((equal tmp l_pat)
           (setq l_rv (append (reverse l_trg) l_rv))
           (repeat (1- (length l_pat)) (setq l_str (cdr l_str)))
         )
         (T
           (setq l_rv (cons (car l_str) l_rv))
         )
       )
       (setq l_str (cdr l_str))
       (setq tmp nil)
     )
     (vl-list->string (reverse l_rv))
   )
 )
)
(defun c:text_replace ( / js n dxf_cod)
 (setq js (ssget "_X" '((0 . "TEXT"))) n -1)
 (if js
   (repeat (sslength js)
     (setq dxf_cod (entget (ssname js (setq n (1+ n)))))
     (if (wcmatch (cdr(assoc 1 dxf_cod)) "*A2*")
       (entmod (subst (cons 1 (match_replace (cdr (assoc 1 dxf_cod)) "A2" "DF")) (assoc 1 dxf_cod) dxf_cod))
     )
   )
 )
 (prin1)
)

 

Si ce lisp est mis dans la valise de démarrage, dans le script la commande TEXT_REPLACE sera exécuté.

On peut aussi le charger dans le script par une ligne de ce style avant d'appeler la nouvelle commande:

(load"nomdufichierlisp")

 

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Attention, lors de longs mtext

 

Ta remarque est tout à fait exacte, c'est pour ça que je lui ai posé la question.

 

normalement ce sont des [surligneur] textes[/surligneur] non imbriqués

d'où le (ssget "_X" '((0 . "TEXT")))

J'aime pas trop le normalement :P

 

Si la réponse est correcte, le lisp doit faire l'affaire.

 

Je précise quand même que la casse est importante:

(match_replace (cdr (assoc 1 dxf_cod)) "A2" "DF") ici des Majuscules.

 

NB: pour ce cas précis avec les TEXTE (entmod) me semple mieux approprié que (vlax-put)

(vl-load-com) n'est qu'une couche supplémentaire de fonctions évoluées, y recourir n'est pas toujours mieux (cela oblige les fonctions a passer par une couche supplémentaire pour être évaluées). Ceci n'est que mon sentiment, il reste que les fonctions (vla...) sont des outils bien pratiques pour manipuler les entités de plus en plus complexes que produit TOTOdesk (et tout les logiciels en général)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Je dis normalement parce que je pars d'un dossier déjà crée donc je ne sais pas comment il a été fait.

 

Et la raison principale pour laquelle je ne veux pas utiliser de lisp est que je ne suis pas supposé avoir apporté un AutoCAD complet dans ma boite, même si le complet m'a déjà bien facilité la vie.

 

Donc je voulais utiliser la commande rechercher avec autoscript (de caderix je crois bien) pour faire mes modifs en série.

 

La deuxième est que toutes les boites que j'ai faites n'ont jamais prises le complet du coup pourquoi continuer à apprendre si je ne suis jamais supposé l'utiliser... surtout si c'est carrément un language de programmation

Posté(e)

je ne veux pas utiliser de lisp

 

C'est ton choix!

 

Dans ce cas je n'ai pas d'autre solution simple à apporter.

 

Pour une LT, la seule possibilité, et de sauvegarder son dessin sous la forme DXF (formatASCII et non binaire) et avec un très bon éditeur de texte faire la substitution par une fonction de remplacement de l'éditeur.

 

Une fois les modifs faites, ouvrir ce DXF et le remettre au format DWG.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é