最初由 light_dream 发布
[B]可否说说你的程序思路和主要功能? [/B]
(ssget p0)不是只能选择其中一个对象吗?
他并不一定能选择到你想选择的对象。
比如p0点上有2 line,你怎么办?该函数就为此而生!
呵呵,再改改就可以简单判断某点是否在对象上了。
程序思路很简单,就是利用(redraw)把对象隐藏再次(ssget p0)
一个技巧就是(ssget “p” filter-list)--大家可能只习惯(ssget "p"),不太习惯为他加上filter_list
- [FONT=courier new]
- ;;匹配点选对象
- (defun chengs_ssgetPoint ( p0 filter_list / e0 e1 ss_hide i result)
- ;;;;;;;;Select No.1 match with point
- ;;;;;;;;Use:(setq e0 (chengs_ssgetpoint (getpoint) '((62 . 1))))
- (setq
- ss_hide (ssadd)
- i 0
- e0 T
- )
- (while (and p0 e0 (not e1))
- (setq e0 (ssget p0))
- (if e0
- (progn
- (setq e0 (ssname (ssget p0) 0))
- (ssadd e0 ss_hide)
- (if (or (= filter_list "x") (= filter_list "X") ) ;(chengs_ssgetpoint p0 filter_list) = (ssget p0)
- (setq e1 (ssget "P"))
- (setq e1 (ssget "P" filter_list))
- )
- (if (not filter_list) (setq e1 nil))
- (redraw e0 2)
- )
- );endif e0
- );endwhile
- (while (setq e0 (ssname ss_hide i))
- (redraw e0 1)
- (setq i (+ i 1))
- )
- ;如果filter_list为空则得点上所有对象,
- (if filter_list (setq result e1) (setq result ss_hide))
-
- );endfun chengs_ssgetpoint
- ;;点在对象上
- (defun chengs_PointInEname ( p0 e0 / e1 ss i result)
- (setq ss (chengs_ssgetpoint p0 nil))
- (setq i 0)
- (if (listp e0) (setq e0 (car e0)))
- (while (setq e1 (ssname ss i))
- (if (eq e0 e1) (setq result T e1 nil))
- (setq i (+ i 1))
- )
- result
- );endfun chengs_pointinename
- [/FONT]
|