乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 20|回复: 19

[编程交流] 自动编号?

[复制链接]

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 19:44:09 | 显示全部楼层 |阅读模式
我需要一种方法来创建数字序列中的文本字符串。我正在使用平均得分为42分的终端机架。术语架垂直编号为1-42。然而,这个数字非常。。。i、 e.术语框架可以编号为1-42、43-84,以此类推。。。有42个点需要分配数字,只要列表可以垂直或水平填充,它将为我工作。我附上了一个图片什么是一个热门术语机架看起来像。。。这个数字序列是从上到下递减的,但我通常是从上到下递减的。
204412lrhyereshgnrrrva.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:48:37 | 显示全部楼层
这是我写的一个旧的,可以修改为“自动编号”。
 
  1. ;; ============ Num.lsp ===============
  2. ;;
  3. ;;  FUNCTION:
  4. ;;  Will sequentially place numerical
  5. ;;  text upon mouse click, with optional
  6. ;;  prefix and suffix.
  7. ;;
  8. ;;  SYNTAX: num
  9. ;;
  10. ;;  AUTHOR:
  11. ;;  Copyright (c) 2009, Lee McDonnell
  12. ;;  (Contact Lee Mac, CADTutor.net)
  13. ;;
  14. ;;  PLATFORMS:
  15. ;;  No Restrictions,
  16. ;;  only tested in ACAD 2004.
  17. ;;
  18. ;;  VERSION:
  19. ;;  1.0  ~  05.04.2009
  20. ;;
  21. ;; ====================================
  22. (defun c:num  (/ vlst ovar dVars tmpVars pt)
  23. (setq    vlst '("OSMODE" "CLAYER")
  24.    ovar (mapcar 'getvar vlst))
  25. (setvar "OSMODE" 0)
  26. (or (tblsearch "LAYER" "NumText")
  27.      (vla-put-color
  28.    (vla-add
  29.      (vla-get-layers
  30.        (vla-get-ActiveDocument
  31.          (vlax-get-acad-object))) "NumText") acYellow))
  32. (setq dVars '(sNum inNum Pref Suff))
  33. (mapcar '(lambda (x y) (or (boundp x) (set x y))) dVars '(1 1 "" ""))
  34. (setq tmpVars (list (getreal (strcat "\nSpecify Starting Number <" (rtos sNum 2 2) ">: "))
  35.              (getreal (strcat "\nSpecify Increment <" (rtos inNum 2 2) ">: "))
  36.              (getstring (strcat "\nSpecify Prefix <" (if (eq "" Pref) "-None-" Pref) ">: "))
  37.              (getstring (strcat "\nSpecify Suffix <" (if (eq "" Suff) "-None-" Suff) ">: "))))
  38. (mapcar '(lambda (x y) (or (or (not x) (eq "" x)) (set y x))) tmpVars dVars)
  39. (while (setq pt (getpoint "\nClick for Text... "))
  40.    (Make_Text pt (strcat Pref (rtos sNum 2 2) Suff))
  41.    (setq sNum (+ sNum inNum)))
  42. (mapcar 'setvar vlst ovar)
  43. (princ))
  44. (defun Make_Text  (txt_pt txt_val)
  45. (entmake (list '(0 . "TEXT")
  46.         '(8 . "NumText")
  47.         (cons 10 txt_pt)
  48.         (cons 40 (max 2.5 (getvar "TEXTSIZE")))
  49.         (cons 1 txt_val)
  50.         '(50 . 0.0)
  51.         (cons 7 (getvar "TEXTSTYLE"))
  52.         '(71 . 0)
  53.         '(72 . 1)
  54.         '(73 . 2)
  55.         (cons 11 txt_pt))))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:52:40 | 显示全部楼层
作为快速修改-没有时间:
 
  1. ;; ============ Num.lsp ===============
  2. ;;
  3. ;;  FUNCTION:
  4. ;;  Will sequentially place numerical
  5. ;;  text upon mouse click, with optional
  6. ;;  prefix and suffix.
  7. ;;
  8. ;;  SYNTAX: num
  9. ;;
  10. ;;  AUTHOR:
  11. ;;  Copyright (c) 2009, Lee McDonnell
  12. ;;  (Contact Lee Mac, CADTutor.net)
  13. ;;
  14. ;;  PLATFORMS:
  15. ;;  No Restrictions,
  16. ;;  only tested in ACAD 2010.
  17. ;;
  18. ;;  VERSION:
  19. ;;  1.0  ~  05.04.2009
  20. ;;  2.0  ~  15.06.2009
  21. ;;
  22. ;; ====================================
  23. (defun c:num  (/ dVars tmpVars pt ang sNum*)
  24. (setq dVars '(sNum eNum inNum Spc Dir))
  25. (mapcar '(lambda (x y) (or (boundp x) (set x y))) dVars '(1 10 1 1 "X"))
  26. (setq tmpVars (list (getreal (strcat "\nSpecify Starting Number <" (rtos sNum 2 2) ">: "))
  27.                      (getreal (strcat "\nSpecify Ending Number <" (rtos eNum 2 2) ">: "))
  28.                      (getreal (strcat "\nSpecify Increment <" (rtos inNum 2 2) ">: "))
  29.                      (getreal (strcat "\nSpecify Spacing <" (rtos Spc 2 2) ">: "))))
  30. (initget "X Y")
  31. (setq tmpVars
  32.    (append tmpVars (list (getkword (strcat "\nSpecify Direction [X/Y] <" Dir ">: ")))))
  33. (mapcar '(lambda (x y) (or (not x) (set y x))) tmpVars dVars)
  34. (if (eq Dir "X") (setq ang 0) (setq ang (/ pi 2)))
  35. (if (setq pt (getpoint "\nSpecify Start Point: ") i 0 sNum* sNum)
  36.    (while (<= sNum* eNum)
  37.      (Make_Text (polar pt ang (* i Spc)) (rtos sNum* 2 2))
  38.      (setq sNum* (+ sNum* inNum) i (1+ i))))
  39. (princ))
  40. (defun Make_Text  (pt val)
  41. (entmake
  42.    (list
  43.      (cons 0 "TEXT")
  44.      (cons 8 (getvar "CLAYER"))
  45.      (cons 10 pt)
  46.      (cons 62 2)
  47.      (cons 40 (getvar "TEXTSIZE"))
  48.      (cons 1 val)
  49.      (cons 50 0.0)
  50.      (cons 7 (getvar "TEXTSTYLE"))
  51.      (cons 71 0)
  52.      (cons 72 1)
  53.      (cons 73 2)
  54.      (cons 11 pt))))
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 19:53:54 | 显示全部楼层
太好了,谢谢!这就成功了
 
我还有一个小问题,对正在中间和左边,我只需要它在左边。据我所知,lisp中没有这一行,我可以将其添加到其中吗?
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 19:58:26 | 显示全部楼层
我发现这个工具可以改变m和dtext的对齐方式,但对我来说太多了,我只需要在自动计数器工具中添加一行代码来设置左边的对齐方式。
 
  1.   (Make_Text (polar pt ang (* i Spc)) (rtos sNum* 2 2))
回复

使用道具 举报

0

主题

172

帖子

173

银币

限制会员

铜币
-1
发表于 2022-7-5 20:00:30 | 显示全部楼层
没关系我自己想出来的
 
这段代码给出了位置的证明代码
 
  1. ;                       ***  JUSTIFY.LSP  ***
  2. ;
  3. ; Changes the justification of text to:-
  4. ;       Left, Center, Right, Aligned, Middle, Fit,
  5. ;       Bottom left, center or right,
  6. ;       Middle left, center or right, OR
  7. ;       Top left, center of right
  8. ;
  9. (defun C:JUSTIFY (/ a a1 a2 a3 a4 t m n n1 p1
  10.                    p q j j0 n2 j1 j2 q1 index dummy)
  11. (setvar "cmdecho" 0)
  12. (graphscr)
  13. (prompt "\n *  Select text to change justification...")(terpri)
  14. (setq t (ssget))
  15. (if $just
  16.    (setq dummy nil)
  17.    (setq $just "C")
  18. )
  19. (prompt "\n *  Enter appropriate letter or select from pull down menu...")
  20. (initget "L C R A M F BL BC BR ML MC MR TL TC TR")
  21. (setq j1 (getkword (strcat
  22.    "\n *  L/C/R/M/A/F/BL/BC/BR/ML/MC/MR/TL/TC/TR: <" $just "> ")))
  23. (if (= j1 "")
  24.    (setq j1 $just)
  25.    (setq $just j1)
  26. )
  27. (setq m (sslength t)
  28.        index 0)
  29. (repeat m
  30.    (setq a (entget (ssname t index))
  31.          p (cdr (assoc 0 a)))
  32.    (if (= p "TEXT")
  33.      (progn
  34.         (setq j (assoc 72 a)
  35.               j2 (assoc 73 a)
  36.               p (assoc 10 a)
  37.               q (assoc 11 a)
  38.               j0 (cdr j))
  39.         (if (or (= j1 "L")(= j1 "C")(= j1 "R")(= j1 "M")
  40.                 (= j1 "BL")(= j1 "BC")(= j1 "BR")
  41.                 (= j1 "ML")(= j1 "MC")(= j1 "MR")
  42.                 (= j1 "TL")(= j1 "TC")(= j1 "TR"))
  43.           (if (= j0 0)
  44.             (progn
  45.               (setq p1 (cdr p)
  46.                     q1 (cons (car q) p1)
  47.                     n1 (subst q1 q a))
  48.             )
  49.             (progn
  50.               (setq q1 (cdr q)
  51.                     p1 (cons (car p) q1)
  52.                     n1 (subst p1 p a))
  53.             )
  54.           )
  55.         )
  56.         (if (or (= j1 "A")(= j1 "F"))
  57.           (progn
  58.             (prompt "\n ")
  59.             (prin1 (+ index 1))
  60.             (setq a1 (getpoint "\nEnter first alignment point...")
  61.                   a2 (getpoint "\nEnter second alignment point...")
  62.                   a3 (cons (car p) a1)
  63.                   a4 (cons (car q) a2)
  64.                   n1 (subst a3 p a)
  65.                   n2 (subst a4 q n1))
  66.           )
  67.         )
  68.         (cond ((= j1 "L")  (setq n (subst '(72 . 0) j n1))
  69.                            (setq n (subst '(73 . 0) j2 n)))
  70.               ((= j1 "C")  (setq n (subst '(72 . 1) j n1))
  71.                            (setq n (subst '(73 . 0) j2 n)))
  72.               ((= j1 "R")  (setq n (subst '(72 . 2) j n1))
  73.                            (setq n (subst '(73 . 0) j2 n)))
  74.               ((= j1 "A")  (setq n (subst '(72 . 3) j n2))
  75.                            (setq n (subst '(73 . 0) j2 n)))
  76.               ((= j1 "M")  (setq n (subst '(72 . 4) j n1))
  77.                            (setq n (subst '(73 . 0) j2 n)))
  78.               ((= j1 "F")  (setq n (subst '(72 . 5) j n2))
  79.                            (setq n (subst '(73 . 0) j2 n)))
  80.               ((= j1 "BL") (setq n (subst '(72 . 0) j n1))
  81.                            (setq n (subst '(73 . 1) j2 n)))
  82.               ((= j1 "BC") (setq n (subst '(72 . 1) j n1))
  83.                            (setq n (subst '(73 . 1) j2 n)))
  84.               ((= j1 "BR") (setq n (subst '(72 . 2) j n1))
  85.                            (setq n (subst '(73 . 1) j2 n)))
  86.               ((= j1 "ML") (setq n (subst '(72 . 0) j n1))
  87.                            (setq n (subst '(73 . 2) j2 n)))
  88.               ((= j1 "MC") (setq n (subst '(72 . 1) j n1))
  89.                            (setq n (subst '(73 . 2) j2 n)))
  90.               ((= j1 "MR") (setq n (subst '(72 . 2) j n1))
  91.                            (setq n (subst '(73 . 2) j2 n)))
  92.               ((= j1 "TL") (setq n (subst '(72 . 0) j n1))
  93.                            (setq n (subst '(73 . 3) j2 n)))
  94.               ((= j1 "TC") (setq n (subst '(72 . 1) j n1))
  95.                            (setq n (subst '(73 . 3) j2 n)))
  96.               ((= j1 "TR") (setq n (subst '(72 . 2) j n1))
  97.                            (setq n (subst '(73 . 3) j2 n)))
  98.         )
  99.         (entmod n)
  100.      )
  101.    )
  102.    (setq index (+ index 1))
  103. )
  104. (prin1)
  105. (princ "    Changed ")                ; Print total lines changed
  106. (princ index)
  107. (princ " text lines.")
  108. (terpri)
  109. (princ)
  110. )

 
所以我在自动计数工具中查找类似的内容,发现了这个
 
  1. (cond ((= j1 "L")  (setq n (subst '(72 . 0) j n1))
  2.                            (setq n (subst '(73 . 0) j2 n)))

 
我把这个改成了
  1. (cons 7 (getvar "TEXTSTYLE"))
  2.         '(71 . 0)
  3.         '(72 . 1)
  4.         '(73 . 2)

 
我在左下角找到了理由
 
我希望这条信息能帮助其他人,为大家干杯。
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 20:04:26 | 显示全部楼层
很好,Jammie。我希望在适当的时候更新这个程序。
回复

使用道具 举报

11

主题

117

帖子

133

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-5 20:09:02 | 显示全部楼层
已阅读
[code](defun c:num(/tmpVars pt ang sNum*)(setq dVars“(sNum eNum inNum Spc Pref Suff tsize Dir))(mapcar“(lambda(x y)(or(boundp x)(set x y)))dVars“(1 10 1 1”“”“2.5“x”)(setq tmpVars(list)(getreal(strcat”\n指定起始编号:)(getreal(strcat”\n指定结束编号:)(getreal(strcat”\n指定终止编号:)(getreal(strcat”\n指定增量:))(getreal(strcat“\n指定间距:”)(if(=(setq tmppref(getstring(strcat”\n指定前缀:”)“”)Pref tmppref)(if(=(setq tmpsuff(getstring(strcat“\n指定后缀:”))“”)Suff tmpsuff)(if(not(setq tmptsize(getreal(strcat“\n指定文本大小:”)))tsize tmptsize))(initget“X Y”)(setq tmpVars(追加tmpVars(list(getkword(strcat“\n指定方向[X/Y]:”)))(mapcar’(lambda(X Y)(或(非X)(set Y X)))tmpVars dVars)(if(eq Dir“X”)(setq ang 0)(setq ang(/pi 2))(if(setq pt(getpoint“\n指定起点:”)i 0 sNum*sNum)(而(
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:11:54 | 显示全部楼层
这很有效。。。不过有一个问题。。。如果希望前缀和后缀为空,我会键入什么?
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 20:14:11 | 显示全部楼层
另一个问题。。。。我该如何得到垂直Y形式的数字,从1到任意值,从上到下,而不是像现在这样从下到上?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-3 18:01 , Processed in 1.617690 second(s), 76 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表