明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1672|回复: 14

直线偏移且删除原直线

[复制链接]
发表于 2025-7-17 21:52:58 | 显示全部楼层 |阅读模式
AI生成程序,欢迎大家下载使用。


快捷命令: PY

  • (defun c:PY (/ ss dist i ent obj)
  •   (vl-load-com)
  •   (setq dist 1.5) ; 设置默认偏移距离1.5mm^^1^^
  •   (if (setq dist (getdist (strcat "\n输入总偏移距离<" (rtos dist) ">: ")))
  •     (princ)
  •     (setq dist 1.5) ; 用户回车时保持默认值^^1^^
  •   )
  •   (if (setq ss (ssget '((0 . "LINE")))) ; 连续选择直线^^2^^3^^
  •     (progn
  •       (setq i 0)
  •       (repeat (sslength ss) ; 遍历选择集^^3^^4^^
  •         (setq ent (ssname ss i))
  •         (setq obj (vlax-ename->vla-object ent))
  •         (vla-offset obj (/ dist 2.0)) ; 正向偏移^^2^^5^^
  •         (vla-offset obj (- (/ dist 2.0))) ; 反向偏移^^2^^5^^
  •         (entdel ent) ; 删除原线^^6^^
  •         (setq i (1+ i))
  •       )
  •       (princ (strcat "\n已完成 " (itoa i) " 条直线的双向偏移"))
  •     )
  •     (princ "\n未选择有效直线对象")
  •   )
  •   (princ)
  • )
  • (princ "\n快捷命令PY已加载,输入PY执行程序。")
  • (princ)


本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2025-7-19 16:53:21 | 显示全部楼层

(defun c:ooi (/ ENT EYNS OSMOD P1 P2 SS)
  (defun *error* (msg)
    (if        osmod
      (progn (setvar "osmode" osmod))
    )
    (princ)
  )
  (defun ss->lst (ss)
    (vl-remove-if-not
      '(lambda (x) (= (type x) 'ENAME))
      (apply 'append (ssnamex ss))
    )
  )
  (defun oop- (lit / DD ENT2 EYNS PD X ENT)
    (setq eyns (getenv "offset-del"))
    (setq dd (abs (getvar 'offsetdist)))
    (or        (zerop dd)
        (foreach ENT lit
          (setq        x    (vlax-ename->vla-object ENT)
                ent2 (entlast)
          )
          (setq        pd (vl-catch-all-error-p
                     (vl-catch-all-apply 'vla-offset (list X dd))
                   )
          )
          (setq        pd (vl-catch-all-error-p
                     (vl-catch-all-apply 'vla-offset (list X (* -1 dd)))
                   )
          )
          (or pd (and (= eyns "删除源对像") (vla-delete x)))
          (vlax-release-object x)
        )
    )
    (gc)
    (prin1)
    t
  )

  (princ "\n 双边偏移对像:")
  (or (getenv "offset-del")
      (setenv "offset-del" "保留源对像")
  )
  (setq osmod (getvar "osmode"))
  (while
    (progn
      (setq eyns (getenv "offset-del"))
      (setvar 'errno 0)
      (setvar "osmode" 512)
      (initget 128)
      (setq p1
             (getpoint
               (strcat
                 "\n双边偏移距离: "
                 (rtos (* (abs (getvar 'OFFSETDIST)) 2) 2)
                 " mm "
                 eyns
                 "”
选择对象:     或:
输入数字:偏移距离
输入字母:删除源对像
[删除(E)]"     )
             )
      )
      (setvar "osmode" osmod)
      (cond
        ((= 7 (getvar 'errno)) nil)
        ((= p1 nil) nil)
        ((= (type p1) 'list)
         (cond
           ((setq ent (nentselp p1)) (oop- (list (car ent))))
           ((and (setq p2 (getcorner p1)) (setq ss (ssget "c" p1 p2)))
            (oop- (ss->lst ss))
           )
         )
        )
        ((= p1 "u") (vl-cmdf "undo" "1"))
        ((and (= (type p1) 'str) (= (type (distof p1)) 'REAL))
         (setvar 'OFFSETDIST (/ (distof p1) 2))
        )
        ((and (= (type p1) 'str) (= eyns "删除源对像"))
         (setenv "offset-del" "保留源对像")
        )
        ((and (= (type p1) 'str) (= eyns "保留源对像"))
         (setenv "offset-del" "删除源对像")
        )
        (t nil)
      )
    )
  )
  (gc)
  (prin1)
)
回复 支持 1 反对 0

使用道具 举报

发表于 2025-7-18 10:21:29 | 显示全部楼层
在坛里找的轮子,根据自己的实际使用情况作了改造。不记得是哪位大佬的,勿怪。



  1. (defun c:cx (/ date ss Newmove *move* obj e1 e2 i p1 p2 p3 p4 yn lay clay olay)
  2. (defun *MYERR* (MSG)
  3. (setvar "CMDECHO" CMD_OLD)
  4. (setvar "OSMODE" OS_OLD)
  5. (setvar "pickbox" pi_OLD)
  6. (setq *ERROR* *OLDERR*)
  7. (if (= MSG "完美退出。谢谢使用。")
  8. (princ (strcat "\\n>>>" MSG))
  9. (princ "\\n>>>虽然中途退出了,对象捕捉已经被恢复。")
  10. )
  11. (princ)
  12. )
  13. (vl-load-com)
  14. (command "undo" "be");撤销命令,设置undo起点
  15. (setq *OLDERR* *ERROR*
  16.       *ERROR*  *MYERR*
  17.        OS_OLD   (getvar "OSMODE")
  18.        CMD_OLD  (getvar "CMDECHO")
  19.        pi_OLD   (getvar "pickbox")  
  20. )
  21. (setvar "osmode"  0)
  22. (setvar "CMDECHO" 0)
  23. (if *move*
  24.     (setq Newmove (getreal (strcat  "\n请输入双线宽度:<" (rtos *move* 2 4) ">:")))
  25.     (setq Newmove (getreal "\n请输入双线宽度:"))
  26.     )
  27.     (if (null Newmove)
  28.         (setq Newmove *move*)
  29.         (setq *move* Newmove)
  30.         )
  31.   (setq ss (ssget  '((0 . "Arc,Circle,Ellipse,Line,LwPolyline,Polyline,Spline"))))
  32.   (initget "Y  N ")
  33.   (setq yn (getkword "\n[封口<Y>/不封口<N>]<Y>:"))
  34.   ;(if (= yn "")(setq yn "Y"))
  35.   (or yn (setq yn "Y"))
  36.   (setq i 0)
  37.   (repeat (sslength ss)
  38.           (setq obj (vlax-ename->vla-object(ssname ss i)) i (1+ i))
  39.      (vla-offset obj (* Newmove 0.5)) (setq e1 (entlast))
  40.      (vla-offset obj (- 0 (* Newmove 0.5))) (setq e2 (entlast))
  41.      (vla-erase obj);删除原线
  42.    (if (= yn "Y")
  43.      (progn
  44.       (setq lay (entget  e1)
  45.            clay (cdr (assoc 8  lay))
  46.            olay (getvar "clayer"))
  47.       (setvar "clayer" clay)
  48.      (setq p1(vlax-curve-getstartpoint e1)
  49.            p2(vlax-curve-getendpoint e1)
  50.            p3(vlax-curve-getstartpoint e2)
  51.            p4(vlax-curve-getendpoint e2))
  52. ;(command ".pline" "non" p1 "non" p3 ""  ".pline" "non" p2 "non" p4 "")
  53. (command ".pline"  p1  p3 ""  ".pline"  p2  p4 "")
  54. (setvar "clayer" olay)
  55.    ))
  56. )
  57.   (princ
  58.     "\n*********双线**********青衫美酒 ***********"
  59.   )
  60. (setvar "pickbox" pi_OLD)
  61. (setvar "cmdecho" CMD_OLD)
  62. (setvar "osmode"  OS_OLD )
  63. (command "undo" "e")
  64. (princ)
  65. )



回复 支持 1 反对 0

使用道具 举报

发表于 2025-7-17 22:34:16 | 显示全部楼层
本帖最后由 437271963 于 2025-7-17 22:36 编辑
  1. ;;双向偏移曲线-这个程序基本上把有漏洞修补了,可以偏移所有曲线,内容都做了注释
  2. (defun c:tes ( / &kw dis ent ent2 obj pd ss1 ss2 x)
  3. (if (null dist) (setq dist 1.5));默认偏移距离
  4. (if (setq dis (getdist (strcat "\n请输入偏移距离:<" (rtos dist ) ">")));手动输入
  5.   (setq dist dis);保留数据
  6.   (setq dis dist);默认数据
  7. )
  8. (princ "\n请选择曲线")
  9. (if (setq &kw (ssget '((0 . "Arc,Circle,Ellipse,*Line"))));选择对象是圆弧,圆,椭圆+直线等曲线
  10.   (progn
  11.    (setq ss1 '())
  12.    (while (setq ent (ssname &kw 0)) (setq &kw (ssdel ent &kw) ss1 (cons ent ss1)) );先把所有的曲线提取->防止删除图元的时候出现错误
  13.    (setq ss2 '());记录偏移失败的图元
  14.    (while (setq ent (car ss1))
  15.     (setq ss1 (cdr ss1) obj (vlax-ename->vla-object ent) pd nil ent2 (entlast))
  16.     (if (vl-catch-all-error-p (vl-catch-all-apply  'vla-offset (list obj dis)));偏移对象-防止错误停止程序
  17.      (setq pd t);如果偏移失败就准备记录
  18.     )
  19.     (if (vl-catch-all-error-p (vl-catch-all-apply  'vla-offset (list obj (* -1 dis))));偏移对象
  20.      (setq pd t);如果偏移失败就准备记录
  21.     )
  22.     (if pd;如果有偏移失败
  23.      (progn
  24.       (while (setq ent2 (entnext ent2)) (entdel ent2) );如果双向偏移失败,就清除已经偏移的对象
  25.       (setq ss2 (cons ent ss2));源对象就记录
  26.      )
  27.      (vla-delete obj);偏移成功就删除
  28.     )
  29.    );while
  30.    (if (car ss2);如果有偏移失败的图元
  31.     (progn
  32.      (setq &kw (ssadd));建立选择集
  33.      (mapcar '(lambda(x) (vl-catch-all-apply  'ssadd (list x &kw))) ss2)
  34.      (sssetfirst nil &kw);未偏移成功的对象选择显示
  35.     )
  36.    )
  37.   )
  38. )
  39. (princ)
  40. )

评分

参与人数 1明经币 +1 收起 理由
不一样地设计 + 1 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2025-7-17 22:04:06 | 显示全部楼层
非常感谢你的分享
回复 支持 反对

使用道具 举报

发表于 2025-7-17 22:12:29 | 显示全部楼层
论坛里面偏移的程序太多了!
回复 支持 反对

使用道具 举报

发表于 2025-7-18 01:16:08 | 显示全部楼层
感谢分享      
回复 支持 反对

使用道具 举报

发表于 2025-7-18 13:58:50 | 显示全部楼层
有没有选双线变单的,重叠的默认为同一条
回复 支持 反对

使用道具 举报

发表于 2025-7-18 15:15:01 | 显示全部楼层
用了没效果 偏移后原线没有被删除。。怎么回事  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-18 21:07:28 | 显示全部楼层
amook147 发表于 2025-7-18 15:15
用了没效果 偏移后原线没有被删除。。怎么回事

是不是CAD版本的问题,我的是2010版本
回复 支持 反对

使用道具 举报

发表于 2025-7-19 08:35:16 | 显示全部楼层
指尖 发表于 2025-7-18 21:07
是不是CAD版本的问题,我的是2010版本

我这是2020版的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-26 17:50 , Processed in 0.258465 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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