明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 104|回复: 8

[提问] 拉线标注如何过滤多段线线宽?谢谢~

[复制链接]
发表于 昨天 17:40 | 显示全部楼层 |阅读模式
  1. (defun C:LXBZ (/ minsize          pt1         pt2        ss     intlist
  2.                                                         x            y           lds          olden         pts1        pts2   n      ens
  3.                                                         code   i           ptx          endata
  4.                                                 )
  5. (prompt "【快速拉线标注,产生交点的位置都会被认为是标注点】")
  6. (setvar "CMDECHO" 0)
  7. (YY_KAISHI_YY)      
  8.   (if ddf_old_minsize
  9.     (setq minsize ddf_old_minsize)
  10.   )
  11.         (command "undo" "be")
  12.   (if
  13.     (progn (initget "S")
  14.                         (setq pt1 (getpoint "\n指定标注起始方向/设置过滤尺寸(S)"))
  15.     )
  16.                 (progn
  17.                         (while (= "S" pt1)
  18.                                 (if (null ddf_old_minsize)
  19.                                         (setq minsize (getdist "\n请输入过滤尺寸,默认为<5mm>"))
  20.                                         (setq minsize (getdist        (strcat        "\n请输入过滤尺寸,上次输入为<"
  21.                                                                                                                                                                         (rtos ddf_old_minsize 2 2)
  22.                                                                                                                                                                         "mm>"
  23.                                                                                                                                                                 )
  24.                                                                                                 )
  25.                                         )
  26.                                 )
  27.                                 (if (null minsize)
  28.                                         (setq minsize 5)
  29.                                 )
  30.                                 (setq ddf_old_minsize minsize)
  31.                                 (initget "S")
  32.                                 (setq pt1 (getpoint "\n指定标注起始方向/设置过滤尺寸(S)"))
  33.                         )                                        ;end while
  34.                         (if (null minsize)
  35.                                 (setq minsize 5)
  36.                         )
  37.                         (setq ddf_old_minsize minsize)
  38.                         (setq pt2 (getpoint pt1 "\n指定标注方向"))
  39.                         (if (and pt1 pt2)
  40.                                 (progn
  41.                                         (setq pt1(polar pt1 (angle pt2 pt1) minsize))
  42.                                         (setq pt2(polar pt2 (angle pt1 pt2) minsize))                              
  43.                                 )                       
  44.                         )
  45.                         (if (setq ss (ssget "F" (list pt1 pt2)
  46.                              '((-4 . "<not")(0 . "*TEXT,DIMENSION,HATCH,INSERT")(-4 . "not>"))
  47.                                                                          )
  48.                                         )
  49.                                 (progn
  50.                                         (setq intlist ()
  51.                                                 endata  (ssnamex ss)
  52.                                         )
  53.                                         (foreach x endata
  54.                                                 (foreach y (cdddr x) (setq intlist (cons (cadr y) intlist)))
  55.                                         )
  56.                                         ;;点要排序一下才行,按从开始点的距离来排序
  57.                                         (setq lds (+ 10 (distance pt1 pt2)))
  58.                                         (setq intlist (vl-remove-if-not
  59.                                                                                                         '(lambda (x) (<= (distance x pt1) lds))
  60.                                                                                                         intlist
  61.                                                                                                 )
  62.                                         )
  63.                                         (setq
  64.                                                 intlist (vl-sort intlist
  65.                                                                                         '(lambda (x y)
  66.                                                                                                  (< (distance pt1 x) (distance pt1 y))
  67.                                                                                          )
  68.                                                                                 )
  69.                                         )
  70.                                         ;;这里开始写标注程序
  71.                                         (setq olden (entlast)
  72.                                                 ss    (ssadd)
  73.                                         )
  74.                                         (setq n 0)
  75.                                         (repeat (- (length intlist) 1)
  76.                                                 (setq pts1 (nth n intlist)
  77.                                                         pts2 (nth (1+ n) intlist)
  78.                                                 )
  79.                                                 (if (> (distance pts1 pts2) minsize)
  80.                                                         (ddf_entmakedim pts1 pts2)
  81.                                                 )
  82.                                                 (setq n (1+ n))
  83.                                         )                                ;end repeat
  84.                                         (while        (setq ens (entnext olden))
  85.                                                 (setq ss    (ssadd ens ss)
  86.                                                         olden ens
  87.                                                 )
  88.                                         )
  89.                                         (if(>(getvar"OSMODE")16384)(princ)(setvar"OSMODE"(+(getvar"OSMODE")16384)));;默认关闭捕捉
  90.                                         ;(if(>(getvar"OSMODE")16384)(setvar"OSMODE"(-(getvar"OSMODE")16384))(princ));默认打开捕捉
  91.                                         ;;下面开始来移动
  92.                                         (setq loop t);;;带捕捉的grread框架开始
  93.                                         (while loop                                       
  94.                                                 (setq gr (grread t 15 0) code (car gr) ptx (cadr gr))
  95.                                                 (cond
  96.                                                         ((= code 3)(redraw) (setq loop nil))  ; 鼠标左键
  97.                                                         ((= code 5)                           ; 鼠标移动
  98.                                                                 (redraw)
  99.                                                                 (if (>(getvar"OSMODE")16384)
  100.                                                                         (princ)
  101.                                                                         (setq ptx (osnappt nil ptx))
  102.                                                                 )        
  103.                                                                 ;;根据获取的动态点坐标更新程序-开始
  104.                                                                 (setq i 0)
  105.                                                                 (repeat (sslength ss)
  106.                                                                         (setq endata (entget (ssname ss i)))
  107.                                                                         (entmod (subst (cons 10 ptx) (assoc 10 endata) endata))
  108.                                                                         (setq i (1+ i))
  109.                                                                 ); end repeat               
  110.                                                                 ;;根据获取的动态点坐标更新程序-结束
  111.                                                         )
  112.                                                         ((member code '(2 6))                ; 键盘输入--"F3"键
  113.                                                                 (if(>(getvar"OSMODE")16384)(setvar"OSMODE"(-(getvar"OSMODE")16384))(setvar"OSMODE"(+(getvar"OSMODE")16384))));切换捕捉开关
  114.                                                         ;((= code 2)                         ; 键盘输入
  115.                                                         ;        (princ "\n键盘输入=")(princ pt))
  116.                                                         ((member code '(11 25)); 鼠标右击
  117.                                                                 (redraw)  (setq loop nil)
  118.                                                         )
  119.                                                 )
  120.                                         );end while;;;;;带捕捉的grread框架结束
  121.                                 )
  122.                         )                                        ;end if
  123.                 );end progn
  124.         )                                        ;end if
  125.         (princ "\n标注完成")
  126. (YY_END_YY)
  127.         (command "undo" "END")
  128.         (prin1)
  129. )                                        ;end
  130. (defun ddf_entmakedim (pt1 pt2 /)
  131.         (cond
  132.                 ((or (equal 0 (angle pt1 pt2) 0.001)
  133.                          (equal pi (angle pt1 pt2) 0.001)
  134.                  )
  135.                         (entmake
  136.                                 (list
  137.                                         '(0 . "DIMENSION")
  138.                                         '(100 . "AcDbEntity")
  139.                                         '(100 . "AcDbDimension")
  140.                                         (cons 10 pt1)
  141.                                         '(70 . 32)
  142.                                         '(1 . "")
  143.                                         '(100 . "AcDbAlignedDimension")
  144.                                         (cons 13 pt1)
  145.                                         (cons 14 pt2)
  146.                                         '(100 . "AcDbRotatedDimension")
  147.                                 )
  148.                         )
  149.                 )
  150.                 ((or (equal (/ pi 2) (angle pt1 pt2) 0.001)
  151.                          (equal (* pi 1.5) (angle pt1 pt2) 0.001)
  152.                  )
  153.                         (entmake
  154.                                 (list
  155.                                         '(0 . "DIMENSION")
  156.                                         '(100 . "AcDbEntity")
  157.                                         '(100 . "AcDbDimension")
  158.                                         (cons 10 pt1)
  159.                                         '(70 . 33)
  160.                                         '(1 . "")
  161.                                         '(100 . "AcDbAlignedDimension")
  162.                                         (cons 13 pt1)
  163.                                         (cons 14 pt2)
  164.                                 )
  165.                         )
  166.                 )
  167.                 ((and (null (equal 0 (angle pt1 pt2) 0.001))
  168.                          (null (equal (/ pi 2) (angle pt1 pt2) 0.001))
  169.                  )
  170.                         (entmake
  171.                                 (list
  172.                                         '(0 . "DIMENSION")
  173.                                         '(100 . "AcDbEntity")
  174.                                         '(100 . "AcDbDimension")
  175.                                         (cons 10 pt1)
  176.                                         '(70 . 33)
  177.                                         '(1 . "")
  178.                                         '(100 . "AcDbAlignedDimension")
  179.                                         (cons 13 pt1)
  180.                                         (cons 14 pt2)
  181.                                 )
  182.                         )
  183.                 )
  184.         )                                        ;end cond
  185. )                                        ;end
  186. (prin1)
  187. ;;; grread捕捉子函数
  188. (defun osnappt (name pt / color d h k lst nearpt nearpt2 osmo pt1 pt2 pt3 pt4 pt5 ptx pty x)
  189.         (if name (entdel name))
  190.         (redraw)
  191.         (if (< (getvar "osmode") 16384);;打开捕捉
  192.                 (progn
  193.                         (setq color (vla-get-autosnapmarkercolor (vla-get-drafting (vla-get-preferences (vlax-get-acad-object))))
  194.                                 h (/ (getvar "viewsize") (cadr (getvar "screensize"))) d (getvar "pickbox")
  195.                                 lst (list (* d h) (* (- d 0.5) h) (* (+ d 0.5) h)) k (* 1.5 d h))
  196.                         (if (setq nearpt (osnap pt "_END,_CEN,_NOD,_QUA,_INS,_TAN,_EXT"))(setq osmo 1))
  197.                         (if (and(setq nearpt2 (osnap pt "_NEA"))(not (equal nearpt nearpt2 k)))
  198.                                 (setq osmo 2 nearpt nearpt2))
  199.                         (if (and(setq nearpt2 (osnap pt "_MID"))(equal nearpt nearpt2 k))
  200.                                 (setq osmo 3 nearpt nearpt2))
  201.                         (if (and(setq nearpt2 (osnap pt "_INT"))(equal nearpt nearpt2 k))
  202.                                 (setq osmo 4 nearpt nearpt2))))
  203.         (if name(entdel name))
  204.         (if nearpt
  205.                 (progn
  206.                         (setq ptx (car nearpt)pty (cadr nearpt))
  207.                         (foreach x lst
  208.                                 (setq pt1 (list (- ptx x) (- pty x)) pt2 (list (+ ptx x) (- pty x))
  209.                                         pt3 (list (+ ptx x) (+ pty x)) pt4 (list (- ptx x) (+ pty x))
  210.                                         pt5 (list ptx (+ pty x)))
  211.                                 (cond
  212.                                         ((= osmo 1)(grvecs (list color pt1 pt2 pt2 pt3 pt3 pt4 pt4 pt1)))
  213.                                         ((= osmo 2)(grvecs (list color pt1 pt2 pt2 pt4 pt3 pt4 pt3 pt1)))
  214.                                         ((= osmo 3) (grvecs (list color pt1 pt2 pt2 pt5 pt5 pt1)))
  215.                                         ((= osmo 4) (grvecs (list color pt1 pt3 color pt2 pt4)))))
  216.                         (setq pt nearpt)))
  217.         pt
  218. )


拉线标注原帖
这是找到的最好的一段拉线标注代码了,但有个小问题:如果矩形的线条有宽度,就会出现这样的情况,请问怎么修正啊?搜索了很久,也用DeepSeek寻求帮助都没有解决。矩形上方标注为现有插件生成,下方为想要标注尺寸,谢谢~



回复

使用道具 举报

发表于 昨天 18:12 | 显示全部楼层
为啥用不了啊,原贴在哪里啊
回复 支持 反对

使用道具 举报

发表于 昨天 18:21 | 显示全部楼层
这个问题不是很简单吗? (b.X-a.X)/2
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 19:22 来自手机 | 显示全部楼层
332398174 发表于 2025-5-21 18:12
为啥用不了啊,原贴在哪里啊

能用,但功能还不完全是我想要的,点“拉线标注原帖”可跳转~
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 19:29 来自手机 | 显示全部楼层
你有种再说一遍 发表于 2025-5-21 18:21
这个问题不是很简单吗? (b.X-a.X)/2

求大佬详细指导啊~
回复 支持 反对

使用道具 举报

发表于 昨天 20:48 | 显示全部楼层

;; 交点连标

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 22:59 来自手机 | 显示全部楼层
xyp1964 发表于 2025-5-21 20:48
;; 交点连标

求版主指导修改啊…那个QDIM只可以选择横向的,并且不能像你的一样标注首位总的~
回复 支持 反对

使用道具 举报

发表于 昨天 23:10 | 显示全部楼层
逗亦斗霸 发表于 2025-5-21 22:59
求版主指导修改啊…那个QDIM只可以选择横向的,并且不能像你的一样标注首位总的~

为啥我的用不了啊,一选就OVER
回复 支持 反对

使用道具 举报

发表于 昨天 23:11 | 显示全部楼层
逗亦斗霸 发表于 2025-5-21 22:59
求版主指导修改啊…那个QDIM只可以选择横向的,并且不能像你的一样标注首位总的~

像我们这种不懂的,要想快,花钱,一下就搞好了,
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-22 01:48 , Processed in 0.206586 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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