Aller au contenu

I had a dream this mornig...


Messages recommandés

Posté(e)

et non, je me prend pas pour martin luter king...

 

ce matin j'ai du imprimer des carnet de détails de ferraillages.... 62 A4 à imprimer en mode objet par des fenêtres... grrrr

 

j'ai bien essayer de me servir du module de covadis qui est si pratique pour imprimer les profils en travers..... mais ça me les sortais pas dans l'ordre... et je suis pas arrivé a trouver la logique pour avoir un ordre coérant....(j'ai essayer de faire tous mes cadres 1 à 1 dans l'ordre, metre tous les dessins à la queu lele... rien n'y a fait du coup j'ai remis les feuilles dans l'ordre aprés impréssion)

 

le principe, c qu'on met les cadre de A4 dans un calque spécial, et aprés avoir régler une boite de dialogue proche de celle de l'impréssion normale (imprimente, format, ctb.. et calque des cadres) on selectione tous les calque a imprimer et ça balance tout ça a pdfcréator...

 

là je fait "wait", quand tout est dans la fille d'attente, je les sélectionnes, puis combine (avec un clic droite et quand je print le résultat, j'ai un pdf de mon carnet...

 

bon, la combine sur pdf créator marche... mais quand je suis pas sur mon poste, je doit me palucher toute les impressions à la main et c un vrai boulot de robot.....

 

 

si un lispeur fou à un peu de temps a me consacrer, je me doute que ça doit pas être de la tarte, mais une macro qui retrouve les cadres (dans l'ordre de création des polygone ce serai le top) et me passe ça à la moulinette, je n'aurai pas assés de mot pour lui exprimer ma reconnaissance....

 

merci d'avance à nos codeurs psychopathe :)

Posté(e)

Bonsoir à toutes et tous,

 

Pourquoi n'utilises-tu pas l'espace papier, auxquels cas il devient très simple d'imprimer un carnet de xpages (en passant par publier) ou en s'aidant éventuellement des lisps de Patrick_35 ???? ici

 

J'ai pas mal de contact avec des bureaux qui font des carnets, tous le monde bosse comme ça car il suffit de te préparer un onglet de présentation qui va bien, autant de copie qu'il faut dans le fichier gabarit, une vue affecté à chaque présentations et ça roule.

De plus, tu n'as plus les options de l'espace papier (réglage des hauteurs de textes,de cotes, geler/degeler des calques,..changement d'echelles,...) en imprimant dans l'objet !

 

Excuses moi cependant de ne pas répondre à ta requête (j'en suis bien incapable!) mais c'est la méthode de travail que je remet en question.Cependant, il me semble que Bonuscad ou Powerclic (qu'ils me pardonne,...) avait développé un outil qui allais dans ce sens,...

 

Bon courage,

 

[Edité le 5/9/2007 par lili2006]

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

60 présentations c'est un peu l'enfer à faire aussi, et à gérer c vraiement pas le pied

 

géomédia a intégré ce module d'impression à covadis pour imprimer les profils en travers et l'essayer c'est l'adopter...

 

nos bétonneux qui sont des dessinateurs un peu scellés dans leur habitudes et pas vraiment souple... (vous savez le béton une fois coulé... et puis ceux là, ils sont bien feraillés :) )

 

dans mes dessins bien sur que j'abuse des présentations... mais pas pour les carnets automatisable sinon je sature les onglets en bas...et je trouve que lancer les impressions avec "publier" prend beaucoup plus de temps machine que si je les imprime une à une (est ce un bug chez moi?)

 

ensuite, les présentations c vrai que c bien, mais du temps de ma jeunesse ( autocad 12), il n'y en avais pas, et on imprimait tout depuis l'objet avec cette méthode et ça marchait finalement pas si mal.

 

Mais bon, je reconnais que ça doit pas être de la tarte a coder...

Posté(e)

Bonjour,

Voici un p'tit lisp:

 

 

(defun c:impa3()

(setq pl(cdr (assoc 8 (entget (car (entsel "\nChoix du cadre imprime ?"))))))

(setq sel (ssget "x" (list(cons 0 "LWPOLYLINE")(cons 8 pl)( [surligneur] cons 70 1[/surligneur]))))

 

 

 

(setq i 0)

 

(repeat (sslength sel)

(setq ent (ssname sel i))

(setq ent(entget ent))

(setq j 0)

(setq l_cadre (list ))

(setq nb_sommets 0)

(repeat (length ent)

(setq entit (nth j ent))

(setq code_entit (car entit))

(if (= code_entit 10)

(progn

(setq l_cadre (cons (list (car (cdr entit))(cadr (cdr entit))) l_cadre))

(setq nb_sommets(+ nb_sommets 1))

);fin du progn

);fin du if

(setq j (+ j 1))

)

(if (= nb_sommets 4)

(progn

(setq p1 (car l_cadre))

(setq p2 (caddr l_cadre))

 

 

(setq fichier (strcat "c:/" (rtos i 2 0) ".pdf"))

(command "-traceur" "o" "" "DWG TO PDF.pc3" "I [surligneur] SO EXPAND A3 (420.00 x 297.00 mm)" [/surligneur]"M" "A" "N" "F" p1 p2 "1=1" "C" "N" "acad.ctb" "N" "F" fichier "n" "o")

;(command "polylign" p1 p2 "")

 

;(alert fichier)

))

(setq i (+ i 1))

)

 

 

 

 

)

 

(defun c:ok()

(princ "ok")

(princ )

 

)

 

 

 

 

Quand c'est surligné (cons 70 1) pour les rectangles (cons 70 128) pour les polylignes

 

Voilà (fonctionne à partir de la version d'autocad 2007)

 

@plus

  • 4 semaines après...
Posté(e)

oups...

 

un petit coup de bourre, et le départ en vacance du gar m'avait tennu un peu éloigné du forum...

 

je répond un peu tardivement...

 

@ patrick35

ta métode permet de gérer et d'imprimer les folio, et c'est pas ce que je recherche. je cherche une adaptation de la macro géomédia.

 

en effet, gérer 60 ou 80 folio (c courant avec les profil en long et les carnets de ferraillage) devient bien fastidieux même avec des outils plus pratique que ceux fournis par autocad.

géomédia ne s'y est pas trompé et a sorti un truc tout "simple" (à l'utilisation en tout cas)

 

je rapelle le principe: imprimer tous les cadres définit dans un calque spécial en les sélectionnant en tous d'un coup avec une mise en page prédéfinie

 

comme ça, une foi le dessin effectuer, on a pas N mise en page a bricoler (60 copie + 60 recadrage+ publier qui prend son temps) mais juste appeler la fonction, choisir le calque des cadres et faire une grande fenêtre de sélection.

 

pour lovecraft

 

sool chtulu... enfer indescriptible et innommable... je salut et remercie ton boulot, mais les dieux souterrains ne sont pas avec nous. j'ai changer cons 70 1 en cons 70 128, mais ça ne marche tjs pas ( aprés le "choix du cadre" autocad écrit un énigmatique "228" et plus rien...)

mais je pense que c'est la bonne piste (juste que j'ai besoin de A4 en paysage mais bon ça c un détail et faire une boucle pour pouvoir sélectioner tous les cadres d'un coup en demandant a récupérer toutes les polylignes fermées de tel calque)

 

mais merci encore pour vos efforts

 

 

Posté(e)

oki merci... je te fait passer un fichier ou il y a un carnet de ferraillage, bon c vrai c un gros, il y a environ 200 feuillets preuve que c ingérable avec les folios, et fastidieux à sortir sans automate

 

tous les feuillets sont entourés d'un cadre en polyligne et ce sont ces cadres qui me servent de repère quand je le sort avec covadis

ceux qui serai le top, c'est que l'on puisse choisir l'ordre de sortie des pages en fonction de l'ordre de création des cadres (j'en demande un peu trop là ?)

 

alors pour l'instant, c moi qui fait ses pdf avec covadis dans le cas de projets un peu extrème comme celui là, le but serai un lisp qui tourne sous autocad 2006 ou autocad 2007 (2007 est installé mais notre bétoneux est resté scéllé sur 2007 lui plaie pas je sais pas très bien pourquoi)

l'echelle, c un peu bizare, il les sort à 1unité pour 0.02828 de puis l'espace objet (je sais plus trés bien pk une histoire de réduction a4 a3 ) mais bon si il y a un paramètre a changer pour l'adapter a d'autre echelle c pas un pb, on retouchera le lisp

 

je te passe ce fichier par mail dans le quel je n'ai laisser que les carnets de ferraillage, j'ai virer les plancher et autres coupes ça fesait trop lourd

merci beaucoup

  • 4 semaines après...
Posté(e)

re salut et re merci à lovcraft....

 

voici le lisp pour imprimer les carnet de lovcraft... je m'en suis fait un pour le A4, un pour la couleur, et il rempli parfaitement sa tache... parfaitement?

enfin ya juste une petite amélioration que je souhaiterai...

les pdf arrivent dans le répertoire temp de c: nommé de 1 à n

 

comment faire pour les nommés de 01 à n?

 

en effet, quand je les passe dans pdfsam pour les compiler en un seul pdf, il faut que je fasse bien attention pour pas les metre dans le déhordre...

 

j'ai bien essayer par moi même, mais je vous avoue que je suis pas trés doué... et puis c'est pas si simple... ça sent le test et je m'embrouille...

 


(defun c:impa3()
(setq pl(cdr (assoc 8 (entget (car (entsel "\nChoix du cadre imprime ?"))))))
 (setq sel (ssget "x" (list(cons 0  "LWPOLYLINE")(cons 8  pl)(cons 70  1))))
		     


 (setq i 0)
 
(repeat (sslength sel)
(setq ent (ssname sel i))
 		(setq ent(entget ent))
 		 (setq j 0)
 		(setq l_cadre (list ))
 			(setq nb_sommets 0)
	 (repeat (length ent)
			(setq entit (nth j ent))
			(setq code_entit (car entit))
			(if (= code_entit 10)
				(progn
				  (setq l_cadre (cons (list (car (cdr entit))(cadr (cdr entit))) l_cadre))
				  (setq nb_sommets(+ nb_sommets 1))	
				);fin du progn
			);fin du if
		(setq j (+ j 1))
		)
 		 (if (= nb_sommets 4)
	   (progn
		(setq p1 (car l_cadre))
	        (setq p2 (caddr l_cadre))


	     (setq fichier (strcat "c:/temp/" (rtos (+ i 1) 2 0) ".pdf"))
(command "-traceur" "o" "" "DWG TO PDF.pc3" "ISO expand A3 (297.00 x 420.00 mm)" "M" "A" "N" "F" p1 p2 "1=0.02" "C" "O" "monochrome.ctb" "N" "F" fichier "N" "O");parametres M=mm, A pAysage P Portrait, N pas de symetrie verticale, F fenetre,C centrer,O Style de tracé o/n, nom de la table,N épaisseur de lignes o/n, tracé de l'ombrage au format Affiché/Filaire/Masqué/Style visuel/Rendu, N et O fo pas toucher

	     ;(command "polylign" p1 p2 "")

	;(alert fichier)	
	   ))
       (setq i (+ i 1))
 )



 
 )

(defun c:ok()
 (princ "ok")
 (princ )
 
 )

 

en tout cas, je recommande ce truc à tous ceux qui ont des gros carnet A3 c'est rapide et efficasse (autocad 2007 requis pour ''dwg to pdf'' )

Posté(e)

Salut,

 

 

tu peux utiliser la fonction inc_numstr ci dessous, elle fonctione avec des chaine de caractère repésentant des nombres entiers :

 

 (defun inc-numstr (str / l)
(setq l (strlen str)
str (itoa (1+ (atoi str)))
)
(while ((setq str (strcat "0" str))
)
str
) 

 

(inc_numstr "001") >"002"

(inc_numstr "099") >"100"

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 8 ans après...
Posté(e)

Bonjour à tous,

Cette routine m'intéresse car je travaille uniquement avec l'espace objet pour la même raison : trop de pages.

 

J'ai légèrement modifié le lisp pour l'adapter à mes paramètres d'impression :

 

(defun c:impa3()

(setq pl(cdr (assoc 8 (entget (car (entsel "\nChoix du cadre imprime ?"))))))
(setq sel (ssget "x" (list(cons 0  "LWPOLYLINE")(cons 8  pl)(cons 70  1))))
(setq i 0)

(repeat (sslength sel)
       (setq ent (ssname sel i))
               (setq ent(entget ent))
               (setq j 0)
               (setq l_cadre (list ))
                       (setq nb_sommets 0)
               (repeat (length ent)
                               (setq entit (nth j ent))
                               (setq code_entit (car entit))
                               (if (= code_entit 10)
                                       (progn
                                         (setq l_cadre (cons (list (car (cdr entit))(cadr (cdr entit))) l_cadre))
                                         (setq nb_sommets(+ nb_sommets 1))     
                                       );fin du progn
                               );fin du if
                       (setq j (+ j 1))
                       )
               (if (= nb_sommets 4)
                  (progn
                       (setq p1 (car l_cadre))
                       (setq p2 (caddr l_cadre))
					
       (command "-traceur" "o" "" "PDFCreator.pc3" "A4" "M" "A" "O" "F" p1 p2 "P" "C" "O" "monochrome.ctb" "O" "F" "N" "N" "O")
	;parametres M=mm, A pAysage P Portrait, N pas de symetrie verticale, F fenetre,C centrer,O Style de tracé o/n, nom de la table,N épaisseur de lignes o/n, tracé de l'ombrage au format Affiché/Filaire/Masqué/Style visuel/Rendu, N et O fo pas toucher

                    ;(command "polylign" p1 p2 "")
               ;(alert fichier)        
                  ))
       (setq i (+ i 1))
	)
)

(defun c:ok()
 (princ "ok")
 (princ )
)

 

Le problème c'est qu'il n'imprime pas le cadre sélectionné mais tous les cadres, peu importe leur taille.

Je souhaiterai que la fonction imprime les cadres de la taille de celui sélectionné et pour l'ordre des pages en X positif puis Y négatif, exemple :

 

1 2 3 4

5 6 7 8

9

 

C'est possible ?

Merci

Posté(e)
nos bétonneux qui sont des dessinateurs un peu scellés dans leurs habitudes et pas vraiment souples... (vous savez le béton une fois coulé... et puis ceux là, ils sont bien ferraillés :) )

j'aime bien la description et je m'y retrouve un peu. Personnellement, je fais des tonnes et des tonnes de ferraillage et mes cahiers de ferraillage sont toujours présentés dans des présentations (c'est fait pour) et chaque présentation est mise en page avec une configuration nommée, ce qui permet d'en changer rapidement, sans outil lisp supplémentaire. Les mises en page dans l'espace objet, je trouve cela peu pratique et archaïque et pas seulement parce que cela ne correspond pas à mes habitudes pas vraiment souples.

Quand je lis

car je travaille uniquement avec l'espace objet pour la même raison : trop de pages.
je ne peux pas être d'accord. Un cahier de présentations, même s'il y a beaucoup de pages, c'est tellement pratique pour publier vers son imprimante ou vers un pdf, que je me demande comment on peut faire autrement. On peut aller plus loin avec les jeux de feuilles, mais pour ceux qui sont déjà réticents avec les présentations de l'espace papier, ce serait la quatrième dimension.

D'un autre côté, cela ne m'est jamais arrivé de faire un cahier de 200 feuillets ! Là, je pense qu'il y a un problème au niveau du plan : on aura voulu faire rentrer tout le projet sur le même document ! On a le droit de découper un gros problème en plusieurs petits et il aurait peut être mieux valu faire 10 plans de 20 feuillets. D'une part, on peut travailler à 10 sur le même projet et, d'autre part, on évite de gérer un mastodonte. Sans parler de la machine "musclée" qu'il faut pour être en mesure de gérer ces mastodontes.

 

Moi, avec mon PC de crotte et mes fichiers de 300Ko, j'ai l'air ridicule.

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Bonjour,

J'ai souvent des carnets de plus de 100 pages et dans mon secteur (menuiseries extérieures) il est préférable d'avoir un carnet unique pour l'ensemble du chantier.

 

Les présentations c'est pratique pour un carnet de 10-15 pages mais je me vois mal gérer une centaines d'onglets.

De plus ces présentations ne se créés pas toutes seules, un carnet de 100 pages c'est 99 présentations à dupliquer, 100 fois à entrer dans la fenêtre flottante pour cadrer la page requise, 100 onglets à renommer...

 

Mes carnets n'ont jamais le même nombre de page, des repérages différents, etc...

 

Donc utiliser les présentations pour simplement pouvoir faire "Publier" c'est une perte de temps.

 

C'est pourquoi je souhaite adapter cette routine, pour gagner du temps car c'est ça l'objectif.

Merci.

Posté(e)

C'est pourquoi je souhaite adapter cette routine, pour gagner du temps car c'est ça l'objectif.

Merci.

 

C'est l'objectif, effectivement. Personnellement, si déjà il faut se coltiner une routine pour automatiser, plutôt que de faire une routine qui imprime, je ferais une routine qui crée les présentations. Mon logiciel de ferraillage crée ses nomenclatures dans l'espace objet, puis une routine repère les blocs qui représentent les pages de nomenclature et me crée une présentation par page de nomenclature, avec la bonne mise en page, nommée et tout.

 

Comme dit plus haut, je n'ai pas l'expérience de cahiers au format bible, mais la commande publier, surtout depuis qu'on peut publier vers un pdf, ainsi que etransmit pour d'autres raisons, me font gagner un temps énorme.

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Salut

 

Vous avez aussi ce sujet pour imprimer des folios qui sont dans l'espace objet.

 

@+

 

Bonjour Patrick_35,

Je viens d'essayer et je n'arrive pas à la faire tourner, je ne sais pas quoi remplacer exactement pour l'histoire de la version de PDFCreator et donc ça me met une erreur.

 

J'ai essayer de simplifier l'ensemble en supprimant tout ce qui concerne PDFCreator pour ne mettre que cette ligne :

 

(command "-traceur" "o" "" "PDFCreator.pc3" "A4" "M" "A" "O" "F" p1 p2 "P" "C" "O" "monochrome.ctb" "O" "F" "N" "N" "O")

 

qui elle fonctionne parfaitement pour l'impression avec mes paramètres mais je n'y arrive pas non plus.

 

Quelqu'un pourrait me donner un coup de main svp ?

Posté(e)

Si tu as un exemple (juste les cadres avec un n°) je mettrai le lisp à jour

 

@+

 

Voici un exemple :

 

exemple.zip

 

J'imprime toujours avec la dernière version dispo de PDFCreator et avec les paramètres suivants :

(command "-traceur" "o" "" "PDFCreator.pc3" "A4" "M" "A" "O" "F" p1 p2 "P" "C" "O" "monochrome.ctb" "O" "F" "N" "N" "O")

Je fusionne ensuite l'ensemble et j'enregistre.

 

Merci Beaucoup.

Posté(e)

Salut

 

Il faut que tu remplaces les cadres des folios (qui sont en polylignes) par un bloc (nommé "Cart" dans le lisp) afin de reconnaitre tous les folios

 

(defun c:imp(/ bck bg doc ent hd lay lst pdf plt sel tot kill 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 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
 )
 (and (ssget "x" (list (cons 0 "insert") (cons 2 Mon_Cartouche)))
   (progn
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(vla-getboundingbox ent 'bg 'hd)
(setq lst (cons (list (vlax-safearray->list bg) (vlax-safearray->list hd)) lst))
     )
     (vla-delete sel)
     (setq lst (vl-sort lst '(lambda(a B) (if (equal (cadar a) (cadar B) 0.0001)
				     (< (caar a) (caar B))
				     (> (cadar a) (cadar B))
				   )
		     )
	)
     )
     (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)
  (vlax-invoke pdf 'cClearCache)
  (vlax-put-property pdf 'cOption "savefilename" (vlax-make-variant (vl-filename-base (getvar "dwgname"))))
)
(progn
  (or (setq pdf2 (vlax-get-or-create-object "PDFCreatorBeta.JobQueue"))
      (setq pdf2 (vlax-get-or-create-object "PDFCreator.JobQueue"))
  )
  (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke (list pdf2 'initialize)))
    (progn
      (vlax-invoke pdf2 'releasecom)
      (vlax-invoke pdf2 'initialize)
    )
  )
)
     )
     (setq lay (vla-get-activelayout doc)
    plt (vla-get-plot doc)
    tot 0
     )
     (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 ac90degrees)
     (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)
     (if (vl-catch-all-error-p (setq bck (vl-catch-all-apply 'getvar (list "backgroundplot"))))
(setq bck nil)
     )
     (if 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
  (vlax-invoke pdf 'cCombineAll)
  (vlax-release-object pdf)
)
(pdf2
  (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)
)
     )
     (if 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

Posté(e)

Salut

 

Il faut que tu remplaces les cadres des folios (qui sont en polylignes) par un bloc (nommé "Cart" dans le lisp) afin de reconnaitre tous les folios

 

@+

 

Bonjour Patrick_35,

Merci !

Je viens de tester et ça fonctionne impec par contre je souhaiterai apporter 3 modifs si possible :

 

  1. Au lancement de la commande, ajouter une invite dans la barre de commande pour choisir la direction :
    • 1er choix : début en haut à gauche puis vers la droite et ligne suivante en dessous
    • 2e choix : début en haut à gauche puis vers le bas et colonne suivante à droite

[*]Ne pas traiter le fichier pdf, mon carnet complet est réparti sur 3 fichiers, je souhaite pouvoir lancer la commande sur les 3 fichiers et fusionner le pdf complet moi même

[*]Orientation paysage avec symétrie verticale

 

Merci d'avance.

Posté(e)

Salut

 

Le lisp modifié

Pour les impressions

(defun c:imp(/ bck bg def doc ent hd lay lst pdf plt sel tot kill 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 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 Mon_Cartouche)))
   (progn
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
       (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)
)

 

Pour les Options

(defun c:impo(/ chx def doc)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (if (setq def (getenv "Patrick_35_imp"))
   (setq def (atoi def))
   (setq def 1)
 )
 (princ "\nValeurs pour l'impression des pdf : ")
 (princ "\n\t\t  1 : Départ en Haut à Gauche, puis vers la Droite")
 (princ "\n\t\t  2 : Départ en Haut à Gauche, puis vers le Bas")
 (princ "\n\t\t  4 : Départ en Bas à  Gauche, puis vers la Droite")
 (princ "\n\t\t  8 : Départ en Bas à  Gauche, puis vers le Haut")
 (princ "\n\t\t 16 : Ne pas fusionner les pdf")
 (initget 6)
 (setq chx (getint (strcat "\nOptions des pdf <" (itoa def) "> : ")))
 (and chx (/= chx def) (vl-position (rem chx 16) '(1 2 4 8))
   (setenv "Patrick_35_imp" (itoa chx))
 )
 (vla-endundomark doc)
 (princ)
)

 

Et pour fusionner les pdf si besoin

(defun c:impf(/ pdf2)
 (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)))
(> (vlax-get pdf2 'count) 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)
 (princ)
)

 

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

 

@+

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

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é