本帖最后由 lengxiaxi 于 2025-7-31 09:58 编辑
搞累了,ai写了一个,总是有一种情况,无法筛选出来;如下图青色显示的标注,按理说,也应该备选中;图形见附件; - (defun c:F10 (/ ss i ent entData txt tolDisplay resultSS count ihandle)
- (vl-load-com)
- (setvar "CMDECHO" 0)
- (setq resultSS (ssadd))
- (setq count 0)
-
- ;; 仅选择尺寸标注对象
- (if (setq ss (ssget "_X" '((0 . "DIMENSION"))))
- (progn
- (princ "========================================\n")
- (princ "精确公差标注扫描(严格逻辑)\n")
- (princ "========================================\n")
-
- (setq i 0)
- (repeat (sslength ss)
- (setq ent (ssname ss i))
- (setq entData (entget ent))
- (setq ihandle (cdr (assoc 5 entData))) ; 实体句柄
- (setq txt (cdr (assoc 1 entData))) ; 标注文本
-
- ;; 关键优化:获取真实的组码71值
- (setq tolDisplay
- (cond
- ((assoc 71 entData) (cdr (assoc 71 entData))) ; 获取组码71值
- (0) ; 如果组码71不存在,默认值为0
- )
- )
-
- ;; 开始处理当前标注
- (princ (strcat "\n[标注" (itoa (1+ i)) "] 句柄: " ihandle))
- (princ (strcat "\n 标注内容: "" (if txt txt "无文本") """))
- (princ (strcat "\n 真实组码71值: " (itoa tolDisplay)))
-
- (setq found nil)
-
- ;; 精确检测逻辑 (根据您的图片优化)
- (cond
- ;; 情况1: 标注文本含有±/%%P符号
- ((and txt (or
- (wcmatch txt "*±*") ; 含±符号(如"200±0.5")
- (wcmatch txt "*%%P*") ; 含%%P编码
- (wcmatch txt "*\\S?*") ; 堆叠文本中的上标+(如"2-?1.0??·2?")
- ))
- (princ "\n → 检测到文本公差符号")
- (setq found T))
-
- ;; 情况2: 组码71为1/2/3且非"<>"标注
- ((and (<= 1 tolDisplay 3)
- (not (equal txt "<>")))
- (princ "\n → 检测到有效公差组码")
- (setq found T))
-
- (t (princ "\n → 无公差特征"))
- )
-
- ;; 结果记录与输出
- (cond
- (found
- (ssadd ent resultSS)
- (setq count (1+ count))
- (princ " ★ 标记为公差标注"))
- ((and (<= 1 tolDisplay 3) (equal txt "<>"))
- (princ " ? 忽略(自动生成公差)"))
- (t
- (princ " ? 忽略(无公差)"))
- )
-
- (princ "\n────────────────────────────────────")
- (setq i (1+ i))
- )
-
- ;; 最终结果
- (princ "\n\n============= 扫描结果 =============")
- (princ (strcat "\n扫描标注总数: " (itoa (sslength ss))))
- (princ (strcat "\n发现公差标注: " (itoa count)))
- (cond
- ((> count 0)
- (sssetfirst nil resultSS)
- (princ "\n? 公差标注已高亮显示(按ESC退出选择状态)"))
- (t
- (princ "\n?? 未发现真实公差标注"))
- )
- )
- (princ "\n? 图中未找到标注对象")
- )
- (setvar "CMDECHO" 1)
- (princ)
- )
|