本人最近在使用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 " 输入命令 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 ) )
处理之前的情况,视口与图例中的填充边界重合,轴线圆圈与视口边界相切。
打印预览的情况,填充边界缺失,圆圈开口。。。。
修改后的结果,能够满足我的需求了。