找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 24452|回复: 222

[原创]:一个递增复制文字和属性块的程序

  [复制链接]
发表于 2008-12-10 12:37:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
命令名:cptxt
程序特点:
1.本程序既适用于文字,也适用于带属性的块。
2.该程序拷贝字符串或带属性的块后,如果文字或块属性后带有数字,则该数字自动增加1;如果文字或块属性后没有数字,则程序会在后面添加一个数字。如:平面图==>平面图1==>平面图2
3.对于混杂文字及数字的字符串,增量后仅改变后面的数字,前面的文字则保留不变。如A-9增量后成为A-10,前面的“A-”不变。
4.对于形如A01的文字或块属性,增量后的结果依次是A02、A03……A10,不会丢掉“0”字。

(本程序已依据各位朋友的建议进行了一系列修改,其修改的内容是:1. 解决了0字开头的数的递增问题;2.纯字母的情况按字母排列顺序递增;3.有两个属性的块可以选择增加哪个属性;4.解决了拷贝起始点的偏移问题。2009.1.6)
[/COLOR]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2008-12-16 21:09:10 | 显示全部楼层
最初由 xmchy 发布
[B]能不能那样啊,如果尾数是数字,1,2,3之类得,就按数字来递增,如果是字母得,abcd,之类的就按字母来递增,能不能做的到? [/B]

字母的递增仅限于单个字母。如:D==> E==>F==>G……。
abcd==>abcd1==>abcd2==>abcd3……。
最初由 xotoo 发布
[B]如果一个块里面有两个属性文字,可不可以选择对哪个文字进行递增?
[/B]

将主程序和子程序tqwz分别修改如下:
子程序tqwz:

  1.   [FONT=courier new]
  2. (defun tqwz();;提取属性或文字内容
  3.   (if (= "TEXT" (to 0))
  4.     (setq st (to 1))
  5.     (progn
  6.       (setq s (entget (entnext (cdr (car (entget sn)))))
  7.             st (cdr (assoc 1 s))
  8.       )
  9.           (setq sn1  (entnext sn)
  10.                 s (entget (entnext (cdr (car (entget sn1)))))
  11.                 str1 (cdr (assoc 1 s))
  12.           )   
  13.           (if str1
  14.             (if loop
  15.               (setq p (getpoint (strcat
  16.                       "\n 请选择增长哪个属性/鼠标左键(" st ")/鼠标右键(" str1 "):"))
  17.                     st (if p st str1)  loop nil
  18.               )
  19.               (setq st (if p st str1))
  20.             )
  21.           )
  22.     )
  23.   )
  24. )
  25.   [/FONT]

