明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1075|回复: 4

求助 73哥 gzxl 004 skg123 各位大师来改改程序

[复制链接]
发表于 2015-7-30 21:43 | 显示全部楼层 |阅读模式
;;检查高程匹配
(defun c:jcgc()
(command "osnap" "off")
(command "layer" "th" "*" "unlock" "*" "")
(command "layer" "m" "gcd" "on" "*" "" )
(command "layer" "S" "0" "")
(setq file1 (getvar "DWGNAME"))
(setq dir1 (getvar "DWGPREFIX"))
(setq XH (strcase (substr file1 1 (- (strlen file1) 4))))
(SETQ FILEN (STRCAT DIR1 XH ".检查高程"))
(setq wj1 (open FILEN "a"))
(setq rks 0)
(write-line " -------------------------------------------------------------" wj1)
(setq zbzf (strcat "检查图幅名:" XH "检查时间" ))
(write-line "" wj1)
(setq zbzf (strca " ----- " "高程匹配检查" "----- " ))
(write-line zbzf wj1)
(write-line "" wj1)
(close wj1)
(setq wj1 (open FILEN "a"))
(setq sss (ssget "x" (LIST (cons 8 "gcd")(cons 0 "INSERT")(cons 2 "gC200"))))
(setq i 0)
(if sss
(while (< i (sslength sss))
;;z
(setq ents (ssname sss i))
(setq en (entget ents))
(setq P1 (cdr (assoc 10 en)) )
(setq cen (cdr (assoc 8 en)) )
(setq px (nth 0 p1))
(setq py (nth 1 p1))
(setq ph (nth 2 p1))
(rk)
(setq i (+ i 1))))
(setq a (itoa rks) )
(If(= cen cen1)
(setq a1 (strcat ",本幅图找到不匹配高程个数:" a "个" ) ))
(If(/= cen cen1)
(setq a1 "高程层次错误。按ESC键盘退出..." ))
(write-line "" wj1)
(print a1)
(close wj1)
(print "检查完事")
(princ))

