求通用函数,可以不打开图纸批量执行自定义函数
要求:通用函数,可批量不打开图纸的情况下,执行自定义函数,如查找替换字符串、获取导出字典、字体修改等,其它同学有其它自定义函数要求的,可以参与回复。
前辈早就写过了
;| (xo-infdo fname vcol func) = dbx技术对文件内集合进行操作
参数: fname = cad文件(*.dwg格式)
vcol = 集合列表.如'(modelspace paperspace)
func = 操作函数名, 如: 'xx 或 '(lambda(x)....)
操作函数必须含一个变量(集合内实体). 如: (defun xx (x) ...)
返回: 分别操作的表(表内容根据函数来定义).
说明: vcol可以是如下集合:
All Collection Objects(所有的集合实体:)
Blocks DictionariesDimStylesfunccumentsFileDependenciesGroups
HyperlinksLayersLinetypesMenuBarMenuGroupsModelSpace
PaperSpacePlotConfigurationsPopupMenuPopupMenus
RegisteredApplicationsSelectionSetsTextStylesToolbar
ToolbarsUCSsViewportsViews
|;
(defun xo-infdo (fname vcol func / doc CNAMERET
VERKEY DOC E ENT I REGKEY SS
SSBLK ATTS BLKS CDOC CNAMES DOCS llays
)
(setq fname (strcase fname))
(print fname)
(setq cdoc (vla-get-activedocument (vlax-get-acad-object)))
(setq cname (strcat (getvar "DWGPREFIX") (getvar "DWGNAME")))
;; 当前文件名.
(vlax-for x (vlax-get (vlax-get-acad-object) 'documents)
(setq docs (cons x docs))
)
(setq cnames
(mapcar
'(lambda (x)
(strcase (strcat (vla-get-path x) "\\" (vla-get-name x))
)
)
docs
)
)
;(setq fname cname)
(if (member fname cnames)
(progn
;; v1.5加入,锁定图层解锁.>>可放入为xo-infdo的参数.后补>>
(evaldo cdoc
(vla-get-layers cdoc)
'(lambda (x)
(if (= :vlax-true (vla-get-lock x))
(progn (setq llays (cons x llays))
(vla-put-lock x :vlax-false)
)
)
)
)
(evalcur
(setq
doc (nth (- (length docs) (length (member fname cnames)))
docs
)
)
) ;处理当前文件,evalcur函数
(mapcar '(lambda (x) (vla-put-lock x :vlax-true)) llays)
)
;; 处理非当前文件.
(progn
(setq verkey(if (> (atoi (getvar "AcadVer")) 15)
".16"
""
)
*DBXDOC (vla-getinterfaceobject
(vlax-get-acad-object)
(strcat "ObjectDBX.AxDbDocument" verkey)
)
)
(vla-open *dbxdoc fname :vlax-false) ;open
;; v1.5加入,锁定图层解锁.>>可放入为xo-infdo的参数.后补>>
(evaldo *dbxdoc
(vla-get-layers *dbxdoc)
'(lambda (x)
(if (= :vlax-true (vla-get-lock x))
(progn (setq llays (cons x llays))
(vla-put-lock x :vlax-false)
)
)
)
)
;;
(setq
ret (mapcar '(lambda (x)
(evaldo *dbxdoc (vlax-get *dbxdoc x) func)
;evaldo 函数
)
vcol
)
) ;(vlax-dump-object *dbxdoc T)
;; v1.5加入,锁定图层解锁恢复>>
(mapcar '(lambda (x) (vla-put-lock x :vlax-true)) llays)
;;
(vlax-invoke *dbxdoc 'saveas fname)
(vlax-release-object *dbxdoc)
)
)
ret
) 阿然 发表于 2013-12-13 14:57 static/image/common/back.gif
前辈早就写过了
能改写一下变成完整程序吗?就是不打开图纸,完成图纸内MTEXT和TEXT字体的转变 阿然 发表于 2013-12-13 14:57 static/image/common/back.gif
前辈早就写过了
能否写个简单的例子,自定义是函数是在每个DWG文档中画条线(command "line" (list 0 0) (list 2 7) "")
func = 操作函数名, 如: 'xx 或 '(lambda(x)....)
操作函数必须含一个变量(集合内实体). 如: (defun xx (x) ...)
这句话说必须含一个变量(集合内实体),这句不能理解。
有没有人点拨一下啊 悬赏贴掉的无影无踪 帮顶 革天明 发表于 2013-12-13 20:47 static/image/common/back.gif
能否写个简单的例子,自定义是函数是在每个DWG文档中画条线(command "line" (list 0 0) (list 2 7) "")
...
自定义函数不能有Command命令,必须全部使用VLA函数来编辑objectdbx文档!
否则你可以参考猫老师的这个帖子:http://bbs.mjtd.com/thread-108697-1-1.html Lisper 发表于 2013-12-16 23:28 static/image/common/back.gif
自定义函数不能有Command命令,必须全部使用VLA函数来编辑objectdbx文档!
否则你可以参考猫老师的这个帖 ...
谢谢指点,去学习一下
留名@_@^o^
页:
[1]
2