Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

Toujours dans le but de réduire le nombre de clic.

Quelqu'un pourrait m'aider à écrire un LISP permettant :

 - de sélectionner tous les présentations commençant par les lettres "Exe" et en excluant l'onglet "OBJET"

 - puis lancer la commande PUBLIER

 

Je joins un dwg et une petite vidéo montrant la version manuelle de cette procédure redondante

En vous remerciant par avance pour l'aide que vous pourrez me fournir.

merci

dwg video.zip

Posté(e)

Etape 1 - Récupération des onglets commençant par les lettres "Exe" :

;;; Listing de tous les onglets "Exe*" 
(vlax-for layout (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
   (if (/= (vla-get-name layout) "Model")
         (if (= (wcmatch (vla-get-name layout) "Exe*))
            (setq lstlay (vl-list* (vla-get-name layout) lstlay))
         ) ; fin if
   ) ; fin if layout "Model"
) ; fin vlax 
;;; Fin listing de tous les onglets "Exe*"

lstlay : liste tous les onglets commençant par "Exe"
Prévoir un traitement pour les mettre dans l'ordre.

Etape 2 - Exécution de la commande publier :

(GETDIR)
(mkdsd lst typ dwf out vf)
;;; sauvegarde état boite de dialogue
(setq oldFD (getvar "FILEDIA"))
;;; boite de dialogue désactivée
(setvar "FILEDIA" 0)
;;; publication avec le fichier dsd
(command "-publish" filp)
;;; restauration boite de dialogue
(setvar "FILEDIA" oldFD)

GETDIR va demander où enregistrer le fichier final (DSD et PDF)
filp c'est le répertoire sélectionné par GETDIR avec comme nom de fichier "temppub.dsd"

Fonction MKDSD

;;===========================================================================;;
;; MKDSD IS A UTILITY WHICH WILL CONSTRUCT A DRAWING SET DESCRIPTION FILE    ;;
;; (*.DSD) FOR CONFIGURATION OF THE "PUBLISH" COMMAND                        ;;
;;                                                                           ;;
;; ARGUMENTS: LST -> A LIST - OR LIST OF LISTS - COMPRISED OF:               ;;
;;                   1) SHEET NAME (STR); USUALLY THE NAME OF THE DRAWING    ;;
;;                   2) FULL DRAWING PATH (STR), INCLUDING FILE NAME         ;;
;;                   3) LAYOUT NAME (STR)                                    ;;
;;                   4) PAGE SETUP (STR); NOTE - EMPTY STRING IF PAPERSPACE  ;;
;;                   5) SHEET PATH (STR); TYPICALLY THE SAME AS DRAWING PATH ;;
;;            TYP -> AN INTEGER, INDICATING THE TYPE OF OUTPUT:              ;;
;;                   0 - DWF, SINGLE SHEETS                                  ;;
;;                   1 - DWF, MULTI-SHEET                                    ;;
;;                   2 - PRINTER SPECIFIED IN PAGE SETUP                     ;;
;;                   3 - DWFX, SINGLE SHEETS                                 ;;
;;                   4 - DWFX, MULTI-SHEET                                   ;;
;;                   5 - PDF, SINGLE SHEET                                   ;;
;;                   6 - PDF, MULTI-SHEET                                    ;;
;;            DWF -> OUTPUT (STR) - FULL PATH/NAME FOR MULTI-SHEET FILE      ;;
;;            OUT -> OUTPUT (STR) - PATH ONLY FOR SINGLE SHEET FILES         ;;
;;                                  (NAMES TAKEN FROM INDIVIDUAL SHEET       ;;
;;                                  NAMES, PER LST ARGUMENT, ABOVE)          ;;
;;            VF  -> BOOLEAN - INDICATES WHETHER TO OPEN GENERATED FILE      ;;
;;===========================================================================;;

