十万火急!100分贴无人回复:如果用VC程序实现dwg和dxf文件之间的相互转换

上岸の鱼 2010-09-15 09:26:25
如题。
我在X版发了个帖子,100分无人回复,地址:http://topic.csdn.net/u/20100914/12/3ca97685-ba5f-425e-a6ff-e826789b1368.html?95360
内容是:
因需要在后台根据用户选择的下载格式,实现dwg和dxf文件格式之间的转换。
所以,我想写一个简单的Dlg程序,包含两个按钮,一个是DWG TO DXF;一个是DXF TO DWG。

我知道AutoCAD软件上另存为功能包含了这两者格式间转换的功能,但我现在是为了在编写的程序中实现,如果大家知道办法,就请路见不平,拔刀相助吧,小子愿出金子百两,为。。。言归正传,

如果大家知道就请帮帮忙吧,那帖子分全送了,分不够再添
...全文
270 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyj213 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 xx7330842 的回复:]

DXF 转 DWG不能直接:dxfout不能从读取的dxf文件生成dwg文件,或者dxfin再saveas都是不行的,而readDwgFile也不能读取dxf文件再saveas成dwg文件。
想要实现DXF TO DWG还得继续深入了解它们的文件数据结构。

网上有一个objectarx论坛,里面都是用它编程做二次开发什么的,还是可以进去学习下的,不过那个论坛的资源还是不怎么多,呵呵。
[/Quote]
看到了你之前发的这个帖子。你是对CAD两种文件格式进行转换。
我最近需要对二维的DWG文件进行读取,读取相应信息后生成一个三维的场景。不知道你是否能对我提出一些建议?多谢啦
上岸の鱼 2010-09-21
  • 打赏
  • 举报
回复
DXF 转 DWG不能直接:dxfout不能从读取的dxf文件生成dwg文件,或者dxfin再saveas都是不行的,而readDwgFile也不能读取dxf文件再saveas成dwg文件。
想要实现DXF TO DWG还得继续深入了解它们的文件数据结构。

网上有一个objectarx论坛,里面都是用它编程做二次开发什么的,还是可以进去学习下的,不过那个论坛的资源还是不怎么多,呵呵。
上岸の鱼 2010-09-21
  • 打赏
  • 举报
回复
经过这几天对Objectarx的学习,已经对它有了基本的了解。DWG TO DXF还是比较简单的,不过DXF to DWG可能还得花点功夫,当然,At first, 对这两种文件数据结构的了解还是很重要的。

void DwgToDxf()
{
CString dwgFile = _T("C:\\Documents and Settings\\user\\Desktop\\New Folder\\New Folder\\Drawing1.dwg");
CString dxfFile = _T("C:\\Documents and Settings\\user\\Desktop\\New Folder\\New Folder\\Drawing1.dxf");
AcDbDatabase* pDb = new AcDbDatabase(false,false);
if(pDb->readDwgFile(dwgFile,_SH_DENYRW,false,NULL) != Acad::eOk)
{
acutPrintf(_T("\nfailed to read dwg file"));
delete pDb;
return;
}
if(pDb->dxfOut(dxfFile,16,false) != Acad::eOk)
{
acutPrintf(_T("\nfaile to output dxf file"));
delete pDb;
return;
}
acutPrintf(_T("\nsucessed to output dxf file"));
delete pDb;
}
上岸の鱼 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 abigwood 的回复:]
除了用那个收费的库,恐怕只能用AutoDesk提供的接口了。以前公司做过类似的东西,好像是用的AutoCad的命令行实现的。
[/Quote]

是的,在程序入口处捕捉消息,然后调用自己的程序,并在里面添加命令函数,现在不在公司忘了函数名了,好像是addCommand类似的函数,里面指明了命令名称,以及相应的响应执行函数。
aBigWood 2010-09-17
  • 打赏
  • 举报
回复
除了用那个收费的库,恐怕只能用AutoDesk提供的接口了。以前公司做过类似的东西,好像是用的AutoCad的命令行实现的。
上岸の鱼 2010-09-17
  • 打赏
  • 举报
回复
这两天在网上找了很多资料,发现AutoDesk提供了一个开发AutoCAD的SDK包,叫ObjectArx或Arx,后加版本号。我下了一个ObjectArx2009,但初学感觉用起来有点困难,里面有好多类,里面还有第一眼看起来不是很懂的Sample。

我用它做了一个最简单的插件HelloWorld.

