acac 发表于 2021-4-2 11:41:21

通过AutoLisp/VLisp打开的dwg文件是不是不能使用command/vl-cmdf命令?

请问一下各位大神,通过AutoLisp/VLisp打开的dwg文件是不是不能使用command/vl-cmdf命令?
例如,我当前打开文件A,想由AutoCAD在后台自动打开指定目录里的dwg文件(文件B/C/D/E...),运行wblock命令,但wblock命令只能将当前打开的文件A内容写入,而不能将每个后台打开的文件(文件B/C/D/E...)内容写入,导致wblock导出来的文件全部都是同一个文件A的内容。


    (setq path (strcat (getFolder "请选取要批处理的dwg文件所在目录") "\\"))
    (setq cadobj (vlax-create-object "AUTOCAD.Application"))
    (setq i 0)
    (foreach file (vl-directory-files path "*.dwg" 1)
      (setq docobj (vla-open (vla-get-documents cadobj) (strcat path file)))
      (setenv "DefaultFormatForSave" "24");设置另存版本号
      (setvar "filedia" 0)
      (setq filename (strcat path (substr file 1 (- (strlen file) 4)) "_Purged.dwg"))
      (command-s "-wblock" filename "*")
      (setq i (+ 1 i))
      )
    (Vlax-Invoke-Method cadobj 'Quit)




caoyin 发表于 2021-4-2 17:36:41

vla-open是后台操作
command则属于交互操作

交互操作无法嵌入后台操作

acac 发表于 2021-4-2 19:01:57

感谢回复~

我也测试了一下,只能用vla-wblock来处理了

   (setq path (strcat (getFolder "请选取要批处理的dwg文件所在目录") "\\"))
    (setq cadobj (vlax-create-object "AUTOCAD.Application"))
    (setq i 0)
    (foreach file (vl-directory-files path "*.dwg" 1)
      (setq docobj (vla-open (vla-get-documents cadobj) (strcat path file)))
      
      (setq ssetObj (vla-Add (vla-get-SelectionSets docobj) "WBLOCKSET"))
      (setq objsInModelSpace (vlax-make-safearray vlax-vbObject (cons 0 (1- (vla-get-Count (vla-get-ModelSpace docobj)))))
            cnt 0)
      (vlax-for entry (vla-get-ModelSpace docobj)
      (vlax-safearray-put-element objsInModelSpace cnt entry)
      (setq cnt (1+ cnt))
      )
      (vla-AddItems ssetObj objsInModelSpace)
      (setq filename (strcat path (substr file 1 (- (strlen file) 4)) "_Purged.dwg"))
      (vla-Wblock docobj filename ssetObj)
      (vla-Delete ssetObj)
      (setq i (1+ i))
      )
      
    (Vlax-Invoke-Method cadobj 'Quit)

weilu 发表于 2022-6-25 00:07:23

acac 发表于 2021-4-2 19:01
感谢回复~

我也测试了一下,只能用vla-wblock来处理了

这是要实现什么功能
页: [1]
查看完整版本: 通过AutoLisp/VLisp打开的dwg文件是不是不能使用command/vl-cmdf命令?