Aller au contenu

Rectangle sur dimensions papier


fabcad

Messages recommandés

Merci pour l'information,

 

Ce n'est pas pour créer une fenêtre flottante en espace papier, j'utilise fmult puis zone graphique pour çà.

 

Je souhaiterais dessiner un rectangle autour de cette fenêtre en prenant compte les 4 marges.

 

Exemple pour un A4 :

201.78 : largeur fenêtre flottante

280.60 : hauteur fenêtre flottante

 

209.973 : largeur réelle papier

296.926 : hauteur réelle papier

 

Prendre ces dernières mesures afin de caler la polyligne rectangulaire.

 

Fabrice

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Un petit truc en Visual LISP.

La commande PLOTREC appelle la fonction gc:PlotAreaToRectangle pour dessiner un rectangle correspondant à la zone d'impression dans toutes les présentations.

gc:PlotAreaToRectangle tient compte des paramètres choisis dans le gestionnaire de mise en page :

- marges en fonction du traceur

- orientation du dessin (portrait/paysage)

- échelle du tracé (mm/unités)

- origine du tracé différente de 0,0

 

;; gc:PlotAreaToRectangle
;; Dessine un rectangle correspondant à la zone imprimable dans la présentation
;;
;; Argument
;; layout : la présentation (vla-object)

(defun gc:PlotAreaToRectangle
      (layout / width height numerator denominator lowerLeft upperRight origin scale x y w h pts)
 (vla-GetPaperSize layout 'width 'height) ; taille du papier
 (vla-GetCustomScale layout 'numerator 'denominator) ; échelle (mm/unités)
 (vla-GetPaperMargins layout 'lowerLeft 'upperRight) ; marges
 (setq	lowerLeft  (vlax-safearray->list lowerLeft)
upperRight (vlax-safearray->list upperRight)
origin	   (vlax-get layout 'PlotOrigin) ; origine du tracé
scale	   (/ denominator numerator)
x	   (* (- (car origin)) scale)
y	   (* (- (cadr origin)) scale)
w	   (* (- width (car lowerLeft) (car upperRight)) scale)
h	   (* (- height (cadr lowerLeft) (cadr upperRight)) scale)
pts	   (if (zerop (rem (vla-get-PlotRotation layout) 2)) ; rotation (portrait/paysage)
	     (list x y (+ x w) y (+ x w) (+ y h) x (+ y h))
	     (list y x (+ y h) x (+ y h) (+ x w) y (+ x w))
	   )
 )
 (vla-put-Closed
   (vlax-invoke (vla-get-Block layout) 'addLightWeightPolyline pts)
   :vlax-true
 )
)


;; Commande PLOTREC
;; Dessine la zone imprimable dans toutes les présentations.
(defun c:plotrec ()
 (vl-load-com)
 (vlax-for layout (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))
   (if	(/= (vla-get-Name layout) "Model")
     (gc:PlotAreaToRectangle layout)
   )
 )
 (princ)
)

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

@Gile

 

il manque une parenthèse pour fermer le setq pts :

 

 ;; gc:PlotAreaToRectangle

;; Dessine un rectangle correspondant à la zone imprimable dans la présentation

;;

;; Argument

;; layout : la présentation (vla-object)



(defun gc:PlotAreaToRectangle

      (layout / width height numerator denominator lowerLeft upperRight origin scale x y w h pts)

 (vla-GetPaperSize layout 'width 'height) ; taille du papier

 (vla-GetCustomScale layout 'numerator 'denominator) ; échelle (mm/unités)

 (vla-GetPaperMargins layout 'lowerLeft 'upperRight) ; marges

 (setq	lowerLeft  (vlax-safearray->list lowerLeft)

upperRight (vlax-safearray->list upperRight)

origin	   (vlax-get layout 'PlotOrigin) ; origine du tracé

scale	   (/ denominator numerator)

x	   (- (car origin))

y	   (- (cadr origin))

w	   (* (- width (car lowerLeft) (car upperRight)) scale)

h	   (* (- height (cadr lowerLeft) (cadr upperRight)) scale)

pts	   (if (zerop (rem (vla-get-PlotRotation layout) 2)) ; rotation (portrait/paysage)

	     (list x y (+ x w) y (+ x w) (+ y h) x (+ y h))

	     (list x y (+ x h) y (+ x h) (+ y w) x (+ y w))

 ))

 (vla-put-Closed

   (vlax-invoke (vla-get-Block layout) 'addLightWeightPolyline pts)

   :vlax-true

 )

)





;; Commande PLOTREC

;; Dessine la zone imprimable dans toutes les présentations.

(defun c:plotrec ()

 (vl-load-com)

 (vlax-for layout (vla-get-Layouts (vla-get-ActiveDocument (vlax-get-acad-object)))

   (if	(/= (vla-get-Name layout) "Model")

     (gc:PlotAreaToRectangle layout)

   )

 )

 (princ)

)

 

 

 

 

[Edité le 30/6/2011 par neptune38]

Raph.

Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !

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é