明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 北斗七星

[求助]利用计算器找中点的困惑

  [复制链接]
 楼主| 发表于 2002-10-19 08:47 | 显示全部楼层

有关计算器找中点的继续讨论,请大家多来探讨技术

11-j朋友的方法还是可行的,但实际上有更简单的解决方案--做一个工具条,命令格式为'cal (cur+cur)/2;这样就能建立一个透明命令直接找出没有连线的中点了。
至于cy956朋友的发言可能他没有完全明白我的意思,以为我在实际操作过程中会真的那么麻烦地用键盘敲入这些指令,事实上做工具条就能将这些指令一次解决了。
一个技术问题可以有多个解决方案,对于技术探讨,大家集思广益对于每一位都有好处。
话说回来我的问题还是没有解决,现在倒变成如何找中点的问题了,已偏离了本意。
不过还是很高兴,愿与各位交个朋友,大家互相提高。
发表于 2002-10-19 09:27 | 显示全部楼层

问题这样解决

“工具”->“选项...”->“用户系统配置”->“坐标数据输入的优先级”->“键盘输入”
问题是解决了,我还忍不住要说你两句。
动不动就晕,就倒,你以为医生和护士都很闲吗?
你一开始就没把问题说得很透彻,很明白,倒怪起其他人来了。
科学的态度是严谨、踏实,不要太浮燥。
 楼主| 发表于 2002-10-19 22:19 | 显示全部楼层

“问题是解决了”?还不行的嘛!

本帖最后由 mccad 于 2002-10-19 22:19:18 编辑

你自己试过了吗?根本不行的嘛!没有解决任何问题,看来我还是得把我的本意再述叙一遍,用计算器找中点(或找三点之间的重心)是AutoCAD中计算器应用的一个实用工具,但我的问题之本意不是如何找中点(如何捕捉已有线段中点之方法似乎是在幼儿园就应解决的),而是问为什么会出现所求得之点跳到附近之捕捉点的原因及解决方法。
[部分内容已经删除]
发表于 2002-10-19 22:30 | 显示全部楼层

对于取两点的中间点问题,已经有定论,计算器CAL功能确实很实用

在我写过的程序中也用过计算器:
          (setq        pto1 (c:cal "(pta1 + ptb2) / 2")
                pto2 (c:cal "(pta2 + ptb1) / 2")
          )
          (command "_line"
                   pto1
                   pto2
                   ""
          )
如果你想用光标来捕捉,就使用以下:
命令: cal
>> 表达式: (cur+cur)/2
>> 输入点:
>> 输入点:
(440.44 363.372 0.0)

如果你想使用对象捕捉,则就把对象捕捉模式打开,用上面的方法也行
发表于 2002-10-19 22:32 | 显示全部楼层

对于命令行提示坐标与实际点不符主要是捕捉的问题,在画点时关闭捕捉就行

 楼主| 发表于 2002-10-20 15:07 | 显示全部楼层

利用计算器找中点的最终解决

