找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 706|回复: 6

[原创]:OFFSET在LISP中如何实现?

[复制链接]
发表于 2004-10-18 22:40:14 | 显示全部楼层 |阅读模式

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

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

×
怎么确定偏移的方向呢?如果是圆或是圆弧可以根据圆心定位,如果是直线怎么办?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-10-18 23:48:26 | 显示全部楼层
可以从直线的角度入手
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-19 07:17:03 | 显示全部楼层
(From on-line help, but sometimes it's not right)
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.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-10-23 10:50:48 | 显示全部楼层
你可以点击直线,找到两端点坐标,然后求出直线方向
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-7 23:39:12 | 显示全部楼层
在程序中使用offset时你可以先用鼠标指定一个方向,然后就程序自动复制直线了。这样简单而实用,否则太多的判断反倒容易出错。

给个例子:

(defun c:pjhx()
         (command "layer" "m" "jhx" "c" "yellow" "jhx" command)
         (command "layer" "s" "jhx" command)
         (setq xnum (getint "\n请输入线数: "))
         (if (= xnum nil)(setq xnum 0))
         (setq dnum (getreal "\n请输入线间距离: "))
         (if (= dnum nil)(setq dnum 0))
         (setq s (ssget))
         (setq s1 (ssname s 0))
         (command "change" s "" "p" "la" "jhx" "")
         (setq p (getpoint "\n请确定偏移方向: "))
         (setq cont 0)
         (while (< cont xnum)
                (setq data (entget s1))
                (setq pstart (assoc 10 data))
                (setq pstarty (nth 1 pstart))
                (setq pstartx (nth 2 pstart))
                (setq p1 (list pstarty pstartx))
                (if(= cont 0) (setq fx (angle p1 p)))
                (setq p (polar p1 fx dnum))
                (command "offset" dnum s1 p "")
                (setq s1 (entlast))
                (setq cont (+ cont 1))
          )   
)

运行这个例子时,必须先有一根直线存在。

程序运行后会提示你选中这根直线,右键确定,然后左键在你需要便移的方向点击一下即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-10 13:53:27 | 显示全部楼层
可以得到起始和终点坐标,再用新点表代替
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 15:32 , Processed in 0.186199 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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