1. ;;;若海提供;qq363496390
    2. ;;;函数名称:ImportObjectFromFile
    3. ;;;函数说明:从模板图纸当中导入块定义、线型等对象到当前图纸
    4. ;;;参 数:objectNameLst:需要拷贝的对象的lst
    5. ;;;参 数:fileName:模板所在全路径
    6. ;;;参 数:property:需要拷贝的对象的集合
    7. ;;;返 值:无
    8. ;;;示 例:(ImportObjectFromFile objectNameLst fileName property)
    9. ;;;(ImportObjectFromFile '("TG_BC" "TG_DJ") "c:\\11.dwg" 'Linetypes)
    10. ;;;(ImportObjectFromFile '("aaa" "bbb" "ccc") "c:\\11.dwg" 'Blocks)
    11. ;;;(vla-InsertBlock (vlax-get-property (vla-get-ActiveDocument (vlax-get-acad-object)) (if (= 1 (getvar 'CVPORT)) 'PaperSpace 'ModelSpace)) (vlax-3D-point 0 0 0) "ccc" 1 1 1 0)
    12. (defun ImportObjectFromFile (objectNameLst fileName property / acver collection dbx objlst synbolname)
    13. (setq synbolName
    14. (cond
    15. ((equal property 'Blocks)
    16. "BLOCK"
    17. )
    18. ((equal property 'Layers)
    19. "LAYER"
    20. )
    21. ((equal property 'Linetypes)
    22. "LTYPE"
    23. )
    24. ((equal property 'DimStyles)
    25. "DIMSTYLE"
    26. )
    27. )
    28. )
    29. ;;获取当前图纸中没有的对象的lst
    30. (setq objectNameLst (vl-remove-if '(lambda(x) (tblsearch synbolName x)) objectNameLst))
    31. ;;如果需要拷贝
    32. (if objectNameLst
    33. (progn
    34. ;;创建dbx对象
    35. (setq dbx
    36. (vla-GetInterfaceObject
    37. (vlax-get-acad-object)
    38. (if (< (setq acVer (atoi (getvar "ACADVER"))) 16)
    39. "ObjectDBX.AxDbDocument"
    40. (strcat "ObjectDBX.AxDbDocument." (itoa acVer))
    41. )
    42. )
    43. )
    44. (if (vl-catch-all-error-p (vla-open dbx fileName :vlax-true))
    45. (vlax-release-object dbx)
    46. )
    47. ;;从模板中获得对象集合
    48. (setq Collection (vlax-get dbx property))
    49. ;;将需要拷贝的对象lst转换成模板中存在的vla对象lst
    50. (setq objLst (vl-remove nil (mapcar '(lambda(x) (if (vl-catch-all-error-p (vl-catch-all-apply '(lambda nil (setq lam (vla-Item Collection x)))nil)) nil lam)) objectNameLst)))
    51. ;;创建安全数组方式复制
    52. ;(vla-copyobjects
    53. ; dbx
    54. ; (vlax-safearray-fill
    55. ; (vlax-make-safearray
    56. ; vlax-vbobject
    57. ; (cons 0 (1- (length objLst)))
    58. ; )
    59. ; objLst
    60. ; )
    61. ; (vlax-get (vla-get-ActiveDocument (vlax-get-acad-object)) property)
    62. ;)
    63. ;;不通过安全数组方式
    64. (vlax-invoke dbx 'CopyObjects objLst (vlax-get (vla-get-ActiveDocument (vlax-get-acad-object)) property))
    65. (vlax-release-object dbx)
    66. )
    67. )
    68. (princ)
    69. )