龙龙仔 发表于 2002-7-29 13:46:00

请教有关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)


南子 发表于 2002-7-30 02:42:00

盗版acad2000和2002的问题对于编成人员来说爱恨交加。真怀念r14

cad_fans 发表于 2009-9-6 19:47:00

<p>为什么7年过去了也没人愿意解决这个问题吗?</p>

龙龙仔 发表于 2009-9-7 12:00:00

http://www.theswamp.org/index.php?topic=18002.0
页: [1]
查看完整版本: 请教有关expresstools v19中有一功能(c:layoutmerge函数)