找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6244|回复: 39

[分享]:批量偏移程序

[复制链接]
发表于 2006-2-27 11:27:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×

  1. ;;;批量偏移
  2. ;;;ago9999,梨胡鸟编写(QQ17137646)
  3. (defun c:py (/ en offd pt py_fs offd dx_ss dx_ss dx_n pt pt0 n)
  4.   (command "undo" "be")                        ; 定义返回点
  5.   (setvar "cmdecho" 0)                        ; 关闭命令提示

  6.   (if (or (= py_fs0 nil) (eq py_fs0 ""))
  7.     (setq py_fs0 "Z")
  8.   )
  9.   (princ "\n请输入偏移方式[正向(Z)/反向(F)/双向(S)/通过(T)]<")
  10.   (princ py_fs0)                        ;输入偏移方式
  11.   (princ ">:")
  12.   (setq py_fs (getstring))
  13.   (if (or (= py_fs nil) (eq py_fs ""))
  14.     (setq py_fs py_fs0)
  15.     (setq py_fs0 py_fs)
  16.   )

  17.   (if (or (eq py_fs "t") (eq py_fs "T"))
  18.     (princ "\n采用通过点偏移方式")
  19.     (progn
  20.       (if (= offd0 nil)
  21.         (setq offd0 "0")
  22.       )
  23.       (princ "\n请输入偏移距离(")
  24.       (princ offd0)
  25.       (princ ")")                        ;输入偏移距离
  26.       (setq offd (getdist))
  27.       (if (= offd nil)
  28.         (setq offd offd0)
  29.         (setq offd0 offd)
  30.       )
  31.     )
  32.   )

  33.   (princ "\n请选择线段,弧,圆,多段线:")
  34.   (setq dx_ss (ssget))
  35.   (if (or (eq py_fs "s") (eq py_fs "S"))
  36.     (setq pt (list 0 0))
  37.     (setq pt (getpoint "\n请选择基点"))
  38.   )                                        ;输入偏移基点

  39.   (setq n 0)
  40.   (while (< n (sslength dx_ss))
  41.     (setq dx_n (ssname dx_ss n))
  42.     (if
  43.       (or (eq py_fs "t") (eq py_fs "T"))
  44.        (command "OFFSET" "t" dx_n pt "")
  45.        (progn
  46.          (cond
  47.            ((or        (eq "LINE" (cdr (assoc '0 (entget dx_n))))
  48.                 (eq "LWPOLYLINE" (cdr (assoc '0 (entget dx_n))))
  49.             )
  50.             (command "OFFSET" offd dx_n pt "") ;正向偏移
  51.             (setq ptst (cdr (assoc '10 (entget dx_n))))
  52.             (setq pten (cdr (assoc '10 (entget (entlast)))))

  53.             (if        (or (eq py_fs "f") (eq py_fs "F")) ;正向偏移删除
  54.               (command "ERASE" "l" "")
  55.             )
  56.             (if        (or (eq py_fs "f")
  57.                     (eq py_fs "F")
  58.                     (eq py_fs "s")
  59.                     (eq py_fs "S")
  60.                 )                        ;反向偏移
  61.               (progn
  62.                 (setq pt0 (list        (- (* 2 (nth 0 ptst)) (nth 0 pten))
  63.                                 (- (* 2 (nth 1 ptst)) (nth 1 pten))
  64.                           )
  65.                 )
  66.                 (command "OFFSET" offd dx_n pt0 "")
  67.               )
  68.             )
  69.            )
  70.            ((or        (eq "ARC" (cdr (assoc '0 (entget dx_n))))
  71.                 (eq "CIRCLE" (cdr (assoc '0 (entget dx_n))))
  72.             )
  73.             (command "OFFSET" offd dx_n pt "") ;正向偏移
  74.             (setq rst (cdr (assoc '40 (entget dx_n))))
  75.             (setq ren (cdr (assoc '40 (entget (entlast)))))

  76.             (if        (or (eq py_fs "s") (eq py_fs "S")) ;正向偏移复制
  77.               (command "copy" "l" "" "0,0,0" "0,0,0")
  78.             )
  79.             (if        (or (eq py_fs "f")
  80.                     (eq py_fs "F")
  81.                     (eq py_fs "s")
  82.                     (eq py_fs "S")
  83.                 )                        ;反向偏移
  84.               (progn
  85.                 (setq r0 (- (* 2 rst) ren))
  86.                 (if (<= r0 0)
  87.                   (command "ERASE" "l" "") ;正向偏移删除
  88.                   (progn
  89.                     (setq dx_n0 (entget (entlast)))
  90.                     (setq dx_n0
  91.                            (subst (cons '40 r0) (assoc '40 dx_n0) dx_n0)
  92.                     )
  93.                     (entmod dx_n0)
  94.                   )                        ;正向偏移更改
  95.                 )
  96.               )
  97.             )
  98.            )
  99.          )

  100.        )
  101.     )
  102.     (setq n (1+ n))
  103.   )
  104.   (command "undo" "e")                        ; 定义返点
  105.   (setvar "cmdecho" 1)                        ; 打开命令提示
  106.   (princ)
  107. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-2-27 11:58:15 | 显示全部楼层
我问个问题,楼主的这个程序和cad自带的用来偏移的命令有什么区别么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-27 16:25:57 | 显示全部楼层

还是有点区别

可以正方向偏移,反方向偏移,以及双向偏移,关键是可以批量处理,不用一个一个去选择
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-2-27 20:15:58 | 显示全部楼层

  1.   [FONT=courier new]
  2. ;;;不記得出自哪位大蝦之手,曾經在曉東空間發表過.
  3. (defun c:test1 (/ ss dis objs)
  4.   (princ "\n一次偏移多個實體.")
  5.   (vl-load-com)
  6.   (setq ss (ssget))
  7.   (setq dis (getdist "\nSpecify Offset Distance:"))
  8.   (setq        objs (vla-get-activeselectionset
  9.                (vla-get-activedocument
  10.                  (vlax-get-acad-object)
  11.                )
  12.              )
  13.   )
  14.   (vlax-for obj objs (vla-offset obj dis))
  15.   (princ)
  16. )
  17. (defun c:test2 (/ ss dis objs)
  18.   (princ "\n一次雙向偏移多個實體.")
  19.   (vl-load-com)
  20.   (setq ss (ssget))
  21.   (setq dis (getdist "\nSpecify Offset Distance:"))
  22.   (setq        objs (vla-get-activeselectionset
  23.                (vla-get-activedocument
  24.                  (vlax-get-acad-object)
  25.                )
  26.              )
  27.   )
  28.   (vlax-for obj objs (vla-offset obj dis))
  29.   (vlax-for obj objs (vla-offset obj (* -1 dis)))
  30.   (princ)
  31. )
  32. (defun c:test3 (/ ss dis objs)
  33.   (princ "\n一次雙向偏移多個實體,並將原實體刪除.")
  34.   (vl-load-com)
  35.   (setq ss (ssget))
  36.   (setq dis (getdist "\nSpecify Offset Distance:"))
  37.   (setq        objs (vla-get-activeselectionset
  38.                (vla-get-activedocument
  39.                  (vlax-get-acad-object)
  40.                )
  41.              )
  42.   )
  43.   (vlax-for obj objs (vla-offset obj dis))
  44.   (vlax-for obj objs (vla-offset obj (* -1 dis)))
  45.   (command "erase" ss "")
  46.   (princ)
  47. )
  48.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-4 09:01:47 | 显示全部楼层
顶楼程序有些bug
4楼的功能比较简单,但不能保存数据
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2006-3-4 09:53:32 | 显示全部楼层
最初由 lemonx 发布
[B]顶楼程序有些bug
4楼的功能比较简单,但不能保存数据 [/B]

  1.   [FONT=courier new]
  2. ;;;下面這個是改過的,同樣是曉東空間上的.不記得出自哪位高人.
  3. (defun c:test4 (/ getds obj red-dist)
  4.   (princ "\n&Ograve;&raquo;&acute;&Icirc;&euml;p&Iuml;ò&AElig;&laquo;&Ograve;&AElig;&para;à&#8218;?#338;&#141;ów.")
  5.   (vl-load-com)
  6.   (initget 2)
  7.   (setq        red-dist (vl-registry-read
  8.                    "HKEY_CURRENT_USER\\Software\\Autodesk\\BDYCAD"
  9.                    "OFDIST"
  10.                  )
  11.   )
  12.   (if red-dist
  13.     (setq getds (getdist (strcat "\n&Otilde;&#710;&Egrave;&euml;&AElig;&laquo;&Ograve;&AElig;&frac34;à&Agrave;&euml;<" red-dist ">:")))
  14.     (setq getds (getdist "\n&Otilde;&#710;&Egrave;&euml;&AElig;&laquo;&Ograve;&AElig;&frac34;à&Agrave;&euml;<&iquest;&Eacute;&Ouml;±&frac12;&Oacute;&Aacute;&iquest;&Egrave;&iexcl;>:"))
  15.   )
  16.   (if (= getds nil)
  17.     (setq getds (atof red-dist))
  18.   )
  19.   (vl-registry-write
  20.     "HKEY_CURRENT_USER\\Software\\Autodesk\\BDYCAD"
  21.     "OFDIST"
  22.     (rtos getds)
  23.   )
  24.   (if (ssget '((0 . "Arc,Circle,Ellipse,*Line")))
  25.     (vlax-for obj (vla-get-activeselectionset
  26.                     (vla-get-activedocument
  27.                       (vlax-get-acad-object)
  28.                     )
  29.                   )
  30.       (vla-offset obj getds)
  31.       (vla-offset obj (* getds -1))
  32.     )
  33.     (vlax-release-object obj)
  34.   )
  35. )
  36.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-4 10:19:19 | 显示全部楼层
正需要  收下拉
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-4 12:37:01 | 显示全部楼层
最初由 taner 发布
[B]
[CODE]
  
;;;下面這個是改過的,同樣是曉東空間上的.不記得出自哪位高人.
(defun c... [/B]


在我机器上显示但提示部分有乱码,是繁体的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-4 13:05:18 | 显示全部楼层
批量偏移扩展版
  1. [FONT=courier new](load "xyp_lib.vlx")  ;版本 V.20060303(2153)
  2. ;|下载和加载通用函数(可在签名栏直接下载后放到搜索路径下)
  3. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  4. ★1·在acad.lsp中增加(load"xyp_lib.vlx")
  5. ■2·在每个程序内增加(load"xyp_lib.vlx")
  6. ■3·在command下,输入(load"xyp_lib.vlx")
  7. ■4·在菜单.mnl中增加(load"xyp_lib.vlx")
  8. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  9. [COLOR=red] ★通用函数下载地址:[/COLOR]
  10. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  11. |;

  12. ;;;批量偏移扩展
  13. (defun c:test184 ()
  14.   (cmdla0)
  15.   (defun ch-la ()
  16.     (if        (= ukw2 "Y")
  17.       (command "change" (entlast) "" "P" "la" la "")
  18.     )
  19.   )
  20.   (setvar "OFFSETGAPTYPE" 0)
  21.   (setvar "osmode" 0)
  22.   (if (null ukw)
  23.     (setq ukw "4")
  24.   )
  25.   (if (null ukw2)
  26.     (setq ukw2 "N")
  27.   )
  28.   (if (null getds)
  29.     (setq getds 100)
  30.   )
  31.   (SETQ        getds (UDIST 7 "" "\n输入偏移距离<或直接量取>:" getds nil)
  32.         ukw   (UKWORD
  33.                 7
  34.                 "1 2 3 4"
  35.                 "\n选择偏移方式 : 1-单向(向内)/2-单向(向外)/3-双向(保留原线)/4-双向(删除原线)"
  36.                 ukw
  37.               )
  38.         ukw2  (UKWORD 7 "Y N" "\n选择偏移后层方式 : Y-当前层/N-原层" ukw2)
  39.         la    (getvar "clayer")
  40.         ss    (ssget '((0 . "Arc,Circle,Ellipse,*Line")))
  41.         i     -1
  42.   )
  43.   (setvar "OFFSETDIST" getds)
  44.   (while (setq s1 (ssname ss (setq i (1+ i))))
  45.     (setq pt  (vlax-curve-getstartPoint s1)
  46.           pt1 (PT-FAXIAN s1 pt 10)
  47.           pt2 (PT-FAXIAN s1 pt -10)
  48.     )
  49.     (cond ((= ukw "1")
  50.            (command "offset" "" s1 pt1 "")
  51.            (ch-la)
  52.           )
  53.           ((= ukw "2")
  54.            (command "offset" "" s1 pt2 "")
  55.            (ch-la)
  56.           )
  57.           ((= ukw "3")
  58.            (command "offset" "" s1 pt1 "")
  59.            (ch-la)
  60.            (command "offset" "" s1 pt2 "")
  61.            (ch-la)
  62.           )
  63.           ((= ukw "4")
  64.            (command "offset" "" s1 pt1 "")
  65.            (ch-la)
  66.            (command "offset" "" s1 pt2 "")
  67.            (ch-la)
  68.            (command "erase" s1 "")
  69.           )
  70.     )
  71.   )
  72.   (cmdla1)
  73. )[/FONT]


附件删除,可到13楼下载最新编译程序![/COLOR]

点评

版主老大 你这个代码我按论坛方法不能加载,你这几种方式我都不会,原谅我是纯小白,能不能帮忙写成每日插件那种样式。谢谢  详情 回复 发表于 2019-3-17 17:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-4 16:44:55 | 显示全部楼层
1-单向(向内)/2-单向(向外)/
  pt1 (PT-FAXIAN s1 pt 10)
 pt2 (PT-FAXIAN s1 pt -10)

这个内外如何界定? 用法向不够科学,我认为用面积来界定比较好,比较直观,也复合提示字面的意思,更符合函数vla-offset的解释。面积增大的偏移为外。对直线,以右,上为外。
而楼上xyp的程序没有能做到这一点。可以将一个 封闭多义线左右镜像后看看效果就知道
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-5 08:06:06 | 显示全部楼层
xyp的东西真的不错,程序非常好用,加到启动组了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-3-5 18:03:36 | 显示全部楼层
c:mff
功能:曲线多个同时偏移---by 雨箭风刀

偏移规则提示选项:
选层(A)/选色(C)/ 删除原曲线(E)/ 退出(X) / 输入偏移距离<"ACE300,500">:
选项可组合,如:
60,  外偏60
,60  内偏60
60   双向偏移60
60,120 外偏60,内偏120
A,C,E均可和以上偏移值组合,如:
AC60,  选参照实体层及颜色,外偏60
CE60,120  选参照实体颜色,外偏60,内偏120并删除原实体
回车默认上次偏移规则
输入一次偏移规则可多次选实体

偏移的内外是以面积为规则,偏移后面积增大为“外”,反之为“内”,因此,一个封闭曲线,无论是正向还是反向,“外”偏的结果都一样。对直线未做判断。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-24 19:17:39 | 显示全部楼层
最新版:
1-单向(向内)/2-单向(向外)/3-双向(保留原线)/4-双向(删除原线)
选择偏移后层方式 : Y-当前层/N-原层

点评

版主老大 你这个代码我按论坛方法不能加载,你这几种方式我都不会,原谅我是纯小白,能不能帮忙写成每日插件那种样式。谢谢  详情 回复 发表于 2019-3-17 17:21
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-29 23:09:57 | 显示全部楼层
本人初学vlisp, 多谢楼主给我参考
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-31 16:38:17 | 显示全部楼层
多谢 楼主  很好用!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-20 10:11 , Processed in 0.253345 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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