圆好解决:
利用entmod修改半径就行了!
至于矩形,就比较麻烦了!至少在r14下比较麻烦!矩形的中心->以中心为相对坐标原点建立用户坐标系->得到各顶点的极坐标->然后按比例缩放,得到新的顶点坐标->更新矩形!
这只是我的思路,并没有写过代码!
下午闲来无事,试着写了一下缩放矩形的:
程序没有对对象是否为矩形进行判断!凡是具有4个顶点的pl线都可缩放!

- (defun c:tt ()
- (princ "选择需要缩放的矩形:")
- (setq ss (ssget)
- sl (sslength ss)
- m 0
- )
- (setq sca (getreal "输入缩放比例<1>:"))
- (if (= nil sca)
- (setq sca 1)
- )
- (while (< m sl)
- (setq dd (entget (ssname ss m))
- l (length dd)
- n 0
- dl nil
- )
- (while (< n l)
- (setq d (nth n dd))
- (if (= 10 (car d))
- (setq dl (cons (cons n d) dl))
- )
- (setq n (1+ n))
- )
- (setq l (length dl)
- n 0
- xx 0
- yy 0
- )
- (if (= 4 l)
- (progn (while (< n l)
- (setq pt (nth n dl)
- x (caddr pt)
- y (cadddr pt)
- xx (+ x xx)
- yy (+ y yy)
- n (1+ n)
- )
- )
- (setq x (/ xx 4)
- y (/ yy 4)
- cen (list x y)
- n 0
- )
- (while (< n l)
- (setq pt (cddr (nth n dl))
- ang (angle cen pt)
- dis (distance cen pt)
- newdis (* dis sca)
- newpt (polar cen ang newdis)
- num (car (nth n dl))
- newd (cons 10 newpt)
- dd (subst newd (nth num dd) dd)
- n (1+ n)
- )
- )
- (entmod dd)
- )
- (princ "选择的对象不是矩形!")
- )
- (setq m (1+ m))
- )
- (princ)
- )
|