[AutoCAD] Comment lancer un lisp en batch sur plusieurs .dwg qui ne sont pas ouverts ?

[AutoCAD] Comment lancer un lisp en batch sur plusieurs .dwg qui ne sont pas ouverts ?

EC_GPE
Advocate Advocate
2 362 Visites
17 Réponses
Message 1 sur 18

[AutoCAD] Comment lancer un lisp en batch sur plusieurs .dwg qui ne sont pas ouverts ?

EC_GPE
Advocate
Advocate

Chère communauté,

 

Mes collègues et moi effectuons régulièrement des traitements sur les plans que nous recevons de la part des architectes (couleurs des calques, suppression des références, suppression des lignes superposées, éclaircissement des hachures etc). Ceux-ci figurent en fond de plan de nos rendus MEP & Electrical et il est essentiel qu'ils soient propres et légers allégés informations.

 

La question est la suivante: " Comment lancer notre lisp en batch sur tous les fichiers .dwg de l'architecte non ouverts qui se trouvent dans un répertoire ? "

 

Merci d'avance pour votre partage enrichissant.

 

Bonne journée!

Gabriel Pereira
Technicien ES en techniques du bâtiment CVCFS
CAS Coordination BIM"
LinkedIn

0 J'aime
Solutions acceptées (1)
2 363 Visites
17 Réponses
Replies (17)
Message 2 sur 18

patrick.emin
Alumni
Alumni

Bonjour @EC_GPE il me semble que notre expert @Caderix avait développé un outil qui permet d’exécuter des scripts sur plusieurs dessins. Attendons sa réponse.

[Mise à jour] voilà son outil: https://www.caderix.com/telechargement_autocad.html

 


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
Message 3 sur 18

_gile
Consultant
Consultant

Salut,

Avec SuperAutoScript de @Caderix .



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 4 sur 18

EC_GPE
Advocate
Advocate

Je suis tombé sur ce poste qui m'intéressait et pouvait avoir quelques similités avec mon problème. autoPugre En Batch - Autodesk Community - International Forums.

 

Je souhaitait justement éviter un script dans lequel il faut inscrire tous les dwg à ouvrir les uns après les autres.
Merci @_gile & @patrick.emin je vais tenter le coup et approuver la sollution le cas échéant.

Gabriel Pereira
Technicien ES en techniques du bâtiment CVCFS
CAS Coordination BIM"
LinkedIn

0 J'aime
Message 5 sur 18

EC_GPE
Advocate
Advocate

J'ai testé votre petit programme. Il a l'air simple d'utilisation merci beaucoup.

EC_GPE_0-1612269973144.pngEn revanche, j'ai ce message qui tourne depuis l'exécution du script et ne fini pas. J'ai testé directement l'action choisir un dossier et il n'a pas abouti, j'ai du finir par forcer la fermeture. 

J'ai ensuite choisi l'action par fichier et le message est le même. Est-ce du à la version portable ou ma version d'autoCAD? Je suis sur AutoCAD 2019

 

Je précise que j'ai testé mon script avant l'exécution. Il contient uniquement 1 ligne+sont retour à la ligne pour lancer ma commande LISP dans un répertoire approuvé.

 

Merci encore @_gile 

 

Gabriel Pereira
Technicien ES en techniques du bâtiment CVCFS
CAS Coordination BIM"
LinkedIn

0 J'aime
Message 6 sur 18

EC_GPE
Advocate
Advocate

Je pense avoir compris mon problème. Votre programme lance si je comprends bien, l'ouverture d'un fichier de dessin dans AutoCAD et celui-ci tante d'appeler certainement ma commande LISP contenue dans mon fichier scr. 

EC_GPE_0-1612273326546.png

En exécution standard, si je lance ce script il fonctionne. Il lance avec succès le LISP contenu dans la commande TRAITERPLAN. 

 

Faut-il que je modifie le script pour votre programme et qu'il charge le LISP TRAITERPLAN avant exécution ? Car je ne saurais comment faire pour charger un LISP par script. Il faudrait que j'approfondisse.

 

Merci @_gile 

Gabriel Pereira
Technicien ES en techniques du bâtiment CVCFS
CAS Coordination BIM"
LinkedIn

0 J'aime
Message 7 sur 18

Caderix
Mentor
Mentor

Bonjour, 

 

Je vous ai envoyé un message privé.

 

image.png


Cordialement

Eric GUELEN
Formateur AutoCAD
Site Internet

EESignature

0 J'aime
Message 8 sur 18

EC_GPE
Advocate
Advocate

Apparament le LISP serait à l'origine du problème.