(defun rk()
(setq pz 0)
(setq p1 (list px py))
(command "zoom" "c" p1 (* 40 1.000))
(setq x (* 11 1.000))
(setq y (* 5 1.000))
(setq pa (list (- px x) (- py y)))
(setq pB (list (+ px x) (+ py y)))
(setq ssa nil)
(setq hha "0")
(setq ssa (ssget "w" PA PB (LIST (cons 0 "TEXT")(cons 8 cen)) )))
(setq j 0)
(SETQ GC 0)
(setq dist 6000)
(SETQ h2 nil)
(SETQ h1 nil)
(if(= ssa nil )
(progn
(command "zoom" "c" p1 (* 40 0.5))
(command "circle" p1 (* 2 0.5))
(setq yy1 (strcat "\n未找到高程注记,请检查高程层次是否为gcd,确认后再选择高程&lt;" hha "&gt;: "))
(setq oBJ (car (entsel yy1)))
(IF(/= OBJ NIL)
(PROGN
(setq en1 (entget oBJ))
;setq
(setq hhA (cdr (assoc 1 en1)) )
(setq hh (atof hhA))
(setq cen1 (cdr (assoc 8 en1)) )
(If(/= cen cen1)
(progn
(command "zoom" "c" p1 (*40 0.5))
(GETSTRING (strcat "高程层次错误。按ESC键盘退出....")) ))
(setq j 1)
(setq DIST 1)
)) ))
(if ssa
(while (&lt; j (sslength ssa))
(setq ents1 (ssname ssa j))
(setq en1 (entget ents1))
(setq km (cdr (assoc 1 en1)) )
(setq P2 (cdr (assoc 10 en1)) )
(setq ax (th 0 p2))
(setq ay (nth 1 p2))
(setq cen1 (cdr (assoc 8 en1)) )
(setq ang0 (/ (* (angle p1 p2) 180) 3.14159))
(setq pp2 p2)
(cond
((and (&gt; ang0 100) (&lt;= ang0 190))
(setq pp2 (list (+ ax 24) ay))
)
((and (&gt; ang0 190) (&lt;= ang0 250))
(setq pp2 (list (+ ax 24) (+ ay 10)))
)
((and (&gt; ang0 250) (&lt;= ang0 350))
(setq pp2 (list ax (+ ay 10))))
)
(SETQ DIST1 (DISTANCE P1 Pp2))
(IF (&gt; DIST DIST1)
(PROGN
(SETQ DIST DIST1)
(SETQ GC (ATOF KM))
(SETQ EN2 EN1)
(setq hha km)
(setq hh (atof km))
(setq ents2 ents1) ))
(setq j (+ j 1)) ))
(setq x1 (* 2 0.5))
(setq y1 (* 2 0.5))
(setq pa1 (list (- px x1) (- py y1)))
(setq pB1 (list (+ px x1) (+ py y1)))
(setq ssb nil)
(setq ssb (ssget "w" PA1 PB1 (LIST (cons 8 "gcd") (cons 0 "INSERT") (cons 2 "gc200"))))
;(command "pline" pa1 pb1 """")
(setq jj 0)
(if ssb
(while (&lt; jj (sslength ssb))
(setq ents2 (ssname ssb jj))
(setq en2 (entget ents2))
(setq km (cdr (assoc 1 en2)) )
;(setq P5 (cdr (assoc 10 en2)) )
;(command "circle" p5 (* 5 0.5))
(setq jj (+ jj 1)) ))
(if (or (= j 1) (&lt; dist 10))
(progn
(setq p3 (list (nth 0 p1) (nth 1 p1) hh))
(setq x1 (rtos px 2 3))
(setq y1 (rtos py 2 3))
(setq h1 (rtos hh 2 3))
(setq h2 (rtos ph 2 3))
(setq i1 (rtos (+ rks 1) 2 0))
(setq a3 (strcat " 标注高程 " h1))
(setq a4 (strcat " 点位高程 " h2))
(setq h8 (abs(- hh ph )))
(if (&gt; h8 0.01)
(progn
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "circle" p1 (* 2 0.5))
(setq str2 (getstring (strcat a3 a4 " 是否记录(回车记录,No不记录se选择esc中断修改)")))
(command "u")
(if (= str2 "se")
(progn
(setq yy1 (strcat "\n找到多个实体,请选择高程&lt;" hha "&gt;: "))
(setq oBJ (car (entsel yy1)))
(IF(/= OBJ NIL)
(PROGN
(setq en1 (entget oBJ))
;setq
(setq hhA (cdr (assoc 1 en1)) )
(setq hh (atof hhA))
(setq j 1)
(setq DIST 1) ))
(if (or (= j 1) (&lt; dist 10))
;a
(progn
(setq p3 (list (nth 0 p1) (nth 1 p1) hh))
(setq x1 (rtos px 2 3))
(setq y1 (rtos py 2 3))
(setq h1 (rtos hh 2 3))
(setq h2 (rtos ph 2 3))
(setq i1 (rtos (+ rks 1) 2 0))
(setq a3 (strcat " 标注高程 " h1))
(setq a4 (strcat " 点位高程 " h2))
(setq h8 (abs(- hh ph)))
(if (&gt; h8 0.01)
(progn
;;;;;;;;;;;;;;;;
(command "circle" p1 (* 2 0.5))
(setq str2 (getstring (strcat a3 a4 " 是否记录(回车记录,No不记录?)")))
(command "u"))) )) ))
(if (= str2 "")
(progn
;;;;;;;;;;;;;;;;
(command "change" ssb "" "p" "e" h1 "la" "BJ08" "c" "bylayer" "")
(print "已记录")
(setq zbzf (strcat " 图元 "i1": (" x1 " " y1 " "a3 a4 " 高程值不符" ))
(write-line zbzf wj1)
(setq rks (+ rks 1)) )) )) ) ) );;;end
总是提示错误   请老师们给看看 修改一下  是不是缺少错误函数的原因啊



发表于 2015-8-12 21:46 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-8-12 21:50 编辑

(setq ssa (ssget "w" PA PB (LIST (cons 0 "TEXT")(cons 8 cen)) )))
这一行多了一个反)导致程序(defun rk()....)提前结束
后边多处 (< j (sslength ssa)) 之类的,弄得反括号一起失效。。。。不明白那些地方的用途,所以不知道怎么改
初步估计有可能是用了类似变量名任意替换之类的程序对最初的源代码进行处理后引起的。。。
发表于 2015-8-13 20:57 | 显示全部楼层
这样不提示错误,但查错效果不行呀,程序思路不对吧
  1. ;;检查高程匹配
  2. (defun c:jcgc (/ a a1 cen dir1 en ents file1 filen i p1 ph px py rks sss wj1 xh zbzf)
  3.   (command "osnap" "off")
  4.   (command "layer" "th" "*" "unlock" "*" "")
  5.   (command "layer" "m" "gcd" "on" "*" "" )
  6.   (command "layer" "S" "0" "")
  7.   (setq file1 (getvar "DWGNAME"))
  8.   (setq dir1 (getvar "DWGPREFIX"))
  9.   (setq XH (strcase (substr file1 1 (- (strlen file1) 4))))
  10.   (setq filen (strcat dir1 xh ".检查高程"))
  11.   (setq wj1 (open filen "a"))
  12.   (setq rks 0)
  13.   (write-line " -------------------------------------------------------------" wj1)
  14.   (setq zbzf (strcat "检查图幅名:" XH "检查时间" ))
  15.   (write-line "" wj1)
  16.   (setq zbzf (strcat " ----- " "高程匹配检查" "----- " ))
  17.   (write-line zbzf wj1)
  18.   (write-line "" wj1)
  19.   (close wj1)
  20.   (setq wj1 (open filen "a"))
  21.   (setq sss (ssget "x" (list (cons 8 "GCD")(cons 0 "INSERT")(cons 2 "GC200"))))
  22.   (setq i 0)
  23.   (if sss
  24.     (while (< i (sslength sss))
  25.       ;;z
  26.       (setq ents (ssname sss i))
  27.       (setq en (entget ents))
  28.       (setq p1 (cdr (assoc 10 en)))
  29.       (setq cen (cdr (assoc 8 en)))
  30.       (setq px (nth 0 p1))
  31.       (setq py (nth 1 p1))
  32.       (setq ph (nth 2 p1))
  33.       (rk px py ph rks)
  34.       (setq i (+ i 1))
  35.     )
  36.   )
  37.   (setq a (itoa rks))
  38.   (if (= cen cen1)
  39.     (setq a1 (strcat ",本幅图找到不匹配高程个数:" a "个" ))
  40.   )
  41.   (if (/= cen cen1)
  42.     (setq a1 "高程层次错误。按ESC键盘退出..." )
  43.   )
  44.   (write-line "" wj1)
  45.   (print a1)
  46.   (close wj1)
  47.   (print "检查完事")
  48.   (princ)
  49. )

  50. (defun rk (px py ph rks / a3 a4 ang0 ax ay cen1 dist dist1 en1 en2 ents1 ents2 gcc h1 h2 h8 hh hha i1 j jj km obj p1 p2 p3 pa pa1 pb pb1 pp2 pz ssa ssb str2 x x1 y y1 yy1 zbzf)
  51.   (setq pz 0)
  52.   (setq p1 (list px py))
  53.   (command "zoom" "c" p1 (* 40 1.000))
  54.   (setq x (* 11 1.000))
  55.   (setq y (* 5 1.000))
  56.   (setq pa (list (- px x) (- py y)))
  57.   (setq pB (list (+ px x) (+ py y)))
  58.   (setq ssa nil)
  59.   (setq hha "0")
  60.   (setq ssa (ssget "w" PA PB (list (cons 0 "TEXT")(cons 8 cen))))
  61.   (setq j 0)
  62.   (setq gcc 0)
  63.   (setq dist 6000)
  64.   (setq h2 nil)
  65.   (setq h1 nil)
  66.   (if (= ssa nil)
  67.     (progn
  68.       (command "zoom" "c" p1 (* 40 0.5))
  69.       (command "circle" p1 (* 2 0.5))
  70.       (setq yy1 (strcat "\n未找到高程注记,请检查高程层次是否为gcd,确认后再选择高程<;" hha ">: "))
  71.       (setq oBJ (car (entsel yy1)))
  72.       (if (/= OBJ nil)
  73.         (progn
  74.           (setq en1 (entget oBJ))
  75.           ;setq
  76.           (setq hha (cdr (assoc 1 en1)))
  77.           (setq hh (atof hha))
  78.           (setq cen1 (cdr (assoc 8 en1)))
  79.           (if (/= cen cen1)
  80.             (progn
  81.               (command "zoom" "c" p1 (* 40 0.5))
  82.               (getstring (strcat "高程层次错误。按ESC键盘退出...."))
  83.             )
  84.           )
  85.           (setq j 1)
  86.           (setq DIST 1)
  87.         )
  88.       )
  89.     )
  90.   )
  91.   (if ssa
  92.     (while (< j (sslength ssa))
  93.       (setq ents1 (ssname ssa j))
  94.       (setq en1 (entget ents1))
  95.       (setq km (cdr (assoc 1 en1)))
  96.       (setq P2 (cdr (assoc 10 en1)))
  97.       (setq ax (nth 0 p2))
  98.       (setq ay (nth 1 p2))
  99.       (setq cen1 (cdr (assoc 8 en1)))
  100.       (setq ang0 (/ (* (angle p1 p2) 180) 3.14159))
  101.       (setq pp2 p2)
  102.       (cond
  103.         ((and (< ang0 100) (<= ang0 190))
  104.           (setq pp2 (list (+ ax 24) ay))
  105.         )
  106.         ((and (< ang0 190) (<= ang0 250))
  107.           (setq pp2 (list (+ ax 24) (+ ay 10)))
  108.         )
  109.         ((and (< ang0 250) (<= ang0 350))
  110.           (setq pp2 (list ax (+ ay 10)))
  111.         )
  112.       )
  113.       (setq dist1 (distance p1 pp2))
  114.       (if (< dist dist1)
  115.         (progn
  116.           (setq dist dist1)
  117.           (setq gcc (atof km))
  118.           (setq en2 en1)
  119.           (setq hha km)
  120.           (setq hh (atof km))
  121.           (setq ents2 ents1)
  122.         )
  123.       )
  124.       (setq j (+ j 1))
  125.     )
  126.   )
  127.   (setq x1 (* 2 0.5))
  128.   (setq y1 (* 2 0.5))
  129.   (setq pa1 (list (- px x1) (- py y1)))
  130.   (setq pB1 (list (+ px x1) (+ py y1)))
  131.   (setq ssb nil)
  132.   (setq ssb (ssget "w" PA1 PB1 (list (cons 8 "gcd") (cons 0 "INSERT") (cons 2 "gc200"))))
  133.   ;(command "pline" pa1 pb1 """")
  134.   (setq jj 0)
  135.   (if ssb
  136.     (while (< jj (sslength ssb))
  137.       (setq ents2 (ssname ssb jj))
  138.       (setq en2 (entget ents2))
  139.       (setq km (cdr (assoc 1 en2)))
  140.       ;(setq P5 (cdr (assoc 10 en2)))
  141.       ;(command "circle" p5 (* 5 0.5))
  142.       (setq jj (+ jj 1))
  143.     )
  144.   )
  145.   (if (or (= j 1) (< dist 10))
  146.     (progn
  147.       (setq hh (atof hha))
  148.       (setq p3 (list (nth 0 p1) (nth 1 p1) hh))
  149.       (setq x1 (rtos px 2 3))
  150.       (setq y1 (rtos py 2 3))
  151.       (setq h1 (rtos hh 2 3))
  152.       (setq h2 (rtos ph 2 3))
  153.       (setq i1 (rtos (+ rks 1) 2 0))
  154.       (setq a3 (strcat " 标注高程 " h1))
  155.       (setq a4 (strcat " 点位高程 " h2))
  156.       (setq h8 (abs (- hh ph)))
  157.       (if (< h8 0.01)
  158.         (progn
  159.           ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  160.           (command "circle" p1 (* 2 0.5))
  161.           (setq str2 (getstring (strcat a3 a4 " 是否记录(回车记录,No不记录se选择esc中断修改)")))
  162.           (command "u")
  163.           (if (= str2 "se")
  164.             (progn
  165.               (setq yy1 (strcat "\n找到多个实体,请选择高程<" hha ">: "))
  166.               (setq oBJ (car (entsel yy1)))
  167.               (if (/= OBJ nil)
  168.                 (progn
  169.                   (setq en1 (entget oBJ))
  170.                   ;setq
  171.                   (setq hhA (cdr (assoc 1 en1)))
  172.                   (setq hh (atof hhA))
  173.                   (setq j 1)
  174.                   (setq DIST 1)
  175.                 )
  176.               )
  177.               (if (or (= j 1) (< dist 10))
  178.                 ;a
  179.                 (progn
  180.                   (setq p3 (list (nth 0 p1) (nth 1 p1) hh))
  181.                   (setq x1 (rtos px 2 3))
  182.                   (setq y1 (rtos py 2 3))
  183.                   (setq h1 (rtos hh 2 3)) ;;;;;;;?????
  184.                   (setq h2 (rtos ph 2 3))
  185.                   (setq i1 (rtos (+ rks 1) 2 0))
  186.                   (setq a3 (strcat " 标注高程 " h1))
  187.                   (setq a4 (strcat " 点位高程 " h2))
  188.                   (setq h8 (abs (- hh ph)))
  189.                   (if (< h8 0.01)
  190.                     (progn
  191.                       ;;;;;;;;;;;;;;;;
  192.                       (command "circle" p1 (* 2 0.5))
  193.                       (setq str2 (getstring (strcat a3 a4 " 是否记录(回车记录,No不记录?)")))
  194.                       (command "u")
  195.                     )
  196.                   )
  197.                 )
  198.               )
  199.             )
  200.           )
  201.           (if (= str2 "")
  202.             (progn
  203.               ;;;;;;;;;;;;;;;;
  204.               (command "change" ssb "" "p" "e" h1 "la" "BJ08" "c" "bylayer" "")
  205.               (print "已记录")
  206.               (setq zbzf (strcat " 图元 " i1 ": ( " x1 " " y1 " "a3 a4 " )高程值不符" ))
  207.               (write-line zbzf wj1)
  208.               (setq rks (+ rks 1))
  209.             )
  210.           )
  211.         )
  212.       )
  213.     )
  214.   )
  215. );;;end

 楼主| 发表于 2015-8-14 22:22 来自手机 | 显示全部楼层
gzxl老师好,这个程序可能思路有问题,是在网上看到就收集起来了,怎么做都有问题,后来,zzxxqq老师给改过,运行了,但是不是想要的结果
 楼主| 发表于 2015-8-14 22:26 来自手机 | 显示全部楼层
这个应该有三个判断点,展点号图层里的小白点的属性高程值,gcd图层里块高程里有两个点,一个是高程值的文字,一个是高程块的属性值!三点都一样才是正确,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-24 21:19 , Processed in 0.276254 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表