几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   ObjectARX(AutoLISP) (http://www.dimcax.com/hust/forumdisplay.php?f=178)
-   -   有人会用过滤表写过滤只有一段的二维多段线吗 (http://www.dimcax.com/hust/showthread.php?t=12162)

yang686526 2009-04-26 09:50 PM

有人会用过滤表写过滤只有一段的二维多段线吗
 
有人会用过滤表写过滤只有一段的二维多段线吗
www.dimcax.com
有人会用过滤表写过滤只有一段的二维多段线吗
用ssget的格式来写过滤掉只有一段的二维多段线谢谢
d
caoyin老大,帮帮啦,
d
;;选择对象 entsel ssget等 函数扩展
;; by caoyin @mjtd.com
;;____________________________________________________________________________________________________
;; ▓ (lt:entsel msg fil lst)
;; [功能] 扩展 entsel,支持过滤选择,关键字
;; [参数] msg---(str)提示信息。如果nil时则显示缺省为"\n选择对象: "
;; fil---(list)过滤条件列表,格式与 ssget 函数相同
;; lst---(list)包含两个元素:(errmsg key)
;; errmsg---出错信息(str)。如果nil时则显示缺省为"无效的对象。"
;; keywd----关键字,格式与 initget 函数相同
;; [返回] 本函数受变量 $lt-entsel$ 影响,若 $lt-entsel$ 为 nil,返回值与函数 entsel 相同,反之
;; 则与函数 nentsel 相同。
;| [测试]
(lt:entsel "\n选择对象或 [类型(t)/点(o)]: "
'((0 . "line") (8 . "0"))
(list "对象必须是图层为 0 的直线。" "type point")
)
|;
(defun lt:entsel (msg fil lst / nom pif errmsg keywd fun e en ss)
(setq nom (getvar "nomutt")
pif (getvar "pickfirst")
errmsg (car lst)
keywd (cadr lst)
)
(if $lt-entsel$
(setq fun 'nentsel)
(setq fun 'entsel)
)
(or msg (setq msg ""))
(or errmsg (setq errmsg "无效对象。"))
(setq keywd (cond (keywd (strcat keywd " ")) (t " ")))
(setvar "pickfirst" 1)
(while (not e)
(initget keywd)
(setq e (apply fun (list msg)))
(cond
((= e "") (setq e t))
((not e) (princ "未找到对象。"))
((and (vl-consp e) (not $lt-entsel$))
(setq ss (ssadd) en (car e))
(ssadd en ss)
(sssetfirst nil ss)
(setvar "nomutt" 1)
(ssget)
(setq ss (ssget "_p" fil))
(setvar "nomutt" nom)
(if (not (and ss (ssmemb en ss)))
(progn (princ errmsg) (setq e nil))
)
)
)
)
(setvar "pickfirst" pif)
(if (/= e t) e)
)
caoyin老大,我是用了你上面的程序,我想在点对象时过滤掉只有一段的二维多段线和多段线,过滤表怎么写呀,用'((0 . "*polyline")(-4 . ">") (90 . 2))会把有几段的二维多段线也过滤掉啦,只对多段线不效,
d
只在lwpolyline图元中,有90组dxf码
下面的例子都可以达到过滤掉只有一段的lwpolyline多段线:
(setq ss(ssget "x" '((0 . "lwpolyline")(-4 . "!=")(90 . 2))))
(setq ss(ssget "x" '((0 . "lwpolyline")(-4 . ">")(90 . 2))))
d
你说是polyline吧,传一张dwg图上来看看
d
用其他办法我是知道可以转,我的本意是用ssget来过滤,就是在ssget选择时如果不符合的就不要选择,而不是用ssget选择后,再加一个空格来判断,看来是不能实现的啦,谢谢各位caoyin老大,祝身体健康


所有的时间均为北京时间。 现在的时间是 07:00 AM.