明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: liminnet

万能框选倒角lsp,只差pl与arc、独立pl不能实现

  [复制链接]
发表于 2008-5-19 17:04:00 | 显示全部楼层
本帖最后由 作者 于 2008-5-19 17:07:32 编辑

  1. ;;可以框選的倒角命令lsp,缺陷是多段線不行,幫修改下好嗎
  2. ;;如題所以,對於兩條多段線的情況不行,版主可以完善一下這麼好用功能嗎
  3. (vl-load-com)
  4. ;;;=========================================
  5. ;;;通用函數:求兩個三維點的中點
  6. (defun MID (PT1 PT2)
  7.   (list
  8.     (* 0.5 (+ (nth 0 PT1) (nth 0 PT2)))
  9.     (* 0.5 (+ (nth 1 PT1) (nth 1 PT2)))
  10.     (* 0.5 (+ (nth 2 PT1) (nth 2 PT2)))
  11.   )
  12. )
  13. ;;陌生人  
  14. (defun X_INTLST (OBJ1 OBJ2 PARAM / INTLST1 INTLST2 PTLST)
  15.   (if (= 'ENAME (type OBJ1))
  16.     (setq OBJ1 (vlax-ename->vla-object OBJ1))
  17.   )
  18.   (if (= 'ENAME (type OBJ2))
  19.     (setq OBJ2 (vlax-ename->vla-object OBJ2))
  20.   )
  21.   (setq
  22.     INTLST1 (vlax-variant-value (vla-intersectwith OBJ1 OBJ2 PARAM))
  23.   )
  24.   (if (< 0 (vlax-safearray-get-u-bound INTLST1 1))
  25.     (progn
  26.       (setq INTLST2 (vlax-safearray->list INTLST1))
  27.       (while (> (length INTLST2) 0)
  28. (setq PTLST   (cons (list (car INTLST2) (cadr INTLST2) (caddr INTLST2))
  29.        PTLST
  30.         )
  31.        INTLST2 (cdddr INTLST2)
  32. )
  33.       )
  34.     )
  35.   )
  36.   PTLST
  37. )
  38. ;;;=========================================
  39. ;;功能:對系統提供的 圓角 命令的改進        
  40. ;;日期:zml84 於 2007-08-14 21:10
  41. ;;修改:LUCAS 於 2008-05-17 (未詳細測試,測試環境:R2008)
  42. (defun C:F (/     *ERROR* *MYERR* *OLDERR*     A     B
  43.      CMD_OLD ENT     INT     LST     OS_OLD  PT1     PT2
  44.      SS     TEST    TEST0   TMP     TMP2
  45.     )
  46.   (princ "\n★★超級圓角★★")
  47.   ;;============================
  48.   (defun *MYERR* (MSG)
  49.     (setvar "CMDECHO" CMD_OLD)
  50.     (setvar "OSMODE" OS_OLD)
  51.     (setq *ERROR* *OLDERR*)
  52.     (if (= MSG "完美退出。謝謝使用。")
  53.       (princ (strcat "\n>>>" MSG))
  54.       (princ "\n>>>雖然中途退出了,對像捕捉已經被恢復。")
  55.     )
  56.     (princ)
  57.   )
  58.   (setq *OLDERR* *ERROR*
  59. *ERROR*  *MYERR*
  60. OS_OLD  (getvar "OSMODE")
  61. CMD_OLD  (getvar "CMDECHO")
  62.   )
  63.   ;;==============================
  64.   ;;1、系統變量設置
  65.   (setvar "OSMODE" 0)
  66.   (setvar "CMDECHO" 0)
  67.   ;;顯示選項當前值
  68.   (princ
  69.     (strcat
  70.       "\n當前設置: 模式 = "
  71.       (nth (getvar "TRIMMODE") '("不修剪" "修剪"))
  72.       ",半徑 = "
  73.       (rtos (getvar "FILLETRAD") 2 4)
  74.     )
  75.   )
  76.   ;;2、循環連續執行
  77.   (setq TEST0 t)
  78.   (while TEST0
  79.     ;;初始化
  80.     (setq A NIL
  81.    B NIL
  82.     )
  83.     ;;2.1、選擇對像1
  84.     (princ "\n選擇對像或 [多段線(P)/半徑(R)/修剪(T)]: ")
  85.     (setq TEST t)
  86.     (while TEST
  87.       (setq TMP (grread t 4 2))
  88.       (cond
  89. ;;按下鍵盤鍵
  90. ((= (car TMP) 2)
  91.   (setq INT (cadr TMP))
  92.   (cond
  93.     ;;回車或者空格鍵,則退出
  94.     ((or (= INT 13)
  95.   (= INT 32)
  96.      )
  97.      (setq TEST NIL
  98.     TEST0 NIL
  99.      )
  100.     )
  101.     ;;P選項
  102.     ((or (= (ascii "P") INT)
  103.   (= (ascii "p") INT)
  104.      )
  105.      (if (and (setq SS (entsel " >>選擇二維多段線: "))
  106.        (= (cdr (assoc 0 (entget (car SS))))
  107.    "LWPOLYLINE"
  108.        )
  109.   )
  110.        (command "_.fillet" "P" SS)
  111.      )
  112.     )
  113.     ;;R選項
  114.     ((or (= (ascii "R") INT)
  115.   (= (ascii "r") INT)
  116.      )
  117.      (princ (strcat "\n>>指定圓角半徑 <"
  118.       (rtos (getvar "FILLETRAD") 2 2)
  119.       ">: "
  120.      )
  121.      )
  122.      (if (setq TMP2 (getdist))
  123.        (setvar "FILLETRAD" TMP2)
  124.      )
  125.     )
  126.     ;;T選項
  127.     ((or (= (ascii "T") INT)
  128.   (= (ascii "t") INT)
  129.      )
  130.      (initget "T N")
  131.      (setq TMP2
  132.      (getkword
  133.        (strcat
  134.          "\n>>輸入修剪模式選項 [修剪(T)/不修剪(N)] <"
  135.          (nth (getvar "TRIMMODE")
  136.        '("不修剪" "修剪")
  137.          )
  138.          ">: "
  139.        )
  140.      )
  141.      )
  142.      (if (= TMP2 "T")
  143.        (setvar "TRIMMODE" 1)
  144.        (if (= TMP2 "N")
  145.   (setvar "TRIMMODE" 0)
  146.        )
  147.      )
  148.     )
  149.   )
  150.   (princ "\n選擇對像或 [多段線(P)/半徑(R)/修剪(T)]: ")
  151. )
  152. ;;擊鼠標右鍵
  153. ((= (car TMP) 12)
  154.   (setq TEST NIL
  155.         TEST0 NIL
  156.   )
  157. )
  158. ;;擊左鍵
  159. ((= (car TMP) 3)
  160.   (setq PT1 (cadr TMP))
  161.   (if (setq SS (ssget PT1))
  162.     (setq A    (list (ssname SS 0) PT1)
  163.    TEST NIL
  164.     )
  165.     (if (and
  166.    (setq PT2 (getcorner PT1 " >>>第二點:"))
  167.    (progn (command "_.select" "c" PT1 PT2 "")
  168.    (setq SS (ssget "p"))
  169.    )
  170.         )
  171.       (progn
  172.         (command "_.rectang" PT1 PT2)
  173.         (setq ENT  (entlast)
  174.        TEST NIL
  175.         )
  176.         (setq
  177.    A
  178.     (car (setq
  179.     LST (X_INTLST (ssname SS 0) ENT acextendnone)
  180.          )
  181.     )
  182.         )
  183.         (if (and (= (sslength SS) 1)
  184.    (= (length LST) 2)
  185.      )
  186.    (setq B (cadr LST))
  187.    (if (ssname SS 1)
  188.      (setq
  189.        B (car (X_INTLST (ssname SS 1) ENT acextendnone))
  190.      )
  191.    )
  192.         )
  193.         (entdel ENT)
  194.       )
  195.       (princ
  196.         "\n選擇對像或 [多段線(P)/半徑(R)/修剪(T)]: "
  197.       )
  198.     )
  199.   )
  200. )
  201.       ) ;_ 結束 cond
  202.     ) ;_ 結束 while
  203.     (if (and A
  204.       (= (type (car A)) 'ENAME)
  205.       (not (redraw (car A) 3))
  206.       (= B NIL)
  207. )
  208.       (progn
  209. ;;2.2、選擇對像2
  210. (princ "\n選擇對像:")
  211. (setq TEST t)
  212. (while TEST
  213.    (setq TMP (grread t 4 2))
  214.    ;;(if (setq PT1 (getpoint "\n選擇對像:"))
  215.    (cond
  216.      ;;擊左鍵
  217.      ((= (car TMP) 3)
  218.       (setq PT1 (cadr TMP))
  219.       (if (setq SS (ssget PT1))
  220.         (setq B   (list (ssname SS 0) PT1)
  221.        TEST NIL
  222.         )
  223.         (if (and
  224.        (setq
  225.          PT2 (getcorner PT1
  226.           " >>>第二點:"
  227.       )
  228.        )
  229.        (setq SS (ssget "c" PT1 PT2))
  230.      )
  231.    (setq B    (list (ssname SS 0)
  232.       (MID PT1 PT2)
  233.        )
  234.          TEST NIL
  235.    )
  236.    (princ "\n選擇對像:")
  237.         )
  238.       )
  239.      )
  240.      ;;擊右鍵
  241.      ((= (car TMP) 12)
  242.       (setq TEST NIL)
  243.      )
  244.    ) ;_結束 cond
  245. )
  246.       )
  247.     ) ;_結束 if
  248.     ;;圓角操作
  249.     (if (and A B (= (type (car A)) 'ENAME))
  250.       (command "_.fillet" (cadr A) (cadr B))
  251.       (command "_.fillet" A B)
  252.     )
  253.     (if (and A
  254.       (= (type (car A)) 'ENAME)
  255. )
  256.       (redraw (car A) 4)
  257.     )
  258.   )
  259.   ;;3、恢復系統變量設置
  260.   ;;============
  261.   (*ERROR* "完美退出。謝謝使用。")
  262.   ;;============
  263.   (princ)
  264. ) ;_結束 defun
  265. ;;;=========================================
 楼主| 发表于 2008-5-19 19:44:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2008-5-19 21:09:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-5-19 22:03:00 | 显示全部楼层

我也有捐助赈灾的啦

本帖子中包含更多资源

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

x
发表于 2008-5-20 07:58:00 | 显示全部楼层
狂刀无痕---看來是找出所有端點,最近的端點倒角
发表于 2008-5-20 12:44:00 | 显示全部楼层
本帖最后由 作者 于 2008-5-20 13:05:46 编辑

基本对头
 楼主| 发表于 2008-5-21 23:33:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2008-5-23 17:23:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2008-5-23 22:11:00 | 显示全部楼层

支持,好程序!

 楼主| 发表于 2008-5-24 14:42:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-8 18:52 , Processed in 0.172003 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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