找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1404|回复: 9

[求助] [求助]:[0520]如何判断将线段A垂直线段B呢?

[复制链接]
发表于 2006-5-20 22:51:28 | 显示全部楼层 |阅读模式

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

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

×
[求助]:[0520]如何判断将线段A垂直线段B呢?

程序:
(setq pt1 (getpoint "\n 线段A起点:") )
(setq pt2 (getpoint pt1 "\n 线段B终点:") )
(setq a (angle pt1 pt2) )
(setq dis (distance pt1 pt2))
(setq en (entget (car (entsel "\n 基准线:") ) ) )
(setq b (angle (cdr (assoc 10 en)) (cdr (assoc 11 en)) ) )

...这中间的角度判断该怎样处理呢?

(setq pt3 (polar pt1 (+ b (/ pi 2) ) dis ) )
(command "_.line" pt1 pt3 "") ;画出垂直线段.

附图:

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

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-5-22 14:19:37 | 显示全部楼层
向量垂直的的判断公式--->改写为lisp
不要说这个你不会吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-22 23:56:43 | 显示全部楼层
  1. [FONT=courier new](load "xyp_lib.vlx")  ;版本 V.20060515
  2. ;|下载和加载通用函数(可在签名栏直接下载后放到搜索路径下)
  3. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  4. ★1·在acad.lsp中增加(load"xyp_lib.vlx")
  5. ■2·在每个程序内增加(load"xyp_lib.vlx")
  6. ■3·在command下,输入(load"xyp_lib.vlx")
  7. ■4·在菜单.mnl中增加(load"xyp_lib.vlx")
  8. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  9. [COLOR=red] ★通用函数下载地址:[/COLOR]
  10. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  11. [url]http://free.ys168.com/?xyp1964[/url]
  12. |;

  13. (defun c:test ()
  14.   (CMDLA0)
  15.   (setq        s1   (car (USEL 0 "LINE" "LINE线A"))
  16.         s2   (car (USEL 0 "LINE" "LINE线B"))
  17.         pa10 (xyp-get-dxf 10 s1)
  18.         pa11 (xyp-get-dxf 11 s1)
  19.         pb10 (xyp-get-dxf 10 s2)
  20.         pb11 (xyp-get-dxf 11 s2)
  21.         angb (angle pb10 pb11)
  22.         ang  (abs (rad2ang (- angb (angle pa10 pa11))))
  23.         dist (distance pa10 pa11)
  24.   )
  25.   (while (> ang 90)
  26.     (setq ang (- ang 90))
  27.   )
  28.   (setvar "osmode" 0)
  29.   (if (>= (abs (- ang 90)) 0.00001)
  30.     (progn
  31.       (xyp-mklaco "test" 1)
  32.       (setq pa11a  (polar pa10 (+ angb (* pi 0.5)) dist)
  33.             pa11-1 (inters pb10 pb11 pa10 pa11a nil)
  34.             pa11   (polar pa10 (angle pa10 pa11-1) dist)
  35.       )
  36.       (command "line"
  37.                pa10
  38.                pa11
  39.                ""
  40.       )
  41.     )
  42.   )
  43.   (CMDLA1)
  44. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-23 10:43:16 | 显示全部楼层
谢谢版大的解答,
参考您的程序改写下面程序,
但发现一个疑问,
为何要做角度检查呢?
这样不是就可以了吗?

(setq pt1 (getpoint "\n 线段A起点:") )
(setq pt2 (getpoint pt1 "\n 线段B终点:") )
(command "line" pt1 pt2 "" )
(setq anga(angle pt1 pt2) )
(setq dist(distance pt1 pt2))
(setq en  (entget (car (entsel "\n 基准线:") ) ) )
(setq angb(angle (setq en10 (cdr (assoc 10 en)))
                 (setq en11 (cdr (assoc 11 en)))
) )
(setq pt1-a (polar pt1 (+ angb (* pi 0.5)) dist)
      pa1-b (inters en10 en11 pt1 pt1-a nil)
      pt2   (polar pt1 (angle pt1 pa1-b) dist)
)
(command "line" pt1 pt2 "" )

另外请问该怎样把最后产生的线,
(若是产生为多各线段物件)
放到退出程序后中可以用呢?
如在command: select 指令中
用 p 命令可以选到呢?

问题相同于
"http://p4.xdcad.net/forum/showthread.php?s=&threadid=560913"
[求助]:[0522]关于ssget选集选取问题?

不知道版大可以解说一下,
关于角度判断呢程序吗?
及ssget选集选取问题?
谢谢~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-23 13:03:27 | 显示全部楼层
最初由 xyz518mm 发布
[B]谢谢版大的解答,
参考您的程序改写下面程序,
但发现一个疑问,
为何要做角度检查呢?
这样不是就可以了吗?

(setq pt1 (getpoint "\n 线段A起点:") )
(setq pt2 (getpoint pt1 "\n 线段B终点:") )
(command "l... [/B]

角度检查的目的是为了减少选择的次数从而减少工作量,鼠标只需点2次就可以完成任务。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-5-25 12:37:29 | 显示全部楼层
重新画直线不好,应该直接修改数据
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2006-5-25 14:38:39 | 显示全部楼层
没仔细斟酌,写了个框架。支持多选
[php]
(defun c:perl (/ el1 a i ss b pr pt bb an an1)
  (princ "\n 直线垂直校准 by 雨箭风刀.2006.5")
  (if (AND (setq el1 (entsel "\n 选角度参照直线:")
                 a   (car el1)
           )
           (= "LINE" (cdr (assoc 0 (entget a))))
      )
    (if (setq i  -1
              pr (princ "\n 选角度校准直线(可多选):")
              ss (ssget '((0 . "LINE")))
        )
      (while (setq b (ssname ss (setq i (1+ i))))
        (setq pt  (vlax-curve-getstartpoint b)
              bb  (vlax-ename->vla-object b)
              an  (angle pt (vlax-curve-getclosestpointto a pt T))
              an1 (vla-get-angle bb)
        )
        (vla-rotate bb (vla-get-startpoint bb) (rem (- an an1) PI))
      ;;用了旋转方法,也可考虑用修改直线端点的方法。
      )
    )
  )
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-29 09:42 , Processed in 0.186842 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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