本人最近在使用revit出图时遇到了导出为dxf文件的需求,
但revit图纸导出为dxf文件后,
布局中的视口大小与revit中视口大小不一致,
导致在autocad中打印出现问题,
经过与Autodesk的技术支持的请教,
得知revit现在没有内部功能实现导出dxf文件时能够保持视口一致,
于是自己想办法对导出的dxf文件进行处理。
想着其他朋友可能也会有类似的需求,
于是将自己的代码分享在此。
为了满足不同版本autocad的使用,
专门使用lisp语言写的程序,
复制代码,
保存为lsp文件,
使用ap命令加载,
之后输入命令myzwmv,
选择导出dxf文件所在的文件夹位置,
即可将dxf文件另存为dwg文件,
并将其中的视口每边扩大2mm。
;;;将revit导出的dwg文件放置在一个文件夹内,;;;程序运行时会提示用户选择路径,;;;之后依次打开文件,并修改视口大小;;;然后关闭文件。;;;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-saveasdocobj(strcat path (vl-filename-base file) ".dwg")ac_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"))(setqshFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1) )(setqcatchit (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)nilpath))
处理之前的情况,视口与图例中的填充边界重合,轴线圆圈与视口边界相切。
打印预览的情况,填充边界缺失,圆圈开口。。。。
修改后的结果,能够满足我的需求了。