感觉对于初学者,我的以下几点建议是应该要知道的:
1.在工程属性中应当包含这个SDK包,"C/C++"->"General"--> "Additional Include Directories" 项,加入这个文件路径,通常名字是一个Inc的文件夹。

2.为自己工程添加所需的库(libraries),例如在我的HelloWorld工程,仍然是属性里: "Linker"->"Input"--> "Additional Dependencies" 里添加"rxapi.lib acdb17.lib acge17.lib acad.lib acedapi.lib"。

3.初学了解不深,但个人感觉这个SDK并没有提供AutoCAD底层的代码,好像都被封装好了,我们用的这个SDK也只是在它提供的一些接口上开发。我找不到具体底层的代码。

4,我写的这个只是一个插件,但不是DLL格式的,在AutoCAD中,插件应是.arx格式的,但这两个其实是一个东西,只是你生成的时候要在工程属性里修改。


希望以后要是有朋友遇到相同的问题,我的这些见解可以简单参考一下。
上岸の鱼 2010-09-15
  • 打赏
  • 举报
回复
Hi, bhybhybhy2.
Thanks.
Sounds good. And how can I import DWGdirect library in my MFC Program?
And any information about the classes and method in it?

Waiting for reply.
  • 打赏
  • 举报
回复
Introduction



DWGdirect is a C++ library that can be used to read and write AutoCAD DWG and DXF files outside of AutoDesk AutoCAD, thus greatly improving the speed and convenience of processes utilizing information contained within AutoCAD drawings. DWGdirect can read DWG and DXF (both ASCII and binary) files, versions 2.5 through 2007. It can write DWG and DXF (both ASCII and binary) files, versions 12 through 2007. Please note that 2004, 2005, and 2006 drawings use the same binary format.

When files of different versions and types are loaded into DWGdirect, their data is normalized to a consistent format, allowing clients to access data from different versions and types of files in a consistent manner. DWGdirect is available for Windows, Macintosh, and a variety of UNIX platforms.


上岸の鱼 2010-09-15
  • 打赏
  • 举报
回复
恩。。。谢谢,顶起
sunlin7 2010-09-15
  • 打赏
  • 举报
回复
不是说话间就能编出来的~~
雪影 2010-09-15
  • 打赏
  • 举报
回复
没做过,友情帮顶~~
上岸の鱼 2010-09-15
  • 打赏
  • 举报
回复
但是如果全部自己一个一个字节地解释分析文件,那这个工作量要多大呀?
首先就得确定这两个文件的结构,在CAD等软件中的读取分析方法,可能dxf稍微容易点,但这个工作量已经够呛了,就像让你现在就自己动手写一个读取显示这两个文件格式的程序,包含一大堆对文件中各种结构数据的使用分析函数。
。。。然后,想办法再写一大堆东西依靠那些函数去实现dxf和dwg格式文件的转换,哦。。天呀。。如果这样,依靠你那些读写这些文件的函数和类,就可以顺带实现对这些矢量图的操作了,都快成小半个简单的CAD软件了。

哦。。天呀。。然后再让我告诉你一个不幸的消息,虽然我们要转换成的文件版本可能是固定的,但源文件难保不会,就是不同版本间的文件格式存在在不同的差异,version 12,14,..2000,2004,2007,2010。。。然后你就会觉得脑袋崩溃去再写一堆东西去实现这些版本间的转换,然后再悲剧地修改好像怎么都堵不住口子的BUG。

然后不知何年马月告诉你,你成功了,貌似你自己为此完成了一个类库,我们感到欣慰。。。—_—#
d93d3s2d9s7 2010-09-15
  • 打赏
  • 举报
回复

这不需要库吧? 需要得到dwg、dxf这两种文件的格式,然后一个字节一个字节的自己解释。

  • 打赏
  • 举报
回复
http://www.opendesign.com/guestfiles 你先到这个地方下载看看 要是能用告诉我一下
上岸の鱼 2010-09-15
  • 打赏
  • 举报
回复
恩。。好,不过我要下班了才能上Q,呵呵。。

by the way, 能免费提供一份么?我的邮箱:xx287442776@126.com
jameshooo 2010-09-15
  • 打赏
  • 举报
回复
手工我都不会转,别说用程序了……
  • 打赏
  • 举报
回复
需要的话 加我qq
  • 打赏
  • 举报
回复
这是一个库 需要掏钱买的 我上面是库的说明
我有这方面的资料 但是我从没动过 这个库能不能用 资料全 都不确定

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