本帖最后由 zhb236623 于 2011-7-10 22:13 编辑

- (defun c:za()
- (VL-LOAD-COM)
- (setq oldcmd (getvar "cmdecho"))
- (setvar "cmdecho" 0)
- (setq oldblip (getvar "blipmode"))
- (setvar "blipmode" 0)
- (setq oldsnap (getvar "osmode"))
- (setvar "osmode" 0)
- (if (not (setq n1 (getint "\n请输入尾数起始顺序号 <1>: ")))
- (setq n1 1)
- )
- (if (= (tblobjname "layer" "zhb地号图层") nil)
- (progn
- (princ "图层zhb地号图层不存在,新建图层zhb地号图层完成,导入数据将存放在zhb地号图层")
- (command ".-layer" "n" "zhb地号图层" "s" "zhb地号图层" "c" "红色" "" "")
-
- )
- (progn
- (command ".-layer" "s" "zhb地号图层" "c" "红色" "" "")
- (princ "zhb地号图层已存在,导入数据将存放在zhb地号图层,完成导入")
- )
- )
- (command ".style" "仿宋体" "仿宋_GB2312" 0.6 1 0 "" "")
- (setq slist nil)
- (setq i 0)
- (setq ss (ssget '((0 . "LWPOLYLINE"))))
- ;; 求矩形上面一条边的中点坐标
- (repeat (sslength ss)
- (setq en (ssname ss i))
- ;(setq en (entget ssn))
- (vla-getboundingbox (vlax-ename->vla-object en) 'minpoint 'maxpoint)
- (setq pmax (vlax-safearray->list maxpoint)
- pmin (vlax-safearray->list minpoint)
- )
- (setq xmin (car pmin))
- (setq xmax (car pmax))
- (setq ymin (cadr pmin))
- (setq ymax (cadr pmax))
- (setq xmid ( / ( + xmin xmax) 2))
- ;;(setq ymid ( / ( + ymin ymax) 2))
- (setq xmid_ymax (list xmid ymax))
- (setq slist (cons xmid_ymax slist))
- (setq i (1+ i))
- )
- (setq tmp_slist (vl-sort slist '(lambda(x1 x2)(< (car x1) (car x2)))));表按x从小到大排序
- ;(setq last_slist (vl-sort tmp_slist '(lambda(x1 x2)(> (cadr x1) (cadr x2)))));表按y从大到小排序
- ;;这里有问题,不知道要怎么写。
- (foreach insertp_mid tmp_slist
- (setq insertp_move (pmove insertp_mid 0 -2))
- (setq wz (strcat "3-50-411-" (itoa n1)))
- (command ".text" "j" "mc" insertp_move 0 wz)
- ;(command ".text" "j" "mc" insertp_move 0.6 0 wz)
- (setq n1 (+ n1 1))
- )
- (setvar "cmdecho" oldcmd)
- (setvar "blipmode" oldblip)
- (setvar "osmode" oldsnap)
- (princ)
- )
- (defun pmove(point_xy px py);点位,X Y Z
- (setq point_x(car point_xy))
- (setq point_y(cadr point_xy))
- (list (+ point_x px)(+ point_y py))
- )
其实作业中同一行的矩形没有上下差别那么大,只上下波动很小的距离。这里有点夸大。想要的效果如图中所示。程序不能实现,望高手指教。如果实在不行,我可以按一行选,只要对X坐标进行排序就可以了。一行一行加。 |