主程序:

  1.   [FONT=courier new]
  2. (defun c:nn( / asc e1 e2 en en1 k l loop p p1 p2 sn sn1 st st1 st2)
  3.   (setq *error* nil)
  4.   (command "undo" "g")
  5.   (princ "\n欢迎使用文字或属性块连续增量拷贝程序! GYSJY  2008.12.16")
  6.   (if (setq sn (entsel "\n点取物体:"))
  7.     (progn
  8.       (setq p1 (cadr sn) p2 t sn (car sn) loop t)
  9.       (if (or (= "TEXT" (to 0))(and p2 (to 66)(= "INSERT" (to 0))))
  10.         (progn                                                
  11.           (tqwz)
  12.           (tqtxt)
  13.           (setq l (1+ l ))
  14.           (while p2
  15.             (setq p2 (getpoint "\n下一点:" p1))
  16.             (command "copy" sn "" p1 p2)   
  17.             (setq sn (entlast) p1 p2 en (entget sn))
  18.             (tqwz);(princ st)(getstring)
  19.             (setq asc (ascii st))
  20.             (if p2
  21.               (if (and (= (strlen st) 1)
  22.                     (or (and (> asc 64) (< asc 90))
  23.                         (and (> asc 96) (< asc 122))
  24.                     )
  25.                   );判断字符串是否是单个字母
  26.                 (setq k (if (or (= asc 78)(= asc 72))(+ asc 2)(1+ asc));排除字母I,O
  27.                       st (chr k)
  28.                 ) ;如果字符串是单个字母,则按字母顺序增长              
  29.                 (setq st2 (substr st l) st2 (tost2)
  30.                       st (strcat st1 st2)  
  31.                 ) ;按数字增长
  32.               )
  33.             )
  34.             (if (= "TEXT" (to 0))
  35.               (progn
  36.                 (setq e1 (subst (cons 1 st) (assoc 1 en) en))
  37.                 (entmod e1)
  38.               );修改文字
  39.               (if (or loop p)
  40.                 (progn
  41.                   (setq e1 (entget (entnext (cdr (car en)))))
  42.                   (setq e1 (subst (cons 1 st) (assoc 1 e1) e1))
  43.                   (entmod e1)(entmod en)
  44.                 )
  45.                 (progn
  46.                   (setq  sn1(entnext sn) en1 (entget sn1)
  47.                      e1 (entget (entnext (cdr (car en1))))
  48.                      e2 (subst (cons 1 st) (assoc 1 e1) e1)
  49.                   )
  50.                   (entmod e2)(entmod en1)(entmod en)
  51.                 )
  52.               );修改属性
  53.             )
  54.             (princ st)
  55.           )
  56.         )
  57.         (princ "\n   ***你所点取的图元不是属性块或文字!本程序只拷贝带属性的块或文字。***")
  58.       )
  59.         )
  60.   )
  61.   (command "undo" "e")
  62.   (princ)
  63. )

  64.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2008-12-10 12:39:16 | 显示全部楼层
如图所示
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-10 17:46:32 | 显示全部楼层
如图
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-12 15:47:36 | 显示全部楼层
欢迎使用文字或属性块连续增量拷贝程序! GYSJY  2008.12.9
点取物体:; 错误: 参数值错误: 正 0

0字开头的会出错!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-12 17:54:28 | 显示全部楼层
最初由 userzhluserzhl 发布
[B]
0字开头的会出错!!! [/B]

将子程序tqtxt修改如下:

  1.   [FONT=courier new]
  2. (defun tqtxt( / n n0 st0 l0);;提取尾部数字前的字符串
  3.   (setq st1 st l(strlen st1) st0 (substr st1 l) s1 (substr st 1 1)
  4.         n (atoi st0) n0 (atoi st1) l0 (strlen (itoa n0))
  5.   )
  6.   (if (or (= s1 "0")(and (> n0 0) (= l l0)));纯数字不循环
  7.     (setq  l 0 st1 "")
  8.     (while (or (> n 0) (= st0 "0"))
  9.       ;= st0 "0",如果遇到形如A01中的0,继续循环
  10.       (setq st1 (substr st1 1 (1- l))
  11.             l (strlen st1) st0 (substr st1 l) n (atoi st0)            
  12.       )
  13.     )
  14.   )
  15. )
  16.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-13 00:23:17 | 显示全部楼层
好东东
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-13 11:56:53 | 显示全部楼层
建议增加:先确定拷贝的起始点,这样才好定位。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 54个

财富等级: 招财进宝

发表于 2008-12-14 20:16:44 | 显示全部楼层
楼主可不可以进行如下的修改:
1、如果遇到需要递增的文字为单个字母的时候(比如“D”)递增的时候不是递增为D1、D2,而是递增为“E、F、G……”
2、如果遇到需要递增的文字为字母+数字的时候(比如“D1”),递增的时候再递增成“D2、D3、D4……”
3、接第一个问题——遇到需要递增内容为“带属性的块”时,如果块内有两个不同的内容,可不可以有选择性的进行某个内容的递增或者二者同时递增——下面用一个图来说明这个问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-15 18:46:14 | 显示全部楼层
最初由 xotoo 发布
[B]楼主可不可以进行如下的修改:
1、如果遇到需要递增的文字为单个字母的时候(比如“D”)递增的时候不是递增为D1、D2,而是递增为“E、F、G……”
2、如果遇到需要递增的文字为字母+数字的时候(比如“D1”),递?.. [/B]

