下面是通过多段线的代码。
- (defun c:rpoli()
- (setq spoli (car (entsel "\nSelec. poligono. ")))
- (setq bpoli (entget spoli))
- (setq poli1 spoli)
- (setq c (cdr (assoc 10 bpoli)))
- (while (/= "SEQEND" (cdr (assoc '0 bpoli)))
- (setq vert (cdr (assoc 10 bpoli)))
- (command "circle" vert "0.5")
- (setq spoli (entnext spoli) bpoli (entget spoli))
- );wh
- )
我是Lisp新手,但对AutoCad并不陌生,但还是新手。所以我还不知道很多事情,比如ObjectReactor,不知道那是什么。
我有一个想法,但是在lisp中保存有用数据时遇到了问题。例如,我在思考一个辅助变量,它在poli1中保存了我的spoli,就像我在那里提出的那样,那么要比较的程序将是(不完整的)。
- (defun c:dpoli()
- (setq spoli (car (entsel "\nSelec. poligono. ")))
- (setq bpoli (entget spoli))
- (setq poli2 poli1)
- (setq bpoli2 (entget poli2))
- (setq c (cdr (assoc 10 bpoli)))
- (while (/= "SEQEND" (cdr (assoc '0 bpoli)))
- (setq vert (cdr (assoc 10 bpoli)))
- (setq vert1 (cdr (assoc 10 bpoli2)))
- (setq p (car vert))
- (setq p1 (car vert1))
- (if (/= p p1)
- (progn
- (command "text" pause "1.5" "90" (car vert))
- (command "text" pause "1.5" "90" (cadr vert))
- )
- )
- (setq spoli (entnext spoli))
- (setq poli2 (entnext poli2) bpoli (entget spoli) bpoli2 (entget poli2))
- );wh
- )
- (princ "\n Iniciar Rutina que recorre un pol�*gono:rpoli")
这意味着先做rpoli,然后再做dpoli,然而,spoli只是实体的标识符,因此,当我运行dpoli时,它没有发现任何更改,因为它按现在的状态遍历实体的数据库,该数据库被修改,这意味着数据库poli1=poli2=spoli,我想要它,所以数据库poli1=poli2/=spoli,其中spoli是修改后的多段线,poli1和2是旧多段线的数据库。如何在修改多段线之前将其整个数据库保存在变量中,然后将其与修改时的实体进行比较? |