(defun mkdsd (lst typ dwf out vf / D-S-D FIL FLDSD I S X Y)
  (setq d-s-d (open (setq fil (strcat PubPath "temppub.dsd")) "w"))
  (setq filp fil)

  ; FLDSD CONSTRUCTS STRINGS BASED ON THE LST ARGUMENT,
  ; TO BE WRITTEN INTO THE DSD.
  
  (defun fldsd (strlst / )
    (mapcar '(lambda (s) (write-line s d-s-d))
	    (append
	      (mapcar '(lambda (x y) (vl-string-subst x "\|/" y))
		      strlst
		      (list "[DWF6Sheet:\|/]"
			    "DWG=\|/"
			    "Layout=\|/"
			    "Setup=\|/"
			    "OriginalSheetPath=\|/"
			    ); list
		      ); mapcar
	      (list "Has Plot Port=0" "Has3DDWF=0")
	      ); append
	    ); mapcar
    ); fin defun fldsd
  (mapcar '(lambda (i) (write-line i d-s-d))
	  (list "[DWF6Version]"
		"Ver=1"
		"[DWF6MinorVersion]"
		"MinorVer=1"
		); list
	  ); mapcar
  (if (listp (car lst))
    (mapcar 'fldsd lst)
    (fldsd lst)
    ); if
  (mapcar '(lambda (i) (write-line i d-s-d))
	  (list "[Target]"
		(strcat "Type=" (itoa typ))
		(strcat "DWF=" dwf)
		(strcat "OUT=" out)
		"PWD="
		"[MRU block template]"
		"MRU=0"
		"[MRU Local]"
		"MRU=0"
		"[MRU Sheet List]"
		"MRU=0"
		"[AutoCAD Block Data]"
		"IncludeBlockInfo=0"
		"BlockTmplFilePath="
		"[SheetSet Properties]"
		"IsSheetSet=FALSE"
		"IsHomogeneous=FALSE"
		"SheetSet Name="
		"NoOfCopies=1"
		"PlotStampOn=FALSE"
		(strcat "ViewFile=" (if vf "TRUE" "FALSE"))
		"JobID=0"
		"SelectionSetName="
		(strcat "AcadProfile=" (getvar "cprofile"))
		"CategoryName="
		"LogFilePath="
		"IncludeLayer=FALSE"
		"LineMerge=FALSE"
		"CurrentPrecision="
		"PromptForDwfName=FALSE"
		"PwdProtectPublishedDWF=FALSE"
		"PromptForPwd=FALSE"
		"RepublishingMarkups=FALSE"
		"PublishSheetSetMetadata=FALSE"
		"PublishSheetMetadata=FALSE"
		"3DDWFOptions=0 1"
		); list
	  ); mapcar
  (close d-s-d)
  fil
  ); fin defun mkdsd

Fonction GETDIR

(defun GETDIR( / cdl rep)
 (setq cdl (vlax-create-object "Shell.Application")
       rep (vlax-invoke cdl 'browseforfolder 0 "Sélectionnez la branche de répertoires à traiter" 512 ""))
 (vlax-release-object cdl)
 (setq PubPath (strcat (vlax-get-property (vlax-get-property rep 'self) 'path) "\\"))
) ; fin defun GETDIR

 

Posté(e)
Il y a 19 heures, lili2006 a dit :

Bonjour à toutes et tous,

 

Perso, je vois pas trop l'intérêt d'un prog pour ça,..Surtout si tu souhaites publier un carnet de plusieurs dessins. Je lance la commande publier, et il est ensuite très rapide de supprimer dans le dialogue ce que l'on ne souhaite pas publier,..

Bonjour,

C'est justement pour éviter ce genre de manœuvre que je souhaite rendre ça automatique.

Cela semble inutile sur un seul fichier mais quand on passe plusieurs dizaines ou centaines de fichier à publier. il peut arriver qu'on supprime une mauvaise présentation dans la boite de dialogue PUBLIER, et ne parlons même pas du nombre de clic à effectuer.

Posté(e)

Bonjour JPhil,

J'ai compilé les codes dans un fichier LSP 

ça me sort "erreur: structure incorrecte de la chaîne en entrée" au lancement du fichier

J'ai du louper un truc dans la compilation ? 

Merci pour ton aide

ci joint le fichier lsp

TEST.lsp

Posté(e)

C'est normal dans le sens où je n'ai pas proposé un programme prêt à l'emploi, j'ai juste proposé des idées pour que tu puisses faire ton propre programme.

Posté(e)

Bonjour,

Et pourquoi ne pas enregistrer le dessin en ne gardant que les présentations EXE ? et utiliser l'impression AUTOMATIQUE ?

Je remarque dans la vidéo que tu sélectionnes les ONGLETs un à un  ! On peux déjà optimiser la sélection des onglets en sélectionnant la 1ère PRESENTATION et avec la touche SHIFT sélectionner la DERNIERE !

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)
il y a 45 minutes, rebcao a dit :

Bonjour,

Et pourquoi ne pas enregistrer le dessin en ne gardant que les présentations EXE ? et utiliser l'impression AUTOMATIQUE ?

Je remarque dans la vidéo que tu sélectionnes les ONGLETs un à un  ! On peux déjà optimiser la sélection des onglets en sélectionnant la 1ère PRESENTATION et avec la touche SHIFT sélectionner la DERNIERE !

Christian

Bonjour,

Impression Automatique : le but n'est pas de crée un pdf à chaque enregistrement et fermeture du fichier mais bien à la demande, de plus ça m'obligerai de supprimer des présentations.

pour l'optimisation c'est en effet c'est ce que je fais déjà : Présention => Shift => publier => espace objet.

La vidéo c'était pour montrer ce que je souhaite obtenir comme Routine automatique.

Posté(e)
il y a une heure, JPhil a dit :

C'est normal dans le sens où je n'ai pas proposé un programme prêt à l'emploi, j'ai juste proposé des idées pour que tu puisses faire ton propre programme.

Ce n'est pas faute d'avoir essayé, la programmation ce n'est vraiment pas ma tasse de thé, d'ou ma demande d'aide. 

sauf quand ce sont des légères adaptations, mais le code a l'air beaucoup plus complexe que ça.

Merci quand même.

Posté(e)

Hello

Mais tu ne veux publier que certaines Presentations / Layouts, il suffit qu'elle soient TOUTES au Debut ou a la Fin des Onglets de Presentation !

Et donc a ce moment LA, avec SHIFT comme le dit si bien Christian, c facile ...

Pour reorganiser tes Presentations, tu peux utiliser l'excellente routine TABSORT de Lee-Mac !?

http://www.lee-mac.com/tabsort.html

La Sante, Bye, lecrabe

 

 

Autodesk Expert Elite Team

Posté(e)
il y a 6 minutes, lecrabe a dit :

Hello

Mais tu ne veux publier que certaines Presentations / Layouts, il suffit qu'elle soient TOUTES au Debut ou a la Fin des Onglets de Presentation !

Et donc a ce moment LA, avec SHIFT comme le dit si bien Christian, c facile ...

Pour reorganiser tes Presentations, tu peux utiliser l'excellente routine TABSORT de Lee-Mac !?

http://www.lee-mac.com/tabsort.html

La Sante, Bye, lecrabe

 

 

C'est ce que je faisais déjà. Comme les présentations sont déjà bien rangé ce n'est pas compliqué en effet.

comme je disais dans mon premier message c'était dans un souci d’optimisation et un gain de temps considérable (qui ne vous semble pas visible sur un seul fichier, mais multiplié par XXXX ça prend vite de la proportion).

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é