´Resizing all viewports lisp stuck

´Resizing all viewports lisp stuck

Anonymous
Not applicable
1,315 Views
4 Replies
Message 1 of 5

´Resizing all viewports lisp stuck

Anonymous
Not applicable

Hello,

 

I am stuck with this. My goal is to resize all viewports with the same center. You set length and width and the work will be automatic...

 

I do not know how to code the assignment of the length and width to each viewport. 

Although, i am thinking if it would be easier to copy the size of the selected viewport to all.

any suggestion?

(Defun c:1 ( / factor1 factor2 vps)
      (initget 1)
      (setq factor1 (getreal "\nEnter length: "))
      (setq factor2 (getreal "\nEnter width: "))
       (setq vps (ssget "_X" '((0 . "Viewport") (-4 . "/=") (69 . 1))))
       (repeat (sslength vps)
                           (setq e (vlax-ename->vla-object (ssname vps 0)))
                           (setq cscale (vla-get-CustomScale e))
      (vlax-invoke e (vlax-get e 'Center) factor1)
      (vlax-invoke e (vlax-get e 'Center) factor2)
      (vla-put-CustomScale e cscale)
                           (ssdel (ssname vps 0) vps)
                           )
      (princ)
      )

 

0 Likes
Accepted solutions (2)
1,316 Views
4 Replies
Replies (4)
Message 2 of 5

marko_ribar
Advisor
Advisor
Accepted solution

Not sure, but this worked for me...

(defun c:1 ( / factor1 factor2 vps i e cscale )

  (vl-load-com)

  (initget 7)
  (setq factor1 (getdist "\nPick or enter height : "))
  (initget 7)
  (setq factor2 (getdist "\nPick or enter width : "))
  (setq vps (ssget "_X" '((0 . "VIEWPORT") (-4 . "/=") (69 . 1))))
  (repeat (setq i (sslength vps))
    (setq e (vlax-ename->vla-object (ssname vps (setq i (1- i)))))
    (setq cscale (vla-get-customscale e))
    (vla-put-height e factor1)
    (vla-put-width e factor2)
    (vla-put-customscale e cscale)
  )
  (princ)
)

HTH., M.R.

Marko Ribar, d.i.a. (graduated engineer of architecture)
0 Likes
Message 3 of 5

Anonymous
Not applicable

Hello,

 

It worked for me too! thanks a lot.

 

I has a low level at lisp, but i'm trying other code. Now you select one viewport, it gets height, width and center and then, it applies to all viewports. but it doesnt work...

(defun c:1 ( / factor1 factor2 factor3 vps i e cscale )

  (vl-load-com)
	(setq tw(entsel" Select a Viewport:"))
	(setq factor1 (vla-get-height tw))
	(setq factor2 (vla-get-width tw))
	(setq factor3 (vla-get-center tw))
  (setq vps (ssget "_X" '((0 . "VIEWPORT") (-4 . "/=") (69 . 1))))
  (repeat (setq i (sslength vps))
    (setq e (vlax-ename->vla-object (ssname vps (setq i (1- i)))))
    (setq cscale (vla-get-customscale e))
    (vla-put-height e factor1)
    (vla-put-width e factor2)
    (vla-put-center e (vlax-3D-point factor3))
    (vla-put-customscale e cscale)
  )
  (princ)
)

0 Likes
Message 4 of 5

marko_ribar
Advisor
Advisor
Accepted solution
...
(setq tw (vlax-ename->vla-object (car (entsel "\nSelect a Viewport..."))))
...

HTH., M.R.

Marko Ribar, d.i.a. (graduated engineer of architecture)
0 Likes
Message 5 of 5

Anonymous
Not applicable

I had to make another change.. and now it works perfectly... thanks!!

(defun c:ret2 ( / factor1 factor2 factor3 vps i e cscale )

  (vl-load-com)
	(setq tw (vlax-ename->vla-object (car (entsel" Select a Viewport:"))))
	(setq factor1 (vla-get-height tw))
	(setq factor2 (vla-get-width tw))
	(setq factor3 (vla-get-center tw))
  (setq vps (ssget "_X" '((0 . "VIEWPORT") (-4 . "/=") (69 . 1))))
  (repeat (setq i (sslength vps))
    (setq e (vlax-ename->vla-object (ssname vps (setq i (1- i)))))
    (setq cscale (vla-get-customscale e))
    (vla-put-height e factor1)
    (vla-put-width e factor2)
    (vla-put-center e factor3)
    (vla-put-customscale e cscale)
  )
  (princ)
)
0 Likes