求教autolisp中新问题
<p>autolisp 中有些函数已经改变,如在一个列表中,原来表中各项的表头不能有相同的,现在已经出现相同的表头,例如,下面是“多段线”数据:1st Text: ((-1 . <图元名: 6b3fb1c0>) (0 . "LWPOLYLINE") (330 . <图元名: 7e519cf8>) (5 <br/>. "718") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . <br/>"AcDbPolyline") (90 . 2) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 6280.73 <br/>4722.58) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 6554.54 4525.98) (40 . 0.0) (41 . <br/>0.0) (42 . 0.0) (210 0.0 0.0 1.0))</p><p>在这里出现两个‘10’‘40’'41’'42',我想知道如何调用第二个‘10’的内容?用'next'吗?请高手赐教。 若有朋友想探讨,请发 <a href="mailto:qhdqsj@126.com">qhdqsj@126.com</a> 09.8.2</p> <p>(setq ent (car (entsel)))</p><p>(cadr (member (assoc 10 ent) ent))</p> <div>10为多义线的顶点坐标40,41,42分别为线的起点宽度,终点宽度和全局宽度,这个当然会有重复</div><div>下面的函数就是取多义线顶点坐标的,当然ent先要用convert命令处理</div><div><br/></div><div>(defun xlb(ent / entdata ent pplist plist d ptlist);取线顶点列表</div><div> (setq ptlist nil)</div><div> (setq ent (car ent))</div><div> (setq entdata (entget ent(list "*")))</div><div> (SETQ pplist (member(assoc 10 entdata) entdata))</div><div> (setq plist (car pplist))</div><div> (while (/= plist nil)</div><div> (setq d (cdr pplist))</div><div> (setq ptlist (cons (cdr plist) ptlist))</div><div> (setq pplist (member(assoc 10 d) d))</div><div> (setq plist (car pplist)) </div><div> )</div><div> (setq ptlist (reverse ptlist))</div><div>)</div><div><br/></div> 感谢“淮上”和“<strong><font face="Verdana" color="#61b713">wxgy2806”的提示,不用试验,两位的方法肯定奏效。去掉前一个“10”在余下的列表中再查找“10”一定会得到所求。</font></strong> <p>(setq ent (car (entsel)))<br/>(setq da (entget ent))<br/>(cdr (assoc 10 (cdr (member (assoc 10 da) da)))) ;第二个顶点</p><p>或:</p><p>(cdr (nth 1 (vl-remove-if '(lambda (x) (/= (car x) 10)) da))) ;第二个顶点</p>
页:
[1]