明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 11323|回复: 18

[求助]C# 如何打开指定的dwg文件?

  [复制链接]
发表于 2009-11-14 16:15:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-11-15 10:27:32 编辑

C#如何通过程序打开指定的dwg文件,然后对其文件进行文字遍历查找替换?最好给一段示意代码,我是一个新手,在网上找了一天了,也没找到,希望大家给予指点,谢谢大家……

1、文字一般信息存储在什么地方,BlockTable、BlockTableRecord还是其它某个记录或表??

2、如果C#直接操作dwg文件有难度较大,那么请问C#如何隐藏模式启动CAD程序,打开文件进行查找替换,我是的是VS2008+CAD2008,网上找了许久,都是CAD2004的启动模块,不适合CAD2008?请大家指点一二……

发表于 2009-11-15 10:37:00 | 显示全部楼层

直接操作dwg文件没问题的

这几天机器坏掉,还没重装完,简单说下吧

1、打开你的dwg文件:Application.DocumentManager.Open(fileName)

2、用选择集获取文字实体,过滤器可以设置为:

    0,"*Text",

    1,"*你要查找的字符串*"

3、遍历选择集,替换

 楼主| 发表于 2009-11-15 11:10:00 | 显示全部楼层

谢谢版本,非常感谢,能不能给点代码,本人CAD开发是个菜鸟……

不管怎么说,我会按你说的思路,是研究一下!!感谢!!

发表于 2009-11-15 14:51:00 | 显示全部楼层
直接打开DWG文件不是好选择,可以尝试用DBX,只是我也不知道如何在C#中用DBX技术。
 楼主| 发表于 2009-11-15 15:53:00 | 显示全部楼层

本人写了一小段,肯定不对,但实在不知道怎么写,希望哪个朋友指点一下:

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;

Document doc = Application.DocumentManager.Open(lvi.SubItems[3].Text.Trim());
Editor ed = doc.Editor;
TypedValue[] filList = new TypedValue[] { new TypedValue((int)DxfCode.Start, "text,mtext") };
SelectionFilter filter = new SelectionFilter(filList);
PromptSelectionResult ssr = GetSelection(filter)
if (ssr.Status == PromptStatus.OK)
{
    //判断是否为空,查找要满足条件的文字在进行替换

}

发表于 2009-11-15 16:56:00 | 显示全部楼层
  1.         [CommandMethod("Test", CommandFlags.Session)]
  2.         public void Test1()
  3.         {
  4.             Document doc = Application.DocumentManager.Open("d:\\1.dwg");
  5.             Database db = doc.Database;
  6.             Editor ed = doc.Editor;
  7.             SelectionFilter filter =
  8.                 new SelectionFilter(
  9.                     new TypedValue[]
  10.                     {
  11.                         new TypedValue(0, "*text") ,
  12.                         new TypedValue(1, "*ABC*")
  13.                     }
  14.                 );
  15.             PromptSelectionResult res = ed.GetSelection(filter);
  16.             if (res.Status == PromptStatus.OK)
  17.             {
  18.                 using (Transaction tr = db.TransactionManager.StartTransaction())
  19.                 {
  20.                     foreach (ObjectId id in res.Value.GetObjectIds())
  21.                     {
  22.                         Entity ent = tr.GetObject(id, OpenMode.ForWrite) as Entity;
  23.                         //替换的内容自己写下吧
  24.                         if (ent is DBText)
  25.                         {
  26.                         }
  27.                         else
  28.                         {
  29.                         }
  30.                     }
  31.                 }
  32.             }
  33.         }
 楼主| 发表于 2009-11-15 21:41:00 | 显示全部楼层
本帖最后由 作者 于 2009-11-15 22:23:45 编辑

非常感谢,版主……谢谢!我代表全家老小感谢你

我来用你的代码测试一下……

请问版主:

1、单行与多行文字同时存在,如何捕捉??

new TypedValue(0, "*text") ,   //这里仅捕捉单行文字

new TypedValue(1, "*要查找的文字*")  //如果查找有多个文字,怎么实现

2、程序执行到 PromptSelectionResult res = ed.GetSelection(filter) 出错eNotApplicable异常错误

3、执行Document doc = Application.DocumentManager.Open("要打开的dwg文件")这句后,当前dwg文件被CAD打,现在我想问的是,如何不让用户看到CAD显示此文件已打开?

另外:假设,我要批量查找替换很多dwg文件,执行上句,每个文件都打开,即浪费时间,CAD显示又不直观,该如何操作??

发表于 2009-11-16 10:14:00 | 显示全部楼层

1、单行与多行文字同时存在,如何捕捉??

new TypedValue(0, "*text") ,   //这里仅捕捉单行文字

改成:new TypedValue(0,"Text") 搜索单行文字

     new TypedValue(0,"MText")搜索多行文字

new TypedValue(1, "*要查找的文字*")  //如果查找有多个文字,怎么实现

改成:new TypedValue(1,"*Text1*Text1*") 查找多个文字,可以这么写.

2、程序执行到 PromptSelectionResult res = ed.GetSelection(filter) 出错eNotApplicable异常错误

这倒没遇到过,可能要看你实际才知是什么情况

3、如何不让用户看到CAD显示此文件已打开?

判断一下doc是否已经打开,如已打开,就不再打开,并设置为当前文档.

另外:每个文件都打开,即浪费时间,CAD显示又不直观,该如何操作??

建议使用ObjectDBX技术,不打开文档从后台操作.

 楼主| 发表于 2009-11-16 10:19:00 | 显示全部楼层

感谢二位版主……继续努力!

请问ObjectDBX可以用.net操作吗?哪有好的教材或资料!

发表于 2009-11-16 11:24:00 | 显示全部楼层

new TypedValue(0, "*text") ,   //这里仅捕捉单行文字

你确定?

*Text:Text and MText

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 01:26 , Processed in 0.170443 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表