将对象复制到新dwg
如何将对象复制到新的dwg或更好的dwg?(defun c:copybypick (/ *acad* doc path tgdbxdoc pck vlobj)
(setq *acad* (vlax-get-acad-object)
doc (vla-get-documents *acad*)
)
(setq path (getfiled "Select Source File"
(getvar "dwgprefix")
"dwg;dwt;dws"
0
)
)
(setq tgdbxdoc
(vla-GetInterfaceObject *acad* "ObjectDBX.AxDbDocument.17")
)
(vla-open tgdbxdoc path)
(setq pck (entsel "Select object: ")
vlobj (vlax-ename->vla-object (car pck))
)
;;;(vla-copyobjects tgdbxdoc vloobj);;;
(vlax-release-object tgdbxdoc)
(princ)
)
你好
查看开发者帮助>ActiveX和VBA参考中的CopyObjects方法
vla CopyObjects至少需要3个参数:
-源数据库或文档(您案例中的文档)
-包含要复制的vla对象的变体(safearray)
-目标文档(tgdbxdoc)
对于第二个参数,您必须构建如下安全阵列:
或者,使用“旧式”vlax调用(避免生成saarray)更简单:
(vlax-invoke doc 'CopyObjects (list vlobj) tgdbxdoc) 嗨,吉尔,我犯了这个错误
; 错误:ActiveX服务器返回错误:未知名称:“COPYOBJECTS”
我添加(VL-LOAD-COM) 嗨,吉尔,
感谢重播。
如果我在我的行中使用你的代码,我会出错!?
我用过(vlax invoke doc’CopyObjects(list vlobj)tgdbxdoc)
而不是(vla copyobjects。。。
错误在哪里? 例子:
(defun Copy_Obj (ss blk / ObjLst)
(vl-load-com)
(setq ObjLst
(mapcar 'vlax-ename->vla-object
(vl-remove-if 'listp
(mapcar 'cadr (ssnamex ss)))))
(cond ((vl-every '= (mapcar 'vla-get-OwnerId ObjLst))
(vla-copyobjects
(vla-get-ActiveDocument
(vlax-get-acad-object))
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbObject
(cons 0 (1- (length ObjLst)))) ObjLst)) blk))))
ss=选择集
blk=目标块(文档变量/块定义) 抱歉,它看起来像(vlax invoke…)语句不适用于AxDbDocument(它适用于活动文档内的块。
因此,请使用(vlax make variant…)方法 你好
感谢重播
李,我用(ssget)得到ss=SelectionSet,但是blk=tgdbxdoc(从我的行中)是吗?
我不确定我是否完全理解。。。
如何使用(Copy_Obj ss blk),而参数的类型是ss和blk?
@李,我看过你的其他项目,做得很好,顶。 您好,Haustab,
谢谢你的夸奖,非常感谢。
是的,blk是新文档,在您的案例中是tgdbxdoc:眨眼: Gile这能行吗?
(defun c:test (/ Copy_obj ss path app docs doc)
(vl-load-com)
(defun Copy_Obj (ss blk / ObjLst)
(vl-load-com)
(setq ObjLst
(mapcar 'vlax-ename->vla-object
(vl-remove-if 'listp
(mapcar 'cadr (ssnamex ss)))))
(cond ((vl-every '= (mapcar 'vla-get-OwnerId ObjLst))
(vla-copyobjects
(vla-get-ActiveDocument
(vlax-get-acad-object))
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbObject
(cons 0 (1- (length ObjLst)))) ObjLst)) blk))))
(if (and (setq ss (ssget))
(setq path (getfiled "File" "" "dwg" 16)))
(progn
(setq app (vlax-create-object
(strcat "AutoCAD.Application."
(itoa (fix (atof (getvar 'ACADVER)))))))
(vlax-put-property app 'Visible :vlax-true)
(vlax-put-property
(vla-get-Display
(vla-get-preferences app)) 'maxautocadwindow :vlax-true)
(setq docs (vla-get-documents app) doc (vla-open docs path :vlax-false))
(Copy_obj ss doc)
(vla-save doc)
(vla-close doc)
(vlax-invoke-method app 'quit)
(mapcar
(function
(lambda (x)
(vlax-release-object x))) (list app docs doc))))
(princ))
嗨,李,
我不知道。。。
错误
复制到其他图形中似乎不那么容易。
你的最后一个代码也是一个错误。但是有很多东西需要我学习
谢谢
页:
[1]
2