libredwg 是什么

        LibreDWG 是 github 上一个开源的 C 库,用于读写 DWG 文件。这个程序是 GNU 项目的一部分,在 GNU 的支持下发布。它是国外大牛开发的,是目前我觉得对 DWG 支持最好的一个库(2000版本以后的DWG文件都支持,且稳定),现在还在持续更新与维护。
libreDWG的地址


目的

        在WIN10下 借助 QT 快速使用 libreDWG 库的 exe 实现对 DWG 文件的操作,包括 dwg2dxf、dwg2svg、dwg2bmp、dwgread、dwgwrite、dxf2dwg 等功能 。


step1:准备

① 下载 libreDWG 的可执行文件: libredwg-0.12.4.4364-win64.zip (可以选最新版本下载)

下载解压出来长这样:(绿框中的4个DLL是依赖库)

dwg解析为json java dwg解析库_dwg解析为json java


② 安装 QT 软件: QT5.14

(只要是QT5就行)

step2:命令行运行exe

1.打开CMD并切换到刚下载的 libredwg-0.12.4.4364-win64 文件夹下

命令:cd /d E:\Mao\temp\dwg支持\libredwg-0.12.4.4338-win64(你的路径)

dwg解析为json java dwg解析库_dwg_02


2. 输入exe文件名(以 dwg2dxf.exe 为例)

① 如下图,输出接口参数输入格式

dwg解析为json java dwg解析库_dxf_03


② 用 -help 可以查看具体参数含义

dwg解析为json java dwg解析库_qt_04


3. DWG 转 DXF 文件

dwg2dxf.exe 1.dwg

使用最简单的方式转换:只输入要转换的DWG文件名,默认原地转换。

注意:1.dwg 与 dwg2dxf.exe 在同一路径下

dwg解析为json java dwg解析库_dwg_05


转完发现文件夹下多了1.dxf文件,转换成功。

dwg解析为json java dwg解析库_开发语言_06

step3 :用QT完成转换

1.先上效果图

dwg解析为json java dwg解析库_dxf_07


2.程序

Mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void BtnOpen();         //打开按钮
    void BtnConvert();      //转换按钮
    void BtnClear();        //清空按钮

private:
    Ui::MainWindow *ui;
    QString fileName;       //输入的DWG文件路径
};
#endif // MAINWINDOW_H

Mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <QFileDialog>
#include <QProcess>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->btnOpen,&QPushButton::clicked,this,&MainWindow::BtnOpen);
    connect(ui->btnConvert,&QPushButton::clicked,this,&MainWindow::BtnConvert);
    connect(ui->btnClear,&QPushButton::clicked,this,&MainWindow::BtnClear);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//打开按钮
void MainWindow::BtnOpen()
{
    fileName = QFileDialog::getOpenFileName(this, tr("open file"),
                                                    "./", tr("*.dwg *.DWG"));
    ui->Edit->insertPlainText("Open File Success:\r"+ fileName + "\r\r");
}

//转换按钮
void MainWindow::BtnConvert()
{
    //调用 cmd 运行 exe 程序
    QProcess process(this);
    //转换后的DXF保存路径
    QString DxfSavePath = "E:/Mao/dwg2dxf/1.dxf";
    //使用的 exe 文件的路径
    QString Dwg2dxfExePath = "E:/Mao/algorithm/Qt/test/libredwg-0.12.4.4338-win64/dwg2dxf.exe";
    //输出的DXF是2018版本的
    process.start("cmd",QStringList()<<"/c"<<Dwg2dxfExePath<<"-v2018"<<"-o"<<DxfSavePath<<fileName);
    process.waitForFinished();
    ui->Edit->insertPlainText("Convert Dwg to Dxf Success:\r" + DxfSavePath + "\r\r");
}

//清空按钮
void MainWindow::BtnClear()
{
    ui->Edit->clear();
}

UI界面

dwg解析为json java dwg解析库_qt_08


因为只是演示,所以代码逻辑不严谨,没有进行判空处理。


总结

       这是我之前开发过的一个功能,因为DXF解析库已经比较完善,很好支持,但是DWG解析库暂时没那么普及,所以我进行了个迂回:DWG转成DXF,再使用熟悉的DXF。如果急用可以直接使用 exe 实现功能,当然有时间的话最好消化一下内部代码实现,有问题大家也可以在评论区讨论。

在Linux下的版本我也做了,已经测试成功,下次有时间再写。
大致步骤:

  1. 按 README.txt 说明去操作
  2. 最后解析出来3个依赖库和2个可执行文件
  3. 使用QT实现跨平台(也是cmd调用)