Aller au contenu

I had a dream this mornig...


x_all

Messages recommandés

Salut

 

Le lisp modifié

Pour les impressions

 

Pour les Options

 

Et pour fusionner les pdf si besoin

 

ps : Tu peux additionner les options (par exemple 1 + 16 = 17, mais pas 1 + 2 = dernière option)

 

@+

 

Re,

Merci beaucoup !

Je viens de tester tout ça et ça roule ;)

Par contre j'ai un soucis, comme j'ai des pages de taille différente pour une question d'échelle j'ai créé un bloc dynamique "Cart" avec un paramètre XY pour en modifier l'échelle tout en gardant le nom identique.

Le problème c'est que la routine ne fonctionne plus dans ce cas là.

 

Y a t'il une solution ?

Lien vers le commentaire
Partager sur d’autres sites

Pour fonctionner sur des blocs dynamiques

(defun c:imp(/ bck bg def doc ent hd lay lst pdf plt sel tot kill nombl mon_impression Mon_Cartouche)
 (defun kill(qui / item meth1 meth2 obj WMI)
   (setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
  meth1 (vlax-invoke WMI 'ConnectServer nil nil nil nil nil nil nil nil)
  meth2 (vlax-invoke meth1 'ExecQuery "Select * from Win32_Process")
   )
   (vlax-for item meth2
     (and (setq obj (vlax-get item 'CommandLine)) (vl-string-search (strcase qui) (strcase obj))
(vlax-invoke item 'Terminate)
     )
   )
   (foreach item (list WMI meth1 meth2)
     (vlax-release-object item)
   )
 )

 (defun nombl(bl)
   (if (vlax-property-available-p bl 'effectivename)
     (vla-get-effectivename bl)
     (vla-get-name bl)
   )
 )

 (defun mon_impression(dim)
   (vlax-invoke lay 'setwindowtoplot (list (caar dim)(cadar dim))
			      (list (caadr dim)(cadadr dim))
   )
   (vl-catch-all-apply 'vlax-invoke (list plt 'plottodevice))
 )

 (setq doc (vla-get-activedocument (vlax-get-acad-object))
Mon_Cartouche "Cart" ; NOM DU CARTOUCHE
 )
 (if (setq def (getenv "Patrick_35_imp"))
   (setq def (atoi def))
   (setq def 1)
 )
 (and (ssget "x" (list (cons 0 "insert") (cons 2 (strcat "`**," Mon_Cartouche))))
   (progn
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(and (eq (strcase (nombl ent)) (strcase Mon_Cartouche))
  (progn
    (vla-getboundingbox ent 'bg 'hd)
    (setq lst (cons (list (vlax-safearray->list bg) (vlax-safearray->list hd)) lst))
  )
)
     )
     (vla-delete sel)
     (cond
((eq (logand def 1) 1)
  (setq lst (vl-sort lst '(lambda(a B) (if (equal (cadar a) (cadar B) 0.0001)
					(< (caar a) (caar B))
					(> (cadar a) (cadar B))
				       )
			 )
	    )
  )
)
((eq (logand def 2) 2)
  (setq lst (vl-sort lst '(lambda(a B) (if (equal (caar a) (caar B) 0.0001)
					(> (cadar a) (cadar B))
					(< (caar a) (caar B))
				       )
			 )
	    )
  )
)
((eq (logand def 4) 4)
  (setq lst (vl-sort lst '(lambda(a B) (if (equal (cadar a) (cadar B) 0.0001)
					(< (caar a) (caar B))
					(< (cadar a) (cadar B))
				       )
			 )
	    )
  )
)
((eq (logand def 8) 8)
  (setq lst (vl-sort lst '(lambda(a B) (if (equal (caar a) (caar B) 0.0001)
					(< (cadar a) (cadar B))
					(< (caar a) (caar B))
				       )
			 )
	    )
  )
)
     )
     (and (eq (logand def 16) 0) (kill "PDFCreator.exe"))
     (if (setq pdf (vlax-get-or-create-object "PDFCreator.clsPDFCreator"))
(progn
  (vlax-invoke pdf 'cstart "/NoProcessingAtStartup")
  (vlax-put pdf 'cPrinterStop :vlax-false)
  (vlax-put pdf 'cPrinterStop :vlax-true)
  (vlax-put pdf 'cWindowState 0)
  (and (eq (logand def 16) 0) (vlax-invoke pdf 'cClearCache))
  (vlax-put-property pdf 'cOption "savefilename" (vlax-make-variant (vl-filename-base (getvar "dwgname"))))
  (setq tot (vlax-get pdf 'count))
)
(progn
  (or (setq pdf2 (vlax-get-or-create-object "PDFCreatorBeta.JobQueue"))
      (setq pdf2 (vlax-get-or-create-object "PDFCreator.JobQueue"))
  )
  (and	(vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke (list pdf2 'initialize)))
	(eq (logand def 16) 0)
    (progn
      (vlax-invoke pdf2 'releasecom)
      (vlax-invoke pdf2 'initialize)
    )
  )
  (setq tot (vlax-get pdf2 'count))
)
     )
     (setq lay (vla-get-activelayout doc)
    plt (vla-get-plot doc)
     )
     (vla-put-configname               lay "PDFCreator")
     (vla-refreshplotdeviceinfo        lay)
     (vla-put-canonicalmedianame       lay "A4")
     (vla-put-centerplot               lay :vlax-true)
     (vla-put-paperunits               lay acMillimeters)
     (vla-put-plothidden               lay :vlax-false)
     (vla-put-plotrotation             lay ac270degrees)
     (vla-put-plottype                 lay acWindow)
     (vla-put-plotviewportborders      lay :vlax-false)
     (vla-put-plotviewportsfirst       lay :vlax-true)
     (vla-put-plotwithlineweights      lay :vlax-true)
     (vla-put-plotwithplotstyles       lay :vlax-true)
     (vla-put-scalelineweights         lay :vlax-false)
     (vla-put-standardscale            lay acVpScaleToFit)
     (vla-put-stylesheet               lay "monochrome.ctb")
     (vla-put-usestandardscale         lay :vlax-true)
     (and (vl-catch-all-error-p (setq bck (vl-catch-all-apply 'getvar (list "backgroundplot")))) (setq bck nil))
     (and bck (setvar "backgroundplot" 0))
     (foreach ent lst
(mon_impression ent)
(cond
  (pdf
    (while (/= (vlax-get pdf 'cCountOfPrintjobs) (1+ tot)))
    (setq tot (1+ tot))
  )
  (pdf2
    (vlax-invoke-method pdf2 'waitforjobs (setq tot (1+ tot)) 10)
  )
)
     )
     (cond
(pdf
  (and (eq (logand def 16) 0) (vlax-invoke pdf 'cCombineAll))
  (vlax-release-object pdf)
)
(pdf2
  (and (eq (logand def 16) 0)
    (progn
      (vlax-invoke pdf2 'mergealljobs)
      (and (setq fic (getfiled "Nom du PDF" (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) ".pdf") "PDF" 1))
	(vlax-invoke (vlax-get pdf2 'nextjob) 'convertto fic)
      )
      (vlax-invoke pdf2 'releasecom)
    )
  )
  (vlax-release-object pdf2)
)
     )
     (and bck (setvar "backgroundplot" bck))
   )
 )
 (princ)
)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Pour fonctionner sur des blocs dynamiques

 

@+

 

Bonjour Patrick_35,

 

J'ai une dernière demande :unsure: , est-ce qu'il serait possible de changer l'orientation (portrait ou paysage) en fonction des dimensions du bloc cadre ?

Du genre si X > Y alors paysage

et si X < Y alors portrait.

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

(defun c:imp(/ bck bg def doc ent hd lay lst pdf plt sel tot kill nombl mon_impression Mon_Cartouche)
 (defun kill(qui / item meth1 meth2 obj WMI)
   (setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
  meth1 (vlax-invoke WMI 'ConnectServer nil nil nil nil nil nil nil nil)
  meth2 (vlax-invoke meth1 'ExecQuery "Select * from Win32_Process")
   )
   (vlax-for item meth2
     (and (setq obj (vlax-get item 'CommandLine)) (vl-string-search (strcase qui) (strcase obj))
(vlax-invoke item 'Terminate)
     )
   )
   (foreach item (list WMI meth1 meth2)
     (vlax-release-object item)
   )
 )

 (defun nombl(bl)
   (if (vlax-property-available-p bl 'effectivename)
     (vla-get-effectivename bl)
     (vla-get-name bl)
   )
 )

 (defun mon_impression(dim)
   (if (> (distance (car dim) (list (caadr dim) (cadar dim) (caddar dim)))
   (distance (list (caadr dim) (cadar dim) (caddar dim)) (cadr dim))
)
     (vla-put-plotrotation lay ac270degrees)
     (vla-put-plotrotation lay ac0degrees)
   )
   (vlax-invoke lay 'setwindowtoplot (list (caar dim)(cadar dim))
			      (list (caadr dim)(cadadr dim))
   )
   (vl-catch-all-apply 'vlax-invoke (list plt 'plottodevice))
 )

 (setq doc (vla-get-activedocument (vlax-get-acad-object))
Mon_Cartouche "Cart" ; NOM DU CARTOUCHE
 )
 (if (setq def (getenv "Patrick_35_imp"))
   (setq def (atoi def))
   (setq def 1)
 )
 (and (ssget "x" (list (cons 0 "insert") (cons 2 (strcat "`**," Mon_Cartouche))))
   (progn
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(and (eq (strcase (nombl ent)) (strcase Mon_Cartouche))
  (progn
    (vla-getboundingbox ent 'bg 'hd)
    (setq lst (cons (list (vlax-safearray->list bg) (vlax-safearray->list hd)) lst))
  )
)
     )
     (vla-delete sel)
     (cond
((eq (logand def 1) 1)
  (setq lst (vl-sort lst '(lambda(a B) (if (equal (cadar a) (cadar B) 0.0001)
					(< (caar a) (caar B))
					(> (cadar a) (cadar B))
				       )
			 )
	    )
  )
)
((eq (logand def 2) 2)
  (setq lst (vl-sort lst '(lambda(a B) (if (equal (caar a) (caar B) 0.0001)
					(> (cadar a) (cadar B))
					(< (caar a) (caar B))
				       )
			 )
	    )
  )
)
((eq (logand def 4) 4)
  (setq lst (vl-sort lst '(lambda(a B) (if (equal (cadar a) (cadar B) 0.0001)
					(< (caar a) (caar B))
					(< (cadar a) (cadar B))
				       )
			 )
	    )
  )
)
((eq (logand def 8) 8)
  (setq lst (vl-sort lst '(lambda(a B) (if (equal (caar a) (caar B) 0.0001)
					(< (cadar a) (cadar B))
					(< (caar a) (caar B))
				       )
			 )
	    )
  )
)
     )
     (and (eq (logand def 16) 0) (kill "PDFCreator.exe"))
     (if (setq pdf (vlax-get-or-create-object "PDFCreator.clsPDFCreator"))
(progn
  (vlax-invoke pdf 'cstart "/NoProcessingAtStartup")
  (vlax-put pdf 'cPrinterStop :vlax-false)
  (vlax-put pdf 'cPrinterStop :vlax-true)
  (vlax-put pdf 'cWindowState 0)
  (and (eq (logand def 16) 0) (vlax-invoke pdf 'cClearCache))
  (vlax-put-property pdf 'cOption "savefilename" (vlax-make-variant (vl-filename-base (getvar "dwgname"))))
  (setq tot (vlax-get pdf 'count))
)
(progn
  (or (setq pdf2 (vlax-get-or-create-object "PDFCreatorBeta.JobQueue"))
      (setq pdf2 (vlax-get-or-create-object "PDFCreator.JobQueue"))
  )
  (and	(vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke (list pdf2 'initialize)))
	(eq (logand def 16) 0)
    (progn
      (vlax-invoke pdf2 'releasecom)
      (vlax-invoke pdf2 'initialize)
    )
  )
  (setq tot (vlax-get pdf2 'count))
)
     )
     (setq lay (vla-get-activelayout doc)
    plt (vla-get-plot doc)
     )
     (vla-put-configname               lay "PDFCreator")
     (vla-refreshplotdeviceinfo        lay)
     (vla-put-canonicalmedianame       lay "A4")
     (vla-put-centerplot               lay :vlax-true)
     (vla-put-paperunits               lay acMillimeters)
     (vla-put-plothidden               lay :vlax-false)
     (vlax-invoke lay 'setwindowtoplot '(0.0 0.0) '(10.0 10.0))
     (vla-put-plotrotation             lay ac270degrees)
     (vla-put-plottype                 lay acWindow)
     (vla-put-plotviewportborders      lay :vlax-false)
     (vla-put-plotviewportsfirst       lay :vlax-true)
     (vla-put-plotwithlineweights      lay :vlax-true)
     (vla-put-plotwithplotstyles       lay :vlax-true)
     (vla-put-scalelineweights         lay :vlax-false)
     (vla-put-standardscale            lay acVpScaleToFit)
     (vla-put-stylesheet               lay "monochrome.ctb")
     (vla-put-usestandardscale         lay :vlax-true)
     (and (vl-catch-all-error-p (setq bck (vl-catch-all-apply 'getvar (list "backgroundplot")))) (setq bck nil))
     (and bck (setvar "backgroundplot" 0))
     (foreach ent lst
(mon_impression ent)
(cond
  (pdf
    (while (/= (vlax-get pdf 'cCountOfPrintjobs) (1+ tot)))
    (setq tot (1+ tot))
  )
  (pdf2
    (vlax-invoke-method pdf2 'waitforjobs (setq tot (1+ tot)) 10)
  )
)
     )
     (cond
(pdf
  (and (eq (logand def 16) 0) (vlax-invoke pdf 'cCombineAll))
  (vlax-release-object pdf)
)
(pdf2
  (and (eq (logand def 16) 0)
    (progn
      (vlax-invoke pdf2 'mergealljobs)
      (and (setq fic (getfiled "Nom du PDF" (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) ".pdf") "PDF" 1))
	(vlax-invoke (vlax-get pdf2 'nextjob) 'convertto fic)
      )
      (vlax-invoke pdf2 'releasecom)
    )
  )
  (vlax-release-object pdf2)
)
     )
     (and bck (setvar "backgroundplot" bck))
   )
 )
 (princ)
)

 

@+

Modifié par Patrick_35

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour Patrick_35,

Je rencontre un problème avec des fichiers de provenance différente de ceux que j'utilise habituellement.

Le bloc cadre est pourtant placé où il faut mais la fonction imprime soit une page blanche soit une partie du contenu dans un coin, comme avec un décalage d'origine.

 

Ci-joint un exemple de fichier qui pose problème, le bloc cadre est nommé "cadre_impression" et le pdf qui en ressort est en portrait et ne contient qu'un bout de la zone imprimée.

 

Une idée sur la variable ou le paramètre qui pose problème ?

Merci.

exemple.zip

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Salut

 

Je ne comprends pas pourquoi cela ne fonctionne pas.

J'ai vérifié, les coordonnées, les scu, les variables, etc... et rien.

 

Pire, j'ai fais un copier/coller des objets de l'exemple sur un fichier vierge et là, tout fonctionne :o

D'ailleurs, j'ai corrigé un petit bug quand la fenêtre n'est pas initialisée.

 

J'ai même fais un comparatif entre le dessin d'exemple et celui qui fonctionne et je n'ai pas trouvé de différences.

Il y a une raison quelque part. Je continue de chercher

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Je ne comprends pas pourquoi cela ne fonctionne pas.

J'ai vérifié, les coordonnées, les scu, les variables, etc... et rien.

 

Pire, j'ai fais un copier/coller des objets de l'exemple sur un fichier vierge et là, tout fonctionne :o

D'ailleurs, j'ai corrigé un petit bug quand la fenêtre n'est pas initialisée.

 

J'ai même fais un comparatif entre le dessin d'exemple et celui qui fonctionne et je n'ai pas trouvé de différences.

Il y a une raison quelque part. Je continue de chercher

 

@+

 

Slt,

J'ai fais la mise à jour, merci.

Depuis la PDFCreator 2.4 l'impression semblait plus lente et depuis ta mise à jour c'est revenu à la normale.

++

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é