zoukankan      html  css  js  c++  java
  • 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 "
    输入命令  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
      )
    )

    
    

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

     

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

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

  • 相关阅读:
    MFC通过ODBC连接Mysql程序
    MFC下DLL编程(图解)
    INI文件的写入与读取
    如何在MFC中启动其它的(.exe)可执行文件
    [VC++]用CTime类得到当前日期、时间、星期,格式化(详细讲解)
    OutputDebugString输出调试信息到debugtrack
    MFC添加背景图片三种方法
    在MFC对话框中添加状态栏
    MFC 窗体背景图片设置
    MFC实现为窗体添加的背景图片
  • 原文地址:https://www.cnblogs.com/myzw/p/11045978.html
Copyright © 2011-2022 走看看