关于cad图形存储为图形文件求救
<BLOCKQUOTE>哪位大哥能不能帮小弟解决一下这个问题啊
是这样我想用arx编程实现在cad里将当前图形另外生成一个象bmp,tiff这样的文件(这个文件我另外有用的),我知道每个dwg和dxf文件都保存有该文件在cad中的最后一个图形位图,但怎样调用它去保存并自动生成一个bmp那样的文件呢?真伤脑筋啊
</BLOCKQUOTE>
[原创]
这位朋友你好!其实这是一个很简单得问题!只要在命令行里面输入export即可,AutoCAD即可跳出对话框,想把AutoCAD图形用什么图形格式输出,就可以用什么图形输出!
呵呵! 这个我是知道的,但这要客户自己操作,我想要的是在后台自动处理生成bmp等图形文件,这些文件还要被用来编程插入到另外的一种文件当中 直接用ARX送个bmpout命令过去..bmpout是众多export命令的一种.
今天把自己手上一个大bug解决了, 很高兴, 多写几个代码吧..
void your_command()<BR>{<BR> CString szCommand;<BR> CString szFName = "your_file_name_and_path"; // 输出.bmp文件路径+全名
szCommand.Format("filedia 0\n");<BR> acDocManager->sendStringToExecute(<BR> acDocManager->mdiActiveDocument(), szCommand);<BR>// FILEDIA系统变量设0, 指定不显示文件对话框, 因为CAD默认此变量为1, bmpout命令会跳出file save as对话框
// 也可以acedSetVar配合resbuf达到同样效果, 但是偶比较懒..
szCommand.Format(("bmpout %s\nall \n", szFName);<BR> acDocManager->sendStringToExecute(<BR> acDocManager->mdiActiveDocument(), szCommand);<BR>// 第一个\n代表输入要存为的文件名后必须按回车, 因为文件名允许空格<BR>// 后面的all是bmpout的一个参数, 正常命令下输入文件名后CAD等待用户选择要输出到图像文件的实体, 用all表示全选.
szCommand.Format("filedia 1\n");<BR> acDocManager->sendStringToExecute(<BR> acDocManager->mdiActiveDocument(), szCommand);<BR>// 把FILEDIA变量回复为系统默认值<BR>}
当然, 如果你用一个szCommand把所有的命令都连起来一口气发过去也是没有问题的..
(...虽然老是用ARX叫CAD命令是不好的习惯, 但sendStringToExecute()果然还是界面类的无敌指令啊..)
两个潜在问题:
1. 如果要输出的文件名已存在, 那么CAD会问要不要覆盖文件, 送过去的指令就不匹配了. 可以在输出之前检查文件是否已存在..
2. bmp输出默认只输出当前窗口内可见的图, 就是说如果当前窗口只看到全图纸的一部分, 就只能输出这一部分到bmp. 如果需要全图纸输出, 要在执行bmpout前执行zoom all. (难道CAD bmpout是借用print screen的..哈) 小弟不胜感谢
这位大哥我还想问一下cad里还有一个指令saveimg它是将当前图形经过渲染再保存保存成bmp、tiff等图形文件,如果调用那个指令是不是就可以避免你说的第二种情况了呢?但不知道经cad渲染过的图与原来相比有什么变化呢? 还有对于第一个问题有哪位大哥知道怎么解决吗?假如我知道有一个同名文件在那里,该怎么发送指令使它覆盖呢? ...倒, saveimg是不是直接输出整个图纸你自己到CAD上去试一下不就得了..
...可惜它不是..你还是要手动定义输出窗口大小..
saveimg是专门给3D渲染图用的输出指令, 对2D图没有特殊效果, 初始化慢, 而且对话框输入隐藏运行很麻烦...(还是干脆就不能后台运行, 这个不是很清楚..)
同名文件..在指令中间多发一个y表示同意覆盖..bmpout %s\ny all \n
呵呵,小弟是菜鸟,先谢谢了,有什么问题再来问,希望各位大哥不吝指教 收到 <A name=20547><FONT color=#000066><B>pandoram</B></FONT></A> 大侠的帮助。谢谢! 本帖最后由 作者 于 2005-4-11 21:01:38 编辑
太感谢pandoram啦!
这个问题我都愁了快一星期了!
页:
[1]
2