对于第一和第二个问题,将主程序修改如下:

  1.   [FONT=courier new]
  2. (defun c:nn( / asc e1 en k l p1 p2 sn st st1 st2)
  3.   (setq *error* nil)
  4.   (command "undo" "g")
  5.   (princ "\n欢迎使用文字或属性块连续增量拷贝程序! GYSJY  2008.12.15")
  6.   (if (setq sn (entsel "\n点取物体:"))
  7.     (progn
  8.       (setq p1 (cadr sn) p2 t sn (car sn))
  9.       (if (or (= "TEXT" (to 0))(and p2 (to 66)(= "INSERT" (to 0))))
  10.         (progn
  11.           (tqwz)
  12.           (tqtxt)
  13.           (setq l (1+ l ))
  14.           (while p2
  15.             (setq p2 (getpoint "\n下一点:" p1))
  16.             (command "copy" sn "" p1 p2)   
  17.             (setq sn (entlast) p1 (to 10) en (entget sn))
  18.             (tqwz)
  19.             (setq asc (ascii st))
  20.             (if p2
  21.               (if (and (= (strlen st) 1)
  22.                     (or (and (> asc 64) (< asc 90))
  23.                         (and (> asc 96) (< asc 122))
  24.                     )
  25.                   );判断字符串是否是单个字母
  26.               (setq k (if (or (= asc 78)(= asc 72))(+ asc 2)(1+ asc));排除字母I,O
  27.                     st (chr k)
  28.               ) ;如果字符串是单个字母,则按字母顺序增长              
  29.               (setq st2 (substr st l) st2 (tost2)
  30.                     st (strcat st1 st2)  
  31.               ) ;按数字增长
  32.             )
  33.           )
  34.             (if (= "TEXT" (to 0))
  35.               (progn
  36.                 (setq e1 (subst (cons 1 st) (assoc 1 en) en))
  37.                 (entmod e1)
  38.               );修改文字
  39.               (progn
  40.                 (setq e1 (entget (entnext (cdr (car en)))))
  41.                 (setq e1 (subst (cons 1 st) (assoc 1 e1) e1))
  42.                 (entmod e1)(entmod en)
  43.               );修改属性
  44.             )
  45.             (princ st)
  46.           )
  47.         )
  48.         (princ "\n   ***你所点取的图元不是属性块或文字!本程序只拷贝带属性的块或文字。***")
  49.       )
  50.     )
  51.   )
  52.   (command "undo" "e")
  53.   (princ)
  54. )

  55.   [/FONT]

第三个问题比较复杂,主要是第二个属性难以提取。如果谁知道的话,欢迎贴出代码来。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 54个

财富等级: 招财进宝

发表于 2008-12-15 21:21:56 | 显示全部楼层
谢谢楼主,试用了一下,我前两个问题解决了;
如果排除不提取第二个属性的话,可不可以修改成这样的哪——如果一个块里面有两个属性文字,可不可以选择对哪个文字进行递增?

另外麻烦楼主去下面的链接看看15楼的程序,那个程序可以把一个文字中的所有数字(不相连)进行递增,可惜还是没有做到可以有选择的进行……
http://www.xdcad.net/forum/showthread.php?s=&threadid=655545
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-16 17:50:32 | 显示全部楼层
最初由 xotoo 发布
[B]谢谢楼主,试用了一下,我前两个问题解决了;
如果排除不提取第二个属性的话,可不可以修改成这样的哪——如果一个块里面有两个属性文字,可不可以选择对哪个文字进行递增?
[/B]

提取第二个属性的代码已经找到,选择属性的想法可以实现。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-16 20:41:26 | 显示全部楼层
能不能那样啊,如果尾数是数字,1,2,3之类得,就按数字来递增,如果是字母得,abcd,之类的就按字母来递增,能不能做的到?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 54个

财富等级: 招财进宝

发表于 2008-12-16 22:36:49 | 显示全部楼层
好好好……超级感谢!
另外你签名档里面的那个“双线交叉”的网页怎么打不开了啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-12-17 07:59:42 | 显示全部楼层
如果有多个属性(比如四个)呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 21:50 , Processed in 0.395697 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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