(gile) Posté(e) le 26 juillet 2007 Posté(e) le 26 juillet 2007 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
(gile) Posté(e) le 30 juillet 2007 Auteur Posté(e) le 30 juillet 2007 La précédente version ne prenait pas en compte la valeur de la varible système VIEWTWIST.La vue retournée après une orbite 3d (orbitelibre3d depuis 2007) n'était donc pas juste.C'est désormais réparé. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 1 juillet 2008 Posté(e) le 1 juillet 2008 Bonsoir à toutes et tous, Heu, et comment peut-on tester ? Merci d'avance. (Je sais, j'me répéte,... :P ) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 1 juillet 2008 Auteur Posté(e) le 1 juillet 2008 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
lili2006 Posté(e) le 1 juillet 2008 Posté(e) le 1 juillet 2008 Re, Merci (gile). Aprés plusieurs test de zo, j'ai ce message en ligne (V2008 pleine) => Commande:ZOChoix des objets: 1 trouvé(s)Choix des objets:; erreur: no function definition: ZOOMOBJECTCommande:Commande:ZOChoix des objets: Spécifiez le coin opposé: 300 trouvé(s)Choix des objets:; erreur: no function definition: ZOOMOBJECTCommande: Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 1 juillet 2008 Auteur Posté(e) le 1 juillet 2008 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
lili2006 Posté(e) le 2 juillet 2008 Posté(e) le 2 juillet 2008 Bonjour à toutes et tous, Ok (gile), il faut s'y connaître un minimum pour comprendre l'intérêt d'une telle routine ! Merci pour ces explications. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Bruno_T Posté(e) le 17 juillet 2008 Posté(e) le 17 juillet 2008 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant