明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: zwq8629

请大师帮忙优化下-标记圆角

[复制链接]
发表于 2024-11-7 11:53:25 | 显示全部楼层
ninja37 发表于 2024-11-7 10:34
大师  能不能再出手改一下  把标记出来的结果 用group编成组  这样看完后方便删掉结果

  1. ;标示圆角
  2. (defun c:bjyj(/ a dxf i len name pt pts r r1 ss tao-make-layer tao-make-line tao-make-text tao-make-textstyle test typ ureal xyp-subupd)
  3.         (DEFUN UREAL (BIT KWD MSG DEF / INP)
  4.                 (if DEF
  5.                         (PROGN (setq MSG (STRCAT "\n" MSG "<" (RTOS DEF 2) ">: "))
  6.                                 (setq BIT (* 2 (FIX (/ BIT 2))))
  7.                         )
  8.                         (PROGN (setq MSG (STRCAT "\n" MSG ": ")))
  9.                 )
  10.                 (INITGET BIT KWD)
  11.                 (setq INP (GETREAL MSG))
  12.                 (if INP
  13.                         (PROGN INP)
  14.                         (PROGN DEF)
  15.                 )
  16.         )
  17.         (DEFUN DXF (CODE ENAME / ENT LST A)
  18.                 (if (= (TYPE CODE) 'LIST)
  19.                         (PROGN (setq ENT (ENTGET ENAME))
  20.                                 (setq LST nil)
  21.                                 (FOREACH A CODE
  22.                                         (setq LST (CONS (LIST A (CDR (ASSOC A ENT))) LST))
  23.                                 )
  24.                                 (REVERSE LST)
  25.                         )
  26.                         (PROGN (if (= CODE -3)
  27.                                                          (PROGN (CDR (ASSOC CODE (ENTGET ENAME '("*")))))
  28.                                                          (PROGN (CDR (ASSOC CODE (ENTGET ENAME))))
  29.                                                  )
  30.                         )
  31.                 )
  32.         )
  33.         (DEFUN TAO-MAKE-TEXTSTYLE (STYNAME STY / A TEXTSTYLES TEXTSTYLE)
  34.                 (setq A (vla-get-ActiveDocument (vlax-get-acad-object)))
  35.                 (setq TEXTSTYLES (vla-get-TextStyles A))
  36.                 (setq TEXTSTYLE (vla-Add TEXTSTYLES STYNAME))
  37.                 (vla-SetFont TEXTSTYLE STY :vlax-false :vlax-false 1 0)
  38.                 (PRINC)
  39.         )
  40.         (DEFUN TAO-MAKE-LAYER (LNAME LCOLOR / LAYER LAYERS ADOC)
  41.                 (setq ADOC (vla-get-ActiveDocument (vlax-get-acad-object)))
  42.                 (setq LAYERS (vla-get-Layers ADOC))
  43.                 (setq LAYER (vla-Add LAYERS LNAME))
  44.                 (vla-put-Color LAYER LCOLOR)
  45.                 (vla-put-ActiveLayer ADOC LAYER)
  46.                 (PRINC)
  47.         )
  48.         (DEFUN TAO-MAKE-LINE (PT1 PT2)
  49.                 (ENTMAKE (LIST (CONS 0 "LINE")
  50.                                                          (CONS 62 256)
  51.                                                          (CONS 10 PT1)
  52.                                                          (CONS 11 PT2)
  53.                                                  )
  54.                 )
  55.         )        
  56.         (DEFUN TAO-MAKE-TEXT (PT STR JUS H STY)
  57.                 (ENTMAKEX (LIST (CONS 0 "TEXT")
  58.                                                                 (CONS 100 "AcDbEntity")
  59.                                                                 (CONS 62 256)
  60.                                                                 (CONS 100 "AcDbText")
  61.                                                                 (if (= JUS 0)
  62.                                                                         (PROGN (CONS 10 PT))
  63.                                                                         (PROGN (LIST 10 0.0 0.0 0.0))
  64.                                                                 )
  65.                                                                 (CONS 40 H)
  66.                                                                 (CONS 1 STR)
  67.                                                                 (CONS 50 0)
  68.                                                                 (CONS 7 STY)
  69.                                                                 (CONS        72
  70.                                                                         (COND
  71.                                                                                 ((= JUS 0) 0)
  72.                                                                                 ((= JUS 1) 1)
  73.                                                                                 ((= JUS 2) 1)
  74.                                                                                 ((= JUS 3) 2)
  75.                                                                         )
  76.                                                                 )
  77.                                                                 (if (= JUS 0)
  78.                                                                         (PROGN (LIST 11 0.0 0.0 0.0))
  79.                                                                         (PROGN (CONS 11 PT))
  80.                                                                 )
  81.                                                                 (CONS 100 "AcDbText")
  82.                                                                 (CONS        73
  83.                                                                         (COND
  84.                                                                                 ((= JUS 0) 0)
  85.                                                                                 ((= JUS 1) 2)
  86.                                                                                 ((= JUS 2) 3)
  87.                                                                                 ((= JUS 3) 2)
  88.                                                                         )
  89.                                                                 )
  90.                                                         )
  91.                 )
  92.         )
  93.         (DEFUN XYP-SUBUPD (ENAME CODE VAL / ENT X Y I S1)
  94.                 (COND
  95.                         ((= (TYPE ENAME) 'ENAME)
  96.                                 (setq ENT (ENTGET ENAME))
  97.                                 (if (AND (= (TYPE CODE) 'LIST) (= (TYPE VAL) 'LIST))
  98.                                         (PROGN
  99.                                                 (MAPCAR '(LAMBDA (X Y) (XYP-SUBUPD ENAME X Y)) CODE VAL)
  100.                                         )
  101.                                         (PROGN
  102.                                                 (if (= (DXF CODE ENAME) nil)
  103.                                                         (PROGN (ENTMOD (APPEND ENT (LIST (CONS CODE VAL)))))
  104.                                                         (PROGN (ENTMOD (SUBST (CONS CODE VAL) (ASSOC CODE ENT) ENT))
  105.                                                         )
  106.                                                 )
  107.                                                 (ENTUPD ENAME)
  108.                                         )
  109.                                 )
  110.                         )
  111.                         ((= (TYPE ENAME) 'PICKSET)
  112.                                 (setq I -1)
  113.                                 (while (and (setq S1 (SSNAME ENAME (setq I (1+ I)))))
  114.                                         (XYP-SUBUPD S1 CODE VAL)
  115.                                 )
  116.                         )
  117.                         ((= (TYPE ENAME) 'LIST)
  118.                                 (FOREACH S1 ENAME (XYP-SUBUPD S1 CODE VAL))
  119.                         )
  120.                 )
  121.                 ENAME
  122.         )
  123.         (defun ss-enlst (ss / enlst)
  124.                 (cond
  125.                         ((= (type ss) 'PICKSET)
  126.                                 (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
  127.                         )
  128.                         ((= (type ss) 'LIST)
  129.                                 (setq enlst (ssadd))
  130.                                 (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
  131.                         )
  132.                 )
  133.         )
  134.         (defun lm-make-group (Objlst)
  135.                 (setq Objlst (mapcar 'vlax-ename->vla-object Objlst))
  136.                 (vla-appenditems
  137.                         (vla-add (vla-get-groups
  138.                                                                  (vla-get-activedocument (vlax-get-acad-object))
  139.                                                          )
  140.                                 "*"
  141.                         )
  142.                         (vlax-make-variant
  143.                                 (vlax-safearray-fill
  144.                                         (vlax-make-safearray
  145.                                                 vlax-vbobject
  146.                                                 (cons 0 (1- (length objlst)))
  147.                                         )
  148.                                         objlst
  149.                                 )
  150.                         )
  151.                 )
  152.         )
  153.         (setq r(ureal 1 "" "临界圆角半径:" 0.2))
  154.   (if (setq ss(ssget '((0 . "*POLYLINE,REGION,ARC"))))
  155.                 (progn
  156.                         (setq i -1 pts'())
  157.                         (repeat(sslength ss)
  158.                                 (setq
  159.                                         name(ssname ss(setq i(1+ i)))
  160.                                         typ(dxf 0 name)
  161.                                         r1(if(= typ "ARC")(dxf 40 name)nil)                                       
  162.                                 )
  163.                                 (if (and r1(< r1 r)) (setq pts(cons (list(dxf 10 name)r1) pts)))
  164.                         )
  165.                         (if(setq ss(ssget "p"'((0 . "*POLYLINE,REGION"))))
  166.                                 (progn
  167.                                         (setq test T)        
  168.                                         (command "_.undo" "be");;               
  169.                                         (command
  170.                                                 "QAFLAGS" 1   ;=1,可以炸开选择集所有实体。这个变量不影响标准的EXPLODE命令的执行。
  171.                                                 ".EXPLODE" ss ""
  172.                                         ) ;如果QAFLAGS=0,那么用LISP执行 explode 的时候仅仅能炸开选择集的第一个实体,其他实体炸不了.n)
  173.                                 )
  174.                         )
  175.                 )
  176.         )
  177.         (if test
  178.                 (progn        
  179.                         (if(setq ss (ssget"P"(list(cons 0 "ARC")(cons -4 "<")(cons 40 r))))
  180.                                 (progn               
  181.                                         (setq i -1)
  182.                                         (repeat(sslength ss)
  183.                                                 (setq
  184.                                                         name(ssname ss(setq i(1+ i)))
  185.                                                         pts(cons (list(dxf 10 name)(dxf 40 name)) pts)
  186.                                                 )
  187.                                         )
  188.                                 )
  189.                         )
  190.                         (command "_.undo" "e")
  191.                         (command ".undo" 1)
  192.                 )
  193.         )
  194.         (setq len(length pts))
  195.         (if(> len 0)
  196.                 (progn
  197.                         (APPEND(list '("cmdecho" 0 "osmode" 0 "dimzin"8 "clayer" "0")0 nil))
  198.                         (if(null(tblsearch "style" "宋体"))(tao-make-textstyle "宋体" "宋体"))
  199.                         (tao-make-layer "F6" 6)
  200.                         (setq ss(ssadd))                                       
  201.                         (foreach n pts
  202.                                 (setq pt(car n)r(cadr n))
  203.                                 (entmake (list '(0 . "CIRCLE") '(100 . "AcDbEntity") '(100 . "AcDbCircle") (cons 62 4) (cons 10 pt) (cons 40 r)))
  204.                                 (setq ss (ssadd (entlast) ss))
  205.                                 (tao-make-text pt (rtos r 2) 1 r "宋体")
  206.                                 (setq ss (ssadd (entlast) ss))
  207.                         )
  208.                         (tao-make-text '(0 0 0) (strcat "检测到 " (itoa len) " 个小R") 1 (/ (getvar "viewsize") 45) "宋体")
  209.                         (setq ss (ssadd (entlast) ss))
  210.                         (setq a(entlast))
  211.                         (while (= 5 (car (setq pt (grread t 4 0))))
  212.                                 (setq pt (trans(cadr pt)1 0))
  213.                                 (xyp-subupd a 40 (/ (getvar "viewsize") 45))
  214.                                 (xyp-subupd a 11 pt)
  215.                         )
  216.                         (lm-make-group (ss-enlst ss))
  217.                         ;(setvar  "PICKSTYLE" 1)
  218.                 )
  219.         )
  220.         (princ)
  221. )
发表于 2024-11-16 12:39:20 | 显示全部楼层

谢谢大师,很好用,现在方便多了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-19 08:15 , Processed in 0.155064 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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