本帖最后由 林霄云 于 2019-6-27 09:47 编辑
复制非打开文件的特定块至本图 等自定义操作时,都是默认该文件未打开。当该文件打开时,会产生错误。因此在逻辑上应该先判断该文件是否已经打开。如果已经打开,则不再需要按objectdbx的方式进行vla-open,直接在打开的docs里取得该doc对象即可。- (if (not (hasopened DwgName))
- (progn
- (setq dbxDoc (vla-GetInterfaceObject *acad* (GetObjectDBXVer)));
- (vla-open dbxDoc DwgName)
- );progn
- (progn
- (setq dbxDoc (vla-item *docs* (strcat (vl-filename-base DwgName)(vl-filename-extension DwgName))))
- )
- );if 根据文件是否打开判断,采用合适的doc对象
其中判断文件是否打开自定义函数如下:
- (defun hasopened( dwgname / *ACAD* *DOC* *DOCS* flag doc)
- ;返回dwgname是否已经打开
- ;designed by 林霄云 2019年6月5日
- (setq *ACAD* (vlax-get-acad-object)
- ;*DOC* (vla-get-ActiveDocument *acad*)
- *DOCS* (vla-get-Documents *ACAD*)
- flag nil
- dwgname (findfile dwgname)
- )
-
- (vlax-for doc *DOCS*
- (if (= dwgname (vla-get-fullname doc))
- (setq flag T)
- ) ;if
- );vlax-for
- flag
- );defun
|