明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9093|回复: 32

[基础] 高手帮忙修改,批量偏移

  [复制链接]
发表于 2012-3-20 13:54 | 显示全部楼层 |阅读模式
本帖最后由 dforme 于 2013-3-5 17:49 编辑

在本论坛找到一个可内外偏移的Lisp程序,但是只能对单一对象操作,我想同时对若干个对象进行偏移,框选或者是加选区,请高手帮忙修改一下。不胜感激
  1. ;;用LISP实现将PL环向内或向外偏移
  2. ;;http://www.mjtd.com/Develop/ArticleShow.asp?ArticleID=654
  3. (defun C:TEE (/ HOLDOSMODE HOLDCMD WW ENT PT PT1 PT2 CURVE X JANG DIST)
  4. (defun LEN (CURVE)
  5. (setq TLEN (vlax-curve-getdistatparam
  6. CURVE
  7. (vlax-curve-getendparam CURVE)
  8. )
  9. )
  10. )
  11. (setq HOLDOSMODE (getvar "OSMODE"))
  12. (setq HOLDCMD (getvar "CMDECHO"))
  13. (setvar "CMDECHO" 0)
  14. (setvar "OSMODE" 0)
  15. (setq WW (entsel "\n选取偏移对象: "))
  16. (setq ENT (car WW))
  17. (setq PT (cadr WW))
  18. (setq CURVE (vlax-ename->vla-object ENT))
  19. (setq X (vlax-curve-getparamatpoint
  20. CURVE
  21. (setq PT (vlax-curve-getclosestpointto
  22. CURVE
  23. PT
  24. )
  25. )
  26. )
  27. )
  28. (setq JANG (angle '(0 0 0) (vlax-curve-getfirstderiv CURVE X)))
  29. (setq PT1 (polar PT (+ JANG (* 0.5 pi)) 0.00000001))
  30. (setq PT2 (polar PT (- JANG (* 0.5 pi)) 0.00000001))
  31. (initget 3)
  32. (setq DIST (getdist "\n指定偏移距离<正__向外偏移 /负__向内偏移>: "))
  33. (command "_.OFFSET" (abs DIST) ENT PT1 "")
  34. (cond
  35. ((and (> DIST 0) (> (LEN CURVE) (LEN (entlast))))
  36. (entdel (entlast))
  37. (command "_.OFFSET" DIST ENT PT2 "")
  38. )
  39. ((and (< DIST 0) (< (LEN CURVE) (LEN (entlast))))
  40. (entdel (entlast))
  41. (command "_.OFFSET" (abs DIST) ENT PT2 "")
  42. )
  43. )
  44. (setvar "OSMODE" HOLDOSMODE)
  45. (setvar "CMDECHO" HOLDCMD)
  46. (princ)
  47. )

发表于 2012-3-20 15:23 | 显示全部楼层

  1. ;;用LISP实现将PL环向内或向外偏移
  2. ;;http://www.mjtd.com/Develop/ArticleShow.asp?ArticleID=654
  3. (defun C:TEE ( / curve ent holdcmd holdosmode jang n pt pt1 pt2 ss tmp x)
  4.   (defun LEN (CURVE / TLEN)
  5.     (setq TLEN (vlax-curve-getdistatparam
  6.    CURVE
  7.    (vlax-curve-getendparam CURVE)
  8.         )
  9.     )
  10.   )
  11.   (command "_.UNDO" "BE")
  12.   (if (null tee_dist)
  13.     (setq tee_dist 1000.0)
  14.   ) ;_设置全局变量
  15.   (setq HOLDOSMODE (getvar "OSMODE"))
  16.   (setq HOLDCMD (getvar "CMDECHO"))
  17.   (setvar "CMDECHO" 0)
  18.   (setvar "OSMODE" 0)
  19.   (if (setq ss (ssget '((0 . "*LINE,CIRCLE,ARC"))))
  20.     (progn
  21.       (setq n 0)
  22.       (initget 2)
  23.       (if (setq tmp
  24.    (getdist
  25.      (strcat "\n指定偏移距离(正__向外偏移 /负__向内偏移): <"
  26.       (rtos tee_dist 2)
  27.       ">"
  28.      )
  29.    )
  30.    )
  31. (setq tee_dist tmp)
  32.       ) ;_不输入时自动使用上一次输入数值
  33.       (repeat (sslength ss)
  34. (setq ent (ssname ss n)
  35.        n   (1+ n)
  36. )
  37. (setq CURVE (vlax-ename->vla-object ENT)
  38.        x     (vlax-curve-getParamAtDist curve (/ (len curve) 3.33))
  39.        pt    (vlax-curve-getPointAtParam curve x)
  40. );_获得线上指定距离值的点及参数
  41. (setq JANG (angle '(0 0 0) (vlax-curve-getfirstderiv CURVE X)))
  42. (setq PT1 (polar PT (+ JANG (* 0.5 pi)) 0.00000001))
  43. (setq PT2 (polar PT (- JANG (* 0.5 pi)) 0.00000001))
  44. (command "_.OFFSET" (abs tee_dist) ENT PT1 "")
  45. (if (or (and (> tee_dist 0) (> (LEN CURVE) (LEN (entlast))))
  46.   (and (< tee_dist 0) (< (LEN CURVE) (LEN (entlast))))
  47.      )
  48.    (progn
  49.      (entdel (entlast))
  50.      (command "_.OFFSET" (abs tee_dist) ENT PT2 "")
  51.    )
  52. )
  53.       )
  54.     )
  55.   )
  56.   (setvar "OSMODE" HOLDOSMODE)
  57.   (setvar "CMDECHO" HOLDCMD)
  58.   (command "_.UNDO" "E")
  59.   (princ)
  60. )

 楼主| 发表于 2012-3-20 17:33 | 显示全部楼层
hb198075 发表于 2012-3-20 15:23

十分感谢,您帮我解决了一个大问题
发表于 2012-3-20 21:18 | 显示全部楼层
hb198075 发表于 2012-3-20 15:23

偏移到当前层,如何改呀。。。
发表于 2012-3-21 10:01 | 显示全部楼层
在 repeat 的前面加上下面这句就能偏移到当前层了,或者手工在 offset 命令中输入L来改变偏移的图层模式。
  1. (command "_.OFFSET" "L" "C" "" "")

点评

试了下,不行,请大师帮忙看下。  发表于 2012-3-21 15:10
发表于 2012-4-10 18:43 | 显示全部楼层
学习学习,
发表于 2012-4-10 19:14 | 显示全部楼层
很好的程序,对于下面材时减去料缝很有帮助。
发表于 2012-4-10 20:03 | 显示全部楼层
很不错 拿走了
发表于 2012-4-11 16:51 | 显示全部楼层
好东西、、新手路过学习
发表于 2012-4-18 16:13 | 显示全部楼层
好像贱人工具箱里有这个功能,还是框选的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 13:25 , Processed in 0.232783 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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