Artek 发表于 2022-7-5 13:12:32

t计算备选方案

有人有我可以使用的重新编号lisp例程吗?我正在寻找比autocad的tcount命令更简单的使用方法。
 
条件:
1.将对当前图形中的所有数字或带有前缀的数字(不包括外部参照和块)扣除或添加给定值(x表示附加值,x表示扣除值)。
2、提示输入起始编号和结束编号。(将代码限制在这些给定数字内)
3.必须包括带有任何前缀的文本,如A1、COL1等(中间无空格)
5、保留所有原文属性。
 
非常感谢你。

ReMark 发表于 2022-7-5 13:16:46

你查过李的增量编号套件了吗?我认为这可能值得一看。
 
http://lee-mac.com/numinc.html

Lee Mac 发表于 2022-7-5 13:21:14

谢谢你的推荐
 
我还推荐IrnéBarnard的“AutoIncr”-LISP&DCL,可从caddons存储库获得。

Artek 发表于 2022-7-5 13:22:58

非常感谢您的建议。我要找的是一种更简单、直接到点的编码,它不涉及选择或对话框。只需输入增量/减量编号、开始编号和结束编号,就可以了。正如他们所说,越简单越好。

ReMark 发表于 2022-7-5 13:27:37

有几个自定义lisp例程可以“简单”地完成这项任务。互联网搜索应该可以找到其中一个或多个。

Artek 发表于 2022-7-5 13:31:03

 
非常感谢你的建议。

ReMark 发表于 2022-7-5 13:31:40

在这里可以找到两个用于递增数字的宏。。。http://www.cadeverything.com/help/showthread.php/2826-Automatic-incrementing-of-numbers-in-LT
 
宏是最简单的。将宏指定给按钮。
 
具有递增编号的引线lisp例程可以在此处找到。。。http://www.theswamp.org/index.php?topic=25254.0
 
下载INCNUM的副本。lsp在此。。。http://autocad.xarch.at/code/tanzillo/ghindex.html
 
增量文本和增量文本块lisp例程可以在这里找到。。。http://www.cadlispandtips.com/2011/01/lisp-increment-text.html

Artek 发表于 2022-7-5 13:34:51

再次感谢您抽出时间。那我就得走很长的路了。干杯
 
 
对不起,我放弃得太早了。我在你的一个链接上找到了下面的代码,非常接近我要查找的内容。唯一缺少的是“开始”和“结束”数字提示进行选择。有没有人可以帮助修改代码以包含这些行?
 
 

(defun extract (s / i prefix number suffix)
(setq i 0 prefix "" number "" suffix "")
(repeat (strlen s)
   (setq c (substr s (setq i (1+ i)) 1))
   (cond
      ((and (wcmatch c "#")
                (eq suffix ""))
         (setq number (strcat number c)))   ; 3
      ((and (eq c "-")
                (= suffix number "")
                (wcmatch
                   (substr s (1+ i) 1) "#"))
         (setq number (strcat number c)))   ; 3
      ((eq number "")
         (setq prefix (strcat prefix c)))   ; 3
      (t (setq suffix (strcat suffix c))))) ; 5
(if (not (zerop (strlen number)))         ; 3
      (list prefix number suffix)
)
)
(defun C:INCNUM ( / ss off e d s s1 i fltr)
(setq fltr '((0 . "TEXT") (1 . "*#*")))
(cond
   ((not (setq ss (ssget fltr))))               ; 4
   ((not (setq off (getint "\nIncrement: ")))); 4
   ((zerop off)
      (princ "\nValue must be non-zero."))
   (t (setvar "cmdecho" 0)
      (command ".undo" "g")
      (repeat (setq i (sslength ss))
         (setq e (ssname ss (setq i (1- i)))   ; 3
               d (entget e)
               s (cdr (assoc 1 d)))            ; 3
         (if (setq s (extract s))            ; 3
         (entmod
             (list
               (cons -1 e)
               (cons 1
               (strcat
                   (car s)
                   (itoa
                      (+ off (atoi (cadr s)))) ; 4
                   (caddr s)))))))             ; 7
      (command ".undo" "e")))                  ; 3
(princ)
)

neophoible 发表于 2022-7-5 13:39:24

Artek,我不确定你的代码是否像你想象的那么简单。你提到一个起始数字和一个结束数字。这些是做什么用的?毕竟,您说过要在图形中添加/减去所有现有的文字编号。有什么好处?一般来说,最好用示例展示您希望程序做什么,并解释示例。

Artek 发表于 2022-7-5 13:41:32

 
谢谢你的邀请。使用上述代码(IncNum)作为参考,我需要它提示用户要处理的数字限制(开始和结束提示),而不是选择带有数字的文本进行递增/递减。代码只处理这两个给定值内的数字。假设我在我的画上有数百条文字,文字从“Unit-01”到“Unit-300”。如果我需要在100单元之后再加5个单元,那么我必须将从101单元到300单元的所有文本增加5。因此,代码将提示以下内容:增量值为5,起始数字为101,结束数字为300。代码只会将给定范围(101-300)内的文本增加5,并保留1-100不变。因此,01单元到100单元的文本保持不变,101单元。。。300号机组将改为106号机组。。。。分别为305号机组。
 
 
现有文本:
01号机组。。。。。单元-300
 
提示:
增量值:5;或输入-扣除值
起始编号:101;提示1
结束编号:300;提示2
 
请注意:用于替换IncNum代码中的选择提示的范围(提示1和2)。
 
结果:
01号机组。。。。。单元-100->不变
101单元。。。。单元-300->单元-106。。。。。305单元
 
图纸中的文本有时没有按数字顺序排列,因此很难手动定位和选择,因此需要开始和结束数字。该图纸也有子文本,其编号与主文本相同,但前缀不同(如Bath-01…Bath-300),也应更新。因此,代码应该适用于所有带有数字的文本,而不管其前缀如何,有或没有分隔符(例如“-”或空格),但属性除外,即块或外部参照中的属性。我认为,经过一些快速测试,“IncNum”(如上所述)已经满足了所有条件,只需要包含起始和结束(范围)数字的编码。如果你需要更多的例子,请告诉我。
 
我知道我要找的不是那么简单。我只是说,与早期建议的提供了许多有用特性的优秀代码相比。我只是在寻找一个可以实现两个功能的函数,即在给定范围内增加或减少文本中的数字。
 
再次感谢!
页: [1] 2
查看完整版本: t计算备选方案