Jump to content

How to resize a rectangle


rlcad

Recommended Posts

One option: Use the grips to stretch the rectangle in the direction you want (to make it larger or smaller) and type the distance in at the command line. Do this for the length and the width.

 

You weren't thinking of trying to use the SCALE command were you?

Link to comment
Share on other sites

One option: Use the grips to stretch the rectangle in the direction you want (to make it larger or smaller) and type the distance in at the command line.

I have tried it, but it requires to input how much to stretch it from the original point (the Delta as it were, 7' and 3' respectively in the above example). I wanted to be able to input the total size: 17' and 23'.

This would be particularly useful when the rectangle's original dimensions are unknown, and only the desired end dimensions are known.

Link to comment
Share on other sites

Agree with rkmc, this is great for new rectangles. As for existing rectangles see marko_ribar's code:

 

(defun rectangle-p ( e f / nobulge-p dpar stp enp ptn k parpts index ptlst )

  (vl-load-com)

  (defun nobulge-p ( e i f )
     (apply 'and (mapcar '(lambda (x) (equal (vla-getbulge e x) 0.0 f)) i))
  )

  (setq dpar (/ (+ (abs (setq enp (vlax-curve-getendparam e))) (abs (setq stp (vlax-curve-getstartparam e)))) (setq ptn (cdr (assoc 90 (entget e))))))
  (setq k -1.0)
  (repeat ptn
     (setq parpts (append parpts (setq parpts (list (+ stp (* (setq k (1+ k)) dpar))))))
  )
  (setq k -1)
  (repeat ptn
     (setq index (append index (setq index (list (setq k (1+ k))))))
  )
  (setq ptlst (mapcar '(lambda (x) (vlax-curve-getpointatparam e x)) parpts))
  (and
     (eq ptn 4)
     (nobulge-p (if (eq (type e) 'ENAME) (vlax-ename->vla-object e) e) index f)
     (equal (distance (nth 0 ptlst) (nth 1 ptlst)) (distance (nth 2 ptlst) (nth 3 ptlst)) f)
     (equal (distance (nth 1 ptlst) (nth 2 ptlst)) (distance (nth 3 ptlst) (nth 0 ptlst)) f)
     (equal (distance (nth 0 ptlst) (nth 2 ptlst)) (distance (nth 1 ptlst) (nth 3 ptlst)) f)
  )
)

(defun c:recedit ( / alignucs2rec 2xucsprev ch d ddl ddw dn i l nl nw op opl opw p2 p3 p4 pdxf rec scfl scfw sdxf ss ssn vrec vrec10n w )

 (defun alignucs2rec ( rec / i vlst )

   (vl-load-com)

   (setq i -1)
   (repeat 4
     (setq vlst (cons (vlax-curve-getpointatparam rec (setq i (1+ i))) vlst))
   )
   (setq vlst (reverse vlst))
   (command "_.UCS" "_W")
   (command "_.UCS" "_3P" (car vlst) (cadr vlst) (cadddr vlst))
   (princ)
 )

 (defun 2xucsprev nil
   (command "_.UCS" "_P")
   (command "_.UCS" "_P")
   (princ)
 )

 (prompt "\nSelect rectangles you want to edit...")
 (setq ss (ssget "_:L" '((0 . "LWPOLYLINE") (90 . 4) (-4 . "<or") (70 . 1) (70 . 129) (-4 . "or>"))))
 (while (or (not ss) (vl-some '(lambda ( x ) (eq x nil)) (mapcar '(lambda ( x ) (rectangle-p x 1e-) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))))
   (prompt "\nEmpty sel.set or some of selected LWPOLYLINE(s) doesn't belong to rectangles... Try selecting rectangle(s) again...")
   (setq ss (ssget "_:L" '((0 . "LWPOLYLINE") (90 . 4) (-4 . "<or") (70 . 1) (70 . 129) (-4 . "or>"))))
   (if ss
     (progn
       (setq ssn (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
       (foreach e ssn
         (if (not (rectangle-p e 1e-)
           (ssdel e ss)
         )
       )
     )
   )
 )
 (initget "All Single")
 (setq ch (getkword "\nProcess all rectangles or one by one [All/Single] <All> : "))
 (if (null ch) (setq ch "All"))
 (cond
   ( (eq ch "All")
     (repeat (setq i (sslength ss))
       (setq rec (ssname ss (setq i (1- i))))
       (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
       (setq w (distance (car vrec) (cadr vrec)))
       (setq l (distance (cadr vrec) (caddr vrec)))
       (prompt "\nCurrent Width : ") (princ (rtos w 2 50)) (prompt "\tCurrent Length : ") (princ (rtos l 2 50))
     ) 
     (initget 1 "WL SC DE")
     (setq op (getkword "\nChoose option (New Width-Length/Scale Width-Length/Delta Width-Length) [WL/SC/DE] : "))
     (cond
       ( (eq op "WL")
         (initget 1 "+ -")
         (setq opw (getkword "\nSpecify positive or negative input for new Width [+/-] : "))
         (initget 5)
         (setq nw (getdist "\nPick or specify new Width value : "))
         (initget 1 "+ -")
         (setq opl (getkword "\nSpecify positive or negative input for new Length [+/-] : "))
         (initget 5)
         (setq nl (getdist "\nPick or specify new Length value : "))
         (repeat (setq i (sslength ss))
           (setq rec (ssname ss (setq i (1- i))))
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq nw ((eval (read opw)) 0.0 nw))
           (setq nl ((eval (read opl)) 0.0 nl))
           (setq p2 (polar (car vrec) (angle (car vrec) (cadr vrec)) nw))
           (setq p3 (polar (cadddr vrec) (angle (cadddr vrec) (caddr vrec)) nw))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) p2 p3 (cadddr vrec))))
           (setq pdxf (reverse (cdr (member (cons 10 (car vrec)) (reverse (entget rec))))))
           (setq sdxf (cdr (member (cons 10 (cadddr vrec)) (entget rec))))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq p3 (polar (cadr vrec) (angle (cadr vrec) (caddr vrec)) nl))
           (setq p4 (polar (car vrec) (angle (car vrec) (cadddr vrec)) nl))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) (cadr vrec) p3 p4)))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
         )
       )
       ( (eq op "SC")
         (initget 3)
         (setq scfw (getreal "\nSpecify positive or negative Width scale factor : "))
         (initget 3)
         (setq scfl (getreal "\nSpecify positive or negative Length scale factor : "))
         (repeat (setq i (sslength ss))
           (setq rec (ssname ss (setq i (1- i))))
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq d (distance (car vrec) (cadr vrec)))
           (setq dn (* d scfw))
           (setq p2 (polar (car vrec) (angle (car vrec) (cadr vrec)) dn))
           (setq p3 (polar (cadddr vrec) (angle (cadddr vrec) (caddr vrec)) dn))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) p2 p3 (cadddr vrec))))
           (setq pdxf (reverse (cdr (member (cons 10 (car vrec)) (reverse (entget rec))))))
           (setq sdxf (cdr (member (cons 10 (cadddr vrec)) (entget rec))))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq d (distance (cadr vrec) (caddr vrec)))
           (setq dn (* d scfl))
           (setq p3 (polar (cadr vrec) (angle (cadr vrec) (caddr vrec)) dn))
           (setq p4 (polar (car vrec) (angle (car vrec) (cadddr vrec)) dn))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) (cadr vrec) p3 p4)))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
         )
       )
       ( (eq op "DE")
         (initget 1 "+ -")
         (setq opw (getkword "\nSpecify positive or negative delta input for Width [+/-] : "))
         (initget 5)
         (setq ddw (getdist "\nPick or specify delta Width value - for zero delta type \"0\" : "))
         (initget 1 "+ -")
         (setq opl (getkword "\nSpecify positive or negative delta input for Length [+/-] : "))
         (initget 5)
         (setq ddl (getdist "\nPick or specify delta Length value - for zero delta type \"0\" : "))
         (repeat (setq i (sslength ss))
           (setq rec (ssname ss (setq i (1- i))))
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq d (distance (car vrec) (cadr vrec)))
           (setq dn ((eval (read opw)) d ddw))
           (setq p2 (polar (car vrec) (angle (car vrec) (cadr vrec)) dn))
           (setq p3 (polar (cadddr vrec) (angle (cadddr vrec) (caddr vrec)) dn))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) p2 p3 (cadddr vrec))))
           (setq pdxf (reverse (cdr (member (cons 10 (car vrec)) (reverse (entget rec))))))
           (setq sdxf (cdr (member (cons 10 (cadddr vrec)) (entget rec))))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq d (distance (cadr vrec) (caddr vrec)))
           (setq dn ((eval (read opl)) d ddl))
           (setq p3 (polar (cadr vrec) (angle (cadr vrec) (caddr vrec)) dn))
           (setq p4 (polar (car vrec) (angle (car vrec) (cadddr vrec)) dn))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) (cadr vrec) p3 p4)))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
         )
       )
     )
   )
   ( (eq ch "Single")
     (repeat (setq i (sslength ss))
       (setq rec (ssname ss (setq i (1- i))))
       (alignucs2rec rec)
       (redraw rec 3)
       (initget 1 "WL SC DE")
       (setq op (getkword "\nChoose option (New Width-Length/Scale Width-Length/Delta Width-Length) [WL/SC/DE] : "))
       (cond
         ( (eq op "WL")
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq w (distance (car vrec) (cadr vrec)))
           (setq l (distance (cadr vrec) (caddr vrec)))
           (prompt "\nCurrent Width : ") (princ (rtos w 2 50)) (prompt "\tCurrent Length : ") (princ (rtos l 2 50))
           (initget 1 "+ -")
           (setq opw (getkword "\nSpecify positive or negative input for new Width [+/-] : "))
           (initget 4)
           (setq nw (getdist (strcat "\nPick or specify new Width value <" (rtos w 2 50) "> : ")))
           (if (null nw) (setq nw w))
           (setq nw ((eval (read opw)) 0.0 nw))
           (setq p2 (polar (car vrec) (angle (car vrec) (cadr vrec)) nw))
           (setq p3 (polar (cadddr vrec) (angle (cadddr vrec) (caddr vrec)) nw))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) p2 p3 (cadddr vrec))))
           (setq pdxf (reverse (cdr (member (cons 10 (car vrec)) (reverse (entget rec))))))
           (setq sdxf (cdr (member (cons 10 (cadddr vrec)) (entget rec))))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
           (redraw rec 3)
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (initget 1 "+ -")
           (setq opl (getkword "\nSpecify positive or negative input for new Length [+/-] : "))
           (initget 4)
           (setq nl (getdist (strcat "\nPick or specify new Length value <" (rtos l 2 50) "> : ")))
           (if (null nl) (setq nl l))
           (setq nl ((eval (read opl)) 0.0 nl))
           (setq p3 (polar (cadr vrec) (angle (cadr vrec) (caddr vrec)) nl))
           (setq p4 (polar (car vrec) (angle (car vrec) (cadddr vrec)) nl))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) (cadr vrec) p3 p4)))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
         )
         ( (eq op "SC")
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq w (distance (car vrec) (cadr vrec)))
           (setq l (distance (cadr vrec) (caddr vrec)))
           (prompt "\nCurrent Width : ") (princ (rtos w 2 50)) (prompt "\tCurrent Length : ") (princ (rtos l 2 50))
           (initget 3)
           (setq scfw (getreal "\nSpecify positive or negative Width scale factor : "))
           (initget 3)
           (setq scfl (getreal "\nSpecify positive or negative Length scale factor : "))
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq d (distance (car vrec) (cadr vrec)))
           (setq dn (* d scfw))
           (setq p2 (polar (car vrec) (angle (car vrec) (cadr vrec)) dn))
           (setq p3 (polar (cadddr vrec) (angle (cadddr vrec) (caddr vrec)) dn))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) p2 p3 (cadddr vrec))))
           (setq pdxf (reverse (cdr (member (cons 10 (car vrec)) (reverse (entget rec))))))
           (setq sdxf (cdr (member (cons 10 (cadddr vrec)) (entget rec))))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
           (redraw rec 3)
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq d (distance (cadr vrec) (caddr vrec)))
           (setq dn (* d scfl))
           (setq p3 (polar (cadr vrec) (angle (cadr vrec) (caddr vrec)) dn))
           (setq p4 (polar (car vrec) (angle (car vrec) (cadddr vrec)) dn))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) (cadr vrec) p3 p4)))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
         )
         ( (eq op "DE")
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq w (distance (car vrec) (cadr vrec)))
           (setq l (distance (cadr vrec) (caddr vrec)))
           (prompt "\nCurrent Width : ") (princ (rtos w 2 50)) (prompt "\tCurrent Length : ") (princ (rtos l 2 50))
           (initget 1 "+ -")
           (setq opw (getkword "\nSpecify positive or negative delta input for Width [+/-] : "))
           (initget 5)
           (setq ddw (getdist "\nPick or specify delta Width value - for zero delta type \"0\" : "))
           (initget 1 "+ -")
           (setq opl (getkword "\nSpecify positive or negative delta input for Length [+/-] : "))
           (initget 5)
           (setq ddl (getdist "\nPick or specify delta Length value - for zero delta type \"0\" : "))
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq d (distance (car vrec) (cadr vrec)))
           (setq dn ((eval (read opw)) d ddw))
           (setq p2 (polar (car vrec) (angle (car vrec) (cadr vrec)) dn))
           (setq p3 (polar (cadddr vrec) (angle (cadddr vrec) (caddr vrec)) dn))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) p2 p3 (cadddr vrec))))
           (setq pdxf (reverse (cdr (member (cons 10 (car vrec)) (reverse (entget rec))))))
           (setq sdxf (cdr (member (cons 10 (cadddr vrec)) (entget rec))))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
           (redraw rec 3)
           (setq vrec (mapcar 'cdr (acet-list-m-assoc 10 (entget rec))))
           (setq d (distance (cadr vrec) (caddr vrec)))
           (setq dn ((eval (read opl)) d ddl))
           (setq p3 (polar (cadr vrec) (angle (cadr vrec) (caddr vrec)) dn))
           (setq p4 (polar (car vrec) (angle (car vrec) (cadddr vrec)) dn))
           (setq vrec10n (mapcar '(lambda ( x ) (cons 10 x)) (list (car vrec) (cadr vrec) p3 p4)))
           (entupd (cdr (assoc -1 (entmod (append pdxf vrec10n sdxf)))))
         )
       )
       (redraw rec 4)
       (2xucsprev)
     )
   )
 )
 (princ)
)

In this case I drew a rectangle the same size you specified. I ran C:RECEDIT. Typed 'S' for single rectangle. Then typed 'WL' for new width length. Next I typed '+' to specify positive input. Enter your new Width. Afterwards, type '+' again then Enter your new Length. Hope this helps.

 

Of course you can explore the power of the rest of the program, and tweak it to your needs. Such as removing the option to select single or all so that it just selects single. I just wanted to explain how I tested it on your problem. Take care.

Link to comment
Share on other sites

I'm with Eldon on this one. It's a rectangle. I would be much faster drawing it to size than adjusting it using constraints or any other method for that matter.

Link to comment
Share on other sites

I agree @RobDraw and @Eldon.... but if you've never seen AutoCAD (or fill in the blank _____CAD) - you might expect this to be built in. Like you might expect a polygon to have properties to easily change from a six sided one to an eight sided one...

 

But in that case too... redraw....

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...