明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4407|回复: 17

[提问] 求助:编号连续性检查及最大编号查找

[复制链接]
发表于 2013-12-8 16:08 | 显示全部楼层 |阅读模式
5明经币
小弟误入歧途,选了个悲催的给排水专业,图中的编号一大堆,有时候会存在编号编漏的情况,比如编到35,却忘了最大的是35,结果从34或者37开始继续往后编,这样的编号很容易把人弄晕。
     之前用了一个工具箱里面有个功能挺好,就是能在指定前缀的情况下去查找这类编号的最大数,并将其亮显,现在想将这个程序独立出来,并希望能增加“检查编号连续性”这个功能,比如有编号XL-1、XL-2、 XL-4、 XL-5,程序运行后能提示缺少编号XL-3,并指出当前最大编号是XL-5,如果编号是连续的,则只提示最大编号是XL-5,并将其亮显。
     编号可能是单行文字也可能是多行文字

附件: 您需要 登录 才可以下载或查看,没有账号?注册
发表于 2013-12-8 19:35 | 显示全部楼层
可将编号导出到Excel 进行检查。

点评

也不能说不是一个行得通的办法,但编号多了之后,具体漏掉了哪些好象EXCEL里边也不太容易确定它们吧?  发表于 2013-12-9 04:28
回复

使用道具 举报

发表于 2013-12-9 04:24 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-12-9 04:55 编辑

如果都象图上那样由前辍加数字并且都是TEXT就很好办了
  1. (defun c:ckbh(/ sstoes enscen s e n c)
  2.   (defun SstoEs(ss / a en lst)
  3.     (if ss(progn(setq a -1)
  4.      (while(setq en(ssname ss(setq a(1+ a))))(setq lst(cons en lst)))))
  5.     lst)
  6.   (defun enscen(ens / ma mi ll ur);图元名表包围盒
  7.     (mapcar'(lambda(x)(vla-getboundingbox (vlax-ename->vla-object x) 'll 'ur)
  8.        (setq ma (cons (vlax-safearray->list ll) ma)
  9.       mi (cons (vlax-safearray->list ur) mi)))ens)
  10.     (setq ll(mapcar'(lambda(a b)(apply'mapcar(cons a b)))'(min max)(list ma mi))
  11.    ll(list(/(+(caar ll)(caadr ll))2)(/(+(cadar ll)(cadadr ll))2)0)))
  12.   (setq c(getstring"编号前辍:"))
  13.   (if(null c)(setq c ""))
  14.   (setq n(1+(strlen c))
  15. s(vl-sort(mapcar'(lambda(x)(atoi(substr(cdr(assoc 1(entget x)))n)))(sstoes(ssget"X"(list(cons 0 "TEXT")(cons 1(strcat c"*"))))))'<))
  16.   (if s
  17.     (progn(setq n (car s))
  18.       (repeat(-(last s)(car s))
  19. (if(not(member(setq n(1+ n))s))(setq e(cons(strcat c(itoa n))e))))
  20.       (setq n(strcat c(itoa(last s)))
  21.      s(sstoes(ssget"X"(list(cons 0 "TEXT")(cons 1 n)))))
  22.       (setq c(getvar"CMDECHO"))
  23.       (setvar "CMDECHO" 0)(command"zoom""c"(enscen s)"")(setvar "CMDECHO" c)
  24.       (setq c (getvar "Grips"))
  25.       (setvar "Grips" 0)(sssetfirst nil(ssadd(car s)(ssadd)))(setvar "Grips" c)
  26.     (list n e)))
  27.   )  




程序要求你先输入一个前辍,程序结束返回一个表,第一个元素是当前最大编号,第二个元素是所漏掉的号的表,
将最大号亮显并且屏幕移到以它为中心 详见附图
至于对这个返回结果具体要怎么处理,只能你自己看着办了哟

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2013-12-9 09:30 | 显示全部楼层
llsheng_73 发表于 2013-12-9 04:24
如果都象图上那样由前辍加数字并且都是TEXT就很好办了

正如您所说,都是text就好办,试用了一下,对于多行文字有点问题(试着将选择类型改为MTEXT测试:; 错误: 参数太少

指定中心点:
输入比例或高度 <4975.8064>:)
回复

使用道具 举报

发表于 2013-12-9 09:45 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-12-9 09:50 编辑
半听可乐 发表于 2013-12-9 09:30
正如您所说,都是text就好办,试用了一下,对于多行文字有点问题(试着将选择类型改为MTEXT测试:; 错误: ...


要支持MTEXT呢
看起来象是把(cons 0 "TEXT")改成(cons 0 "*TEXT")就可以了,但实际上多行文本的内容却可能会有一些控制字符在真正的内容前边,所以不是那么容易直接得到它后边的编号数字。
当然如果真有MTEXT的话,建议先用别的工具将它们转成TEXT
回复

使用道具 举报

 楼主| 发表于 2013-12-9 12:34 | 显示全部楼层
llsheng_73 发表于 2013-12-9 09:45
要支持MTEXT呢
看起来象是把(cons 0 "TEXT")改成(cons 0 "*TEXT")就可以了,但实际上多行文本的内容却 ...

您所说的“……控制字符在真正的内容前边……”我不明白,编号是很简单的字母+数字,还有“-”、“()”这样的字符,这些是控制字符吗?
回复

使用道具 举报

发表于 2013-12-9 12:54 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-12-9 13:05 编辑
半听可乐 发表于 2013-12-9 12:34
您所说的“……控制字符在真正的内容前边……”我不明白,编号是很简单的字母+数字,还有“-”、“()” ...


你多做几个MTEXT,然后(cdr(assoc 1(egtet(car(entsel))))))看下吧,很有可能它不会就是一个简单的文本内容

所以能不用MTEXT的时候最好别用它,不然给取文本内容多加一些麻烦,因为它有可能会有一些控制字符也可能没有,跟所用字体及其它一些格式控制有关

反正我不会再去改它了,因为第一次所给出的图中只有TEXT,现在又冒个MTEXT出来比较恼火,如果第一次的图上就有MTEXT,当时我就会考虑它甚至属性也可以。但对于追加的要求......

再说了以你这么高的积分应该完全可以自己修改它以满足你的需要

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2013-12-9 18:46 | 显示全部楼层
llsheng_73 发表于 2013-12-9 12:54
你多做几个MTEXT,然后(cdr(assoc 1(egtet(car(entsel))))))看下吧,很有可能它不会就是一个简单的文本 ...

我真的是不会,一直都是在求助于大家,这次我一开始就说 了文字可能是单行也可能是多行的啊~~关注我这个需求这么长时间,我已经很知足了,谢谢你!
回复

使用道具 举报

发表于 2013-12-9 19:35 | 显示全部楼层
帮顶一下,都已经解决了,
回复

使用道具 举报

发表于 2013-12-10 14:08 | 显示全部楼层
太赞了,good,
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 14:28 , Processed in 0.179337 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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