利用dxflib读写cad文件

本篇主要在qt做一个例子读取cad文件数据,使用的开源库是dxflib。用到dxflib的DL_CreationAdapter,DL_Dxf。DL_Dxf是用来读取.dxf文件的类,DL_CreatinAdapter是一个容器,当DL_Dxf加载.dxf文件后,就会响应DL_CreationAdapter这个类,读取cad数据。
我们来看看他的工作原理:

//自己声明一个类继承DL_CreationAdapter
class MyDxfFilter : public DL_CreationAdapter {
//重写虚函数来把度出来的数据保存到自己设计好的数据结构中
 virtual void addLine(const DL_LineData& d);
 ...
}
void MyDxfFilter::addLine(const DL_LineData& d) {
 std::cout << "Line: " << d.x1 << "/" << d.y1
 << " " << d.x2 << "/" << d.y2 << std::endl;
}

MyDxfFilter f;
DL_Dxf dxf;
//读取.dxf文件
if (!dxf.in("drawing.dxf", &f)) {
 std::cerr << "drawing.dxf could not be opened.\n";
}

在这段程序中,当dxf.in("drawing.dxf", &f)读取.dxf文件成功了,如果文件中有很多line,那么f对象会一直递归调用虚函数接口addLine(),直到所有的line都读完。
重这个特征,我们就可以把所有我们要读取的数据都出来了!
直接上程序!:
entitiesDatas.h

#ifndef ENTITIESDATAS_H
#define ENTITIESDATAS_H
#include <QDebug>
#include "dl_dxf.h"
#include "dl_creationadapter.h"
#include "dl_attributes.h"
#include "dl_codes.h"
#include "dl_entities.h"
#include "dl_exception.h"
#include "dl_global.h"
#include "dl_writer.h"
#include "dl_writer_ascii.h"
#include <QList>
#include <QString>

class EntitiesDatas:public DL_CreationAdapter
{
public:
//    explicit EntitiesDatas();

    virtual void EntitiesDatas::addPoint(const DL_PointData &d){
        points.append(d);
        qDebug()<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^add point";
    }
    virtual void EntitiesDatas::addLine(const DL_LineData &d){
        lines.append(d);
        qDebug()<<"~~~~~~~~~~~~~~~~~~~~~~~~~~add line";
    }
    virtual void EntitiesDatas::addArc(const DL_ArcData &d){
        arcs.append(d);
        qDebug()<<"#######################add arc";
    }
    virtual void EntitiesDatas::addCircle(const DL_CircleData &d){
        circles.append(d);
        qDebug()<<"!!!!!!!!!!!!!!!!!!!!!!!!add circle";
    }
    virtual void EntitiesDatas::addEllipse(const DL_EllipseData &d){
        ellipses.append(d);
        qDebug()<<"%%%%%%%%%%%%
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值