明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5336|回复: 16

求批量偏移程序

  [复制链接]
发表于 2013-3-31 00:18:31 | 显示全部楼层 |阅读模式
5明经币
望高手帮忙编一个,明币不行,人民币支付也可以
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

发表于 2013-3-31 00:18:32 | 显示全部楼层
  1. ;;批量偏移 By Gu_xl 2013.04.01
  2. (defun c:py (/ CLOCKWISEP OFFSET KD SS N EN kd0)
  3.   (defun CLOCKWISEP (en / lw minp MaxP lst)
  4.     (setq lw (vlax-ename->vla-object en))
  5.     (vla-GetBoundingBox lw 'MinP 'MaxP)
  6.     (setq
  7.       minp (vlax-safearray->list minp)
  8.       MaxP (vlax-safearray->list MaxP)
  9.       lst  (mapcar
  10.              (function
  11.                (lambda (x)
  12.                  (vlax-curve-getParamAtPoint
  13.                    lw
  14.                    (vlax-curve-getClosestPointTo lw x)
  15.                    )
  16.                  )
  17.                )
  18.              (list minp
  19.                    (list (car minp) (cadr MaxP))
  20.                    MaxP
  21.                    (list (car MaxP) (cadr minp))
  22.                    )
  23.              )
  24.       )
  25.     (if (or
  26.           (<= (car lst) (cadr lst) (caddr lst) (cadddr lst))
  27.           (<= (cadr lst) (caddr lst) (cadddr lst) (car lst))
  28.           (<= (caddr lst) (cadddr lst) (car lst) (cadr lst))
  29.           (<= (cadddr lst) (car lst) (cadr lst) (caddr lst))
  30.           )
  31.       t
  32.       )
  33.     )
  34.   (initget 7 "W N S  ")
  35.   (setq kd0 (getkword "\n[向外偏移W/向内偏移N/双向偏移S]<W>"))
  36.   (if (= "" kd0)
  37.     (setq kd0 "W")
  38.     )
  39.   (initget 6)
  40.   (setq offset (getreal "\n[输入偏移距离]<0.5>"))
  41.   (if (null offset)
  42.     (setq offset 0.5)
  43.     )
  44.   (initget 7 "Y N  ")
  45.   (setq kd (getkword "\n[删除源对象<Y>/不删除源对象<N>]<N>:"))
  46.   (if (= kd "")
  47.     (setq kd "N")
  48.     )
  49.   (while (setq ss (ssget '((0 . "*polyline,arc,circle"))))
  50.     (repeat (setq n (sslength ss))
  51.       (setq en (ssname ss (setq n (1- n))))
  52.       (cond
  53.         ((or (= "ARC" (cdr (assoc 0 (entget en))))
  54.              (= "CIRCLE" (cdr (assoc 0 (entget en))))
  55.              )
  56.          (cond ((= kd0 "W")
  57.                 (vla-offset (vlax-ename->vla-object en) offset)
  58.                 )
  59.                ((= kd0 "N")
  60.                 (vla-offset (vlax-ename->vla-object en) (- offset))
  61.                 )
  62.                (t
  63.                 (vla-offset (vlax-ename->vla-object en) offset)
  64.                 (vla-offset (vlax-ename->vla-object en) (- offset))
  65.                 )
  66.                )
  67.          )
  68.         (t
  69.          (cond ((= kd0 "W")
  70.                 (if (CLOCKWISEP en)
  71.                   (vla-offset (vlax-ename->vla-object en) (- offset))
  72.                   (vla-offset (vlax-ename->vla-object en) offset)
  73.                   )
  74.                 )
  75.                ((= kd0 "N")
  76.                 (if (CLOCKWISEP en)
  77.                   (vla-offset (vlax-ename->vla-object en) offset)
  78.                   (vla-offset (vlax-ename->vla-object en) (- offset))
  79.                   )
  80.                 )
  81.                (t
  82.                 (vla-offset (vlax-ename->vla-object en) offset)
  83.                 (vla-offset (vlax-ename->vla-object en) (- offset))
  84.                 )
  85.                )

  86.          )
  87.         )
  88.       (if (= kd "Y")
  89.         (entdel en)
  90.         )
  91.       )
  92.     )
  93.   (princ)
  94.   )

点评

不错,挺好用  发表于 2013-10-30 13:43
回复

使用道具 举报

发表于 2013-4-1 08:39:58 | 显示全部楼层
可以联系我qq:379539186
回复

使用道具 举报

发表于 2013-4-1 10:33:57 | 显示全部楼层
图元对象只有圆与矩形框 !?
看演示已有现成的程序,所求何来
回复

使用道具 举报

发表于 2013-4-1 12:07:53 | 显示全部楼层
GU_xl版主这人真好~~~~
回复

使用道具 举报

 楼主| 发表于 2013-4-1 13:05:26 | 显示全部楼层
Andyhon 发表于 2013-4-1 10:33
图元对象只有圆与矩形框 !?
看演示已有现成的程序,所求何来

那是别人的东西,不肯与我分享,因为我也用到此插件,所以求程序
回复

使用道具 举报

 楼主| 发表于 2013-4-1 13:14:22 | 显示全部楼层
Gu_xl 发表于 2013-4-1 11:04

谢谢G版,程序试用了下挺好的,不过在试用的过程中,发现有点小问题,不知能否麻烦G版忙我改进下,加个偏移后与原来的有颜色区分,望G版帮忙下
回复

使用道具 举报

发表于 2013-4-1 19:23:48 来自手机 | 显示全部楼层
龙吟小调 发表于 2013-4-1 13:14
谢谢G版,程序试用了下挺好的,不过在试用的过程中,发现有点小问题,不知能否麻烦G版忙我改进下,加个偏 ...

这个很简单,希望你自己动手!
回复

使用道具 举报

 楼主| 发表于 2013-4-3 22:09:07 | 显示全部楼层
Gu_xl 发表于 2013-4-1 19:23
这个很简单,希望你自己动手!

这几天生病了,没来,谢谢G版,悬赏分要怎么给你,我不会操作,希望指教
回复

使用道具 举报

发表于 2013-4-19 09:20:36 | 显示全部楼层
  1. ;;批量偏移 By Gu_xl 2013.04.01
  2. (defun c:xx (/ CLOCKWISEP OFFSET KD SS N EN kd0)
  3.   (defun CLOCKWISEP (en / lw minp MaxP lst)
  4.     (setq lw (vlax-ename->vla-object en))
  5.     (vla-GetBoundingBox lw 'MinP 'MaxP)
  6.     (setq
  7.       minp (vlax-safearray->list minp)
  8.       MaxP (vlax-safearray->list MaxP)
  9.       lst  (mapcar
  10.              (function
  11.                (lambda (x)
  12.                  (vlax-curve-getParamAtPoint
  13.                    lw
  14.                    (vlax-curve-getClosestPointTo lw x)
  15.                    )
  16.                  )
  17.                )
  18.              (list minp
  19.                    (list (car minp) (cadr MaxP))
  20.                    MaxP
  21.                    (list (car MaxP) (cadr minp))
  22.                    )
  23.              )
  24.       )
  25.     (if (or
  26.           (<= (car lst) (cadr lst) (caddr lst) (cadddr lst))
  27.           (<= (cadr lst) (caddr lst) (cadddr lst) (car lst))
  28.           (<= (caddr lst) (cadddr lst) (car lst) (cadr lst))
  29.           (<= (cadddr lst) (car lst) (cadr lst) (caddr lst))
  30.           )
  31.       t
  32.       )
  33.     )
  34.   (initget 7 "W N S  ")
  35.   (setq kd0 (getkword "\n[向外偏移W/向内偏移N/双向偏移S]<W>"))
  36.   (if (= "" kd0)
  37.     (setq kd0 "W")
  38.     )
  39.   (initget 6)
  40.   (setq offset (getreal "\n[输入偏移距离]<0.5>"))
  41.   (if (null offset)
  42.     (setq offset 0.5)
  43.     )
  44.   (initget 7 "Y N  ")
  45.   (setq kd (getkword "\n[删除源对象<Y>/不删除源对象<N>]<N>:"))
  46.   (if (= kd "")
  47.     (setq kd "N")
  48.     )
  49.   (while (setq ss (ssget '((0 . "*polyline,arc,circle"))))
  50.     (repeat (setq n (sslength ss))
  51.       (setq en (ssname ss (setq n (1- n))))
  52.       (cond
  53.         ((or (= "ARC" (cdr (assoc 0 (entget en))))
  54.              (= "CIRCLE" (cdr (assoc 0 (entget en))))
  55.              )
  56.          (cond ((= kd0 "W")
  57.                 (vla-offset (vlax-ename->vla-object en) offset)
  58.                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
  59.                 )
  60.                ((= kd0 "N")
  61.                 (vla-offset (vlax-ename->vla-object en) (- offset))
  62.                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
  63.                 )
  64.                (t
  65.                 (vla-offset (vlax-ename->vla-object en) offset)
  66.                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
  67.                 (vla-offset (vlax-ename->vla-object en) (- offset))
  68.                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
  69.                 )
  70.                )
  71.          )
  72.         (t
  73.          (cond ((= kd0 "W")
  74.                 (if (CLOCKWISEP en)
  75.                   (vla-offset (vlax-ename->vla-object en) (- offset))
  76.                   (vla-offset (vlax-ename->vla-object en) offset)
  77.                   )
  78.                   (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
  79.                 )
  80.                ((= kd0 "N")
  81.                 (if (CLOCKWISEP en)
  82.                   (vla-offset (vlax-ename->vla-object en) offset)
  83.                   (vla-offset (vlax-ename->vla-object en) (- offset))
  84.                   )
  85.                   (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
  86.                 )
  87.                (t
  88.                 (vla-offset (vlax-ename->vla-object en) offset)
  89.                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
  90.                 (vla-offset (vlax-ename->vla-object en) (- offset))
  91.                 (vla-put-Color (vlax-ename->vla-object (entlast)) 1)
  92.                 )
  93.                )

  94.          )
  95.         )
  96.       (if (= kd "Y")
  97.         (entdel en)
  98.         )
  99.       )
  100.     )
  101.   (princ)
  102.   )

点评

都是热心人!!  发表于 2013-5-28 23:54
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-27 13:05 , Processed in 0.176627 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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