明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1692|回复: 12

【求助】 改文本,分层,谁帮我看看

  [复制链接]
发表于 2008-9-7 20:11:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-9-8 9:30:23 编辑

(defun c:zdh_layer()
  (setvar "cmdecho" 0)
  (vl-load-com)
  (setq sssz  (ssget "x" (list(cons 0 "text")(cons 8 "zdh"))))
  (command "-layer" "n" "zdh_sp" "c" "1" "" "")
  (command "-layer" "n" "zdh_gd" "c" "2" "" "")
  (command "-layer" "n" "zdh_dx" "c" "3" "" "")
  (command "-layer" "n" "zdh_tr" "c" "4" "" "")
  (command "-layer" "n" "zdh_zs" "c" "5" "" "")
  (command "-layer" "n" "zdh_ld" "c" "6" "" "")
  (command "-layer" "n" "zdh_ws" "c" "7" "" "")
  (command "-layer" "n" "zdh_ys" "c" "8" "" "")
  (command "-layer" "n" "zdh_hs" "c" "9" "" "")
  (command "-layer" "n" "zdh_rs" "c" "10" "" "")
  (command "-layer" "n" "zdh_rz" "c" "11" "" "")
  (command "-layer" "n" "zdh_gt" "c" "12" "" "")
  (command "-layer" "n" "zdh_mq" "c" "13" "" "")
  (command "-layer" "n" "zdh_sy" "c" "14" "" "")
 
 
  (setq n 0)
 
  (if sssz
  (repeat(sslength sssz)
  (setq sz (entget(ssname sssz n)))
  (setq text (cdr(assoc 1 sz)))
  (setq tt (STRCASE(substr text 1 2)))
 
  (if(= tt "SP")(progn
  (setq text (vl-string-subst "SPA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_sp") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_sp")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
 
  (if(= tt "GD")(progn
  (setq text (vl-string-subst "GDA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_gd") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_gd")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
 
  (if(= tt "DX")(progn
  (setq text (vl-string-subst "DXA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_dx") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_dx")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
 
  (if(= tt "TR")(progn
  (setq text (vl-string-subst "TRA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_tr") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_tr")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
 
  (if(= tt "ZS")(progn
  (setq text (vl-string-subst "ZSA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_zs") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_zs")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
 
  (if(= tt "LD")(progn
  (setq text (vl-string-subst "LDA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_ld") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_ld")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
    
  (if(= tt "WS")(progn
  (setq text (vl-string-subst "WSA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_ws") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_ws")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  ) 
  
   (if(= tt "YS")(progn
  (setq text (vl-string-subst "YSA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_ys") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_ys")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
  
  
   (if(= tt "HS")(progn
  (setq text (vl-string-subst "HSA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_hs") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_hs")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  ) 
 
  (if(= tt "RS")(progn
  (setq text (vl-string-subst "RSA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_rs") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_rs")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
 
  (if(= tt "RZ")(progn
  (setq text (vl-string-subst "RZA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_rz") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_rz")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
 
  (if(= tt "GT")(progn
  (setq text (vl-string-subst "GTA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_gt") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_gt")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
 
  (if(= tt "MQ")(progn
  (setq text (vl-string-subst "MQA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_mq") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_mq")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
  
  (if(= tt "SY")(progn
  (setq text (vl-string-subst "SYA420" (substr text 1 2) text))
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 "zdh_sy") (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 "zdh_sy")(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  (setq n (+ n 1))
  )
  )
 
 
  (if(and (/= tt "SP") (/= tt "GD") (/= tt "DX") (/= tt "TR")(/= tt "ZS")(/= tt "LD")(/= tt "WS")(/= tt "YS")(/= tt "HS")(/= tt "RS")(/= tt "RZ")(/= tt "GT")(/= tt "MQ")(/= tt "SY"))
  (setq n (+ n 1))
  )
 
  )
  )
 
  (setvar "cmdecho" 1)
  (princ)
)

(sslength sssz)=1时,正确执行。(sslength sssz)>1时, 展点号文本都能更新正确,但有时侯会有几个点没有更新,ssget点选,后来我又改成窗选("w")

  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.501) (+ (caddr(assoc 10 szn)) 0.749)))
  (setq pt2 (list (- (cadr(assoc 10 szn)) 0.499) (+ (caddr(assoc 10 szn)) 0.751)))
  (setq pt (ssget "_w" pt1 pt2 '((0 . "point"))))

,好了很多,但还是有很少的点没有更新,为什么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2008-9-7 20:20:00 | 显示全部楼层

几个修改的建议:

1.用WHILE来判断比较合适

2.用COND代替众多的IF,既能减少代码也能减少出错率也会提高程序运行效率

3.似乎你想把**A420变成**?ZDH应该没有扩展属性吧?还是用删除再在原位置生成一个一样的TEXT比较方便而且快,同时改层也方便,代码也少~嘿嘿,有时麻烦的方法其实也很简单。

 楼主| 发表于 2008-9-7 20:23:00 | 显示全部楼层

我晕,有时(sslength sssz)=3时也行,(sslength sssz)=2时又不行!!

怎么会这样啊

发表于 2008-9-7 20:27:00 | 显示全部楼层

也是玩测绘的?

同行哈

 楼主| 发表于 2008-9-7 20:29:00 | 显示全部楼层

我的实验数据!!

 楼主| 发表于 2008-9-7 20:33:00 | 显示全部楼层
本帖最后由 作者 于 2008-9-7 20:34:50 编辑

帮帮我啊,我也是测绘的,呵呵

我知道你说的,我不明白这样为什么不行啊

发表于 2008-9-7 21:00:00 | 显示全部楼层

我没有实验的数据,我只改了一下代码

现在你只需要对子程序部分进行分析就好了。上面的那些都是判断函数,没有什么作用了~

(defun c:zdh_layer()
  (setvar "cmdecho" 0)
  (setq sssz  (ssget "x" (list(cons 0 "text")(cons 8 "zdh"))))  
  (setq n 0)
  (setq ns (sslength sssz))
  (while (< n ns)
    (setq sz (entget (ssname sssz n)))
    (setq text (cdr (assoc 1 sz)))
    (setq tt (strcase (substr text 1 2)))
    (cond ((= tt "SP")
    (progn
      (setq text (vl-string-subst "SPA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_sp"))(command "-layer" "n" "zdh_sp" "c" "1" "" ""))
      (setq lay "zdh_sp")
      (entext text lay)
      ))
   ((= tt "GD")
    (progn
      (setq text (vl-string-subst "GDA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_gd"))(command "-layer" "n" "zdh_gd" "c" "2" "" ""))
      (setq lay "zdh_gd")
      (entext text lay)
      ))
   ((= tt "DX")
    (progn
      (setq text (vl-string-subst "DXA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_dx"))(command "-layer" "n" "zdh_dx" "c" "3" "" ""))
      (setq lay "zdh_dx")
      (entext text lay)
      ))
   ((= tt "TR")
    (progn
      (setq text (vl-string-subst "TRA420" (substr text 1 2) text))
       (if (not (tblsearch "layer" "zdh_tr"))(command "-layer" "n" "zdh_tr" "c" "4" "" ""))
      (setq lay "zdh_tr")
      (entext text lay)
      ))
   ((= tt "ZS")
    (progn
      (setq text (vl-string-subst "ZSA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_zs"))(command "-layer" "n" "zdh_zs" "c" "5" "" ""))
      (setq lay "zdh_zs")
      (entext text lay)
      ))
   ((= tt "LD")
    (progn
      (setq text (vl-string-subst "LDA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_ld"))(command "-layer" "n" "zdh_ld" "c" "6" "" ""))
      (setq lay "zdh_ld")
      (entext text lay)
      ))
   ((= tt "WS")
    (progn
      (setq text (vl-string-subst "WSA420" (substr text 1 2) text))
       (if (not (tblsearch "layer" "zdh_ws"))(command "-layer" "n" "zdh_ws" "c" "7" "" ""))
      (setq lay "zdh_ws")
      (entext text lay)
      ))
   ((= tt "YS")
    (progn
      (setq text (vl-string-subst "YSA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_ys"))(command "-layer" "n" "zdh_ys" "c" "8" "" ""))
      (setq lay "zdh_ys")
      (entext text lay)
      ))
   ((= tt "HS")
    (progn
      (setq text (vl-string-subst "HSA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_hs"))(command "-layer" "n" "zdh_hs" "c" "9" "" ""))
      (setq lay "zdh_hs")
      (entext text lay)
      ))
   ((= tt "RS")
    (progn
      (setq text (vl-string-subst "RSA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_rs"))(command "-layer" "n" "zdh_rs" "c" "10" "" ""))
      (setq lay "zdh_rs")
      (entext text lay)
      ))
   ((= tt "RZ")
    (progn
      (setq text (vl-string-subst "RZA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_rz"))(command "-layer" "n" "zdh_rz" "c" "11" "" ""))
      (setq lay "zdh_rz")
      (entext text lay)
      ))
   ((= tt "GT")
    (progn
      (setq text (vl-string-subst "GTA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_gt"))(command "-layer" "n" "zdh_gt" "c" "12" "" ""))
      (setq lay "zdh_gt")
      (entext text lay)
      ))
   ((= tt "MQ")
    (progn
      (setq text (vl-string-subst "MQA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_mq"))(command "-layer" "n" "zdh_mq" "c" "13" "" ""))
      (setq lay "zdh_mq")
      (entext text lay)
      ))
   ((= tt "SY")
    (progn
      (setq text (vl-string-subst "SYA420" (substr text 1 2) text))
      (if (not (tblsearch "layer" "zdh_sy"))(command "-layer" "n" "zdh_sy" "c" "14" "" ""))
      (setq lay "zdh_sy")
      (entext text lay)
      ))
    )
    (setq n (1+ n))
    )
  )

;********以下是子程序,用来判断吧~
(defun entext(text lay)
  (setq sz1 (subst (cons 1 text) (assoc 1 sz)sz))
  (setq sz2 (subst (cons 8 lay) (assoc 8 sz1)sz1))
  (setq szn (entmod sz2))
  (setq pt1 (list (- (cadr(assoc 10 szn)) 0.5) (+ (caddr(assoc 10 szn)) 0.75)))
  (setq pt (ssget pt1))
  (setq ent_pt (entget(ssname pt 0)))
  (setq ent_pt (subst (cons 8 lay)(assoc 8 ent_pt) ent_pt))
  (entmod ent_pt)
  )

发表于 2008-9-7 21:02:00 | 显示全部楼层

最后的子程序是用你原来的那些代码。因为我没有实验数据,从程序执行过程看似乎应该没有问题。

这个是程序,已经改好。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2008-9-7 21:39:00 | 显示全部楼层

也不行啊,和我的运行情况一样的

 楼主| 发表于 2008-9-8 09:31:00 | 显示全部楼层

我是菜鸟,知道的说声啥!!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-21 09:07 , Processed in 0.203327 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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