乐筑天下

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

[编程交流] 具有文字替代的标注

[复制链接]

14

主题

122

帖子

108

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 08:37:20 | 显示全部楼层 |阅读模式
有没有办法通过LISP或直接在ACAD中的选项,强制所有具有替代值的维度显示为不同的颜色?我们解雇的一个人有一个坏习惯,就是只更改尺寸文本,而不是实际修复图形。如果能够点击一个按钮,看看它是否找到任何被覆盖的维度,那就太好了。
回复

使用道具 举报

0

主题

33

帖子

33

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 08:43:55 | 显示全部楼层
我以前有一个lisp,检查所有关联的DIM是否正确。。。。几年没用了。。。。可能仍然有效。看看我能不能找到。找到了。不能保证它仍然有效,但你可能会盗取代码
 
  1. ;;------------------------------------------------
  2. ;; Programmer's Tool Box    Feb 1996
  3. ;; CADENCE MAGAZING:        Bill Kramer
  4. ;; Dimension Edits and Checking
  5. ;;
  6. ;;------------------------------------------------
  7. ;; LISTING 1:  MAIN FUNCTION C:DIMCHK
  8. ;;------------------------------------------------
  9. (defun C:DIMCHK ( / DIML    ;dimension layer name
  10.                    TOL     ;tolerance value
  11.                    SS1     ;selection set
  12.                    II      ;index into pick set
  13.                    JJ      ;index to distances
  14.                    D1      ;distances list
  15.                    D2      ;found flag
  16.                    P1 P2   ;points of dim entity
  17.                    TY TX   ;type / text  
  18.                    XB      ;text block of dim
  19.                    XT      ;text in text block
  20.                    VAL     ;value of dim text
  21.                    EL EN)  ;entity list and name
  22. (prompt
  23.   "\nDIMCHK: Check associative dimension values")
  24. (while (null DIML)
  25.     (setq DIML
  26.       (getstring
  27.          "\nLayer name for dimensions: "))
  28.     (if (or (= DIML "")
  29.             (null (tblsearch "LAYER" DIML)))
  30.       (setq DIML ;;nil
  31.         (prompt "\nLayer does not exist!"))
  32.     )
  33. )
  34. (setq TOL
  35.     (getdist "\nEnter tolerance <0.001>: "))
  36. (if (null TOL) (setq TOL 0.001))
  37. (setvar "CMDECHO" 0)
  38. (if (null (tblsearch "LAYER" "DIM_BAD"))
  39.     (command "_LAYER"
  40.              "_N" "DIM_BAD,DIM_OUTTOL"
  41.              "_C" "YELLOW" "DIM_OUTTOL"
  42.              "_C" "RED" "DIM_BAD"
  43.              "")
  44. )
  45. (setq SS1 (ssget "X" (list (cons 8 DIML))))
  46. (if SS1
  47.    (progn
  48.      (setq II 0)
  49.      (repeat (sslength SS1)
  50.         (if (GET_DIM_DATA) (progn
  51.            (setq JJ 1
  52.                  D2 nil)
  53.            (if (DIM_VALUES) (DIM_VALUE_CHECK))
  54.            (redraw EN)
  55.         ) (prompt " unable to translate text."))
  56.      );;end REPEAT
  57.    )
  58.    (prompt "\nNothing found!")
  59. )
  60. (princ)
  61. )
  62. ;;------------------------------------------------
  63. ;; Listing 2: Retrieve entity information into
  64. ;; global variables used by remainder of function
  65. ;; set.
  66. ;;
  67. (defun GET_DIM_DATA ()
  68.   (setq EN (ssname SS1 II)
  69.         II (1+ II)
  70.         EL (entget EN)
  71.   )
  72.   (redraw EN -3)
  73.   (cond
  74.     ((= (cdr (assoc 0 EL)) "DIMENSION")
  75.        (setq P10 (cdr (assoc 10 EL))
  76.              P13 (cdr (assoc 13 EL))
  77.              P14 (cdr (assoc 14 EL))
  78.              P15 (cdr (assoc 15 EL))
  79.              TY (cdr (assoc 70 EL));;type
  80.              TX (cdr (assoc 1 EL)) ;;text
  81.              XB (cdr (assoc 2 EL)) ;;block name
  82.              XT (BLOCK_TEXT XB) ;;text in block
  83.        )
  84.        ;;check to see if dimension location flag
  85.        ;;is set. Remove if found.
  86.        (if (> TY 70) (setq TY (- TY 128)))
  87.        ;;
  88.        (if (or
  89.              (= TX "") ;;nothing in text or
  90.              (wcmatch TX "*<>*")) ;;variable
  91.          (progn  ;;then look in block
  92.             (prompt "\nAssociative dim,")
  93.             (setq VAL XT)
  94.          )
  95.          (progn ;;else look in text
  96.             (prompt "\nAssoc w/ text override,")
  97.             (setq VAL TX)
  98.          )
  99.        )
  100.        ;;Convert VAL to distance value
  101.        (setq VAL
  102.           (distof
  103.             (Convert_Mtext_Dim VAL)))
  104.     )
  105.     (t
  106.       (prompt
  107.         "\nNon-associative dimension object: ")
  108.        (prompt (cdr (assoc 0 EL)))
  109.     )
  110.   )
  111. )
  112. ;;------------------------------------------------
  113. ;; Listing 3:  Calculate dim distances
  114. ;;
  115. (defun DIM_VALUES ( / TYP)
  116.   (setq TYP (logand TY 7))
  117.   (cond
  118.     ((zerop TYP) ;;vert/hor
  119.       (prompt " VER|HOR")
  120.       (setq D1
  121.          (list
  122.            (abs (- (car P13) (car P14)))
  123.            (abs (- (cadr P13) (cadr P14)))
  124.            (distance P13 P14)
  125.          )
  126.       )
  127.     )
  128.     ((= 4 TYP) ;;radius
  129.       (prompt " RAD")
  130.       (setq D1
  131.         (list
  132.           (distance P10 P15)
  133.         )
  134.       )
  135.     )
  136.     ((= 3 TYP) ;;diameter
  137.       (prompt " DIA")
  138.       (setq D1
  139.         (list
  140.           (distance P10 P15)
  141.         )
  142.       )
  143.     )
  144.     ((= 1 TYP) ;;aligned
  145.       (prompt " ALI")
  146.       (setq D1
  147.          (list
  148.            (distance P13 P14)
  149.          )
  150.       )
  151.     )
  152.     ((= 2 TYP) ;;angular
  153.       (prompt " ANG, not checked.")
  154.       (setq D1 nil)
  155.     )
  156.     (t
  157.       (prompt " dim check not available.")
  158.       (setq D1 nil) ;;ignored
  159.     )
  160.   );;end COND
  161. )
  162. ;;------------------------------------------------
  163. ;; Listing 4:  test dimension against tolerance
  164. ;;
  165. (defun DIM_VALUE_CHECK ()
  166.   (foreach DD D1
  167.     (cond
  168.       ((equal DD VAL (/ TOL 10.0))
  169.           (setq D2 JJ))
  170.       ((and (null D2) (equal DD VAL TOL))
  171.           (setq D2 (* -1 JJ)))
  172.     )
  173.     (setq JJ (1+ JJ))
  174.   )
  175.   (if D2 ;;found something      
  176.      (if (minusp D2)
  177.        (progn
  178.          (prompt
  179.            ", YELLOW: not exact, within tol.")
  180.          (entmod
  181.            (subst
  182.              (cons 8 "DIM_OUTTOL")
  183.              (assoc 8 EL)     
  184.              EL))
  185.        );end PROGN
  186.        (prompt ", exact or <= 10% tol. accepted.")
  187.      )
  188.      (progn ;;nothing close
  189.        (prompt ", RED: outside tolerance.")
  190.        (entmod
  191.          (subst
  192.            (cons 8 "DIM_BAD")
  193.            (assoc 8 EL)
  194.            EL))
  195.      )
  196.   )
  197. )
  198. ;;------------------------------------------------
  199. ;; Listing 5:  return text value from block
  200. ;; definition entities.
  201. ;;
  202. (defun BLOCK_TEXT (NM / EL EN)
  203. (setq EL (tblsearch "BLOCK" NM))
  204. (if EL (progn
  205.    (setq EN (cdr (assoc -2 EL))
  206.          EL (entget EN)
  207.    )
  208.    (while
  209.      (and EN
  210.           (not (or
  211.             (= "MTEXT" (cdr (assoc 0 EL)))
  212.             (= "TEXT" (cdr (assoc 0 EL))))))
  213.       (setq EN (entnext EN))
  214.       (if EN (setq EL (entget EN)))
  215.    )
  216.    (if EN
  217.       (cdr (assoc 1 EL))
  218.    )
  219. ))
  220. )
  221. ;;------------------------------------------------
  222. ;; Listing 6: Convert MTEXT dimension value
  223. ;; number, seek out the real number information
  224. ;; bypassing all [url="file://xx/"]\\xx[/url]; type stuff and looking
  225. ;; inside { } brackets
  226. ;;
  227. (defun CONVERT_MTEXT_DIM (TX / RES CH Skip)
  228.   (setq RES "")
  229.   (while (> (strlen TX) 0)
  230.     (setq CH (substr TX 1 1)
  231.           TX (substr TX 2)
  232.     )
  233.     (cond
  234.       ((= CH "\") ;;start of control sequence
  235.          (setq CH (substr TX 1 1))
  236.          (cond
  237.            ((= CH "U") ;;unicode skip over
  238.             (setq TX (substr TX 7)
  239.                   CH "")
  240.            )
  241.            ((member CH  ;;control character?
  242.               '("e" "n" "r" "t"))
  243.             (setq TX (substr TX 2)
  244.                   CH "")
  245.            )
  246.            ((member CH  ;;octal number?
  247.               '("0" "1" "2" "3" "4" "5" "6" "7"))
  248.             (setq TX (substr TX 4)
  249.                   CH "")
  250.            )
  251.            (t
  252.             (setq Skip 'T) ;;other command
  253.            )
  254.          )
  255.       )
  256.       ((= CH "}")  ;;end of paragraph
  257.          (setq Skip 'T)
  258.          (if (distof RES)
  259.              (setq TX "")
  260.              (setq RES "")
  261.          )
  262.       )
  263.       ((= CH "%") ;;control character?
  264.          (if (= (substr TX 1 1) "%")
  265.            (setq TX (substr TX 2)
  266.                  CH "")
  267.          )
  268.       )
  269.       ((= CH "R") ;;radius marker?
  270.          (setq CH "") ;;gamble it is
  271.       )
  272.     )
  273.     ;;
  274.     (if (and (null Skip) (< (ascii CH) 128))
  275.        (setq RES (strcat RES CH)))
  276.     ;;
  277.     (cond
  278.       ((= CH ";")  ;;end of control sequence
  279.          (setq Skip nil)
  280.       )
  281.       ((= CH "{")  ;;start of paragraph
  282.          (setq Skip nil)
  283.       )
  284.     )
  285.   )
  286.   RES
  287. )
  288. ;;-----------------------------------------------  EOF

 
  1. (sssetfirst nil (ssget "_X" '((0 . "*DIMENSION") (-4 . "<OR") (1 . "*?*") (-3 ("ACAD")) (-4 . "OR>"))))

 
对于这两种类型:
 
  1. (defun c:OD (/ Fdim)
  2. (setq  FDim
  3.     (ssget
  4.       "_X"
  5.       '((0 . "*DIMENSION")
  6.         (-4 . "<OR")
  7.         (1 . "*?*")
  8.         (-3 ("ACAD"))
  9.         (-4 . "OR>")
  10.         )
  11.       )
  12.    )
  13. (repeat (sslength FDim)
  14.    (vla-put-TextColor
  15.      (vlax-ename->vla-object (ssname Fdim 0))
  16.      5
  17.      )
  18.    (ssdel (ssname Fdim 0) Fdim)
  19.    )
  20. )
回复

使用道具 举报

10

主题

895

帖子

887

银币

初来乍到

Rank: 1

铜币
49
发表于 2022-7-6 08:49:21 | 显示全部楼层
只需突出显示具有覆盖的内容:
 
  1. (defun c:OD (/ Fdim)
  2. (vl-load-com)
  3. (setq aDoc
  4.     (vla-get-ActiveDocument (vlax-get-acad-object)) clr 5)
  5.    (if (ssget "_X" '((0 . "*DIMENSION")))
  6.      (progn
  7.        (vlax-for
  8.           itm (setq
  9.                 fdim
  10.                  (vla-get-ActiveSelectionSet
  11.                    (vla-get-ActiveDocument (vlax-get-acad-object))
  12.                    )
  13.                 )
  14.          (if (not (eq (vla-get-TextOverride itm) ""))
  15.            (vla-put-TextColor itm clr)
  16.            )
  17.          )
  18.          (vla-delete fdim)
  19.          )
  20.        )
  21.      )

 
M、 R。
回复

使用道具 举报

7

主题

340

帖子

338

银币

初来乍到

Rank: 1

铜币
37
发表于 2022-7-6 08:53:10 | 显示全部楼层
  1. (defun c:chkdims ( / ss ssn ent entA )
  2. (vl-load-com)
  3. (setq ss (ssget "_X" '((0 . "*DIMENSION")) ))
  4. (repeat (setq ssn (sslength ss))
  5.    (setq ent (ssname ss (setq ssn (1- ssn))))
  6.    (setq entA (vlax-ename->vla-object ent))
  7.    (if (or (= "" (vla-get-textoverride entA)) (wcmatch (vla-get-textoverride entA) "*<>*"))
  8.      (redraw ent 1)
  9.      (redraw ent 3)
  10.    )
  11. )
  12. (princ)
  13. )  

 
接得好,先生。
回复

使用道具 举报

14

主题

122

帖子

108

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 08:58:55 | 显示全部楼层
  1. (wcmatch (vla-get-textoverride entA) "*<>*"))
回复

使用道具 举报

1

主题

96

帖子

101

银币

初来乍到

Rank: 1

铜币
3
发表于 2022-7-6 09:01:17 | 显示全部楼层
 
你明白了
回复

使用道具 举报

0

主题

96

帖子

97

银币

限制会员

铜币
-1
发表于 2022-7-6 09:05:05 | 显示全部楼层
回复

使用道具 举报

1

主题

96

帖子

101

银币

初来乍到

Rank: 1

铜币
3
发表于 2022-7-6 09:10:21 | 显示全部楼层
 
you? or the culprit
回复

使用道具 举报

6

主题

122

帖子

118

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 09:15:53 | 显示全部楼层
Here is one that does what you are looking for
http://autocadtips.wordpress.com/2011/10/27/autolisp-find-dodgy-dimensions/
 
Here is another that might be a little too much but is still usefull
http://autocadtips.wordpress.com/2011/10/27/autolisp-dodgy-dimension-detector/
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:18:54 | 显示全部楼层
Non Annotative dimensions:
 
  1. (sssetfirst nil (ssget "_X" '((0 . "*DIMENSION") (-4 . ""))))
 
  1. (defun c:OD (/ Fdim) (setq  FDim    (ssget      "_X"      '((0 . "*DIMENSION")        (-4 . "")        )      )   ) (repeat (sslength FDim)   (vla-put-TextColor     (vlax-ename->vla-object (ssname Fdim 0))     5     )   (ssdel (ssname Fdim 0) Fdim)   ) )
 
For Both types:
 
  1. (defun c:OD (/ Fdim) (vl-load-com) (setq aDoc    (vla-get-ActiveDocument (vlax-get-acad-object)) clr 5)   (if (ssget "_X" '((0 . "*DIMENSION")))     (progn       (vlax-for          itm (setq                fdim                 (vla-get-ActiveSelectionSet                   (vla-get-ActiveDocument (vlax-get-acad-object))                   )                )         (if (not (eq (vla-get-TextOverride itm) ""))           (vla-put-TextColor itm clr)           )         )         (vla-delete fdim)         )       )     )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 09:23 , Processed in 0.627915 second(s), 72 queries .

© 2020-2025 乐筑天下

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