明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1913|回复: 4

[原创]判断点是否在直线或圆弧上

[复制链接]
发表于 2007-4-24 15:11 | 显示全部楼层 |阅读模式
;;plrelation 函数
;;判断点是否在直线或圆弧上
;;语法:(plrelation po ename)
;;参数:po 点座标 ename 对象名
;;返回:T或nil
;;T 在对象上 nil不在对象上
(defun PLRELATION (PO ENAME / P1 P2 DI1 DI2 DI3 A R)
  (setq ENT (entget ENAME))
  (cond
    ((= (strcase (cdr (assoc 0 ENT))) (strcase "lINE"))
     (setq P1 (cdr (assoc 10 ENT))
    P2 (cdr (assoc 11 ENT))
     )
     (setq DI1 (distance PO P1)
    DI2 (distance PO P2)
    DI3 (distance P1 P2)
     )
     (if (= (+ DI1 DI2) DI3)
       (setq A t)
       (setq A NIL)
     )
    )
    ((or (= (strcase (cdr (assoc 0 ENT))) (strcase "ARC"))
  (= (strcase (cdr (assoc 0 ENT))) (strcase "CIRCLE"))
     )
     (setq P1 (cdr (assoc 10 ENT))
    R  (cdr (assoc 40 ENT))
     )
     (setq DI1 (distance PO O))
     (if (= R DI1)
       (setq A t)
       (setq A NIL)
     )
    )
  )
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2007-4-24 16:16 | 显示全部楼层

判断不完善,需更改!

发表于 2007-4-24 22:15 | 显示全部楼层
如果是Vlisp就简单多了。
  1. (defun if_on_curve (pt curve / closept)
  2.   (setq closept (vlax-curve-getclosestpointto curve pt))
  3.   (equal (distance closept pt) 0 1e-8)
  4. )

以下为测试:
  1. (vl-load-com)
  2. (defun C:test (/ perpt e pt)
  3.   (if (setq e (car (entsel "\nPlease select a Curve or Line:")))
  4.     (if (setq pt (getpoint "\nPlease Enter a Point:"))
  5.       (if_on_curve pt e)
  6.     )
  7.   )
  8. )

发表于 2007-4-24 23:01 | 显示全部楼层

能否说一下最好的思路?

通过距离还是角度或者其他?

发表于 2007-4-26 01:07 | 显示全部楼层
本帖最后由 作者 于 2007-4-26 1:09:40 编辑

用vl还可以更简单吧?
  1. ;| (oncur e pt)判断点在曲线上
  2. 返回: 非nil(在曲线上)
  3. |;
  4. (defun oncur (e pt)
  5.   (vlax-curve-getdistatpoint e pt);;vlax-get-paramatpoint
  6. )
  1. ;;测试
  2. (defun c:tt()
  3.   (oncur (car(entsel "\n 选曲线:"))(getpoint "\n 选点:"))
  4. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 08:33 , Processed in 0.225252 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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