我正在开发一个项目,我需要从 C++ 中的 .dwg 文件导入线数据,并且正在努力知道从哪里开始。我看过这个 http://opendesign.com/files/guestdownloads/OpenDesign_Specification_for_.dwg_files.pdf ,我认为它对我来说可能太硬核了,除非有人知道一种描述方式,简单地,在代码中解码它的策略?例如,大概每个操作都必须有点明智?
除此之外,我可能不得不依赖一些第三方库,但问题是:是否有任何此类(开源)库获得了许可?我不能在这个项目中使用左复制代码。
为了澄清对评论的回应,我正在寻找许可的许可库(请参阅 http://en.m.wikipedia.org/wiki/Permissive_free_software_licence )。这包括例如 MIT 和 BSD 许可证,但不包括 GPL(LGPL 可能会起作用,但前提是静态链接有异常(exception))。当然,公共(public)领域也可以。 GPL 是强烈的 copyleft,这意味着即使您不更改它,但使用单独的原始代码链接到它,该代码也必须在 GPL 下获得许可。
最佳答案
为什么要重新发明轮子?有很多 DWG 库可用。尝试 LibDWG 。它在 GNU GPL 下获得许可(即开源)。还有基于 LibDWG 的 LibreDWG,但可以直接从 GNU 项目网站获得。在 opens a DWG file, and converts it to an SVG github 上有一个使用 LibreDWG 的例子。
读取文件似乎很简单:
int error;
Dwg_Data dwg;
error = dwg_read_file(filename, &dwg);
if (!error)
{
model_xmin = dwg_model_x_min(&dwg);
model_ymin = dwg_model_y_min(&dwg);
double dx = (dwg_model_x_max(&dwg) - dwg_model_x_min(&dwg));
double dy = (dwg_model_y_max(&dwg) - dwg_model_y_min(&dwg));
double scale_x = dx / (dwg_page_x_max(&dwg) - dwg_page_x_min(&dwg));
double scale_y = dy / (dwg_page_y_max(&dwg) - dwg_page_y_min(&dwg));
//...
}
dwg_free(&dwg);
关于c++ - 如何在 C++ 中处理 DWG 文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22597111/