明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2595|回复: 8

[函数] 关于getpoint输入值和左键指定点

[复制链接]
发表于 2013-12-23 15:05 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 SunSpring 于 2014-4-27 16:44 编辑

如何区分getpoint的返回值是左键指定的点,还是输入距离后返回的点?
如果不能区分,可否写个自定义函数解决?用法最好和getpoint一样.

  1. (defun c:cp (/ entgrp ept spt)
  2.   (prompt "按比例连续复制对象")
  3.   (if (setq entgrp (ssget))
  4.     (if (setq spt (getpoint "\n指定基准点:"))
  5.       (progn
  6.         (command ".copy" entgrp "" "m" spt)
  7.         (while (setq ept (mygetpoint spt "\n指定位移的第二点或 <用第一点作位移>:"))
  8.           (cond
  9.             ((= (car ept) 5)
  10.               (command (cdr ept))
  11.             )
  12.             ((= (car ept) 2)
  13.               (command (* (/ 1.0 (getvar "dimlfac")) (distance spt (cdr ept))))
  14.             )
  15.           )
  16.         )
  17.         (command "")
  18.       )
  19.     )
  20.   )
  21.   (princ)
  22. )
  23. (defun mygetpoint ( a b / c lastoldprompt)
  24.   (if (setq lastoldprompt (getvar "lastprompt")
  25.             c (getpoint a b)
  26.       )
  27.     (setq c (if (= (getvar "lastprompt") lastoldprompt)
  28.               (cons 5 c)
  29.               (cons 2 c)
  30.             )
  31.     )
  32.   )
  33.   c
  34. )

点评

这样做的理由是什么?  发表于 2014-1-4 18:55
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-1-2 14:05 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-1-2 15:47 编辑


  1. (defun mygetpoint(/ a b)
  2.   (setq a(grread)b(nth 1 a)
  3. a(if(<(car a)3)
  4.    (list 2(read(strcat"("(VL-STRING-TRANSLATE",; ""   "(strcat(chr b)(getstring(prompt(chr b)))))")")))a))
  5.   (if(/=(length(nth 1 a))3)(progn(PROMPT"点无效")(mygetpoint))a)
  6.   )
  7. ;;如果返回值 (5 (175.403 71.6869 0.0))是鼠标点击得到的坐标
  8. ;;如果返回值 (3 (175.403 71.6869 0.0))是鼠标点击得到的坐标
  9. ;;如果返回值 (2 (175.403 71.6869 0.0))是键盘输入得到的坐标




本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2014-1-2 14:28 | 显示全部楼层
llsheng_73 发表于 2014-1-2 14:05

这个方法有些缺陷,当开启极轴或捕捉时点下的点和光标点并不相同
回复

使用道具 举报

发表于 2014-1-2 14:34 | 显示全部楼层
SunSpring 发表于 2014-1-2 14:28
这个方法有些缺陷,当开启极轴或捕捉时点下的点和光标点并不相同


看样子只能想法专门写一个。。。
回复

使用道具 举报

发表于 2014-1-4 17:05 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-1-4 17:15 编辑

(if(setq lastoldprompt(getvar"lastprompt")b(getpoint))(setq b(if(=(getvar"lastprompt")lastoldprompt)(cons 5 b)(cons 2 b))))
;;这样鼠标点击会返回(5 x y z)而键盘输入会返回(2 x y z),要用坐标得通过(cdr b)得到,而通过(car b)可以确定是键盘输入的还是鼠标点击的
;;如果直接右键会跟(GETPOINT)一样返回NIL

点评

很不错,不过输入不是回车结尾的数值,用空格结尾识别有差异。。 个人习惯用空格多些。。。  发表于 2014-1-4 17:33
回复

使用道具 举报

 楼主| 发表于 2014-1-4 20:07 | 显示全部楼层
llsheng_73 发表于 2014-1-4 17:05
(if(setq lastoldprompt(getvar"lastprompt")b(getpoint))(setq b(if(=(getvar"lastprompt")lastoldprompt) ...

还是解决不了问题。我把我的程序贴上,你看看吧。
回复

使用道具 举报

发表于 2019-12-1 18:47 | 显示全部楼层
本帖最后由 xj6019 于 2019-12-1 18:50 编辑

谁在这基础上给我改改啊

(defun c:test ()
  (CMDLA0)
  (while (setq pt (getpoint "\n插入点<退出>"))
    (command "insert" "xx" pt "" "" "")
    (setq s1(entlast))
    (SUB_UPD s1 41 1)
    (SUB_UPD s1 42 1)
    (SUB_UPD s1 43 1)
    (command"explode" s1 "")
  )
  (CMDLA1)
)[/FONT]
xx  为文件路径   不需要炸开     所有比例都是1就行  不用旋转   命令之后啥都别调  直接放入   哪位大神动动手搞搞啊
回复

使用道具 举报

发表于 2021-8-14 22:48 | 显示全部楼层
llsheng_73 发表于 2014-1-4 17:05
(if(setq lastoldprompt(getvar"lastprompt")b(getpoint))(setq b(if(=(getvar"lastprompt")lastoldprompt) ...

用空格 为什么跟回车或者右键 的结果不同呢?烦恼
回复

使用道具 举报

发表于 2021-8-15 12:48 | 显示全部楼层
llsheng_73 发表于 2014-1-4 17:05
(if(setq lastoldprompt(getvar"lastprompt")b(getpoint))(setq b(if(=(getvar"lastprompt")lastoldprompt) ...

改用vla-getpoint,可以解决空格输入的差异。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 07:39 , Processed in 0.209945 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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