利用计算器找中点的最终解决
《利用计算器找中点的困惑》帖子帖出以后,大家想出了不少办法,但没有人能真正说到点子上,讨论还一度陷入如何找中点的问题上了。不过这也难怪,大家都是边学习边提高的嘛。现在,我经高人指点,已经找到了问题的答案了,在这里先谢过大家了。
我认为,对于技术问题的探讨,必须抱着一种认真、务实的态度。象在此次的讨论过程中,有些朋友说直接找中点不就得了,何必那么麻烦呢?当然,如果在两点之间有连线存在,那确实是有些多此一举,问题是没有连线呢?用计算器直接定位是一个比较好的方法,当然也可用编程,但我通过实际操作和比较,还是定制一个工具条最为合理、简单,操作起来效率高。
本来这个问题是我在学习过程中碰到的一个困惑,如果作为一个如何找中点的初级技术问题,可以有很多的解决方案,但我的问题却是找点发生的程序错误问题,而大家却都在谈论如何找中点,不过这也难怪,毕竟这里是一个业余爱好者的天地。是我没有想仔细,对不起了。
回到技术上来,有朋友已经在问我,那么这个定点错误的问题到底到什么原因呢?好,我就现学现卖地告诉大家:是系统变量Aperture的设置问题,系统变量Aperture是一个控制object snap target box大小的变量,将它的值设的小一点如3(缺省值为10),就不会出现所求之点“逃跑”到已有之点的问题了(这里还要说明一下,“逃跑”到已有之点之说,并不一定是逃到指定求中点的两参考上,而是靠近求得座标点的最近的已在点上),当然这还是与两点之间在屏幕上显示的距离有关,如果距离太小的话,还是会出错。反之,将Aperture的值设得越大,越会出现“逃跑”的问题,因为“逃跑”的空间大了,凭我自己的直感,这是AutoCAD的一个小小的Bug,不知大家以为然否?
还要补充一点,如果在找点过程中将捕捉按钮(osnap)关闭,则没有“逃跑”的问题了,但显然不可行,因为这样连参考点也捕捉不到了,当然也可以按住shift键(ctrl也一样),再右击鼠标来选择所需点,但显然已违背了追求效率的本意,因为这样操作较麻烦。况且也并不是解决了问题,只是一种变通。
至于东哥朋友所说的方法(见“在cal命令中用对象捕捉函数”一文),书里是这样说的,实际上并不实用,因为作图的时候往键盘里敲那么一大堆命令,完全失去了CAD的本意,CAD的一个主要目的就是为了提高设计效率,如果在实际工作中这样做,所耗的时间还不如画一条直线找中点事后再擦除(当然是假定此线不需要存在),所以还是用(cur+cur)/2来求中点最为方便,这是一个通用的找点代码,而且不需要记中点(mid)、园心(cen)、端点(end)及其它点的代码,一劳永逸。至于如何定制工具条,详见“有关计算器找中点的继续讨论,请大家多来探讨技术”一文。不过也难为你这么有心来帮我,谢谢了!
至于leeyeafu朋友所说的方法,见“问题这样解决”一文,根本不行,自己也不试一下,就这么来教人家如何做,要是你是老师的话,劝你还是早点辞职的好,免得误人子弟,害人害已。
再说一说系统变量的问题,据我所知,很多朋友的问题其实都是由此引起的,如有朋友说不能用键盘上的“delete”键来删除所选之物体,菜单栏里没有其它菜单了,等等。等过几天我再写一些有关此问题的文章,今天就此与各位再见了。
祝各位心情愉快,认识你们真高兴。
……什么,你问我那位高人指点的我?待会儿我问问他,是否愿意让我将他宣传一下,不过可以告诉你的是,还是在网上。人家专业水平确实就是不一样,回答问题一下子就能点在关键处,解决了困扰了我很长一段时间的问题。
发表于 2002-10-22 07:43 | 显示全部楼层

向 北斗七星 致歉

周六没上班,在网吧上网,看到该主题后,自以为找到了问题的关键,于是就回了帖,然后遭到北斗七星严厉的批评。网吧不会装CAD,确实没试过。

