ssget函数的一个问题
嗨,伙计们我希望你能帮我
我有一条折线
((-1 . )
(0,“LW多段线”)(330。)(5.“1A7774”)(100。
“AcDbEntity”)(67.0)(410。“Model”)(8。“ali_main_bs”)(100。
“AcDbPolyline”)(90.5)(70.0)(43.0.0)(38.0.0)(39.0.0)(10-3302.06
120081.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 -3266.7 120046.0) (40 . 0.0) (41
. 0.0) (42 . 0.0) (10 2233.3 120046.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10
2233.3 120546.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 2197.94 120581.0) (40 .
0.0)(41.0.0)(42.0.0)(210 0.0 0.0 1.0)(-3(“barinfo”(1070.6)(1070)。
16) (1040 . 150.0) (1040 . 5960.0))))
正如你所见
我附上了一些信息
最后一个信息是多段线长度
这个(1040.5960.0)
我有许多多段线具有相同的长度,其长度也附加在一起
我想使用ssget函数来选择具有相同长度的所有实体
我知道>>>如果我想选择属于一个叫做“ali”的层的所有实体,例如,我可以使用这个表达式
(ssget“X”(列表(cons 8“ali”))
我想如果我用这个表达式
(ssget“X”(列表(cons 1040 5960)))
它将选择所有长度相同的多段线
但它返回“错误的SSGET列表值”
我累了>>>
我怎样才能修复它并做这件事???
非常感谢你 对于扩展数据,更简单的方法是使用VL,从PLINE中提取长度。这里是一个VL示例,它只有2行代码
(setq ss1 (car (entsel))) ;pick a pline
(setq plength (vla-get-length(vlax-ename->vla-object SS1))) ; make this a loop and just compare your length to answer for all plines
版本2
(setq ss1 (ssget "_X" (list (cons 0 "lwpolyline")(cons 8 "0"))))
(setq inc (sslength ss1))
(repeat inc
(setq plength (vla-get-length (vlax-ename->vla-object (ssname SS1 (setq inc (1- inc))))))
(princ "\n")
(princ plength)
)
(princ)
除了BIGAL已经说过的,您还可以尝试这样的方法来过滤扩展数据:
(setq ss (ssget "X" '((0 . "LWPOLYLINE") (8 . "ali") (-3 (("barinfo"))))))
编辑:如果可能的话,发布一个带有几个多段线的样例dwg,我想测试另一种访问扩展数据的方法,但我太懒了,无法重新创建扩展数据。。。
HTH公司
亨里克 谢谢你们
但它也给了我一个错误消息,无法工作
我还在等你的帮助
我还在等待任何lisp,它允许我选择所有长度与我指定的长度相同的多段线
这是我的文件,其中包含这些多段线 嗨,只是为了测试。。。将使用(1040.11170.0)选择所有LW多段线
(if (setq ss (ssget "X" (list (cons 0 "LWPOLYLINE") (cons -3 (list (list "barinfo"))))))
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i)))
xdata (cadr (assoc -3 (entget ent '("barinfo")))))
(if (/= (rtos (cdr (nth 4 xdata)) 2 2) (rtos 11170.0 2 2))
(ssdel ent ss)
);; if
);; repeat
);; if
我将该值修改为字符串进行测试,因为您的(1040.11170.0)值有许多小数位(11170.00001423149)
亨里克 只是一个细微的变化使用mm作为输入
(setq polylen (Getreal "\nEnter your length for pline checking : "))
(if (setq ss (ssget "X" (list (cons 0 "LWPOLYLINE") (cons -3 (list (list "barinfo"))))))
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i)))
xdata (cadr (assoc -3 (entget ent '("barinfo")))))
(if (/= (fix (cdr (nth 4 xdata)))polylen) ; note fix is integer value
(ssdel ent ss)
);; if
);; repeat
);; if
)
谢谢Hmsilva先生和比加尔先生的帮助
我现在就试试,然后回来
不管怎样,它都会给我添加新的非常有用的注释 不客气,
尝试此演示,将选择所有具有相同最后扩展数据点对(1040.XXX.X)和层的LWD多段线,与您选择的一条相同。
确保PICKFIRST=1
(defun c:test ( / E ENT EXDATA I L LAY SS XDATA)
(if (and (setq e (entget (car (entsel "\nSelect a LwPolyline to select equals: ")) '("barinfo")))
(setq exdata (cadr (assoc -3 e))))
(progn
(setq lay(cdr (assoc 8 e))
l(cdr (nth 4 exdata)))
(setq ss (ssget "X"
(list (cons 0 "LWPOLYLINE")
(cons 8 lay)
(cons -3 (list (list "barinfo")))
)
)
)
(repeat (setq i (sslength ss))
(setq ent (ssname ss (setq i (1- i)))
xdata (cadr (assoc -3 (entget ent '("barinfo")))))
(if (/= (cdr (nth 4 xdata)) l)
(ssdel ent ss)
);; if
);; repeat
(sssetfirst nil ss)
);; progn
);; if
(princ)
)
亨里克 Himsilva先生
你是个了不起的人
我真的不知道该怎么感谢你
干得好
这正是我需要的,,,,,,太好了 不客气
很高兴我能帮忙
亨里克
页:
[1]