请教有关expresstools v19中有一功能(c:layoutmerge函数)
在expresstools v19中有一功能layout tools →merge layout(s)即layoutmerge.lsp(c:layoutmerge函数)在附图(test.dwg)中并不能正常工作
我查的原因是在使用函数acet-dict-ename时会返回nil
以下是tblname.lsp 中的程序(在layoutmerge命令中有使用tblname函数)
(setq na (acet-dict-ename tblname (nth n lst))
其中返回值na为nil故出错。
请问那里能查出acet-dict-ename的源程序代码?
为了解决这个问题,我在tblname.lsp中写了一个替代程序如下:
;; BY LUCAS
;;;*****************************************************************
(defun acet-dict-ename1 (TBLNAME LAYOUT_NAME / OBJDICT GRPDICT N12)
(setq OBJDICT (namedobjdict))
(setq GRPDICT (dictsearch OBJDICT TBLNAME))
(setq N12 2)
(while (/= LAYOUT_NAME (cdr (nth (+ 8 N12) GRPDICT)))
(setq N12 (+ N12 2))
)
(cdr (nth (+ 9 N12) GRPDICT))
)
;;;****************************************************************
;;;********************以上替代程序********************************
(defun acet-dict-filter-match ( tblname flt / n lst na e1 lst2 )
(acet-autoload '("acetflt.lsp" "(bns_filter_match tblname flt)"))
(setq lst (acet-dict-name-list tblname))
(setq n 0)
(repeat (length lst)
;;(setq na (acet-dict-ename tblname (nth n lst));;; LUCAS
(setq na (acet-dict-ename1 tblname (nth n lst))
e1 (entget na)
);setq
(if (bns_filter_match e1 flt)
(setq e1 (cons (cons 2 (nth n lst)) e1)
lst2 (append lst2 (list e1))
);setq
);if
(setq n (+ n 1));setq
);repeat
lst2
);defun acet-dict-filter-match
在layoutmerge.lsp中删除了下列程序:
;| by LUCAS
;; Remove layouts that do not exist
(foreach layout sourcelst
(if (not (acet-dict-ename "acad_layout" layout))
(setq sourcelst (vl-remove layout sourcelst))
);if
)|;
结果程序能执行,但在不知原因下总是不能放心使用(是否我的图文件与程序有冲突)
Ps:附图面(test.dwg)及程序(layoutmerge.lsptblname.lsp)
盗版acad2000和2002的问题对于编成人员来说爱恨交加。真怀念r14
<p>为什么7年过去了也没人愿意解决这个问题吗?</p> http://www.theswamp.org/index.php?topic=18002.0
页:
[1]