欢迎来到我的博客
Civil 3D开发与应用,欢迎加入QQ群:484124761
AutoCAD开发,欢迎加入QQ群:193522571

revit图纸导出dxf文件批量修改

本人最近在使用revit出图时遇到了导出为dxf文件的需求,

但revit图纸导出为dxf文件后,

布局中的视口大小与revit中视口大小不一致,

导致在autocad中打印出现问题,

经过与Autodesk的技术支持的请教,

得知revit现在没有内部功能实现导出dxf文件时能够保持视口一致,

于是自己想办法对导出的dxf文件进行处理。

想着其他朋友可能也会有类似的需求,

于是将自己的代码分享在此。

 

为了满足不同版本autocad的使用,

专门使用lisp语言写的程序,

复制代码,

保存为lsp文件,

使用ap命令加载,

之后输入命令myzwmv,

选择导出dxf文件所在的文件夹位置,

即可将dxf文件另存为dwg文件,

并将其中的视口每边扩大2mm。

;;;将revit导出的dwg文件放置在一个文件夹内,
;;;程序运行时会提示用户选择路径,
;;;之后依次打开文件,并修改视口大小
;;;然后关闭文件。

;;;2019年6月15日经过进一步修改,直接打开dxf文件后另存为dwg文件
;;;同时扩大视口的尺寸
;;;文件保存在原有目录下
;;;

(princ "\n输入命令  myzwmv  来处理revit导出的dxf文件")
(defun c:myzwmv    ()
  (vl-load-com)
  (setq path (strcat (qf_getFolder "浏览文件夹") "\\"))
  (setq cadobj (vlax-get-acad-object))
  (if (/= nil path)
    (progn
      (setq files (vl-directory-files path "*.dxf" 1))

      (foreach file files
    (progn
      (setq    docobj
         (vla-open (vla-get-documents cadobj)
               (strcat path file)
         )
      )
      (setq paper (vla-get-paperspace docobj))
      (vlax-for obj    paper
        (if    (= "AcDbViewport" (vla-get-objectname obj))
          (progn
        (setq h    (vla-get-height obj)
              w    (vla-get-width obj)
              s    (vla-get-customscale obj)
        )
        (vla-put-height obj (+ 2 h))
        (vla-put-width obj (+ 2 w))
        (vla-put-customscale obj s)
          )
        )
      )

      (vla-saveas
        docobj
        (strcat path (vl-filename-base file) ".dwg")
        ac2007_dwg
      )

      (vla-close docobj :vlax-false)
    )
      )
    )
  )
  (princ)
)


;; 本代码仅提供作为应用上的参考, 而未声明或隐含任何保证; 对于任何特殊
;; 用途之适应性, 以及商业销售所隐含作出的保证, 在此一概予以否认.
;; ==================================================================
;; 作者:秋枫,参考了灯火的VBA程序
;; 用法:(qf_getFolder msg)
;; 例子:(qf_getFolder "选择文件夹:")
;; 返回值:字符串,文件夹路径,如果点了cancel, 返回nil
(defun qf_getFolder (msg / WinShell shFolder path catchit)
  (vl-load-com)
  (setq winshell (vlax-create-object "Shell.Application"))
  (setq
    shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1)
  )
  (setq
    catchit (vl-catch-all-apply
          '(lambda ()
         (setq shFolder (vlax-get-property shFolder 'self))
         (setq path (vlax-get-property shFolder 'path))
           )
        )
  )
  (if (vl-catch-all-error-p catchit)
    nil
    path
  )
)

 


处理之前的情况,视口与图例中的填充边界重合,轴线圆圈与视口边界相切。

 

 

 打印预览的情况,填充边界缺失,圆圈开口。。。。

 

 修改后的结果,能够满足我的需求了。

posted @ 2019-06-18 16:35  david96007  阅读(831)  评论(1编辑  收藏  举报