Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

je cherche en Lisp ou VLisp à tracer une polyligne pour materialiser la taille du tracé d'une presentation?

 

Merci pour votre aide.

Developpement C++, C/CLI, .NET, ObjectARX, OpenDWG, O.D.A., Teigha ...

Posté(e)

Bonjour,

 

je cherche en Lisp ou VLisp à tracer une polyligne pour materialiser la taille du tracé d'une presentation?

 

Merci pour votre aide.

Salut

 

Quelques exemples

; Paramètres du traceur
(setq lay (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
; Rafraichir les paramètres du traceur
(vla-refreshplotdeviceinfo lay)
; Nom de la feuille de papier (A4, A3, autres)
(vla-getlocalemedianame lay (vla-get-canonicalmedianame lay))
; Taille du papier
(vla-getpapersize lay 'hauteur 'longueur)
; Origine du tracé
(vlax-get lay 'plotorigin)
: Fenêtre de tracé si elle a été définie
(vla-getWindowToPlot lay 'bg 'hd)
; Coin bas du tracé
(vlax-safearray->list bg)
; Coin haut du tracé
(vlax-safearray->list hd)

 

Plus d'infos avec

(vlax-dump-object lay T)

 

@+

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)

Genial !! Encore merci, je me voyais repartir en ARX !!!!

Developpement C++, C/CLI, .NET, ObjectARX, OpenDWG, O.D.A., Teigha ...

  • 3 mois après...
Posté(e)

Salut,

 

désolé de "polluer" le post, mais j'ai une petite question pour patrick_35 :

Je fais pas mal de pc3 pour PDFCreator, dans lesquels je défini une certaine dimension

pour la dimension personnalisée.

 

En mixant tes exemples avec d'autres fonctions, je voulais récupérer les dimensions personnalisées.

Et ce serai faisable si je pouvais appliquer à la mise en page ce format personnalisé.

 

Je ne sais plus si elle est de toi patrick_35 ou de Gile :

 

(defun liste_papiers(imp / lay lst old)
 	(vl-load-com)

 	(cond
	((/= (type imp) 'STR)
	)

	(t
	  	; on sauvegarde la mise en page en-cours
		(setq lay (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object)))
		      old (vla-get-configname lay)
		) ; setq

	  	; on applique la mise en page avec l'imprimante imp
		(or (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-configname (list lay imp)))
		    (vla-refreshplotdeviceinfo lay)
		    (setq lst (mapcar '(lambda (x) (vla-getlocalemedianame lay x)) (vlax-invoke lay 'getcanonicalmedianames)))
		)

	  	; on remet la mise en page d'origine
		(or (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-configname (list lay old)))
		    (vla-refreshplotdeviceinfo lay)
		)
	)
) ; cond

lst
) ; liste_papiers

 

Que j'ai modifiée ainsi

(defun liste_papiers_size(imp / lay lst old)
 	(vl-load-com)

 	(cond
	((/= (type imp) 'STR)
	)

	(t
	  	; on sauvegarde la mise en page en-cours
		(setq lay (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object)))
		      old (vla-get-configname lay)
		) ; setq

	  	; on applique la mise en page avec l'imprimante imp
		(or (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-configname (list lay imp)))
		    (vla-refreshplotdeviceinfo lay)
		    ;(vlax-dump-object lay T)
		    (setq lst (mapcar '(lambda (x)
					 	(vla-getpapersize lay 'hauteur 'longueur)
						(cons (vla-getlocalemedianame lay x) (cons hauteur longueur))
					)
				      
				(vl-remove 'nil (mapcar '(lambda (canon) (if (= (wcmatch (vla-getlocalemedianame lay canon) "*PostScript Custom Page Size*") t) canon nil)) (vlax-invoke lay 'getcanonicalmedianames)))))
		)

	  	; on remet la mise en page d'origine
		(or (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-configname (list lay old)))
		    (vla-refreshplotdeviceinfo lay)
		)
	)
) ; cond

lst
) ; liste_papiers_size

 

Et mon résultat est (un extrait) :

M040-PDFX64-N01-B01.pc3 PostScript Custom Page Size 297.0 . 420.0

 

M040-PDFX64-N01-B02.pc3 PostScript Custom Page Size 297.0 . 420.0

 

M040-PDFX64-N01-B03.pc3 PostScript Custom Page Size 297.0 . 420.0

 

M040-PDFX64-N01-B04.pc3 PostScript Custom Page Size 297.0 . 420.0

 

 

Le souci, c'est que liste_papiers met la mise en page du pc3, mais elle reste au format A3,

et de ce fait me renvoie 297.0 x 420.0.

 

S'il était possible d'appliquer le format personnalisé en plus, je pourrai controler la taille

personnalisée du pc3.

 

 

Tout ca, pour pallier au fait que certains dessinateurs change la taille des présentations

dans les dwg sans prévenir et que donc le PDF généré n'est pas bon.

 

Merci.

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut

 

A partir de ces lignes de codes

(or (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-configname (list lay imp)))
 (vla-refreshplotdeviceinfo lay)
 (setq lst (mapcar '(lambda (x) (vla-getlocalemedianame lay x)) (vlax-invoke lay 'getcanonicalmedianames)))
)

 

Quand tu utilises cette fonction

(vlax-invoke lay 'getcanonicalmedianames)

Tu as tous les formats papier disponible du traceur (pc3 ou autres). C'est une de ces valeurs qu'il faut utiliser pour changer le format papier.

Mais comme c'est quelque chose d'inutilisable pour le commun des mortels, la traduction se fait ainsi.

 

Exemple pour traduire le 1er format de papier

(vla-getlocalemedianame lay (nth 0 (vlax-invoke lay 'getcanonicalmedianames)))

 

Et donc, pour appliquer le 1er format papier au traceur.

(vla-put-CanonicalMediaName lay (nth 0 (vlax-invoke lay 'getcanonicalmedianames)))

 

ps : pour avoir la progress bar du tracé, il faut utiliser (vlax-invoke mon_traceur 'plottodevice) que (vla-plottodevice mon_traceur)

 

@+

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)

Toujours aussi savant ;)

 

Merci patrick_35.

 

J'obtiens bien mes dimensions personnalisées :

M040-PDFX64-N01-B01.pc3 PostScript Custom Page Size 910.0 1070.0

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

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é