找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1779|回复: 14

[LISP程序]:小小分享 找出两条线的虚拟焦点

[复制链接]
发表于 2003-2-25 16:31:20 | 显示全部楼层 |阅读模式

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

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

×
我也提供一个
高手们如果觉得简单请参考就好

功能 找出两条线的虚拟焦点

(defun C:PL1 (/ E1 E2 P1 P2 P3 P4 P5 P6 AA BB CC H K R Y1 Y2 X1 X2 V1 V2)
  (setvar "OSMODE" 512)
  (setq E1 (ssname (ssget (getpoint "\nfirst entity : ")) 0))
  (setq E2 (ssname (ssget (getpoint "\nsecond entity :  ")) 0))
  (setvar "OSMODE" 0)
  (setq V2 0)
  (if (/= (cdr (assoc 0 (entget E1))) "LINE") (setq V2 (+ V2 2)))
  (if (/= (cdr (assoc 0 (entget E2))) "LINE") (setq V2 (+ V2 1)))
  (if (= V2 0) ;if line,line
      (progn
      (setq P1 (cdr (assoc 10 (entget E1)))) ;start point origenal
      (setq P2 (cdr (assoc 11 (entget E1)))) ;end point origenal
      (setq P3 (cdr (assoc 10 (entget E2)))) ;start point origenal
      (setq P4 (cdr (assoc 11 (entget E2)))) ;end point origenal
      (setq P5 (inters P1 P2 P3 P4 nil))
      (if (< (distance P1 P5) (distance P2 P5)) (setq PA5 P1) (setq PA5 P2))
      (if (< (distance P3 P5) (distance P4 P5)) (setq PB5 P3) (setq PB5 P4))
      ;(setq PA5 (cdr (assoc 10 (entget E3))))
      ;(setq PB5 (cdr (assoc 11 (entget E3))))
      (COMMAND "LINE" PA5 P5 PB5 "")
      )
  )
  (if (= V2 2) ;if arc/circle,line
      (progn   ;CHANGE TO V2=1 AND NEXT PROGRAM CAN DO IT
      (setq V1 E1)
      (setq E1 E2)
      (setq E2 V1)
      (setq V2 1)
      )
   )
  (if (= V2 1) ;if line,arc/circle
      (progn
      ; line equation : AA*X+BB*Y+CC=0
      (setq P1 (cdr (assoc 10 (entget E1)))) ;start point
      (setq P2 (cdr (assoc 11 (entget E1)))) ;end point
      (setq X1 (car P1))
      (setq Y1 (cadr P1))
      (setq X2 (car P2))
      (setq Y2 (cadr P2))
      (setq AA (- Y1 Y2))
      (setq BB (- X2 X1))
      (setq CC (- (* X1 Y2) (*  X2 Y1)))
      ; circle  equation : (X - H)^2 +  (Y - K)^2 = R^2
      (setq P3 (cdr (assoc 10 (entget E2)))) ;center point
      (setq R (cdr (assoc 40 (entget E2))))  ;radius
      (setq H (car P3))
      (setq K (cadr P3))
      (INTPOINT AA BB CC H K R)
      (setq P6 (getpoint "\nindicate near : "))
      (if (< (distance POINT1 P6) (distance POINT2 P6)) (setq P5 POINT1) (setq P5 POINT2))
      (if (< (distance P1 P5) (distance P2 P5)) (setq PA5 P1) (setq PA5 P2))
      (COMMAND "LINE" PA5 P5 "" )
      ;
      ;Because arc start point to end point must is ccw
      ;
      (setq TMPAG1 (cdr (assoc 50 (entget E2))))
      (setq TMPAG2 (cdr (assoc 51 (entget E2))))
      (setq TMP1 (polar P3 TMPAG1 R));START POINT
      (setq TMP2 (polar P3 TMPAG2 R));END POINT
      (if (< (distance TMP2 P5) (distance TMP1 P5)) (COMMAND "arc" "c" P3 TMP2 P5 "" ) (COMMAND "arc" "c" P3 P5 TMP1 "" ))
      )
  )
)


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

  1. ;;;VxGetInters - 返回两个物体的所有交点
  2. ; -- Function VxGetInters
  3. ; Arguments [Typ]:
  4. ; Fst = First object [VLA-OBJECT]
  5. ; Nxt = Second object [VLA-OBJECT]
  6. ; Mde = Intersection mode [INT]
  7. ; Constants:
  8. ; - acExtendNone Does 不延伸
  9. ; - acExtendThisEntity 延伸第一
  10. ; - acExtendOtherEntity 延伸第二
  11. ; - acExtendBoth 延伸两者
  12. ; Return [Typ]:
  13. ; > list of points '((1.0 1.0 0.0)... [LIST]
  14. ; > Nil if no intersection found
  15. ;
  16. (defun VxGetInters (Fst Nxt Mde / IntLst PntLst);;;实体交点
  17.   (setq IntLst (vlax-invoke Fst "IntersectWith" Nxt Mde))
  18.   (cond
  19.     (IntLst
  20.       (repeat (/ (length IntLst) 3)
  21.         (setq PntLst
  22.                 (cons
  23.                   (list(car IntLst)(cadr IntLst)(caddr IntLst))
  24.                   PntLst
  25.                 )
  26.               IntLst (cdddr IntLst))
  27.       )
  28.       (reverse PntLst)
  29.     )
  30.     (T nil)
  31.   )
  32. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-3-11 08:27:59 | 显示全部楼层
希望附件的说明能让您更清楚用法

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

使用道具 举报

发表于 2003-3-12 23:54:51 | 显示全部楼层
你可以这样调用:

  1. (defun get_inters(e1 e2 mod / fir sec ipp);;;;获得实体e1 e2 的交点1
  2. ;;;  acExtendNone                ;;;  acExtendThisEntity
  3. ;;;  acExtendOtherEntity        ;;;  acExtendBoth
  4.   (setq fir (vlax-ename->vla-object e1)
  5.         sec (vlax-ename->vla-object e2)
  6.         ipp (VxGetInters fir sec mod))
  7. )

  8. (setq e1(car (entsel "\n选线一:"))
  9.        e2(car (entsel "\n选线二:"))
  10.       pt(get_inters e1 e2 "acExtendNone")
  11. )

得到的是两线的不延伸情况下的交叉点,其他还有
;;;  acExtendThisEntity延伸第一线
;;;  acExtendOtherEntity延伸第二线       
;;;  acExtendBoth延伸两线
的三种交点方式。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2003-4-10 21:48:21 | 显示全部楼层
cadr200x 中打开对象追踪 ,在绘图操作命令前,鼠标移动到要求交点的线段端点,再移动到虚交点附近,可以自动捕捉交点,这时鼠标再按下,可以从交点处执行命令
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-30 10:24:11 | 显示全部楼层
谢谢。我正想编这个程序,现在可省事了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2003-10-21 00:08:25 | 显示全部楼层
最初由 walpax 发布
[B]希望附件的说明能让您更清楚用法

也谢谢您的回应 [/B]

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

使用道具 举报

发表于 2003-10-21 10:54:17 | 显示全部楼层
最初由 ZXK68 发布
[B]
  多此一举,有“对象追踪”不用。用什么程序。 [/B]


不能这么说. 前面“对象追踪”只是手动, 大量重复的工作还得使用编程.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-11-13 01:41:33 | 显示全部楼层
lisp呢?
弄出来
大家下载阿
腰部还要再复制
自己做
嘿嘿
懒把我
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 23:25 , Processed in 0.253379 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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