qhdqsj 发表于 2009-8-3 14:27:00

求教autolisp中新问题

<p>autolisp 中有些函数已经改变,如在一个列表中,原来表中各项的表头不能有相同的,现在已经出现相同的表头,例如,下面是“多段线”数据:1st Text: ((-1 . &lt;图元名: 6b3fb1c0&gt;) (0 . "LWPOLYLINE") (330 . &lt;图元名: 7e519cf8&gt;) (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'吗?请高手赐教。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若有朋友想探讨,请发&nbsp;&nbsp;&nbsp; <a href="mailto:qhdqsj@126.com">qhdqsj@126.com</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 09.8.2</p>

淮上 发表于 2009-8-3 14:49:00

<p>(setq ent (car (entsel)))</p><p>(cadr (member (assoc 10 ent) ent))</p>

wxgy2806 发表于 2009-8-3 22:41:00

<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>

qhdqsj 发表于 2009-8-12 14:43:00

感谢“淮上”和“<strong><font face="Verdana" color="#61b713">wxgy2806”的提示,不用试验,两位的方法肯定奏效。去掉前一个“10”在余下的列表中再查找“10”一定会得到所求。</font></strong>

hhc 发表于 2009-8-12 15:55:00

<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]
查看完整版本: 求教autolisp中新问题