科学需要严谨的态度,以这样不负责任,自以为是的态度对待,遭受失败和挫折是必然的。:(
实践是检验真理的唯一标准,毛爷爷此言不虚,不听老人言,吃亏在眼前。:(
确实难过,但学到了知识,得到了提高,吸取了教训,想想也是值得的。
在此,向北斗七星致歉,同时感谢北斗七星的直言不讳的批评,我完全接受批评。 最后,感谢明经通道提供这样的平台,得到学习和教训。谢谢!
 楼主| 发表于 2002-10-22 13:09 | 显示全部楼层

对您的坦城与气量十分钦佩,我想我们能成为好朋友,讲个笑话让大伙轻松一下

我也要向你说声对不起,由于那天正在气头上,所以说了一些偏激的话,请你原谅,我们交个朋友好吗?这也算是不打不相识了。
在此也向各位朋友道歉,如果我的话有伤害大家的地方,那就请允许我讲一个笑话来赔理,我非常想与各位成为好朋友,以后多多交流好吗。
讲一个笑话,让大家轻松一下。
向上帝要钱
凡人问上帝:“上帝呀,一万年对于你来说意味着什么?”
上帝“只是一秒钟而已”
凡人“那么,一亿元对于你来说意味着什么?”
上帝“只是一分钱而已”
凡人“仁慈的上帝呀,请给我一分钱吧”
上帝“好的,请过一秒钟”
发表于 2002-11-13 22:11 | 显示全部楼层

看了这么多,终于明白点了。

马路上的一个小水坑,车水马列龙,水坑渐渐变大。
一天有个人在水坑上填了个很结实的木板。

没看到的再有同样的水坑时都是绕行。
知道的人可能会同样的去找些什么东东填坑。

明天我就去填下坑。
发表于 2002-11-16 10:08 | 显示全部楼层

我很久以前注意到过这个问题。你这个方法没有根本解决。Aperture设置还是很有缺点的

我很久以前注意到过这个问题。你这个方法没有根本解决。Aperture设置还是很有缺点的。我用这样方法。。。[br]leeyeafu的方法是根据autocad的帮助想当然的。但是很久以前我试过这种方法,的确是不灵光的,autocad的随机文档应该说清楚一点。
我想除了那个aperture外(其实我反而认为这个方法不是很好,毕竟aperture大一点画图时会方便一点)有两种方法:

1。在cal命令之前临时屏蔽自动捕捉。这个方法可能大家不会注意到,即使用non关键词:
Command: line
Specify first point: NON
'cal
>> Expression: (end+end)/2
>> Select entity for END snap:
>> Select entity for END snap:
(180.246 99.7775 0.0)

Specify next point or [Undo]:
Specify next point or [Undo]:
Command:
这个non用在lisp的command,vl-cmdf中也是有效的,可以避免操作osmode系统变量,对小程序很有效,如(command "line" "non" '(1 3 4) "non" '(3 4 5) "")

2. 第二种方法与leeyeafu说的有关。其实所谓的键盘优先,是autocad文档不够清楚。对于autocad来说,其实键盘的输入应该是字符串,所以,只要cal返回的结果是字符串形式的坐标,就可以屏蔽掉自动捕捉。而cal命令不提供相关的字符串操作函数。所以,这一条仅对autolisp有用。如(command "line" "1,3,4" "3,4,5" ""),这样也可以屏蔽掉自动捕捉。
给一个更实用一点的:
(defun getmidpt ( pt1 pt2 / x1 y1 z1 x2 y2 z2 x y z midptstr)
       (setq x1 (car pt1)
             y1 (cadr pt1)
             z1 (caddr pt1))
       (setq x2 (car pt2)
             y2 (cadr pt2)
             z2 (caddr pt2))
       (setq x  (/ (+ x1 x2) 2)
             y  (/ (+ y1 y2) 2)
             z  (/ (+ z1 z2) 2))
       (setq midptstr (strcat (rtos x 2 16) ","
                              (rtos y 2 16) ","
                              (rtos z 2 16)
                      )
       )
)

(defun C:midpt()
       (princ "\n***捕捉两点的中点*** ")
       (setq pt1 (getpoint "第一点:"))
       (setq pt2 (getpoint "第二点:" pt1))
       (getmidpt pt1 pt2)
)
上述程序是我初学lisp时写的(当时不会用什么lambda, mapcar之类的函数),现在看来可以写得简单一点,呵呵。
应用:
Command: line
Specify first point: 'midpt
***捕捉两点的中点*** 第一点:第二点:"145.2154945639678,110.1693458721686,0"
Specify next point or [Undo]:
Specify next point or [Undo]:
Command:
以字符串形式返回,可以避免自动捕捉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 11:42 , Processed in 0.247938 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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