求解:程序的执行过程是什么样的。
请哪位给说明下,下面这个程序的运行过程。另外遍历图元有什么作用。(defun c:tq(/ en enl pts)
(setq en (car (entsel "选择3dpolyline")))
(while (= (cdr (assoc 0 (setq enl (entget (setq en (entnext en)))))) "VERTEX")
(setq pts (cons (cdr (assoc 10 enl)) pts))
)
(mapcar '(lambda(pt)(princ (strcat "\nx=" (rtos (carpt) 2 6)
"y=" (rtos (cadr pt) 2 6)
"z=" (rtos (last pt) 2 6)
)
)
)
(setq pts (reverse pts))
)
(princ)
) 说下我的理解!
程序分两大部分,
第一个部分由while组成,循环找到图元的顶点并组成点表pts。
第二部分由mapcar完成,循环输出pts中的xyz值。
遍历图元主要是对图元内的东西一个个的进行查找处理!
所有的循环类函数都能用来做遍历,比如while.repeat.foreach等!如果是表形式常用mapcar函数做遍历,因为他方便快捷!
vl类函数有很多个函数均能做遍历,对vl我也不熟,所以就不举例了。 好象有一种polyline线,叫什么轻多义线吧(如果是重多义线,就转成轻多义线),用entnext可以找到其顶点,我知道的就这么一点点,而且未必准确,等高手回答你吧 提取三维多段线的顶点坐标,三维多段线有子实体需要用遍历的方式获取VERTEX 我主要是从while到mapcar搞不懂,while结束后,pts被赋给了什么值,怎么就能一个一个读出来。遍历方式到底是怎么回事,还有其他什么方式?谢谢了
(defun c:tq(/ en enl pts)
(setq en (car (entsel "\n选择3dpolyline"))) ;提示选择3维复线
(while (= (cdr (assoc 0 (setq enl (entget (setq en (entnext en)))))) "VERTEX")
;如果下一个子实体是VERTEX
(setq pts (cons (cdr (assoc 10 enl)) pts)) ;将子实体结点读出,加到坐标表pts中
)
(mapcar ;对坐标表pts每项进行循环打印坐标表pts
'(lambda(pt)(princ (strcat "\nx=" (rtos (car pt) 2 6)
"y=" (rtos (cadr pt) 2 6)
"z=" (rtos (last pt) 2 6)
)
)
)
(setq pts (reverse pts)) ;坐标表反向
)
(princ)
)
感谢各位的回复,我主要是对mapcar的理解还是有问题,再次看过程序后发现mapcar后面是list1.。。listn,而不是1.。。n。明白了。谢谢各位。
页:
[1]