Merci @Caderix pour les échanges enrichissants.Capture d’écran 2021-02-02 181348.png

Il y a t'il des lispeurs aguéris pouvant m'orienter ? 

 

Si je comprends bien, appeler la commande d'un LISP par script n'est pas si simple. Il ne suffit pas de marquer le nom de la commande?

Gabriel Pereira
Technicien ES en techniques du bâtiment CVCFS
CAS Coordination BIM"
LinkedIn

0 J'aime
Message 9 sur 18

Caderix
Mentor
Mentor

C'est surtout le _qsave après qui bloque tout.

 

En gros.

 

Le lisp exécuté tout seul fonctionne.

Le script qui appelle la commande TRAITERPLAN du lisp fonctionne.

Le script qui appelle la commande TRAITERPLAN du lisp et qui fait ensuite un _qsave bloque tout.

 

Je ne parle même pas de SAS ici, c'est juste en manuel depuis AutoCAD.

 

Comme je ne m'y connais pas en Lisp, je passe la main 😉


Cordialement

Eric GUELEN
Formateur AutoCAD
Site Internet

EESignature

Message 10 sur 18

CADaSchtroumpf
Advisor
Advisor

Sans m'être plongé complètement dans la discussion.

_qsave (quick save) qui est une sauvegarde rapide du fichier, ne quitte pas le fichier en cours; donc le script ne pourra passer au fichier suivant.

