找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 947|回复: 8

[LISP程序]:怎样用纯LISP一次OFFSET多个封闭实体

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2004-2-4 08:30:23 | 显示全部楼层 |阅读模式

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

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

×
请教各位高手:怎样用纯LISP一次OFFSET多个封闭实体,可以要么统一向内OR向外OFFSET.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-2-4 12:43:37 | 显示全部楼层
用vlisp中的offset會比較簡單
Creates a new object at a specified offset distance from an existing object.

Signature

RetVal = object.Offset(Distance)

Object        Arc, Circle, Ellipse, Line, LightweightPolyline, Polyline, Spline, XLine
The object or objects this method applies to.
Distance        Double; input-only
The distance to offset the object. The offset can be a positive or negative number, but it cannot equal zero. If the offset is negative, this is interpreted as being an offset to make a "smaller" curve (that is, for an arc it would offset to a radius that is "Distance less" than the starting curve's radius). If "smaller" has no meaning, then it would offset in the direction of smaller X, Y, and Z WCS coordinates.

RetVal        Variant (array of objects)
An array of the newly created objects resulting from the offset.

Remarks

For many curves, the result of this operation will be a single new curve (which may not be of the same type as the original curve). For example, offsetting an ellipse will result in a spline because the result does fit the equation of an ellipse. In some cases it may be necessary for the offset result to be several curves.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-4 13:23:13 | 显示全部楼层
同意lucas意见。

  1. ;(xoff (ssget '((0 . "*line,arc,circle,ellipse"))) -100)
  2. ;(xoff (ssget) -300)
  3. |;
  4. (defun xoff (ss dist / ss)
  5.   (setq ss  (ssget "P" '((0 . "*line,arc,circle,ellipse")))
  6.         vss (vla-get-activeselectionset(vla-get-activedocument(vlax-get-acad-object))))
  7.   (vlax-for obj vss
  8.     (vla-offset obj dist)
  9.   )(princ)
  10. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2004-2-4 13:27:50 | 显示全部楼层
to LUCAS :VLISP也可以呀!麻烦您编一个.我先谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-5 04:10:54 | 显示全部楼层
TRY THIS:
(defun c:test ()
  (vl-load-com)
  (setq ss (ssget "x"))
  (setq dis (getreal "\nSpecify Offset Distance:"))
  (setq        objs (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
  (vlax-for obj objs
    (if (vlax-curve-isclosed obj)
      (vla-offset obj dis)
    )
  )
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2004-2-5 08:28:06 | 显示全部楼层
to lsjjm :不错,谢谢你!我试过了,很好用!如果改成如下:(defun c:TEST (/ ss dis objs)
(vl-load-com)
(setq ss (ssget ))
(setq dis (getreal "\nSpecify Offset Distance:"))
(setq objs (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for obj objs
(vla-offset obj dis)
)
(princ)
)
就可以对所有实体OFFSET了.
另请问,如果我OFFSET后,想删除原来的实体的话,该怎么办?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-9 00:33:15 | 显示全部楼层
最初由 taner 发布
[B]....
就可以对所有实体OFFSET了.
另请问,如果我OFFSET后,想删除原来的实体的话,该怎么办? [/B]

第一:对像region、solid、3dpolyline这样的实体是不能offset的,
只能支持原来ACAD的offset可以支持的实体;
第二:程序末尾加上:
(command "erase" ss "")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-11 07:59:13 | 显示全部楼层
;;注意:*POLYLINE,SPLINE可是有順時針OR逆時針,程序可沒有那麼簡單吧!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2004-2-11 09:01:56 | 显示全部楼层
各位能否想个办法,不用每次都输入DIS.即DIS有一个初值,如果认为合适的话,ENTER即可,否则用户可重新输入.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 22:37 , Processed in 0.494906 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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