Aller au contenu

[Résolu] Lisp ? Script ? de modification de texte


William44850
 Partager

Messages recommandés

Bonjour @William44850

C'est possible en programmation, est-ce pour utiliser sur une version FULL,
La version LT ne supportant aucune programmation est exclue.

Merci de faire passer un exemple de DWG avec des indications avant/après.

Amicalement

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Sans passer par de la programmation, avec SuperAutoScript de @Eric, il doit y avoir moyen de faire quelque chose avec un script et la commande GATTE.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V17.1h
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

@La Lozère, je vais regarder la commande GATTE

@didier, oui, c'est bien sur une version full d'autocad 2019. Je te joins un exemple de dwg. Il faudrait remplacer le texte "Lambert 2 centre" de l'attribut "Projection" par "RGF93 cc47".

Je vous remercie de me faire grandir en tant qu'autocadien.

Bonne journée,

018_0200_01-04.dwg

Lien vers le commentaire
Partager sur d’autres sites

Merci @William44850 pour le fichier. Je confirme. SuperAutoScript et la commande gatte dans le script est tout à fait adapté à la demande.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V17.1h
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, La Lozère a dit :

Merci @William44850 pour le fichier. Je confirme. SuperAutoScript et la commande gatte dans le script est tout à fait adapté à la demande.

Et bien oui.....et non 😁

C'est bien la méthode à utiliser....SuperAutoScript et GATTE. Mais dans leur bloc, l'attribut "Projection" a une valeur par défaut que le script ne doit pas arriver pas à corriger puisqu'il ne se termine pas

Je cherche.

Et merci beaucoup.

Lien vers le commentaire
Partager sur d’autres sites

Pas de problème chez moi pour scripter ça.

Dans l'exemple ci-dessous, le nom du bloc est "TATA", et le nom de l'attribut est "NUMERO" et le nouveau texte "Test1". Il faut absolument un retour à la ligne après le "YES"

image.png.bba372fa72c5048e76e614a70fe62fb7.png

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V17.1h
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, La Lozère a dit :

Pas de problème chez moi pour scripter ça.

Dans l'exemple ci-dessous, le nom du bloc est "TATA", et le nom de l'attribut est "NUMERO" et le nouveau texte "Test1". Il faut absolument un retour à la ligne après le "YES"

image.png.bba372fa72c5048e76e614a70fe62fb7.png

Et cela ne marche pas. Le fichier dwg s'ouvre mais aucune modif ne s'opère. J'ai ça dans le script :

gatte
B
Format-A1
PROJECTION
RGF93CC47
yes

Je suis avec le SuperAutoScript 2.6

Là, je sèche.

Lien vers le commentaire
Partager sur d’autres sites

Alors, désolé, je n'avais pas testé avec SuperAutoScript. Mais avec superautoscript, il ne faut pas le retour à la ligne après le "Yes".

Peux-tu en dire plus sur le moment où ça bloc ?

 

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V17.1h
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
Lien vers le commentaire
Partager sur d’autres sites

Bonjour @William44850,

Tu peux aussi utiliser le lisp PAT de notre regretté Patrick_35 qui devrait répondre à ton besoin.

Tu ouvres un fichier sur lequel tu souhaites modifier l'attribut en question sans le changer.

Tu lances le lisp PAT, tu sélectionnes le bloc où se trouve l'attribut à modifier, tu sélectionnes l'attribut à modifier,tu mets la nouvelle valeur puis tu choisis le répertoire (dossier) dans lequel sont tous les autres dwg à traiter. Tu cliques sur OK et le tour est jouer.

Ci-joint, le lisp PAT.lsp avec le fichier PAT.dcl à mettre dans le même dossier et une vidéo pour la démo.

PAT.zip

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Pour fabriquer ton script personnalisé, tu peux essayer ceci.

Code à copier coller dans un nouveau dessin (avec aucun fichier à traiter ouvert par Autocad)

