明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3042|回复: 21

选取时的问题,请教,多谢!

  [复制链接]
发表于 2004-4-11 01:46:00 | 显示全部楼层 |阅读模式
我想在程序中实现这样的功能:当我点取时是一个实体,基本上是线段或圆弧,就获取实体和实体上取近的一点,但是如果我点屏幕上的空白处即未选中实体,就返回点取时的坐标。 (setq en (entsel "\n选取对象<圆、圆弧、线段> :"))
(setq ptx (osnap (cadr en) "nea")) 以上只能实现第一个要求,不能实现第二个要求。 如果用getpoint,可以实现第二个要求,但要实现第一个要求,我就不知道如何办好。 请教。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2004-4-11 09:17:00 | 显示全部楼层
  1. 用法:(sel '((0 . "LINE")) "选择对象...")
复制代码
  1. (defun Sel (_types msg / gr ent m ty)
  2.    (prompt msg)
  3.    (setq m nil)
  4.    (while (not m)
  5.        (setq gr (grread 2 4 2))
  6.        (cond
  7.            ((= (car gr) 3)
  8.              (setq ent (ssget (cadr gr) _types))
  9.   (if (not ent)
  10.    (setq ent nil)
  11.              )
  12.              (setq m t)
  13.            )
  14.            ((= (car gr) 25) (setq m t))
  15.        )
  16.    )
  17.    (princ "\n")
  18.    (if ent (list ent (cadr gr)) (if (= (car gr) 25) nil (cadr gr)))
  19. )
 楼主| 发表于 2004-4-11 12:00:00 | 显示全部楼层
好好学习。


其实我都试过,getpoint和ssget一齐用,可总出错。


多谢。
发表于 2004-4-11 12:06:00 | 显示全部楼层
本帖最后由 作者 于 2004-4-11 13:13:48 编辑

能不用grread最好不用
 楼主| 发表于 2004-4-11 17:19:00 | 显示全部楼层
meflying: 我加入你的程序总出错,肯定是我在加入时出错,请指点,将图元数据和点的数据提出来。 (defun C:xud ()
......
;(setq en (entsel "\n选取对象<圆、圆弧、直线> :"))这是原程序的
;(setq ptx (osnap (cadr en) "nea"))这是原程序的
[U] (sel '((0 . "LINE")(0 . "ARC")(0 . "CIRCLE")) "选择对象<圆、圆弧、直线>...")
(setq ptx gr)[/U] ; (setq endata (entget (car en)))这是原程序的

[U] (setq endata (entget (car _types )))[/U] (setq xen (cdr (assoc 0 endata)))
......
(setvar "cmdecho" cmd)
(setvar "osmode" osm)
(princ)
) (defun Sel (_types msg / gr ent m ty)
(prompt msg)
(setq m nil)
(while (not m)
(setq gr (grread 2 4 2));我搞不明这里,gr好像是点,_types 是实体?
(cond
((= (car gr) 3)
(setq ent (ssget (cadr gr) _types))
(if (not ent)
(setq ent nil)
)
(setq m t)
)
((= (car gr) 25) (setq m t))
)
)
(princ "\n")
(if ent (list ent (cadr gr)) (if (= (car gr) 25) nil (cadr gr)))
)
发表于 2004-4-11 17:35:00 | 显示全部楼层
函数不会调用?


你都知道ssget函数是这样调用:<U>(setq endata (entget (car _types ))),,,</U>


<U>为何把SSGET换成我定义的函数就不会用了?</U>
 楼主| 发表于 2004-4-11 17:48:00 | 显示全部楼层
(setq en (sel '((0 . "LINE")(0 . "ARC")(0 . "CIRCLE")) "选择对象<圆、圆弧、直线>...")) 选择对象<圆、圆弧、直线>...
; 错误: 参数类型错误: 二维/三维点: 192.376 又出错了,555。。。。
发表于 2004-4-11 18:36:00 | 显示全部楼层
你试试看(ssget '((0 . "LINE") (0 . "ARC")(0 . "CIRCLE"))...能选到东西才怪...


过滤表不是这样写的...仔细再看看SSGET过滤表的用法


你不明白的那个地方GR不是点,而是根据不同输入,返回不同的东西,你可以查看一下帮助文件中的介绍,也可以自己试一下,_TYPES是选择过滤表,同SSGET的过滤表一样


另,需要建议一下,在把基础学好之前,尽量不要去搞一些花样
 楼主| 发表于 2004-4-11 19:43:00 | 显示全部楼层
好多东西是不明白,有时光睇书,也是糊里糊涂,只好自己瞎撞,撞到边度系边度,一点一点来了解,又没讲的明白些的书,写书的不管我地,写得好似秘笈。


我又没可能学到你的水平,懂几多算几多,你们总结出来的经验,可以给我用一点都几好彩。


你如果肯告诉我点用,就很感谢了,摆在这里不能用(不会用),觉得可惜。


。。。。。。
 楼主| 发表于 2004-4-12 22:15:00 | 显示全部楼层
没想到我蠢人有蠢福,鸡手鸭脚的终于用自己的办法,撞到了!


无论点,还是多谢给过我帮助的人,因为人家的批评是不错的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 12:58 , Processed in 0.191388 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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