找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5409|回复: 29

[求助] 求助一个类似于getdist函数功能的函数

[复制链接]

已领礼包: 449个

财富等级: 日进斗金

发表于 2013-6-2 12:20:32 | 显示全部楼层 |阅读模式
悬赏50D豆已解决
代码如下:
  1. (defun c:tt ()
  2.   (prompt "\n请直接量取距离或者输入一个值:")
  3.   (while (setq apt1 (getpoint "\n请指定点:"))
  4.       (setq apt2 (getpoint "\n请指定第二个点:"))
  5.       (setq list1 (distance apt1 (list (car apt2) (cadr apt1))));返回量取的X轴的值
  6.   )   ;想要实现类似于getdist功能.但是getdist函数(由于不能捕捉垂直点所以返回的值有所误差)!,</P>
  7. (setq list1 (getreal "\n请输入一个值:"));或者直接输入
  8. )

最佳答案

查看完整内容

说来说去,好像还是和http://bbs.xdcad.net/thread-668053-1-1.html的要求差不多,那个帖子已经告诉你了,你的思路其实有误,交互不是这样进行的。 使用getpoint能捕捉的东西,使用getdist也同样可以捕捉,这不是问题,问题是你自己不知道要捕捉哪一点,也不知这两点是不是在同一条水平或垂直线上。 使用getpoint来组合距离并不难,我以前发过的“AutoLisp编程心得”的第5条就说了一个类似的例子,那是使用getpoint和getcorner ...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-6-2 12:20:33 | 显示全部楼层
xtdwynij 发表于 2013-6-2 16:24
这不就和getdist类似咯!支持键盘输入的同时也支持捕捉输入

说来说去,好像还是和http://bbs.xdcad.net/thread-668053-1-1.html的要求差不多,那个帖子已经告诉你了,你的思路其实有误,交互不是这样进行的。

使用getpoint能捕捉的东西,使用getdist也同样可以捕捉,这不是问题,问题是你自己不知道要捕捉哪一点,也不知这两点是不是在同一条水平或垂直线上。

使用getpoint来组合距离并不难,我以前发过的“AutoLisp编程心得”的第5条就说了一个类似的例子,那是使用getpoint和getcorner组合得到行距和列距的,比你要求的还复杂些,你不妨看看。

网上找了一下,还有转载:http://blog.sina.com.cn/s/blog_3fd896ba0100hwvx.html

点评

多谢长老出手相助。只是initged按位编码我不怎么懂意思!长老是否有空解释一下给个最简单的例子呢?  详情 回复 发表于 2013-6-2 23:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 12:54:17 | 显示全部楼层
没太明白楼主的意思,getdist不能返回垂点?getdist是可以用捕捉的啊,这个函数返回的是你到指定点的距离。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-6-2 13:25:51 | 显示全部楼层
Free-Lancer lispboy二位老朋友你们好!getdist是能够捕捉也能够输入!但是getdist函数捕捉返回的值并不能够单单捕捉的二个点的X轴或者Y轴(除非开最近点和垂直点,但如果开了垂直点CAD就会死机,或者是点太多或者重线太多,反正我一开就会死机)!比如(setq apt1 (getpoint "1:")) (setq apt2 (getpoint "2")) (setq list1 (distance apt1 (list (car apt2) (cadr apt1)))) ,这样就能返回单单只返回X轴的值,而且了distget捕捉的话返回的值不一定是X轴的值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 14:17:35 | 显示全部楼层
你可以先不开捕捉,自己用 (osnap pt "mid")获得你需要的点,然后根据点算出距离。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 14:19:30 | 显示全部楼层
不一定非要依赖捕捉的值,你自己可以根据需要,自己算出你要的东西,比如 用 VLAX-CURVE类函数,最近点啊什么的。

点评