A mon avis il faudrait suivre avec la commande _close (avec l'option qui va bien dans les réponses "_yes" ou "_no") afin de fermer le fichier en cours et de passer au suivant.

Je dis ça sans avoir fais aucun test avec SAS...

0 J'aime
Message 11 sur 18

Caderix
Mentor
Mentor

Le problème n'est pas le close.

 

Si on exécute le lisp tout seul ou même exécuté simplement dans un script à l'aide de sa commande, le lisp s'exécute jusqu'au bout.

 

Si dans le script, après la commande du lisp je rajoute _qsave, AutoCAD tourne en boucle sans trop savoir ce qu'il fait.


Cordialement

Eric GUELEN
Formateur AutoCAD
Site Internet

EESignature

0 J'aime
Message 12 sur 18

EC_GPE
Advocate
Advocate

Bonjour

 

Après différentes tentatives je constate plusieurs choses:

  • SAS enregistre (si on ne change pas l'option) chaque dessin avant fermeture.
    • Il n'est donc pas nécessaire d'effectuer un _qsave ou tout autre forme d'enregistrement.
  • SAS ferme les dessins une fois le script effectué.
    • Il n'est également pas nécessaire de mettre une ligne vide à la fin du script comme en mode de lancement "manuel". C'est certainement la ligne vide qui vous manque @Caderix dans votre test du lancement manuel du script?
  • SAS peut bel et bien lancer des script qui contiennent des commandes LISP pour autant qu'elles soient préalablement chargées au démarrage d'AutoCAD et que les LISP se trouvent dans les emplacements approuvés (OPTIONS AutoCAD).
  • SAS annule les interventions utilisateurs qui seraient éventuellement contenues dans certains LISP. J'ai testé 3 LISP différents soit:
    • LISP pour autoriser la décompositions des blocs = Succès
    • LISP pour déplacer tous les éléments au point 0,0,0 avec intervention utilisateur pour définir le point de départ du déplacement = Pas possible de cliquer pour définir le point, SAS annule l'opération, enregistre et ferme le dessins.
    • LISP de traitement de plan (Le fameux) = Plantage complet, obligation de forcer l'arrêt d'AutoCAD et de SuperAutoScript (SAS)

SAS est certainement ma sollution, il faut que je "l'apprivoise" pour comprendre pourquoi le LISP n'est pas exécuté comme en mode manuel. Je pense qu'il faut que l'on retravaille le LISP car il renvoi parfois "nil" et peut-être que SAS en fait une erreur?

 

Merci à tous !

Gabriel Pereira
Technicien ES en techniques du bâtiment CVCFS
CAS Coordination BIM"
LinkedIn

0 J'aime
Message 13 sur 18

Caderix
Mentor
Mentor

Bonjour, 

 

Oui, avec SAS, vous n'avez pas besoin de mettre des _qsave et des _close dans le script, il le fait tout seul.

 

Mais là le script ne fonctionne pas même sans SAS.

 

Si vous créer un fichier SCR qui contient :

 

TRAITERPLAN

Et que vous l'exécuter manuellement dans AutoCAD.

 

image.png

Ca fonctionne.

 

Par contre si dans le fichier SCR vous mettez :

 

TRAITERPLAN
_qsave

Là, AutoCAD tourne en boucle.

 

Pourquoi ?

 


Cordialement

Eric GUELEN
Formateur AutoCAD
Site Internet

EESignature

0 J'aime
Message 14 sur 18

CADaSchtroumpf
Advisor
Advisor

@EC_GPE  a écrit :
LISP pour déplacer tous les éléments au point 0,0,0 avec intervention utilisateur pour définir le point de départ du déplacement = Pas possible de cliquer pour définir le point

Juste pour information.

L'utilisation du lisp dans un script (dans les version pleine) est possible si l'on exclu les fonctions d'entrée de l'utilisateur comme toute les fonctions (getxxx) [(getpoint) (getcorner) (getangle) etc..]

Mais une astuce (que j'ai déjà utilisé pour insérer plein d'images non référencées en un point désigné à chaque image) est d'utiliser la fonction (grread).

 

Cette fonction (très puissante) n'est pas facile à maîtriser, mais c'est la seule qui donne la main à l'utilisateur durant un script.

NB: L'accroche objet reste cependant inaccessible avec un point récupéré avec (grread), il faut ruser. Pour mes images par exemple, j'avais fixé un resol pour avoir un point valable.

Message 15 sur 18

EC_GPE
Advocate
Advocate

J'ai modifié le script pour tester:

 

TRAITERPLAN
_qsave
[RETOUR A LA LIGNE]

 

Chez moi il ne fonctionne pas également ainsi. Il bloque au moment ou le LISP lance le CONTROLE du fichier (Il y a une remarque en bas à droite que je n'avais jamais vu):
EC_GPE_0-1612372179243.png

J'appuie ensuite sur "ESC" quelques fois vu qu'il reste bloqué et AutoCAD "reprend vie". 

 

Dans le lisp, le contrôle du dessin se présente ainsi:

(defun c:traiterplan (/ b)
	(princ "\n----------Controle du dessin et reparation----------\n")
	(command "CONTROLE" "O")

 

Si je lance le script avec uniquement la commande qui apelle le LISP

 

TRAITERPLAN

 

La procédure se déroule jusqu'à la fin mais comporte des éléments étrange tel que des "nil"? Est-ce une erreur de LISP?

EC_GPE_1-1612372639306.png

 

Gabriel Pereira
Technicien ES en techniques du bâtiment CVCFS
CAS Coordination BIM"
LinkedIn

0 J'aime
Message 16 sur 18

EC_GPE
Advocate
Advocate

Malheureusement j'utilise bel et bien un getpoint 

	(setq pt (getpoint "\nEntrer point de base:"))

Je ne peux pas utiliser la petite astuce du mode RESOL pour espérer tomber à proximité de mon point sélectionné (Sert de base pour les références architecte) mais je retiens l'astuce si j'en ai besoin pour autre chose 🙂.  Merci

Gabriel Pereira
Technicien ES en techniques du bâtiment CVCFS
CAS Coordination BIM"
LinkedIn

0 J'aime
Message 17 sur 18

CADaSchtroumpf
Advisor
Advisor
Solution acceptée

Voci par exemple la fonction lisp que vous pouvez introduire dans le script à l'endroit voulu pour fournir un point au clavier sous la forme x,y(et éventuellement),z comme dans l'usage avec une commande  standard demandant un point.

Le script vous donnera alors la main pour entrer ces coordonnées.

Seul les caractères de 0 à 9 anisi que le "."  la "," et la touche correction arrière sont valide lors de la saisie, la touche espace ou entrée valide la saisie.

Ca fonctionne, j'ai essayé dans un script. Bien sur cela necessite de connaitre exactement les coordonnées à introduire.

 

 

((lambda ( / char Input)
  (setq char "")
  (while (and (setq Input (grread T 4 2)) (or (eq (car Input) 5) (eq (car Input) 2)) (not (equal Input '(2 13))) (not (equal Input '(2 32))))
    (cond
      ((eq (car Input) 2)
        (if (member (cadr Input) '(44 46 48 49 50 51 52 53 54 55 56 57))
          (setq char (strcat char (chr (cadr Input))))
        )
        (if (eq (cadr Input) 8)
          (progn
            (setq char (substr char 1 (1- (strlen char))))
            (prompt (chr 8))
          )
          (prompt (chr (cadr Input)))
        )
      )
    )
  )
  (print)
  char
))

Rappel: pour les version LT, oubliez cette possibilité.

 

Message 18 sur 18

patrick.emin
Alumni
Alumni

Bonjour @EC_GPE 

Si une des réponses à votre question résout votre problème, vous a permis de le comprendre ou contribue significativement à sa résolution, voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
0 J'aime