tianyuan 发表于 2011-10-12 15:30:46

网上找了一个程序

我从网上找到一个标注界址点的程序,但是不会设置,在运行时总提示“该图无界址点图层,请查证后再执行标注界址点命令!!UNDO 当前设置: 自动 = 开,控制 = 全部,合并 = 是,图层 = 是
输入要放弃的操作数目或 [自动(A)/控制(C)/开始(BE)/结束(E)/标记(M)/后退(B)] <1>: End”      不知道是程序的问题还是设置的问题?还望多明示!谢谢!
(defun c:DH ()(dh "")(princ))
(defun c:DHB ()(dh "B")(princ))
(defun DH (db / pd pp ph exy jh sc p cd dh m na tt)
(command "UNDO" "Group") (command "OSNAP" "")
(if (null (tblsearch "LAYER" "OO"))
(prompt "\n该图无界址点图层,请查证后再执行标注界址点命令!!")
(progn
   (setq sc (getint "\n标注界址点号,选择比列尺1:<1000> "))
   (if (= sc nil) (setq sc 1000))
   (setq sc (/ sc 1000.0)pp (ppL))
   (if (= db "B") (setq bcd (getpoint "\n坐标表制作基点位置:")))
   (setq exy (ppb pp 1000.0)   jh (JDH (cadr exy)))
   (lay "界址点标示" "7" "" "0.2" "")
   (foreach p jh (command "DONUT" sc 0.1 (cadr p) ""))
   (lay "界址点号+图幅号" "7" "" "0.2" "")
   (command "STYLE" "STAND" "宋体" "" "" "" "" "" "")
   (foreach p jh (command "TEXT" (cadr p) (* sc 2) 0 (cadddr p)))
   (if (= db "B") (progn(lay "界址点坐标表" "7" "" "0.2" "")
    (foreach pd (car exy)(setq m 0tcd (mapcar '+ bcd (list 0 (* 13 sc))))
   (foreach p (cdr pd)
      (if (> (setq h (car p)) 0)(progn
       (setq m (1+ m)cd (cadr (assoc h (cadr exy)))r (cadr p))
       (command "TEXT" (mapcar '+ bcd (list (* 3 sc) (* 0.7 sc))) (* sc 2.8) 0 m)
       (command "TEXT" (mapcar '+ bcd (list (* 13.5 sc) (* 0.7 sc))) (* sc 2.8) 0 (cadddr (assoc h jh)))
       (command "LINE" bcd (mapcar '+ bcd (list (* 102 sc) 0)) "")
       (command "TEXT" (mapcar '+ bcd (list (* 37.5 sc) (* 0.7 sc))) (* sc 2.8) 0 (rtos (cadr cd) 2 3))
       (command "TEXT" (mapcar '+ bcd (list (* 59.6 sc) (* 0.7 sc))) (* sc 2.8) 0 (rtos (car cd) 2 3))
       (if (> (abs r) 0) (command "TEXT" (mapcar '+ bcd (list (* 85 sc) (* -3 sc))) (* sc 2.8) 0 (rtos r 2 3)))
       (setq bcd (mapcar '- bcd (list 0 (* 6.5 sc))))
   )))
   (command "AREA" "e" (car pd))
   (setq tt (strcat "宗地面积: " (rtos (getvar "AREA") 2 1) " 平方米"))
   (command "TEXT" (mapcar '+ bcd (list (* 5 sc) (* 0.7 sc))) (* sc 2.8) 0 tt)
   (command "LINE" (mapcar '+ tcd (list 0 (* -6.5 sc))) (mapcar '+ tcd (list (* 102 sc) (* -6.5 sc))) "")
   (command "TEXT" (mapcar '+ tcd (list (* 2 sc) (* -5.2 sc))) (* sc 3) 0 "序号")
   (command "TEXT" (mapcar '+ tcd (list (* 19 sc) (* -5.2 sc))) (* sc 3) 0 "点 号")
   (command "TEXT" (mapcar '+ tcd (list (* 44 sc) (* -5.2 sc))) (* sc 3) 0 "X")
   (command "TEXT" (mapcar '+ tcd (list (* 67 sc) (* -5.2 sc))) (* sc 3) 0 "Y")
   (command "TEXT" (mapcar '+ tcd (list (* 84 sc) (* -5.2 sc))) (* sc 3) 0 "半 径")
   (command "RECTANG" tcd (mapcar '+ bcd (list (* 102 sc) 0)))
   (setq bcd (mapcar '- bcd (list 0 (* 19.5 sc))))
   )))
   (command "ZOOM" "P"   "LAYER" "s" "0" "f" "OO" "")
))
(command "UNDO" "End")
)
(defun JDH (exy / p x y cd xl xr yl yr dh h na eh ed d d1 m n s)
   ;;承接参数exy: 折点数据表。
   ;;搜索条件:各折点匹配周围2M内最近的“OO层”界址点号。
   ;;输出结果:折点数据表(含界址点号)。
(command "LAYER" "on" "OO" "t" "OO" "")   (setq xl nil)
(foreach d exy(setq cd (cadr d)y (car cd)x (cadr cd))
(if (= xl nil) (setq xl xyl yxr xyr y))
(setq xl (min x xl)yl (min y yl) xr (max x xr)yr (max y yr))
)
(command "ZOOM" (list (- yl 10) (- xl 10)) (list (+ yr 10) (+ xr 10))"REGEN")
(foreach x exy(setq cd (cadr x)p nil)
(setq s (ssget "C" (mapcar '- cd '(10 10)) (mapcar '+ cd '(10 10))))
(setq n (sslength s)m 0d 2.5)
(while (< m n) (setq na (ssname s m)y (entget na)m (1+ m))
   (setq hi (cdr (assoc 10 y))dh (cdr (assoc 1 y)))
   (if (= (cdr (assoc 0 y)) "TEXT") (if (= (substr dh 1 1) "J")
    (if (/= (cdr (assoc 8 y)) "OO")
   (if (< (strlen dh) 7) (command "ERASE" na "")
      (if (= (assoc na eh) nil) (setq eh (cons (list na dh hi (cdr (assoc 40 y))) eh)))
   )
   (if (> (strlen dh) 6) (command "ERASE" na "") (progn
      (if (= (assoc na ed) nil) (setq ed (cons (list na dh hi) ed)))
      (setq xl (* (strlen dh) 0.95)d1 5.0)
      (foreach yl (list '(0 0) (list 0 2) (list xl 2) (list xl 0))
       (command "DIST" cd (mapcar '+ hi yl))
       (setq d1 (min (getvar "DISTANCE") d1))
      )
      (if (< d1 d) (setq d d1p na))
))))))
(if p (setq ed (subst (append (assoc p ed) (list (car x))) (assoc p ed) ed)))
)
(setq m ed   h '())
(foreach x m(if (cddddr x) (progn (setq d 10.0p nil)
(foreach n (cdddr x) (command "DIST" (cadr (assoc n exy)) (caddr x))
   (setq d1 (getvar "DISTANCE"))(if (< d1 d) (setq d d1p n))
)
(setq ed (subst (list (car x) (cadr x) (caddr x) p) (assoc (car x) ed) ed))
)))
(foreach x ed (if (cdddr x) (progn
(setq n (cadddr x)cd (cadr (assoc n exy))dh (strcat (cadr x) "/" (map 0 cd)))
(setq exy (subst (list n cd 1 dh) (assoc n exy) exy)y (assoc dh h)m nil)
(if (not y) (setq h (cons (list dh 1 cd) h))
   (progn
    (foreach p (cddr y) (command "DIST" cd p) (if (> (getvar "DISTANCE") 0.1) (setq m 1)))
    (if m (setq h (subst (append (list dh 2 cd) (cddr y)) y h)))
)))))
(foreach p h(if (cdddr p) (setq h (subst (append (list (car p) 2) (cddr p)) p h))))
(foreach p eh(setq dh (cadr p)d (assoc dh h))
(if d(if (= (cadr d) 2)(command "ERASE" na "")(progn
   (setq na (car p)cd (caddr p)hi (cadddr p)   x (* (strlen dh) hi 0.35)s 10.0)
   (foreach y (list '(0 0) (list 0 hi) (list x hi) (list (* x 2) hi) (list (* x 2) 0) (list x 0))
    (command "DIST" (caddr d) (mapcar '+ cd y))
    (setq s (min (getvar "DISTANCE") s))
   )
   (if (> s 5.0)(command "ERASE" na "")
    (setq h (subst (list dh 0 (caddr d)) d h))
)))))
(foreach p exy (setq d 0dh "无界址点号")
(if (cddr p)(progn (setq dh (cadddr p)d (cadr (assoc dh h)))
   (if (= d 2) (setq dh (strcat dh "重号")))
))
(setq exy (subst (list (car p) (cadr p) d dh) p exy))
)
(setq p exy)
)

tianyuan 发表于 2011-10-12 15:40:59

标注界址点号,选择比列尺1:<1000>
; 错误: no function definition: PPL

tianyuan 发表于 2011-10-12 15:47:06

请问:程序中的ppl应该怎样定义?

yanshengjiang 发表于 2011-10-12 18:36:07

05.(if (null (tblsearch "LAYER" "OO"))
06.(prompt "\n该图无界址点图层,请查证后再执行标注界址点命令!!")

这句的意思是:图面没有“00”层。就提示没有界址点图层。。
貌似不是为cass写的呵呵

tianyuan 发表于 2011-10-13 09:06:11

确实没有“00”图层,加上这个图层后继续运行时又提示“标注界址点号,选择比列尺1:<1000>
; 错误: no function definition: PPL”,请问在这里ppl该如何定义?

tianyuan 发表于 2011-10-13 10:30:31

烦请高手给看一下啊!

tianyuan 发表于 2011-10-14 15:24:50

没人肯帮个忙吗?

tianyuan 发表于 2011-10-17 14:14:08

这个程序能不能有懂得的人修改一下啊?

革天明 发表于 2011-10-22 09:17:03

本人比较菜,大于三十行的程序看着都晕

pslstar 发表于 2012-2-6 01:25:48

这个程序看起来挺难得
页: [1] 2
查看完整版本: 网上找了一个程序