几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(AutoLISP)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 2009-04-25, 10:08 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 [原创]二维点/三维点的错误

[原创]二维点/三维点的错误
www.dimcax.com
[原创]二维点/三维点的错误
画任意直线的垂线,可是结果是二维点/三维点的错误,请高手指点
(defun c:cx()
(setvar "cmdecho" 0)
(setq en(entsel "选择一条直线:"))
(setq pp(getpoint "选择该直线上一点"))
(setq l(getreal "输入垂线的长度"))
(setq en_data(entget(car en)))
(setq pts(assoc 10 en_data))
(setq pte(assoc 11 en_data))
(setq px1(car pts))
(setq py1(cadr pts))
(setq px2(car pte))
(setq py2(cadr pte))
(setq mp1(list pxi py1))
(setq mp2(list px2 py2))
(setq a(angle mp1 mp2))
(setq pppp(polar pp (+ (/ pi 2) a) l))
(setq ppp(polar pp (- (/ pi 2) a) l))
(command "line" pppp ppp "")
(princ)
)
d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28( c:cx ()
( "cmdecho" 0)
( ( en ( "选择一条直线:"))
( ( pp ( "选择该直线上一点"))
( ( l ( "输入垂线的长度"))
(
( en_data ( ( en)))
( pts ( ( 10 en_data)))
( pte ( ( 11 en_data)))
( perpt ( ( en) pp t));找出垂点
( a ( pts pte))
( pppp ( perpt ( ( pi 0.5) a) l))
( ppp ( perpt ( ( pi 1.5) a) l))
( ( '((0 . "line")
(100 . "acdbentity")
(100 . "acdbline")
(8 . "0")
)
( ( 10 pppp) ( 11 ppp))
)
)
)
)
)
)
()
)
因為專業, 所以精彩! 多多學習.多多進步 . 明经在我在!
我的代表作/bbs/dispbbs.asp?boardid=2&id=33961
/bbs/dispbbs.asp?boardid=14&id=58568&page=1
d
代码是楼主自己的吗?
(setq mp1(list pxi py1))
-》
(setq mp1(list px1 py1))
d
谢谢bdycad,你的代码很好用,非常感谢!也谢谢caoyin指出错误,可是我改了后画出来的是水平线,我的代码还是由问题。
d
;;;(defun c:cx ()
;;; (setvar "cmdecho" 0)
;;; (setq en (entsel "选择一条直线:"))
;;; (setq pp (getpoint "选择该直线上一点"))
;;; (setq l (getreal "输入垂线的长度"))
;;; (setq en_data (entget (car en)))
;;; (setq pts (assoc 10 en_data));此处取值错误,assoc返回的不是二维或三维点
;;; (setq pte (assoc 11 en_data));此处取值错误,assoc返回的不是二维或三维点
;;; (setq px1 (car pts));这里是什么意思?
;;; (setq py1 (cadr pts));这里是什么意思?
;;; (setq px2 (car pte))
;;; (setq py2 (cadr pte))
;;; (setq mp1 (list pxi py1));此处变量名称错误,此处的mp1不就是pts点么?
;;; (setq mp2 (list px2 py2))
;;; (setq a (angle mp1 mp2))
;;; (setq pppp (polar pp (+ (/ pi 2) a) l))
;;; (setq ppp (polar pp (- (/ pi 2) a) l))
;;; (command "line" pppp ppp "")
;;; (princ)
;;
;;更正如下:
( c:test ()
;;; ( "cmdecho" 0)
( en ( "选择一条直线:"))
( pp ( "选择该直线上一点"))
( l ( "输入垂线的长度"))
( en_data ( ( en)))
( pts ((assoc 10 en_data)))
( pte ((assoc 11 en_data)))
( a ( pts pte))
( pppp ( pp ( a ( pi 2)) l))
( ppp ( pp (- a ( pi 2)) l));;此处就是你画出来时水平线的原因,变量换个方向即可,否则ppp点可能不是所要的点
( "pline" pppp pp ppp "")
()
)
更简洁的代码如下:
代码:
( c:test () ( en ( "选择一条直线:") pp ( "选择该直线上一点") l ( "输入垂线的长度") en_data ( ( en)) pts ( ( 10 en_data)) pte ( ( 11 en_data)) a ( pts pte) pppp ( pp ( a ( pi 2)) l) ppp ( pp (- a ( pi 2)) l);;此处就是你画出来的是水平线的原因,变量换个方向即可,否则ppp点可能不是所要的点 ) ( "pline" pppp pp ppp "") () )

bdycad的代码画不出线。
d
以下代码可以在直线上连续画其垂线,如果是曲线,能取得曲线所点击处的斜率,那么就可以适用于曲线上画其垂线了。
请大家看看,修改成对于任意的直线、曲线均适用的程序!
还有就是,在选取直线(曲线)上的点时,加入一个函数,用以只能限制在直线上来选点。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22;; 选取直线画其垂直线
( c:test2 ( en l en_data pts pte a pp perpt pt1 pt2)
( ( en ( "选择一条直线:"))
(
( l ( "输入垂线的长度")
en_data ( ( en))
pts ( ( 10 en_data))
pte ( ( 11 en_data))
a ( pts pte)
)
( ( pp ( "点选该曲线上一点"))
( perpt ( ( en) pp t);找出垂点
pt1 ( perpt ( a ( pi 2)) l)
pt2 ( perpt (- a ( pi 2)) l)
;;此处就是你画出来的是水平线的原因,变量换个方向即可,否则ppp点可能不是所要的点
)
( "pline" pt1 perpt pt2 "")
)
)
)
()
)
作曲线上一点切线
autocad中特定角度及长度捕捉的实现方法
已经完成,对于任意曲线的垂线均适用,见下面代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20( c:test ( en len obj pt perpt lst ang pt1 pt2 obj)
( ( en ( "选择一条曲线:"))
( ( len ( "输入垂线长度\n")) ;此处要加入非法输入的控制
(
( obj ( ( en)))
( ( pt ( "选择该直线上一点"))
( perpt ( obj pt t)
lst ( obj ( obj perpt))
ang ( ( ( lst) ( lst)))
pt1 ( perpt ( ang ( 0.5 pi)) len)
pt2 ( perpt (- ang ( 0.5 pi)) len)
;;此处就是你画出来的是水平线的原因,变量换个方向即可
)
( "pline" pt1 perpt pt2 "")
)
)
)
)
()
)
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 03:50 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多