- 积分
- 494
- 明经币
- 个
- 注册时间
- 2012-9-3
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2013-9-18 19:31:07
|
显示全部楼层
(while ss1 ;只要高程点选择集存在
(repeat (sslength ss1)
(setq data1 (entget (ssname ss1 n) '("*")));获取主对象(高程点块)的群码表
(setq data2 (entget (entnext (ssname ss1 n)) '("*")));获取子对象(高程注记值)的群码表
(setq l (nth 0 (cadr (textbox data2)))) ;根据注记值获取字长
(setq h (cdr (assoc 40 data2))) ;根据注记值获取字高
(setq blk_pt (cdr (assoc 10 data1))) ;高程点块的插入坐标
(command "zoom" "c" blk_pt 30 )
(setq text_pt1 (cdr (assoc 10 data2))) ;高程文本值的左下角插入点坐标
(setq text_pt2 (list (+ (nth 0 text_pt1) l) (+ (nth 1 text_pt1) h)));高程文本值的右上角点坐标
(setq s1 (ssget "c" text_pt1 text_pt2 '((-4 . "<not")(8 . "GCD")(-4 . "not>"))));以文本框框选除GCD之外的选择集
(if (/= s1 nil) ;意即框内仍有其它选择物,也就是高程点压线了
(progn
;以下是一个依次扩大范围不断寻找空位的过程
;(setq ii (/ 2 kkk));设定范围框的增量值
;(while (> ii 0)
;(calwp blk_pt ii 12);以高程点块为中心建立多边形选择框
(setq ii 0);设定范围框的增量值
(while (< ii 0.6)
(calwp blk_pt (+ (* h 0.2) ii) 32);以高程点块为中心建立多边形选择框
(setq i 0)
(repeat (length wppt)
;第八次循环(第三象项)
(if (and (<= (car (nth i wppt)) (nth 0 blk_pt)) (<= (cadr (nth i wppt)) (nth 1 blk_pt)));第三象项
(progn
(setq pt_l (list (- (car (nth i wppt)) (* 1 l)) (- (cadr (nth i wppt)) h)))
(setq pt_r (nth i wppt))
);progn
);if
...................................
<按象限定义文本框,请自由编写>
....................................
(setq s2 (ssget "c" pt_l pt_r))
(if (= s2 nil);如果找到空位
(progn
(setq just_pt (list (nth 0 pt_l) (+ (nth 1 pt_l) (/ h 2)) ))
(setq data2 (subst (cons 11 just_pt) (assoc 11 data2) data2))
(entmod data2) ;更改子对象
(entupd (ssname ss1 n)) ;更改主对象
;(command "_rectang" pt_l pt_r "")
(setq ii 10);如找到空位则设ii等于10,因大于0.6,借此跳出循环直接进入下一个点的处理
);p
(setq i (1+ i));如果没找到空位,则开始判断下一个顶点
);if
);r
(setq ii (+ ii 0.05));多边形选择框外扩增值数,扩大一圈继续找空位处理
);w ii
);p
);if s1
(setq n (1+ n));开始处理下一个高程点
(princ (strcat "\n正在处理第 " (itoa n) " 个高程注记,还剩下" (itoa (- (sslength ss1) n)) "个,请耐心等待!"))
);r
(setq ss1 nil s1 nil s2 nil)
);w |
|