明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2010|回复: 5

[提问] 如何实现多种选择方式?比如可以选取一条直线,或者输入两个点。

[复制链接]
发表于 2013-10-23 15:12 | 显示全部楼层 |阅读模式
我需要获得一段距离,可以有以下几个方法:
1、键盘直接输入
2、选取图上一条直线或者pline线
3、用鼠标直接在图上选取2个点或者多个点,然后计算这些点连接成的线的距离
正常是给出3个选择,用户选取后,根据选择分别处理以上三种方案,有没有可能用一句autolisp语言实现,然后分别根据用户的输入来决定怎么处理,比如如果用户用键盘输入,说明就是用方法1,如果选取物体,那就是2,如果连续点选,那就是3.
不知道我表达清楚没有。谢谢。
发表于 2013-10-23 16:00 | 显示全部楼层
第一种和第三种现在是合并的,getdist函数可以直接给出,第二种方法属于实体选择,不可以也不可能直接得到,就像你自己所说,选择Line或PLine,这就是两种完全不同的线形,需要不同的处理方法才能得到所要的距离。
一般像你的情况可以这样处理:
  1. (initget "S")
  2. (setq ds(getdist "\n输入距离或 [参照(S)]: "))
  3. (cond
  4.   ((= ds "S") (se))  ;选择参照实体并处理
  5.   ((= ds nil) (end))   ;空输入退出,可在前面initget中禁止
  6.   (t nil)       ;正常输入,向下继续
  7. )
  8. ...
发表于 2013-10-23 16:11 | 显示全部楼层
;;我是这样处理的,仅供参考
  1.   ;;1 取得线长or点取
  2.   (defun GetCurveLeng (/ ent curve-obj leng en)
  3.     (vl-load-com)
  4.     (if        (setq ent (entsel "\n>>>>>>拾取线条、尺寸、[回车]"))
  5.       (progn
  6.         (setq en (entget (car ent)))
  7.         (cond
  8.           ((wcmatch (LI_item 0 en) "DIMENSION")
  9.            (if (or (wcmatch (LI_item 1 en) "*<>*") (= (LI_item 1 en) ""))
  10.              (setq leng (LI_item 42 en))
  11.              (setq leng (LI_item 1 en))
  12.            )
  13.           )
  14.           (T
  15.            (if (= (cdr (assoc 0 en)) "INSERT")
  16.              (setq ent (nentselp "" (cadr ent)))
  17.            )
  18.            (setq curve-obj (vlax-ename->vla-object (car ent)))
  19.            (redraw (car ent) 3)
  20.            (setq leng (vlax-curve-getDistAtParam
  21.                         curve-obj
  22.                         (vlax-curve-getEndParam curve-obj)
  23.                       )
  24.            )
  25.           )
  26.         )
  27.       )
  28.       (progn
  29.         (initget 1)
  30.         (setq leng (getpoint "\n 拾取型材一端点"))
  31.         (setq leng (getdist leng "\n 拾取型材另一端点\n\n"))
  32.       )
  33.     )
  34.     (setq leng (rtos leng 2 0))
  35.   )
 楼主| 发表于 2013-10-23 18:58 | 显示全部楼层
自贡黄明儒 发表于 2013-10-23 16:11
;;我是这样处理的,仅供参考

这种方法好,谢了大家。
发表于 2013-10-25 09:44 | 显示全部楼层
这说白了就是走不同的路,达到同一目标。

这种最好的方式就是用DCL,放三个按钮即可!

发表于 2013-10-25 11:02 | 显示全部楼层
fl202 发表于 2013-10-25 09:44
这说白了就是走不同的路,达到同一目标。

这种最好的方式就是用DCL,放三个按钮即可!

是的,DCL最好!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-16 23:40 , Processed in 0.157564 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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