[求助]C# 如何打开指定的dwg文件?
本帖最后由 作者 于 2009-11-15 10:27:32 编辑 <br /><br /> <p>C#如何通过程序打开指定的dwg文件,然后对其文件进行文字遍历查找替换?最好给一段示意代码,我是一个新手,在网上找了一天了,也没找到,希望大家给予指点,谢谢大家……</p><p>1、文字一般信息存储在什么地方,BlockTable、BlockTableRecord还是其它某个记录或表?? </p><p>2、如果C#直接操作dwg文件有难度较大,那么请问C#如何隐藏模式启动CAD程序,打开文件进行查找替换,我是的是VS2008+CAD2008,网上找了许久,都是CAD2004的启动模块,不适合CAD2008?请大家指点一二……</p> <p>直接操作dwg文件没问题的</p><p>这几天机器坏掉,还没重装完,简单说下吧</p><p>1、打开你的dwg文件:Application.DocumentManager.Open(fileName)</p><p>2、用选择集获取文字实体,过滤器可以设置为:</p><p> 0,"*Text",</p><p> 1,"*你要查找的字符串*"</p><p>3、遍历选择集,替换</p> <p>谢谢版本,非常感谢,能不能给点代码,本人CAD开发是个菜鸟……</p><p>不管怎么说,我会按你说的思路,是研究一下!!感谢!!</p> 直接打开DWG文件不是好选择,可以尝试用DBX,只是我也不知道如何在C#中用DBX技术。 <p>本人写了一小段,肯定不对,但实在不知道怎么写,希望哪个朋友指点一下:</p><p>using Autodesk.AutoCAD.ApplicationServices;<br/>using Autodesk.AutoCAD.DatabaseServices;<br/>using Autodesk.AutoCAD.Runtime;<br/>using Autodesk.AutoCAD.Geometry;<br/>using Autodesk.AutoCAD.EditorInput;</p><p>Document doc = Application.DocumentManager.Open(lvi.SubItems.Text.Trim());<br/>Editor ed = doc.Editor;<br/>TypedValue[] filList = new TypedValue[] { new TypedValue((int)DxfCode.Start, "text,mtext") };<br/>SelectionFilter filter = new SelectionFilter(filList);<br/>PromptSelectionResult ssr = GetSelection(filter)<br/>if (ssr.Status == PromptStatus.OK)<br/>{<br/> //判断是否为空,查找要满足条件的文字在进行替换</p><p>}<br/></p>public void Test1()
{
Document doc = Application.DocumentManager.Open("d:\\1.dwg");
Database db = doc.Database;
Editor ed = doc.Editor;
SelectionFilter filter =
new SelectionFilter(
new TypedValue[]
{
new TypedValue(0, "*text") ,
new TypedValue(1, "*ABC*")
}
);
PromptSelectionResult res = ed.GetSelection(filter);
if (res.Status == PromptStatus.OK)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
foreach (ObjectId id in res.Value.GetObjectIds())
{
Entity ent = tr.GetObject(id, OpenMode.ForWrite) as Entity;
//替换的内容自己写下吧
if (ent is DBText)
{
}
else
{
}
}
}
}
}
本帖最后由 作者 于 2009-11-15 22:23:45 编辑 <br /><br /> <p>非常感谢,版主……谢谢!我代表全家老小感谢你</p><p>我来用你的代码测试一下……</p><p>请问版主:</p><p>1、单行与多行文字同时存在,如何捕捉??</p><p>new TypedValue(0, "*text") , //这里仅捕捉单行文字</p><p>new TypedValue(1, "*要查找的文字*") //如果查找有多个文字,怎么实现</p><p></p><p>2、程序执行到 PromptSelectionResult res = ed.GetSelection(filter) 出错eNotApplicable异常错误</p><p>3、执行Document doc = Application.DocumentManager.Open("要打开的dwg文件")这句后,当前dwg文件被CAD打,现在我想问的是,如何不让用户看到CAD显示此文件已打开?</p><p>另外:假设,我要批量查找替换很多dwg文件,执行上句,每个文件都打开,即浪费时间,CAD显示又不直观,该如何操作??</p> <p>1、单行与多行文字同时存在,如何捕捉??</p><p>new TypedValue(0, "*text") , //这里仅捕捉单行文字</p><p><font color="#ff0000">改成:new TypedValue(0,"Text") 搜索单行文字</font></p><p><font color="#ff0000"> new TypedValue(0,"MText")搜索多行文字</font></p><p>new TypedValue(1, "*要查找的文字*") //如果查找有多个文字,怎么实现</p><p><font color="#ff0000">改成:new TypedValue(1,"*Text1*Text1*") 查找多个文字,可以这么写.</font></p><p><font color="#ff0000"></font></p><p>2、程序执行到 PromptSelectionResult res = ed.GetSelection(filter) 出错eNotApplicable异常错误</p><p><font color="#ff3300">这倒没遇到过,可能要看你实际才知是什么情况</font></p><p><font color="#ff3300"></font></p><p>3、如何不让用户看到CAD显示此文件已打开?</p><p><font color="#ff0000">判断一下doc是否已经打开,如已打开,就不再打开,并设置为当前文档.</font></p><p><font color="#ff0000"></font></p><p>另外:每个文件都打开,即浪费时间,CAD显示又不直观,该如何操作??</p><p><font color="#ff0000">建议使用ObjectDBX技术,不打开文档从后台操作.</font></p> <p><font face="Verdana">感谢二位版主……继续努力!</font></p><p><font face="Verdana">请问<font color="#ff0000">ObjectDBX</font>可以用.net操作吗?哪有好的教材或资料!</font><font face="Verdana" color="#da2549"></font></p> <p>new TypedValue(0, "*text") , //这里仅捕捉单行文字</p><p>你确定?</p><p>*Text:Text and MText</p>
页:
[1]
2