(defun c:make_script ( / f_exe ShlObj Folder FldObj Out_Fld file_scr)
	(vl-load-com)
	(setq
		ShlObj (vla-getinterfaceobject (vlax-get-acad-object) "Shell.Application")
		Folder (vlax-invoke-method ShlObj 'BrowseForFolder 0 "" 0)
	)
	(vlax-release-object ShlObj)
	(if Folder
		(progn
			(setq
				FldObj (vlax-get-property Folder 'Self)
				Out_Fld (vlax-get-property FldObj 'Path)
			)
			(vlax-release-object Folder)
			(vlax-release-object FldObj)
		)
	)
	(setq file_scr (open (strcat Out_Fld "\\" "traiter_dossier.scr") "w"))
	(foreach dwg (vl-directory-files Out_Fld "*.dwg" 1)
		(write-line "_.open" file_scr)
		(write-line (strcat "\"" Out_Fld "\\" dwg "\"") file_scr)
;;
;;debut partie personnalisable
;;
(write-line "((lambda ( / jsel i name)" file_scr)
(write-line "	(defun update_block (block_record / s_e dxf_e)" file_scr)
(write-line "		(if (/= (getvar \"ATTMODE\") 1) (setvar \"ATTMODE\" 1))" file_scr)
(write-line "		(setq s_e block_record)" file_scr)
(write-line "		(while (/= (cdr (assoc 0 (entget (setq s_e (entnext s_e))))) \"SEQEND\")" file_scr)
(write-line "			(setq dxf_e (entget s_e))" file_scr)
(write-line "			(if (eq (cdr (assoc 0 dxf_e)) \"ATTRIB\")" file_scr)
(write-line "				(if (eq (cdr (assoc 2 dxf_e)) \"PROJECTION\")" file_scr)
(write-line "					(entmod (setq dxf_e (subst (cons 1 \"RGF93 cc47\") (assoc 1 dxf_e) dxf_e)))" file_scr)
(write-line "				)" file_scr)
(write-line "			)" file_scr)
(write-line "		)" file_scr)
(write-line "		(entupd block_record)" file_scr)
(write-line "	)" file_scr)
(write-line "	(and" file_scr)
(write-line "		(setq jsel (ssget \"_X\" '((0 . \"INSERT\") (67 . 1) (8 . \"VEP CARTOUCHE\") (66 . 1) (2 . \"Format-A1\"))))" file_scr)
(write-line "		(repeat (setq i (sslength jsel))" file_scr)
(write-line "			(setq name (ssname jsel (setq i (1- i))))" file_scr)
(write-line "			(update_block name)" file_scr)
(write-line "		)" file_scr)
(write-line "	)" file_scr)
(write-line "	(princ)" file_scr)
(write-line "))" file_scr)
(write-line "(command \"_.saveas\" \"_LT2018\" \"\")" file_scr)
;;
;;fin partie personnalisable
;;
		(write-line "_.close" file_scr)
	)
	(close file_scr)
	(princ (strcat "\Vous pouvez lancer le SCRIPT :" Out_Fld "\\" "traiter_dossier.scr"))
	(prin1)
)

Tu lance alors la commande MAKE_SCRIPT

Tu sélectionne ton dossier à traiter.

Une fois le script créé tu lance la commande SCRIPT en sélectionnant le script "traiter_dossier.scr" dans le dossier précédemment sélectionné.

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

Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, La Lozère a dit :

Alors, désolé, je n'avais pas testé avec SuperAutoScript. Mais avec superautoscript, il ne faut pas le retour à la ligne après le "Yes".

Peux-tu en dire plus sur le moment où ça bloc ?

 

là, il vient de m'écrire dans la barre de commande "Invalid attribute name". Comme si le nom de l'attribut "PROJECTION" était faux.

 

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, j'ai le même blocage sur ton fichier. Je ne saurais te dire d'où ça vient. Le principe du script est bon, mais il y a un truc avec le fichier...

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V17.1h
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Le problème vient des attributs dont les noms inclus des "underscore"  _  car la liste des attributs est utilisée dans un initget du lisp GATTE.LSP et le caractère _ dans un initget est un caractère réservé pour passer des choix locaux (langue du produit) aux choix internationaux (US).

Il suffit de remplacer le caractère  _  par le caractère -  pour corriger le problème.

Par contre étant donné que GATTE est un lisp fourni avec les Express Tools, pas sûr que ça tourne sous une version LT.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Olivier Eckmann, @La Lozère

Ce qui veut dire que le SuperAutoScript ne pourra pas être la solution ?

Parce que (si je comprends bien), il ne fonctionne pas à cause des "Underscore" ....et qu'il me faudrait un SuperAutoScript pour le remplacer par "-".

Je m'attaque aux solutions de @Steven et @bonuscad

Avec un énorme merci pour votre dévouement

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

il y a une heure, William44850 a dit :

Bonjour @Olivier Eckmann, @La Lozère

Ce qui veut dire que le SuperAutoScript ne pourra pas être la solution ?

Parce que (si je comprends bien), il ne fonctionne pas à cause des "Underscore" ....et qu'il me faudrait un SuperAutoScript pour le remplacer par "-".

Je m'attaque aux solutions de @Steven et @bonuscad

Avec un énorme merci pour votre dévouement

 

 

 

Le problème ne vient pas de SuperAutoScript, mais du lisp GATTE qui affiche la liste des noms des attributs pour pouvoir le choisir, mais cette liste ne fonctionne pas si l'un des attributs possède un underscore dans son étiquette.

Il y a 2 solutions :

- Soit modifier le lisp GATTE pour ne pas afficher la liste des nom d'attributs. Je pense qu'un simple ; en début de la ligne 116 devrait suffire.

- Soit renommer les attributs pour supprimer les underscores. Je ne sais pas si c'est automatisable via les commandes natives, mais avec de la programmation oui, mais dans ce cas autant tout faire spécifiquement par le programme.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Et bien un petit point d'étape. Et vous allez me trouver BOUCHE

Je n'arrive à pas grand chose....

@Olivier Eckmann j'ai recréé un lisp "gatte" en "gatte2" en ajoutant le ";" à la ligne 116. Cela m'a mis "invalid command"

@Steven Je crois que j'ai tout bien fait (easy avec la vidéo)....Et ça ne marche pas....Jusqu'à ce que me rende compte qu'un même bloc avait un nom quelquefois différent. Donc, CA MARCHE !!!!!

@bonuscad Tout ne marche pas....J'ai pu créer le lisp, générer le script mais la modif des dwg ne se fait pas...Peut être à cause de ça "(command "_.saveas" "_LT2018" "")"  mais ne connaissant rien en code je me garderais bien d'être catégorique.

1 000 mercis pour votre aide même si, pour mon intellect, j'aurais aimé comprendre ce qui a dysfonctionné.

 

Lien vers le commentaire
Partager sur d’autres sites

Citation

Jusqu'à ce que me rende compte qu'un même bloc avait un nom quelquefois différent.

J'avais fixé le nom du bloc et l'attribut en DUR dans le script selon l'exemple de DWG que tu as posté. Avec ce fichier ça fonctionne, j'avais testé...

Si les noms sont différents, cela explique que ça n'a rien fait.

Il faut, si tu veux l'utiliser, avoir plus d'info sur les noms possibles.

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

Lien vers le commentaire
Partager sur d’autres sites

  • William44850 a modifié le titre en [Résolu] Lisp ? Script ? de modification de texte
Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
 Partager

×
×
  • 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é