明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: qinhengda

[提问] 鼠标任意点击两点绘制水平中点的构造线xline

[复制链接]
 楼主| 发表于 2024-10-9 10:10:28 | 显示全部楼层

谢谢大佬,离我预期的接近了,但是我想要的是鼠标输入两点之后绘制中点的构造线,不是点击实体。
发表于 2024-10-9 10:49:29 | 显示全部楼层
  1. (defun c:11()
  2. (vl-load-com)
  3. (if
  4.   (and
  5.     (setq _pt1(getpoint "\n第一点"))
  6.     (setq _pt2(getpoint _pt1 "\n第二点"))
  7.   )
  8.   (progn
  9.     (setq _mspace (vla-get-modelspace  (vla-get-activedocument(vlax-get-acad-object))))
  10.     (setq _pt3 (list (car _pt2) (cadr _pt1)))   
  11.     (setq _pt4 (list (* 0.5 (+ (car _pt1)(car _pt2))) (cadr _pt1)))   
  12.     (vla-addline _mspace (vlax-3d-point _pt1) (vlax-3d-point _pt3))
  13.     (vla-addline _mspace (vlax-3d-point _pt3) (vlax-3d-point _pt2))
  14.     (setq _pt5 (polar _pt4 (* 0.5 pi) 10))   
  15.     (setq _myxline (vla-addXline _mspace (vlax-3d-point _pt5)(vlax-3d-point _pt4)))
  16.   )
  17. )
  18. (princ)     
  19. )
 楼主| 发表于 2024-10-9 11:52:00 | 显示全部楼层

哇大佬,这个可以的了,但,那个辅助的线可以删除吗,即点完两个点,仅保留构造线
发表于 2024-10-9 11:54:26 | 显示全部楼层
(vla-addline _mspace (vlax-3d-point _pt1) (vlax-3d-point _pt3))
    (vla-addline _mspace (vlax-3d-point _pt3) (vlax-3d-point _pt2))
这两句删掉就可以了啊.
发表于 2024-10-9 13:52:20 | 显示全部楼层
  1. (defun c:tt ()
  2.   (while (and (setq p1 (getpoint "\n第1点<退出>: "))
  3.               (setq p2 (getpoint p1 "\n第2点<退出>: "))
  4.          )
  5.     (setq p3 (list (car p2) (cadr p1))
  6.           pt (mapcar '(lambda (x y) (* (+ x y) 0.5)) p1 p3)
  7.     )
  8.     (command "Xline" "v" "non" pt "")
  9.   )
  10.   (princ)
  11. )

回复 支持 2 反对 0

使用道具 举报

发表于 2024-10-12 10:17:07 | 显示全部楼层
这个厉害了啊
发表于 2025-6-16 16:13:08 | 显示全部楼层
本帖最后由 zhwc125 于 2025-6-16 16:22 编辑
tigcat 发表于 2024-10-8 15:55
(defun c:tt(/ &tmp-pt)
  (progn(setq &tmp-pt(mapcar '* '(0.5 0.5)(mapcar '(lambda(x y)(+ x y))(getp ...

这个好用,超绘工具箱就用这个功能,两点之间生成中心构造线
好像只能水平方向生成,不能垂直方向和不同角度都可以就更好了
回复 支持 反对

使用道具 举报

发表于 2025-6-16 16:45:25 | 显示全部楼层
本帖最后由 zhwc125 于 2025-6-28 22:36 编辑
tigcat 发表于 2024-10-8 15:55
(defun c:tt(/ &tmp-pt)
  (progn(setq &tmp-pt(mapcar '* '(0.5 0.5)(mapcar '(lambda(x y)(+ x y))(getp ...

增加了垂直方向生成水平中心构造线
其他角度的不能生成构造线

(defun c:tt (/ pt1 pt2 mid dx dy)
  (setq pt1 (getpoint "\n选择第一个点:"))
  (setq pt2 (getpoint pt1 "\n选择第二个点:"))
  
  ;; 计算中点坐标
  (setq mid (mapcar '* '(0.5 0.5)
                  (mapcar '+ pt1 pt2)))
  
  ;; 计算两点在X和Y方向上的差值
  (setq dx (abs (- (car pt2) (car pt1))))
  (setq dy (abs (- (cadr pt2) (cadr pt1))))
  
  ;; 判断生成水平还是垂直构造线
  (if (> dx dy)
    ;; X方向差值大于Y方向,生成垂直线
    (command "xline" "v" "non" mid "")
    ;; Y方向差值大于X方向,生成水平线
    (command "xline" "h" "non" mid "")
  )
  (princ)
)
回复 支持 反对

使用道具 举报

发表于 2025-6-16 20:53:53 | 显示全部楼层
有点意思,下来试用一下,谢谢各位大佬
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 22:53 , Processed in 0.173922 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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