Aller au contenu

ZoomObject


(gile)

Messages recommandés

Visual LISP ne fournit pas de méthode correspondant à la commande ZOOM option Objet.

Voici donc une routine Visual LISP pour fair un zoom sur une liste d'objets.

 

Edit : prise en compte la valeur de la variable VIEWTWIST.

 

;; ZoomObject Effectue un zoom sur les objets contenus dans la liste
;;
;; Argument
;; objlst : une liste de vla-object
;;
;; Variables
;; dir : normale du plan de la vue courante
;; ang : angle de la vue courante
;; 3x3 : matrice de transformation du SCG vers la vue courante (dimension 3)
;; 4x4 : matrice de transformation du SCG vers la vue courante (dimension 4)
;; ptlst : liste des points minimum et maximum des bounding-boxes des objets sélectionnés (SCG)

(defun ZoomObject (objlst / dir ang 3x3 4x4 ptlst)
 (vl-load-com)
 (setq	dir (mapcar '-
	    (trans (getvar "viewdir") 1 0)
	    (trans '(0 0 0) 1 0)
    )
ang (- (getvar "viewtwist"))
3x3 (mxm (mapcar '(lambda (x) (trans x 0 dir))
		 '((1 0 0) (0 1 0) (0 0 1))
	 )
	 (list (list (cos ang) (- (sin ang)) 0)
	       (list (sin ang) (cos ang) 0)
	       '(0 0 1)
	 )
    )
4x4 (append
      (mapcar
	'(lambda (v o)
	   (append v (list o))
	 )
	3x3
	'(0 0 0)
      )
      (list '(0 0 0 1))
    )
 )
 (foreach obj objlst
   (vla-TransformBy obj (vlax-tmatrix (trp 4x4)))
   (vla-getBoundingBox obj 'minpt 'maxpt)
   (vla-TransformBy obj (vlax-tmatrix 4x4))
   (setq ptlst	(cons (vlax-safearray->list minpt)
	      (cons (vlax-safearray->list maxpt) ptlst)
	)
   )
 )
 (vla-ZoomWindow
   (vlax-get-acad-object)
   (vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'min ptlst))))
   (vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'max ptlst))))
 )
)

;; transpose une matrice Doug Wilson

(defun trp (m)
 (apply 'mapcar (cons 'list m))
)

;; Apply a transformation matrix to a vector by Vladimir Nesterovsky

(defun mxv (m v)
 (mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
)

;; Multiply two matrices by Vladimir Nesterovsky

(defun mxm (m q)
 (mapcar '(lambda (r) (mxv (trp q) r)) m)
)

 

Et une fonction d'appel (pour tester) :

 

(defun c:zo (/ lst)
 (vl-load-com)
 (and
   (ssget)
   (ZoomObject
     (vlax-for	o (vla-get-ActiveSelectionSet
	    (vla-get-ActiveDocument (vlax-get-acad-object))
	  )
(setq lst (cons o lst))
     )
   )
 )
 (princ)
) 

 

[Edité le 30/7/2007 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

  • 11 mois après...

Salut

 

ZoomObject est une sous-routine qui définit une fonction à utiliser dans d'autre LISP (voir les commentaires en en-tête du code).

 

Pour tester il y a la seconde routine zo qui appelle ZoomObject : taper zo puis sélectionner les objets

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Merci (gile).

 

Aprés plusieurs test de zo, j'ai ce message en ligne (V2008 pleine) =>

 

Commande:

ZO

Choix des objets: 1 trouvé(s)

Choix des objets:

; erreur: no function definition: ZOOMOBJECT

Commande:

Commande:

ZO

Choix des objets: Spécifiez le coin opposé: 300 trouvé(s)

Choix des objets:

; erreur: no function definition: ZOOMOBJECT

Commande:

Civil 3D 2024 - COVADIS_18.2

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Rien à voir avec la version.

Le message dit qu'il n'y a pas de définition de la fonction ZoomObject.

 

Comme dit plus haut cette fonction est appelée par la commande zo il faut donc que ZoomObject soit chargée dans le dessin pour que zo fonctionne.

 

la commande zo est juste donnée ici à titre d'exemple pour tester la routine ZoomObject qui elle peut intéresser des lispeurs pour être intégrée dans des programmes.

Comme dit dans le premier message, j'ai écrit cette fonction parceque l'équivalent de l'option "Objet" de la commande Zoom n'existe pas en Visual LISP.

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

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

belle fonction,

 

depuis longtemps, avant l'apparition de l'option objet de la commande zoom, il y a acet-ss-zoom-extents qui fait partie des express tools, elle n'était pas documentée, pas même présente dans google, mais je n'ai pas vérifié depuis longtemps.

 

exemple d'utilisation :

(acet-ss-zoom-extents (ssget))

 

cependant après quelques tests, la tienne me semble correcte en particulier avec un scu non coplanaire à la vue alors qu'acet-ss-zoom-extents est approximative dans ce cas.

 

Bruno Toniutti

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é