明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1039|回复: 5

[提问] 公差标注筛选

[复制链接]
发表于 2025-7-31 08:44:31 | 显示全部楼层 |阅读模式
处理客户图纸时,一些带有公差的尺寸,通常需要重点关注,图形特别多时,找这些尺寸费时间


写了一个lsp程序,通过判断组码71的值,是否非0;来筛选所有的标注。

发现这个思想行不通,总会把常规的标注,toldisplay值是0的,也选中;

感觉单纯靠组码来判断,是有问题的;

大神们有什么好想法,还请指教
回复

使用道具 举报

发表于 2025-7-31 09:34:56 | 显示全部楼层
标注样式替代可适用于标注、引线和公差图元。适用于这些图元的所有替代都将作为扩展数据存储在图元中。替代标注变量组码和相关值包含在组 1002 控制字符串中。下例显示 DIMTOL 和 DIMCLRE 变量已被替代的标注图元的扩展数据。

(setq diment (car (entsel))) ; 选择标注图元
(setq elst (entget diment '("ACAD"))) ; 获取图元定义列表
(assoc -3 elst) ; 仅提取扩展数据  
此段代码返回下列内容:

(-3 ("ACAD" 扩展数据的 ACAD APPID 段的开始
  (1000 . "DSTYLE") (1002 ."{") 标注样式小节的开始
  (1070 . 177) (1070 . 3) DIMCLRE(代码 177)替代 + 值 (3)
  (1070 . 71) (1070 . 1) DIMTOL(代码 71)替代 + 值 (1)
  (1002 . "}") )) 标注样式小节和 ACAD 段的结束


1.先看标注样式筛选有公差设置,如果该标注样式下有公差,就没有扩展数据。
2.标注样式没有公差,如果该标注样式下公差,则会有扩展数据,并且扩展数据会出现71组码用来代替标标注样式的71
回复 支持 反对

使用道具 举报

发表于 2025-7-31 09:45:26 | 显示全部楼层
用了小菜的选择易,好多程序不需要写,或者说可以简化了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-31 09:56:04 | 显示全部楼层
本帖最后由 lengxiaxi 于 2025-7-31 09:58 编辑



搞累了,ai写了一个,总是有一种情况,无法筛选出来;如下图青色显示的标注,按理说,也应该备选中;图形见附件;
  1. (defun c:F10 (/ ss i ent entData txt tolDisplay resultSS count ihandle)
  2.   (vl-load-com)
  3.   (setvar "CMDECHO" 0)
  4.   (setq resultSS (ssadd))
  5.   (setq count 0)
  6.   
  7.   ;; 仅选择尺寸标注对象
  8.   (if (setq ss (ssget "_X" '((0 . "DIMENSION"))))
  9.     (progn
  10.       (princ "========================================\n")
  11.       (princ "精确公差标注扫描(严格逻辑)\n")
  12.       (princ "========================================\n")
  13.       
  14.       (setq i 0)
  15.       (repeat (sslength ss)
  16.         (setq ent (ssname ss i))
  17.         (setq entData (entget ent))
  18.         (setq ihandle (cdr (assoc 5 entData))) ; 实体句柄
  19.         (setq txt (cdr (assoc 1 entData)))    ; 标注文本
  20.         
  21.         ;; 关键优化:获取真实的组码71值
  22.         (setq tolDisplay
  23.           (cond
  24.             ((assoc 71 entData) (cdr (assoc 71 entData))) ; 获取组码71值
  25.             (0) ; 如果组码71不存在,默认值为0
  26.           )
  27.         )
  28.         
  29.         ;; 开始处理当前标注
  30.         (princ (strcat "\n[标注" (itoa (1+ i)) "] 句柄: " ihandle))
  31.         (princ (strcat "\n  标注内容: "" (if txt txt "无文本") """))
  32.         (princ (strcat "\n  真实组码71值: " (itoa tolDisplay)))
  33.         
  34.         (setq found nil)
  35.         
  36.         ;; 精确检测逻辑 (根据您的图片优化)
  37.         (cond
  38.           ;; 情况1: 标注文本含有±/%%P符号
  39.           ((and txt (or
  40.                     (wcmatch txt "*±*")     ; 含±符号(如"200±0.5")
  41.                     (wcmatch txt "*%%P*")  ; 含%%P编码
  42.                     (wcmatch txt "*\\S?*") ; 堆叠文本中的上标+(如"2-?1.0??·2?")
  43.                    ))
  44.             (princ "\n  → 检测到文本公差符号")
  45.             (setq found T))
  46.          
  47.           ;; 情况2: 组码71为1/2/3且非"<>"标注
  48.           ((and (<= 1 tolDisplay 3)
  49.                 (not (equal txt "<>")))
  50.             (princ "\n  → 检测到有效公差组码")
  51.             (setq found T))
  52.          
  53.           (t (princ "\n  → 无公差特征"))
  54.         )
  55.         
  56.         ;; 结果记录与输出
  57.         (cond
  58.           (found
  59.             (ssadd ent resultSS)
  60.             (setq count (1+ count))
  61.             (princ " ★ 标记为公差标注"))
  62.           ((and (<= 1 tolDisplay 3) (equal txt "<>"))
  63.             (princ " ? 忽略(自动生成公差)"))
  64.           (t
  65.             (princ " ? 忽略(无公差)"))
  66.         )
  67.         
  68.         (princ "\n────────────────────────────────────")
  69.         (setq i (1+ i))
  70.       )
  71.       
  72.       ;; 最终结果
  73.       (princ "\n\n============= 扫描结果 =============")
  74.       (princ (strcat "\n扫描标注总数: " (itoa (sslength ss))))
  75.       (princ (strcat "\n发现公差标注: " (itoa count)))
  76.       (cond
  77.         ((> count 0)
  78.           (sssetfirst nil resultSS)
  79.           (princ "\n? 公差标注已高亮显示(按ESC退出选择状态)"))
  80.         (t
  81.           (princ "\n?? 未发现真实公差标注"))
  82.       )
  83.     )
  84.     (princ "\n? 图中未找到标注对象")
  85.   )
  86.   (setvar "CMDECHO" 1)
  87.   (princ)
  88. )

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2025-7-31 14:53:13 | 显示全部楼层
只需要分类多行文字格式就行了吧
https://www.cnblogs.com/JJBox/p/18534134
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-1 11:35:28 | 显示全部楼层
你有种再说一遍 发表于 2025-7-31 14:53
只需要分类多行文字格式就行了吧
https://www.cnblogs.com/JJBox/p/18534134

感谢老板;通过文本解析判断堆叠字符,程序中42行代码即是,已包含这个情况
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2026-1-27 04:06 , Processed in 0.154399 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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