lispboy师兄,谢谢你的指点.VLISP函数我有资料只是一直没有抽得出时间出来学习.但是现在这个功能又是我很想要的.先把我急着要的功能做出来以后再抽出时间来学习!下面是我自己写的一个类似于getdist功能但却不完美 (d  详情 回复 发表于 2013-6-2 14:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-6-2 14:42:05 | 显示全部楼层
Lispboy 发表于 2013-6-2 14:19
不一定非要依赖捕捉的值,你自己可以根据需要,自己算出你要的东西,比如 用 VLAX-CURVE类函数,最近点啊什 ...

lispboy师兄,谢谢你的指点.VLISP函数我有资料只是一直没有抽得出时间出来学习.但是现在这个功能又是我很想要的.先把我急着要的功能做出来以后再抽出时间来学习!下面是我自己写的一个类似于getdist功能但却不完美
(defun xbjk ( / aa bb cc )
  (setvar "osmode" 515)
  (setq aa (getpoint "\n请指定第一点:"))
  (setq bb (getpoint aa "\n请指定第二点:"))
  (setq cc (distance aa (list (car bb) (cadr aa))))
)  ;这是量X轴的距离
(setq ct (getreal "\n请输入插口的值或者按空格键换成捕捉输入:"))
(if (null ct) (setq ct (xbjk)))
;;;;这是我自己写的一个小函数,也能够实现getdist功能.但是却要多按一下空格.而且这样的话也不是很习惯!不知这样各位前辈高手们是否能
;够看懂

点评

你说的不完美是指什么? 完美是什么样的?  详情 回复 发表于 2013-6-2 15:04
先提个建议,函数里面别和用户交互,你给函数传用户交互的值做参数。比如两个点。  详情 回复 发表于 2013-6-2 14:58
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 14:58:38 | 显示全部楼层
本帖最后由 Lispboy 于 2013-6-2 15:01 编辑
xtdwynij 发表于 2013-6-2 14:42
lispboy师兄,谢谢你的指点.VLISP函数我有资料只是一直没有抽得出时间出来学习.但是现在这个功能又是我很 ...

先提个建议,函数里面别和用户交互,你给函数传用户交互的值做参数。比如两个点。
你上面的程序可以改成:

  1. (defun xbjk (p1 p2 /  cc )
  2.   (setq cc (distance p1(list (car p2) (cadr p1))))
  3. )  ;这是量X轴的距离
  4. ;;;;这是我自己写的一个小函数,也能够实现getdist功能.但是却要多按一下空格.而且这样的话也不是很习惯!不知这样各位前辈高手们是否能
  5. ;够看懂
  6. (defun c:tt()
  7.    (if (and (setq ct (gereal "\n请输入插口的值或者按空格键换成捕捉输入:"))
  8.               (setq aa (getpoint "\n请指定第一点:"))
  9.               (setq bb (getpoint aa "\n请指定第二点:"))
  10.        )
  11.       (setq ct (xbjk aa bb))
  12.    )  
  13.   (princ)
  14. )




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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 15:04:40 | 显示全部楼层
xtdwynij 发表于 2013-6-2 14:42
lispboy师兄,谢谢你的指点.VLISP函数我有资料只是一直没有抽得出时间出来学习.但是现在这个功能又是我很 ...

你说的不完美是指什么?

完美是什么样的?

点评

完美我想要的郊果就是不用选它能够自己自动识别捕捉输入还是键盘输入.就像getdist函数一个样.当我有点击动作时默认捕捉输入,否则默认键盘输入!Lispboy师兄!你刚才写的这个代码我看不懂.同时满足捕捉输入和键盘输入才  详情 回复 发表于 2013-6-2 15:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-6-2 15:11:21 | 显示全部楼层
Lispboy 发表于 2013-6-2 15:04
你说的不完美是指什么?

完美是什么样的?

完美我想要的郊果就是不用选它能够自己自动识别捕捉输入还是键盘输入.就像getdist函数一个样.当我有点击动作时默认捕捉输入,否则默认键盘输入!Lispboy师兄!你刚才写的这个代码我看不懂.同时满足捕捉输入和键盘输入才执行二个点的距离?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 15:26:32 | 显示全部楼层
本帖最后由 Lispboy 于 2013-6-2 15:41 编辑

点击和回车输入这些应该在函数外面和用户交互,你的函数只是处理要的值。 你不一定非要模拟出GETDIST,函数都做里面,以后你修改了计算方式呢,还得重新写函数。

你试试下面的代码
  1. (defun c:tt ()
  2.   (if (or
  3.         (setq ct (getreal "\n请输入插口的值<拾取>:"))
  4.         (and
  5.           (setq aa (getpoint "\n请指定第一点<退出>:"))
  6.           (setq bb (getpoint aa "\n请指定第二点<退出>:"))
  7.           (setq ct (distance aa (list (car bb) (cadr aa))))
  8.         )
  9.       )
  10.       (progn
  11.           ;ct 就是和用户交互获得的距离
  12.       )
  13.   )
  14.   (princ)
  15. )

点评

no function definition: GEREAL Listboy师兄!还请继续出招!另不知是否是这样表达?  详情 回复 发表于 2013-6-2 15:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 15:39:58 | 显示全部楼层
写成函数这样:

  1. (defun #getdist(prompt1 prompt2 prompt3)
  2.    (or
  3.      (setq ct (getreal prompt1))
  4.      (and
  5.        (setq aa (getpoint prompt2))
  6.        (setq bb (getpoint aa prompt3))
  7.        (setq ct (distance aa (list (car aa) (cadr bb))))
  8.      )
  9.    )
  10.    ct
  11. )
  12. (defun c:tt()
  13.     (setq dis (#getdist "\n请输入插口的值<拾取>:" "\n请指定第一点<退出>:" "\n请指定第二点<退出>:"))
  14. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-6-2 15:40:15 | 显示全部楼层
Lispboy 发表于 2013-6-2 15:26
点击和回车输入这些应该在函数外面和用户交互,你的函数只是处理要的值。 你不一定非要模拟出GETDIST,函数 ...

no function definition: GEREAL   Listboy师兄!还请继续出招!另
  1. (defun c:tt ()
  2.   (if (or (setq ct (gereal "\n请输入插口的值<拾取>:"))
  3.           ((setq aa (getpoint "\n请指定第一点<退出>:")) (setq bb (getpoint aa "\n请指定第二点<退出>:"))
  4.                                                         (setq ct (distance p1 (list (car bb) (cadr aa)))))
  5.       )
  6.       (alert "测试成功")                                                      
  7.       (alert "测试不成功")
  8.   )
  9.   (princ)
  10. )
不知是否是这样表达?

点评

里面疏忽,输入错了,修改了,重新看下上面两个帖子。  详情 回复 发表于 2013-6-2 15:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 15:42:15 | 显示全部楼层
xtdwynij 发表于 2013-6-2 15:40
no function definition: GEREAL   Listboy师兄!还请继续出招!另不知是否是这样表达?

里面疏忽,输入错了,修改了,重新看下上面两个帖子。

点评

要空格一次才可以换成捕捉的.和我写的郊果一样.不能够自动识别是键盘输入还是捕捉输入.是默认键盘输入.回车后换成捕捉输入!  详情 回复 发表于 2013-6-2 15:53
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 08:29 , Processed in 0.428834 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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