Jump to content

Zoom to selected objects


FazBear

Recommended Posts

Hi All

 

what is the best way of zooming to a group of selected objects?

 

i have tried (command "zoom" "o") as i would type it directly into the command line but for some reason in the lisp it doesnt work.

 

Anyone any ideas?

Link to comment
Share on other sites

Its part of a lisp for setting up views on a spool drawing containing 11 viewports, i need it to zoom to the spooled objects (CadDuct) that i have selected.

Link to comment
Share on other sites

Maybe this - (supply with selection set)

 

[i][color=#990099];; Zoom Object[/color][/i]
[i][color=#990099];; by Lee McDonnell  08.05.2009[/color][/i]

[i][color=#990099];; ARGS:[/color][/i]
[i][color=#990099];; ss  ~  Selection Set[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] ZmObj  [b][color=RED]([/color][/b]ss [b][color=BLUE]/[/color][/b] Minp Maxp lst[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] Obj [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b]
                [b][color=RED]([/color][/b][b][color=BLUE]vl-remove-if[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]listp[/color][/b]
                  [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b]
                    [b][color=RED]([/color][/b][b][color=BLUE]ssnamex[/color][/b] ss[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]vla-getBoundingBox[/color][/b] Obj [b][color=DARKRED]'[/color][/b]Minp [b][color=DARKRED]'[/color][/b]Maxp[b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lst [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]vlax-safearray->list[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] Minp Maxp[b][color=RED])[/color][/b][b][color=RED])[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]vla-ZoomWindow[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]vlax-3D-point[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]min[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]min[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]0.0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]vlax-3D-point[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]max[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]max[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]0.0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

Link to comment
Share on other sites

lee, another way to get max and min of point list is through maxminpnt

 

(defun ZmObj  (ss / Minp Maxp lst)
 (vl-load-com)
 (foreach Obj (mapcar 'vlax-ename->vla-object
                (vl-remove-if 'listp
                  (mapcar 'cadr
                    (ssnamex ss))))
   (vla-getBoundingBox Obj 'Minp 'Maxp)
   (setq lst (cons
               (mapcar 'vlax-safearray->list
                 (list Minp Maxp)) lst)))
 (vla-ZoomWindow
   (vlax-get-acad-object)
     (vlax-3D-point
       (car (maxminpnt (mapcar 'car lst))))
       (vlax-3D-point
         (cadr (maxminpnt (mapcar 'cadr lst))))))

Link to comment
Share on other sites

i cant answer why it is not recognized by vlide, just found it also through experiment.

 

haha - how on earth did you randomly stumble upon that one... :P

Link to comment
Share on other sites

Maybe this - (supply with selection set)

 

[i][color=#990099];; Zoom Object[/color][/i]
[i][color=#990099];; by Lee McDonnell  08.05.2009[/color][/i]

[i][color=#990099];; ARGS:[/color][/i]
[i][color=#990099];; ss  ~  Selection Set[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] ZmObj  [b][color=RED]([/color][/b]ss [b][color=BLUE]/[/color][/b] Minp Maxp lst[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] Obj [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b]
                [b][color=RED]([/color][/b][b][color=BLUE]vl-remove-if[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]listp[/color][/b]
                  [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b]
                    [b][color=RED]([/color][/b][b][color=BLUE]ssnamex[/color][/b] ss[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]vla-getBoundingBox[/color][/b] Obj [b][color=DARKRED]'[/color][/b]Minp [b][color=DARKRED]'[/color][/b]Maxp[b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lst [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]vlax-safearray->list[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] Minp Maxp[b][color=RED])[/color][/b][b][color=RED])[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]vla-ZoomWindow[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]vlax-3D-point[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]min[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]min[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]0.0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]vlax-3D-point[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]max[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]max[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]0.0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

 

Lee you give away all the answers ... I was baiting the hook and you cooked the fish. maybe it's just a Swamp thing. :unsure:

 

*edit No Offense meant towards you Lee....I just belong to another CAD community that leans much more towards teaching than handing over the "whole enchilada".

Link to comment
Share on other sites

Lee you give away all the answers ... I was baiting the hook and you cooked the fish. maybe it's just a Swamp thing. :unsure:

 

*edit No Offense meant towards you Lee....I just belong to another CAD community that leans much more towards teaching than handing over the "whole enchilada".

 

 

that's exactly how i learned lisp, my first lisp question/request was not answered but i was encouraged/challenged to learn by hot tip harry. Learning/teaching in forums is very fun but i learned to practice 2 things also and those are giving respect also not only to the OP but also to our fellow forum members who has given his thoughts/answers already on a particular thread by not answering unless not solved. Second is giving due credit to original authors by not posting there works even they had their names on headers unless we ask their permission. I was zapped before for doing that when i was still learning and now i am still learning...:)

Link to comment
Share on other sites

Lee you give away all the answers ... I was baiting the hook and you cooked the fish. maybe it's just a Swamp thing. :unsure:

 

*edit No Offense meant towards you Lee....I just belong to another CAD community that leans much more towards teaching than handing over the "whole enchilada".

 

I am also a member of the Swamp :) (haven't been there long though...)

 

No Offence taken by your comments Ron (its takes a lot more than that to offend me... :P )

 

I suppose I should try to help the user to the solution - but I like to learn also by seeing if I can create the code required. And hence, when I have made the code, I can't resist the urge to post it, when I have the answer to the OP's problem sitting in front of me.

Link to comment
Share on other sites

I am also a member of the Swamp :) (haven't been there long though...)

 

No Offence taken by your comments Ron (its takes a lot more than that to offend me... :P )

 

I suppose I should try to help the user to the solution - but I like to learn also by seeing if I can create the code required. And hence, when I have made the code, I can't resist the urge to post it, when I have the answer to the OP's problem sitting in front of me.

 

Lee,

 

I completely understand the urge to just give the answer....it's easier than taking the time to teach:P. A lot of times the OP does not even want to learn they just want an answer....so carry on, you help many people here and it is appreciated.

 

Ron

Link to comment
Share on other sites

Lee,

 

I completely understand the urge to just give the answer....it's easier than taking the time to teach:P. A lot of times the OP does not even want to learn they just want an answer....so carry on, you help many people here and it is appreciated.

 

Ron

 

 

Thanks Ron,

 

I shall keep your thoughts in mind :)

 

Lee

Link to comment
Share on other sites

  • 12 years later...
On 5/8/2009 at 8:46 PM, Lee Mac said:

Maybe this - (supply with selection set)

 



[i][color=#990099];; Zoom Object[/color][/i]
[i][color=#990099];; by Lee McDonnell  08.05.2009[/color][/i]

[i][color=#990099];; ARGS:[/color][/i]
[i][color=#990099];; ss  ~  Selection Set[/color][/i]

[b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] ZmObj  [b][color=RED]([/color][/b]ss [b][color=BLUE]/[/color][/b] Minp Maxp lst[b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]foreach[/color][/b] Obj [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b]
                [b][color=RED]([/color][/b][b][color=BLUE]vl-remove-if[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]listp[/color][/b]
                  [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b]
                    [b][color=RED]([/color][/b][b][color=BLUE]ssnamex[/color][/b] ss[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]vla-getBoundingBox[/color][/b] Obj [b][color=DARKRED]'[/color][/b]Minp [b][color=DARKRED]'[/color][/b]Maxp[b][color=RED])[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lst [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]vlax-safearray->list[/color][/b]
                 [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] Minp Maxp[b][color=RED])[/color][/b][b][color=RED])[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
 [b][color=RED]([/color][/b][b][color=BLUE]vla-ZoomWindow[/color][/b]
   [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b]
     [b][color=RED]([/color][/b][b][color=BLUE]vlax-3D-point[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]min[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]min[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]0.0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
       [b][color=RED]([/color][/b][b][color=BLUE]vlax-3D-point[/color][/b]
         [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]max[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]car[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
           [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]max[/color][/b]
             [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b]
               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cadr[/color][/b] lst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]0.0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]

Please combine this for me


(defun c:moveyourblocks  ( / ass x x1 y1 )
(vl-load-com)    
(setq x1 0.0) (setq y1 0.0)
(mapcar '(lambda (x) (setvar 'ctab x) (if (setq ass (ssget "_x" '((0 . "INSERT") (2 . "border-(900x700)"))))
(Progn  (command "_.cutclip" ass "" )
        (command "_tilemode" "1")
        (command "_.pasteclip" "_Non" (list (setq x1 (+ x1 900)) (setq y1 (+ y1 800)) 0.0))
        (command "_.zoom" "_object" (sectionset) ""))
(princ "\n--> No Blocks found on the name - border-(900x700)."))) (layoutlist)) (princ))


(defun zmobj  (ss / minp maxp lst)
(vl-load-com)
(foreach obj  (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(vla-getboundingbox obj 'minp 'maxp)
(setq lst (cons (mapcar 'vlax-safearray->list (list minp maxp)) lst)))
(vla-zoomwindow (vlax-get-acad-object) (vlax-3d-point (list (apply 'min (mapcar 'car (mapcar 'car lst)))
                                           (apply 'min (mapcar 'cadr (mapcar 'car lst)))  0.0))
                      (vlax-3d-point (list (apply 'max (mapcar 'car (mapcar 'cadr lst)))
                                           (apply 'max (mapcar 'cadr (mapcar 'cadr lst))) 0.0))))

 

 

Link to comment
Share on other sites

It is a color code for the route to display on the web correct?, I really don't know how it works . . .

for me always it shows all black, not showing any color coding

Link to comment
Share on other sites

  • 2 years later...

Once I change the UCS to a selected object and reset the plan to current UCS, the code no longer zooms accurately to selected objects.

Can anyone fix this to account for different UCS and plan rotations please?

 

;;; https://www.cadtutor.net/forum/topic/10334-zoom-to-selected-objects/

;;; Zoom Object[/i]
;;; by Lee McDonnell  08.05.2009[/i]

;;; ARGS:[/i]
;;; ss  ~  Selection Set[/i]

(vl-load-com)
(defun ZmObj  (ss / Minp Maxp lst)
  (foreach Obj  (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
    (vla-getBoundingBox Obj 'Minp 'Maxp)
    (setq lst (cons (mapcar 'vlax-safearray->list (list Minp Maxp)) lst)))
  (vla-ZoomWindow (vlax-get-acad-object)
    (vlax-3D-point (list (apply 'min (mapcar 'car (mapcar 'car lst))) (apply 'min (mapcar 'cadr (mapcar 'car lst)))  0.0))
    (vlax-3D-point (list (apply 'max (mapcar 'car (mapcar 'cadr lst)))(apply 'max (mapcar 'cadr (mapcar 'cadr lst))) 0.0))
  )
)

(defun c:zz () (ZmObj (ssget)) (princ))
(princ "\nType zz to select & zoom to object(s)")

 

Link to comment
Share on other sites

That's some old code...

 

To account for variation in the UCS & View, you would need to calculate a bounding box relative to the current UCS - consider the following example:

(defun c:zz ( / box sel )
    (cond
        (   (not (setq sel (ssget))))
        (   (not (setq box (LM:ucsssboundingbox sel (vlax-tmatrix (LM:transmatrix 1 0)))))
            (princ "\nUnable to obtain UCS selection set bounding box.")
        )
        (   (vla-zoomwindow (vlax-get-acad-object)
                (vlax-3D-point (trans (car  box) 1 0))
                (vlax-3D-point (trans (cadr box) 1 0))
            )
        )
    )
    (princ)
)

;; UCS Selection Set Bounding Box  -  Lee Mac
;; Returns a list of the lower-left & upper-right UCS coordinates of a rectangular frame bounding all
;; objects in a supplied selection set following transformation by the supplied transformation matrix
;; sel - [sel] Selection set for which to return bounding box
;; mat - [var] Variant representing a 4x4 transformation matrix

(defun LM:ucsssboundingbox ( sel mat / box idx ls1 ls2 obj )
    (repeat (setq idx (sslength sel))
        (if (setq idx (1- idx)
                  obj (vlax-ename->vla-object (ssname sel idx))
                  box (LM:ucsboundingbox obj mat)
            )
            (setq ls1 (cons (car  box) ls1)
                  ls2 (cons (cadr box) ls2)
            )
        )
    )
    (if (and ls1 ls2)
        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list ls1 ls2))
    )
)

;; UCS Bounding Box  -  Lee Mac
;; Returns a list of the lower-left & upper-right UCS coordinates of a rectangular frame
;; bounding the supplied object following transformation by the supplied transformation matrix
;; obj - [vla] VLA-Object for which to return bounding box
;; mat - [var] Variant representing a 4x4 transformation matrix

(defun LM:ucsboundingbox ( obj mat / cpy llp rtn urp )
    (if (and (vlax-write-enabled-p obj)
             (vlax-method-applicable-p obj 'getboundingbox)
             (setq cpy (LM:catchapply 'vla-copy (list obj)))
             (LM:catchapply 'vla-transformby    (list cpy mat))
             (LM:catchapply 'vla-getboundingbox (list cpy 'llp 'urp))
        )
        (setq rtn (list (vlax-safearray->list llp) (vlax-safearray->list urp)))
    )
    (if (and (= 'vla-object (type cpy)) (vlax-write-enabled-p cpy))
        (vla-delete cpy)
    )
    rtn
)

;; Catch Apply  -  Lee Mac
;; Applies a function to a list of parameters and catches any exceptions.
 
(defun LM:catchapply ( fnc prm / rtn )
    (if (not (vl-catch-all-error-p (setq rtn (vl-catch-all-apply fnc prm))))
        (cond ( rtn ) ( t ))
    )
)

;; Trans Matrix  -  Lee Mac
;; Returns a 4x4 matrix encoding a transformation from one coordinate system to another

(defun LM:transmatrix ( src dst )
    (append
        (mapcar
           '(lambda ( v o )
                (append (trans v src dst t) (list o))
            )
           '(
                (1.0 0.0 0.0)
                (0.0 1.0 0.0)
                (0.0 0.0 1.0)
            )
            (trans '(0.0 0.0 0.0) dst src)
        )
       '((0.0 0.0 0.0 1.0))
    )
)

(vl-load-com) (princ)

 

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...