DWG格式解析库---libredwg 快速使用(Win10 + QT)

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是依赖库)
在这里插入图片描述
② 安装 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(你的路径)

在这里插入图片描述
2. 输入exe文件名(以 dwg2dxf.exe 为例)
① 如下图,输出接口参数输入格式
1
② 用 -help 可以查看具体参数含义
在这里插入图片描述
3. DWG 转 DXF 文件

dwg2dxf.exe 1.dwg

使用最简单的方式转换:只输入要转换的DWG文件名,默认原地转换。
注意:1.dwg 与 dwg2dxf.exe 在同一路径下
在这里插入图片描述
转完发现文件夹下多了1.dxf文件,转换成功。
在这里插入图片描述

step3 :用QT完成转换

1.先上效果图
请添加图片描述
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界面
在这里插入图片描述
因为只是演示,所以代码逻辑不严谨,没有进行判空处理。


总结

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

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

  1. 按 README.txt 说明去操作在这里插入图片描述
  2. 最后解析出来3个依赖库和2个可执行文件
    在这里插入图片描述
  3. 使用QT实现跨平台(也是cmd调用)
  • 5
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神之意向、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值