我有一批图纸,很多张,里面字体样式要求改成另一种统一的大字体。
能否采用.net编程写个程序,将这些图纸选择后,在不启动运行AutoCAD的情况下将这些图纸批量修改所有的字体为特定的新字体样式?
如果不能后台修改的话,能做到逐一打开再修改字体样式也行。
我刚开始试着用.net做这些,还没理出好的头绪,麻烦给我点帮助好吗?




网友答: 2种方式都能


网友答: 后台打开文档:
Database db = new Database(false, true);
db.ReadDwgFile(dwgFilePath, System.IO.FileShare.ReadWrite, true, "");

网友答: 楼上正解,LZ可以看看kean2005年左右的blog有一篇叫做部分打开cad的database

网友答: 楼主,后面解决了吗,我遇到了和你一样的问题,求指点。

网友答:
以下內容轉自驚驚博客,他博客內容太多了,有點難翻出具體在哪一篇博客里,你自己去翻翻找找哦!

// 後臺處理文件的代碼的邏輯大致如下
  1.   using Database sdb =
  2.                     HostApplicationServices.WorkingDatabase
  3.                     ?? throw new ArgumentNullException($"必须要存在一个前台文档!");

  4.                 try
  5.                 {
  6.                     using var db = new Database(false, true);
  7.                     db.ReadDwgFile(fileFullPath, FileShare.Read, false, "");
  8.                     db.CloseInput(true);
  9.                     HostApplicationServices.WorkingDatabase = db;

  10.                     // 開始你的內務處理邏輯,example 批量修改文字樣式中的文字字體!
  11.                     using DBTrans tr = new(db);
  12.                     // 依次执行所有委托
  13.                     foreach (var act in actions)
  14.                         act(printLines);

  15.                     // 一旦用了布局管理器切换布局,始终在提交事务时候出错
  16.                     // AutoCAD错误中断
  17.                     // 致命错误: Unhandled Access Violation Reading 0x0010 Exception at CFASC28h
  18.                     // 怀疑是全局变量不能保留后台的引用
  19.                     // 我是想象成当它保存关闭后,全局变量此时显示一个已经不存在的引用了
  20.                     // 但是为什么是事务提交时候检查,而不是保存时候检查呢?我并不知道
  21.                     // 所以顶替回来居然好了...真是邪门玩意
  22.                     // 这样还说明了必须要存在一个前台文档,否则切换不回来。(可以set null吗)
  23.                     HostApplicationServices.WorkingDatabase = sdb;
  24.                     db.SaveAs(fileFullPath, true, DwgVersion.Current, db.SecurityParameters);
  25.                 }
  26.                 catch (Exception ex)
  27.                 {
  28.                     throw new ArgumentException($"发生错误文件:{fileFullPath}\n错误类型:{ex.Message}");
  29.                 }
  30.                 finally
  31.                 {
  32.                     HostApplicationServices.WorkingDatabase = sdb;
  33.                 }



网友答: 替換文字的碼去這個鏈接里扒下來

http://www.mjtd.com/forum.php?mo ... 3D1&page=1&

GOOD Luck!
  • 上一篇:模仿【陨落】【lisp源码:生成任意尺寸的pdf纸张
  • 下一篇:没有了