CAD使qt打开DWG文件

1. 打开DWG文件

演示如何在QT调用控件打开函数,打开DWG文件

1.1增加打开文件按钮

(1)在界面上放一个按钮,并生成按钮事件,

 1.png

(2)点按钮上点击右键,选择[转到槽],增加按钮点击事件

 1.png

(3)点击[转到槽]

 1.png

(4)增加如下代码:

void MainWindow::on_pushButton_clicked()

{

    // 执行控件自定义命令函数,命令的id为2,这个id用户可以自己取任意数,可以理解为是给执行的命令一个编号.

    ui->axWidget->dynamicCall("DoCommand(const qint32&)",2);

}

(5)给控件增加,命令显示事件,如下图:

 1.png

(6)在函数中,增加如下代码,打开H盘的1.dwg文件:

void MainWindow::on_axWidget_ImplementCommandEvent(int iCommandId)

{

    if(iCommandId == 2)

    {

        // 调用控件打开函数,打开H:盘的1.dwg文件。

        ui->axWidget->dynamicCall("OpenDwgFile(const QString&)","H:\\1.dwg");

}

}

1.2、 在VS中使用QT

(1)运行VS,点[QT5]=>[Open Qt Project File(.pro)...]文件,把刚才我们用Qt Creator引入的到VS中。

如下:

 1.png

2.png

(2)导入后,就可以直接编译运行,是不是很简单。

(3)到这里,恭喜你,使用QT开发我们控件已经入门了…

8]D[GGP58)}RZRJQC4CG6%O.png

要在Qt中获取AutoCAD DWG文件中矩形的坐标,你需要使用ObjectARX库来读取DWG文件并解析其中的实体对象。下面是一个简单的示例代码,演示了如何使用ObjectARX在Qt中获取DWG文件中矩形的坐标: ```cpp #include <QCoreApplication> #include <aced.h> #include <dbmain.h> #include <dbents.h> #include <dbapserv.h> void printRectCoordinates(const AcDbObjectId& objectId) { AcDbEntity* entity; acdbOpenObject(entity, objectId, AcDb::kForRead); if (entity->isKindOf(AcDbRectangle::desc())) { AcDbRectangle* rectangle = AcDbRectangle::cast(entity); AcGePoint3d startPoint = rectangle->position(); double width = rectangle->width(); double height = rectangle->height(); qDebug() << "Rectangle Coordinates:"; qDebug() << "Start Point: (" << startPoint.x << ", " << startPoint.y << ", " << startPoint.z << ")"; qDebug() << "Width: " << width; qDebug() << "Height: " << height; } entity->close(); } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 初始化ObjectARX acedInitialize(); // 打开DWG文件 AcDbDatabase* database = new AcDbDatabase; database->readDwgFile("<DWG文件路径>"); // 获取模型空间块表记录 AcDbBlockTable* blockTable; database->getBlockTable(blockTable, AcDb::kForRead); AcDbBlockTableRecord* modelSpace; blockTable->getAt(ACDB_MODEL_SPACE, modelSpace, AcDb::kForRead); blockTable->close(); // 遍历模型空间中的实体对象 AcDbBlockTableRecordIterator* iterator; modelSpace->newIterator(iterator); for (; !iterator->done(); iterator->step()) { AcDbEntity* entity; if (iterator->getEntity(entity, AcDb::kForRead) == Acad::eOk) { // 检查实体类型是否为矩形 if (entity->isKindOf(AcDbRectangle::desc())) { // 获取矩形的坐标 printRectCoordinates(entity->objectId()); } entity->close(); } } delete iterator; // 关闭数据库 modelSpace->close(); database->close(); delete database; // 终止ObjectARX acedTerminate(); return a.exec(); } ``` 在上述示例中,我们使用了ObjectARX库来读取DWG文件,遍历模型空间中的实体对象,并检查是否为矩形。如果是矩形,则调用`printRectCoordinates`函数来获取矩形的坐标信息。 请注意,这只是一个简单的示例,实际使用中可能需要根据你的需求进行修改和扩展。另外,确保正确设置了ObjectARX库的路径,并替换代码中的 `<DWG文件路径>` 为你要读取的DWG文件的路径。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值