马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一小段代码的妙用:虽然道理很简单。
本来我用它来快速重画当前窗口实体(我图有地形图,regen太慢了)
后来发现两个意外的功能
1.可以切换重叠的两个实体 : 比按住CTRL好点
2.做透明命令用,在窗口局部放大时可以刷新窗口,REGEN 不可以作为透明命令用
注意: 当前窗口实体很多或者有大的外部引用和块时慎用。
代码如下

- [FONT=courier new]
- (defun c:rr ( / p h w p1 p2 s num ename alpha y x)
- (princ "快速重画窗口图像……")
- ;(princ "\n请选择请选择重画内容: ")
- ;;获取屏幕范围坐标
- (setq p (getvar "screensize"))
- (setq h (/ (getvar "viewsize") 2))
- (setq w (* h (/ (nth 0 p) (nth 1 p) )))
- (setq p (getvar "viewctr"))
- ;;;求坐标偏移
- (setq alpha (- 0 (ucsorview)))
- (setq x (+ (* w (cos alpha)) ( * h (sin alpha))) )
- (setq y (- (* h (cos alpha)) ( * w (sin alpha))))
- ;;;
- (setq p1 (list (+ (nth 0 p) x) (- (nth 1 p) y)))
- (setq p2 (list (- (nth 0 p) x) (+ (nth 1 p) y)))
- (setq s (ssget "_c" p1 p2 ))
- (setq num (sslength s))
- (setq n 0)
- (repeat num
- (setq ename (ssname s n))
- (entupd ename )
- (setq n (+ 1 n))
- )
- (setq s nil)
- (princ)
- )
- ;
- ;end}
- ;--------------------------------
- ;{start
- ;
- ;有选择的局部重画
- (defun c:rw ( / n s ename num )
- (princ "局部重画")
- (princ "\n请选择请选择重画内容: ")
- (setq s (ssget ))
- (setq num (sslength s))
- (setq n 0)
- (repeat num
- (setq ename (ssname s n))
- (entupd ename )
- (setq n (+ 1 n))
- )
- (princ)
- )
- ;
- ;end}
- ;--------------------------------
- (defun ucsorview ( / lpoint2 tw)
- (if (= 1 (getvar "worlducs")) (getvar "viewtwist") 0 )
- )[/FONT]
|