找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1555|回复: 12

[研讨] 单向阵列

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-5-30 08:16:01 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 /db_自贡黄明儒_ 于 2013-6-6 23:17 编辑

我写的单向阵列,其目的是:
1 如果选择有文字,使其末尾数字加一,用于布点。但由于在有些环境中A2并不变成A3,问题没有解决,就不给出函数EndNumberS了,去掉它仍可运行。
2 使用时,选择或者输入要少.
3 也可以动态曲线布置,问题是电脑运行速度快时,不停闪烁

  1. ;;;;;;;;;;;;;;;;;;;;;;单向阵列,文字递增或递减SingleArray
  2. (defun C:SA (/ $ORR MY*ERROR* P0 P1 SS0 SSP0 SSP1 SS_MOVE)
  3.   ;;0  错误处理
  4.   (defun MY*error* (s)
  5.     ;;如果有活动编组,先结束之
  6.     (if (= 8 (logand (getvar "undoctl") 8))
  7.       (command "_undo" "_e")
  8.     )
  9.     (if ss_move
  10.       (command "._erase" ss_move "")
  11.     )
  12.     (setq *error* $orr)
  13.     (princ "\n 出错啦!")
  14.   )
  15.   ;;1  尾数是数字,则加1
  16.   (defun endIncrease (otxt)
  17.     (if (obaEndIsNumber otxt)
  18.       (EndNumberS otxt T)                                   ;增1
  19.       (setq otxt (strcat otxt "1"))
  20.     )
  21.   )
  22.   ;;2  选择集内数字增加
  23.   (defun change (ss1 / ELIST N OBN OTXT)
  24.     (repeat (setq n (sslength ss1))
  25.       (setq obn (ssname ss1 (setq n (1- n))))
  26.       (setq elist (entget obn))
  27.       (cond ((wcmatch (LI_item 0 elist) "ATTDEF")
  28.              (setq otxt (endIncrease (LI_item 2 elist)))
  29.              (entmod (subst (cons 2 otxt) (assoc 2 elist) elist))
  30.             )
  31.             (T
  32.              (setq otxt (endIncrease (LI_item 1 elist)))
  33.              (entmod (subst (cons 1 otxt) (assoc 1 elist) elist))
  34.             )
  35.       )
  36.     )
  37.   )
  38.   ;;3  对象na之后所有实体产生的选择集
  39.   (defun newsel (na / ss e1)
  40.     (if na
  41.       (setq na (entnext na))
  42.       (setq na (entnext))
  43.     )
  44.     (setq ss (ssadd))
  45.     (while na
  46.       (setq e1 (entget na))
  47.       (if (wcmatch (LI_item 0 e1) "VERTEX,SEQEND,ATTRIB")
  48.         nil
  49.         (setq ss (ssadd na ss))
  50.       )
  51.       (setq na (entnext na))
  52.     )
  53.     ss
  54.   )
  55.   ;;4.1 非曲线时,鼠标移动
  56.   (defun do_move (ss0 p0 p1-p0 n / B P1)
  57.     (if ss_move
  58.       (command "._erase" ss_move "")
  59.     )
  60.     (setq b (entlast))
  61.     (setq p1 p0)
  62.     (repeat n
  63.       (setq p1 (mapcar '+ p1 p1-p0))
  64.       (command "copy" ss0 "" "non" p0 "non" p1)
  65.     )
  66.     (setq ss_move (newsel b))
  67.   )
  68.   ;;4.2 非曲线时,阵列
  69.   (defun do_arry (ss0 p0 p1-p0 n / B P1 SS SS1)
  70.     (if ss_move
  71.       (command "._erase" ss_move "")
  72.     )
  73.     (setq p1 p0)
  74.     (setq ss ss0)
  75.     (repeat n
  76.       (setq b (entlast))
  77.       (command "copy" ss "" "non" p1 "non" (setq p1 (mapcar '+ p1 p1-p0)))
  78.       (setq ss (newsel b))
  79.       (command "._Select" ss "")
  80.       (if (setq ss1 (ssget "_p" '((0 . "*TEXT,ATTDEF"))))
  81.         (change ss1)
  82.       )
  83.     )
  84.   )
  85.   ;;4 非曲线时,移动阵列
  86.   (defun p0-next (ss0 p0 p1 / A CODE DISTANC LOOP N NN P1-P0 P2 SS)
  87.     (setq p1-p0 (mapcar '- p1 p0))
  88.     (setq distanc (distance p1 p0))
  89.     (princ "\n    >>>> 输入距离或者拾取点,阵列到:")
  90.     (setq loop T)
  91.     (while loop
  92.       (setq code (grread T 8))
  93.       (cond ((= (car code) 5)
  94.              (setq p2 (cadr code))
  95.              (setq nn n)
  96.              (setq n (fix (/ (distance p2 p0) distanc)))
  97.              (if (/= nn n)
  98.                (do_move ss0 p0 p1-p0 n)
  99.              )
  100.             )
  101.             (t (setq loop nil) (do_arry ss0 p0 p1-p0 n))
  102.       )
  103.     )
  104.   )
  105.   ;;5.3 曲线时,鼠标移动
  106.   (defun curve-move (ss0 p00 distanc n en / B DIS DP1)
  107.     (if ss_move
  108.       (command "._erase" ss_move "")
  109.     )
  110.     (setq b (entlast))
  111.     (setq dis (vlax-curve-getDistAtPoint en p00))
  112.     (repeat (abs n)
  113.       (setq p1 (vlax-curve-getPointAtDist en (setq dis (+ dis distanc))))
  114.       (command "_.copy" ss0 "" "non" p00 "non" p1)
  115.     )
  116.     (setq ss_move (newsel b))
  117.   )
  118.   ;;5.2 曲线时,阵列
  119.   (defun curve-arry (ss0 p00 distanc n en / AN B DIS P1 PP PT SS SS1 VT an0)
  120.     (if ss_move
  121.       (command "._erase" ss_move "")
  122.     )
  123.     (setq dis (vlax-curve-getDistAtPoint en p00))
  124.     (setq pp  (vlax-curve-getParamAtPoint en p00)           ;得到这点参数
  125.           vt  (vlax-curve-getFirstDeriv en pp)              ;得到切线
  126.           an0 (angle '(0 0 0) vt)                           ;切线角
  127.     )
  128.     (setq ss ss0)
  129.     (setq pt p00)
  130.     (repeat (abs n)
  131.       (setq b (entlast))
  132.       (setq p1 (vlax-curve-getPointAtDist en (setq dis (+ dis distanc))))
  133.       (command "_.copy" ss "" "non" pt "non" p1)
  134.       (setq pt p1)
  135.       (setq pp (vlax-curve-getParamAtPoint en p1)           ;得到这点参数
  136.             vt (vlax-curve-getFirstDeriv en pp)             ;得到切线
  137.             an (angle '(0 0 0) vt)                          ;切线角
  138.       )
  139.       (setq ss (newsel b))
  140.       (command "_.rotate" SS "" "non" p1 (/ (* 180 (- an an0)) pi))
  141.       (setq an0 an)
  142.       (command "._Select" ss "")
  143.       (if (setq ss1 (ssget "_p" '((0 . "*TEXT,ATTDEF"))))
  144.         (change ss1)
  145.       )
  146.     )
  147.   )
  148.   ;;5.1 检测到曲线时,移动阵列
  149.   (defun curveDoNext (ss0 p0 p1 en / CODE DIST0 DIST1 DIST2 DISTANC LOOP N NN P00 P11 P2)
  150.     (setq p00 (vlax-curve-getClosestPointTo en p0))
  151.     (setq dist0 (vlax-curve-getDistAtPoint en p00))
  152.     (setq p11 (vlax-curve-getClosestPointTo en p1))
  153.     (setq dist1 (vlax-curve-getDistAtPoint en p11))
  154.     (setq distanc (- dist1 dist0))
  155.     (princ "\n    >>>> 输入距离或者拾取点,阵列到:")
  156.     (setq loop T)
  157.     (while loop
  158.       (setq code (grread T 8))
  159.       (cond ((= (car code) 5)
  160.              (setq p2 (cadr code))
  161.              (setq nn n)
  162.              (setq p2 (vlax-curve-getClosestPointTo en p2))
  163.              (setq dist2 (vlax-curve-getDistAtPoint en p2))
  164.              (setq n (fix (/ (- dist2 dist0) distanc)))
  165.              (if (/= nn n)
  166.                (curve-move ss0 p00 distanc n en)
  167.              )
  168.             )
  169.             (t (setq loop nil) (curve-arry ss0 p00 distanc n en))
  170.       )
  171.     )
  172.   )
  173.   ;;5 检测到曲线时,判断是否有相同的曲线
  174.   (defun curveDo (ss0 SSp0 SSp1 p0 p1 / BOOL BOOL1 EN I N)
  175.     ;;检测两个选择集是否有相同的曲线
  176.     (setq bool T)
  177.     (setq n (sslength SSp0))
  178.     (setq i -1)
  179.     (while bool
  180.       (setq en (ssname SSp0 (setq i (1+ i))))
  181.       (if (ssmemb en SSp1)
  182.         (progn (setq bool nil) (setq bool1 T))
  183.       )
  184.       (if (= i n)
  185.         (setq bool nil)
  186.       )
  187.     )
  188.     (if bool1
  189.       (curveDoNext ss0 p0 p1 en)
  190.       (p0-next ss0 p0 p1)
  191.     )
  192.   )
  193.   ;;6 本程序主程序
  194.   (command "undo" "be")
  195.   (setq $orr *error*)
  196.   (setq *error* MY*error*);保证自定义出错处理函数执行,将(defun MY*error*定义为(defun *error*时,可以不用这句
  197.   (if (and (princ "\n > 选择对象来阵列:")
  198.            (setq ss0 (ssget))
  199.            (ayEntSSHighLight ss0)
  200.       )
  201.     (progn
  202.       (if (setq p0 (getpoint "\n  >> 基点:"))
  203.         (setq SSp0 (ssget "c" p0 p0 '((0 . "*line,arc"))))
  204.       )
  205.       (if (and p0 (setq p1 (getpoint p0 "\n   >>> 输入距离或者拾取点,阵列间距:")))
  206.         (setq SSp1 (ssget "c" p1 p1 '((0 . "*line,arc"))))
  207.       )
  208.       (if (and p0 p1 (not (equal p0 p1 0.01)))
  209.         (if (and SSp0 SSp1)
  210.           (curveDo ss0 SSp0 SSp1 p0 p1)
  211.           (p0-next ss0 p0 p1)
  212.         )
  213.       )
  214.     )
  215.   )
  216.   (setq *error* $orr)
  217.   (command "undo" "e")
  218.   (princ)
  219. )
  220. ;;;;;;;;;;;;;;;;;;;;;;单向阵列,文字递增或递减SingleArray

1.gif

2.gif

请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:单向阵列.lsp 
下载次数:80  文件大小:6.64 KB 
下载权限: 不限 以上  [免费赚D豆]




单向阵列SAR.rar

5.44 KB, 下载次数: 32, 下载积分: D豆 -1 , 活跃度 1

.vlx

评分

参与人数 3D豆 +18 收起 理由
仲文玉 + 3 很给力!经验;技术要点;资料分享奖!
XDSoft + 10 很给力!经验;技术要点;资料分享奖!
炫翔 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-5-30 08:21:31 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2013-5-30 09:00 编辑


  1. ;;;所取字符串末尾是不是数,返回真假
  2. (defun obaEndIsNumber (otxt / E OBALENGTH)
  3.   (setq obaLength (strlen otxt))
  4.   (setq e (ascii (substr otxt obaLength 1)))
  5.   (and (> e 47) (< e 58))
  6. ) ;_ 结束defun
  7. ;;; 结束defun obaEndIsNumber
  8. ;; 亮显选择集或对象(夹点不显示) 函数
  9.   (defun ayEntSSHighLight (SSorEntName / oldGrips)
  10.     (setq oldGrips (getvar "Grips"))
  11.     (setvar "Grips" 0)
  12.     (cond ((= (type SSorEntName) 'PICKSET)                                                                                                                                                    ; 选择集.
  13.            (sssetfirst nil SSorEntName)
  14.           )                                                                                                                                                                                   ; end_switch
  15.           ((= (type SSorEntName) 'ENAME)                                                                                                                                                      ; 单一实体.
  16.            (sssetfirst nil (ssadd SSorEntName (ssadd)))
  17.           )                                                                                                                                                                                   ; end_switch
  18.     )                                                                                                                                                                                         ; end_cond
  19.     (setvar "Grips" oldGrips)
  20.   )
  21. (Defun LI_item (N E) (CDR (Assoc N E)))
  22. ;;(setq str "aa 10.2 b10x20.002")
  23. (defun EndNumberS (str bool / ENDNUMBER N N1 N2 N3 NEND QIANZ SCOR STREND ZNUMBER)
  24.   (setq n3 (strlen str))  ;字符串总长
  25.   (setq strEND (getNumberS str));末尾数字的字符串
  26.   (setq Nend (nth (1- (length strEND)) strEND))
  27.   (setq n1 (strlen Nend))  ;最后一位数字符串总长
  28.   (setq qianZ (substr str 1 (- n3 n1)));前缀
  29.   (setq Znumber (fix (atof Nend))) ;最后一位数字小数前数字
  30.   (setq n2 (strlen (itoa Znumber))) ;最后一位数字小数前数字长度
  31.   (setq n (- n1 n2 1))   ;小数位数
  32.   (if (> n 0)
  33.     (progn
  34.       (setq Nend (* (expt 10 n) (atof Nend)))
  35.       (if bool
  36. (setq endnumber (1+ Nend))
  37. (setq endnumber (1- Nend))
  38.       )
  39.       (setq scor (strcat qianZ (rtos (/ endnumber (expt 10 n)) 2 3)))
  40.     )
  41.     (progn
  42.       (if bool
  43. (setq endnumber (1+ (atoi Nend)))
  44. (setq endnumber (1- (atoi Nend)))
  45.       )
  46.       (setq scor (strcat qianZ (itoa endnumber)))
  47.     )
  48.   )
  49.   scor
  50. )



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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2013-5-30 08:46:49 | 显示全部楼层
感谢楼主分享,楼主,第一幅图片,如果30在曲线的另外一面,程序还能正常阵列吗? 测试过没。

点评

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-30 09:31:08 | 显示全部楼层
感谢楼主,看到了用了很多的COPY和ROTATE,楼主不试试用矩阵改写下?另外判断字符串是否有数字的,用正则表达式更方便些,免得下次替换别的规则的时候,代码改动量大。

点评

20多年前学过矩阵,现在捡回来不容易!!!  发表于 2013-5-30 09:37
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-30 16:46:46 | 显示全部楼层
楼主,什么情况下A2不能变成A3?

点评

;;我原来是这样写的,现在改了没有问题了, ;;以下是原来写的,有时就出现问题(setq endnumber (1+ (rtos Nend 2 3)))  详情 回复 发表于 2013-5-31 08:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-5-31 08:03:42 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2013-5-31 08:07 编辑
XDSoft 发表于 2013-5-30 16:46
楼主,什么情况下A2不能变成A3?


;;我原来是这样写的,现在改了没有问题了,
;;以下是原来写的,有时就出现问题(setq endnumber (rtos  (1+ Nend)2 3))
  1. (defun EndNumberS (str bool / ENDNUMBER N N1 N2 N3 NEND QIANZ SCOR STREND ZNUMBER)
  2.   (setq n3 (strlen str))                ;字符串总长
  3.   (setq strEND (getNumberS str));末尾数字的字符串
  4.   (setq Nend (nth (1- (length strEND)) strEND))
  5.   (setq n1 (strlen Nend))                ;最后一位数字符串总长
  6.   (setq qianZ (substr str 1 (- n3 n1)));前缀
  7.   (setq Znumber (fix (atof Nend)))        ;最后一位数字小数前数字
  8.   (setq n2 (strlen (itoa Znumber)))        ;最后一位数字小数前数字长度
  9.   (setq n (- n1 n2 1))                        ;小数位数
  10.   (if (> n 0)
  11.     (progn
  12.       (setq Nend (* (expt 10 n) (atof Nend)))
  13.       (if bool
  14.         (setq endnumber (1+ Nend))
  15.         (setq endnumber (1- Nend))
  16.       )
  17.       (setq scor (strcat qianZ (rtos (/ endnumber (expt 10 n)) 2 3)))
  18.     )
  19.     (progn
  20.       (if bool
  21.         (setq endnumber (rtos  (1+ Nend)2 3))
  22.         (setq endnumber  (rtos  (1- Nend)2 3))
  23.       )
  24.       (setq scor (strcat qianZ (itoa endnumber)))
  25.     )
  26.   )
  27.   scor
  28. )

评分

参与人数 1D豆 +6 收起 理由
XDSoft + 6 有始有终奖!

查看全部评分

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-31 11:54:32 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-5-31 08:03
;;我原来是这样写的,现在改了没有问题了,
;;以下是原来写的,有时就出现问题(setq endnumber (rtos  (1 ...

哦,那你发现是什么问题会出现偶尔的错误?

点评

我用ET工具的变量_.sysvdlg工具,将两张图的变量比较,没有发现变量影响这个问题,所以就改者程序了.问题的原因至今没有找到!!  详情 回复 发表于 2013-5-31 13:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-5-31 13:20:58 | 显示全部楼层
XDSoft 发表于 2013-5-31 11:54
哦,那你发现是什么问题会出现偶尔的错误?

我用ET工具的变量_.sysvdlg工具,将两张图的变量比较,没有发现变量影响这个问题,所以就改者程序了.问题的原因至今没有找到!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-6-1 15:49:20 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2013-6-1 15:51 编辑

看来尾部数字+1的函数得修改了
  1. ;;练习正则表达式,文字最后数字加1
  2. (defun C:w1 (/ ENT I REGEX S STR STR1 STR2)
  3.   (setq ent (car (entsel)))                                 ;选择文字
  4.   (setq regex (vlax-create-object "Vbscript.RegExp"))       ;引用正则表达式控件
  5.   ;;(vlax-put-property regex "IgnoreCase" 0)                  ; 不忽略大小写
  6.   ;;(vlax-put-property regex "Global" 0)                      ;只匹配第一处
  7.   ;;(vlax-put-property regex "RightToLeft")                   ;从右向左查找(语法不对)
  8.   (setq str (cdr (assoc 1 (entget ent))))                   ;文本内容
  9.   (vlax-put-property regex "Pattern" "[0-9]+$")             ;查找规则,提最后一位数字;"[0-9]+$"最后数字
  10.   (setq s (vlax-invoke-method regex "Execute" str))         ;将规则运用到STR字符,得到提取出的文字内容
  11.   (VLAX-FOR tmp s
  12.     (setq str1 (cons (vlax-get-property tmp "value") str1))
  13.   )                                                         ;将内容转换为LISP语言就可以直接观察了
  14.   (if str1
  15.     (progn (setq str2 (itoa (1+ (atoi (car str1)))))        ;提取的尾数+1
  16.            (setq i (- (strlen (car str1)) (strlen str2)))
  17.            (if (> i 0)
  18.              (repeat i (setq str2 (strcat "0" str2)))
  19.            )
  20.            ;;(setq s (vlax-invoke-method regex "Replace" str "")) ;字符串前缀
  21.            (setq str (vlax-invoke-method regex "Replace" str str2)) ;替换字符串
  22.     )
  23.     (setq str (strcat str "1"))
  24.   )
  25.   (vlax-put-property (vlax-ename->vla-object ent) 'TextString str) ;改变特性
  26.   (vlax-release-object regex)                               ;释放正则表达式
  27.   (princ)
  28. )
  29. ;;小数点后数字加1
  30. (defun C:w2 (/ ENT ENTLIST I QIANZ STR STR1 STR2 STRLEN1 STRLEN2)
  31.   (setq ent (car (entsel)))                                 ;选择文字
  32.   (setq entlist (entget ent))
  33.   (setq str (cdr (assoc 1 entlist)))                        ;文本内容
  34.   (setq strlen1 (strlen str))                               ;长度
  35.   (setq QianZ (vl-string-right-trim "0123456789" str))      ;去除右边数字
  36.   (setq strlen2 (strlen QianZ))                             ;前缀长度
  37.   (setq str1 (substr str (1+ strlen2) (- strlen1 strlen2))) ;小数点后数字
  38.   (if str1
  39.     (progn (setq str2 (itoa (1+ (atoi str1))))              ;提取的尾数+1
  40.            (setq i (- (strlen str1) (strlen str2)))
  41.            (if (> i 0)
  42.              (repeat i (setq str2 (strcat "0" str2)))
  43.            )
  44.     )
  45.     (setq str2 "1")
  46.   )
  47.   (setq str (strcat QianZ str2))
  48.   (entmod (subst (cons 1 str) (assoc 1 entlist) entlist))
  49.   (princ)
  50. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 144个

财富等级: 日进斗金

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 14:51 , Processed in 0.408854 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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