乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 20|回复: 1

从其他文件复制标注样式

[复制链接]

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2009-10-31 21:01:00 | 显示全部楼层 |阅读模式
应懒虫的要求写了下:)
不知有没更简单的做法?
大家帮忙测试下吧,
  1.         [CommandMethod("tt12")]
  2.         public static void Test12()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Database dbDesc = doc.Database;
  6.             Database dbSouce = new Database(false, true);
  7.             dbSouce.ReadDwgFile("e:\\dimstyles.dwg", FileShare.Read, true, null);
  8.             using (Transaction trSouce = dbSouce.TransactionManager.StartTransaction())
  9.             {
  10.                 BlockTable btSouce = trSouce.GetObject(dbSouce.BlockTableId, OpenMode.ForRead) as BlockTable;
  11.                 TextStyleTable tstSouce = trSouce.GetObject(dbSouce.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;
  12.                 LinetypeTable ltSouce = trSouce.GetObject(dbSouce.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
  13.                 DimStyleTable dstSouce = trSouce.GetObject(dbSouce.DimStyleTableId, OpenMode.ForRead) as DimStyleTable;
  14.                 DimStyleTableRecord dstrSouce = trSouce.GetObject(dstSouce["MyDimStyle"], OpenMode.ForRead) as DimStyleTableRecord;
  15.                 using (Transaction trDesc = dbDesc.TransactionManager.StartTransaction())
  16.                 {
  17.                     BlockTable btDesc = trDesc.GetObject(dbDesc.BlockTableId, OpenMode.ForRead) as BlockTable;
  18.                     TextStyleTable tstDesc = trDesc.GetObject(dbDesc.TextStyleTableId, OpenMode.ForWrite) as TextStyleTable;
  19.                     LinetypeTable ltDesc = trDesc.GetObject(dbDesc.LinetypeTableId, OpenMode.ForWrite) as LinetypeTable;
  20.                     DimStyleTable dstDesc = trDesc.GetObject(dbDesc.DimStyleTableId, OpenMode.ForWrite) as DimStyleTable;
  21.                     DimStyleTableRecord dstrDesc = new DimStyleTableRecord();
  22.                     dstrDesc.CopyFrom(dstrSouce);
  23.                     dstrDesc.Dimblk = GetBtrForm(dstrSouce.Dimblk, btSouce, btDesc);
  24.                     dstrDesc.Dimblk1 = GetBtrForm(dstrSouce.Dimblk1, btSouce, btDesc);
  25.                     dstrDesc.Dimblk2 = GetBtrForm(dstrSouce.Dimblk2, btSouce, btDesc);
  26.                     dstrDesc.Dimldrblk = GetBtrForm(dstrSouce.Dimldrblk, btSouce, btDesc);
  27.                     dstrDesc.Dimtxsty = GetTstrForm(trDesc, dstrSouce.Dimtxsty, tstSouce, tstDesc);
  28.                     dstrDesc.Dimltex1 = GetLtrForm(trDesc, dstrSouce.Dimltex1, ltSouce, ltDesc);
  29.                     dstrDesc.Dimltex2 = GetLtrForm(trDesc, dstrSouce.Dimltex2, ltSouce, ltDesc);
  30.                     dstDesc.Add(dstrDesc);
  31.                     trDesc.AddNewlyCreatedDBObject(dstrDesc, true);
  32.                     trDesc.Commit();
  33.                 }
  34.                 trSouce.Commit();
  35.             }
  36.         }
  37.         //在数据库间复制文字样式
  38.         public static ObjectId GetTstrForm(Transaction tr, ObjectId rid, TextStyleTable tstSouce, TextStyleTable tstDesc)
  39.         {
  40.             if (rid != ObjectId.Null)
  41.             {
  42.                 TextStyleTableRecord tstrSouce = (TextStyleTableRecord)rid.GetObject(OpenMode.ForRead);
  43.                 ObjectId idRes = GetRecordId(tstDesc, tstrSouce.Name);
  44.                 if (idRes == ObjectId.Null)
  45.                 {
  46.                     TextStyleTableRecord tstrDesc = new TextStyleTableRecord();
  47.                     tstrDesc.CopyFrom(tstrSouce);
  48.                     idRes = tstDesc.Add(tstrDesc);
  49.                     tr.AddNewlyCreatedDBObject(tstrDesc, true);
  50.                 }
  51.                 return idRes;
  52.             }
  53.             return ObjectId.Null;
  54.         }
  55.         //在数据库间复制线型
  56.         public static ObjectId GetLtrForm(Transaction tr, ObjectId rid, LinetypeTable ltSouce, LinetypeTable ltDesc)
  57.         {
  58.             if (rid != ObjectId.Null)
  59.             {
  60.                 LinetypeTableRecord ltrSouce = (LinetypeTableRecord)rid.GetObject(OpenMode.ForRead);
  61.                 ObjectId idRes = GetRecordId(ltDesc, ltrSouce.Name);
  62.                 if (idRes == ObjectId.Null)
  63.                 {
  64.                     LinetypeTableRecord ltrDesc = new LinetypeTableRecord();
  65.                     ltrDesc.CopyFrom(ltrSouce);
  66.                     idRes = ltDesc.Add(ltrDesc);
  67.                     tr.AddNewlyCreatedDBObject(ltrDesc, true);
  68.                 }
  69.                 return idRes;
  70.             }
  71.             return ObjectId.Null;
  72.         }
  73.         //在数据库间复制块定义
  74.         public static ObjectId GetBtrForm(ObjectId rid, BlockTable btSouce, BlockTable btDesc)
  75.         {
  76.             if (rid != ObjectId.Null)
  77.             {
  78.                 BlockTableRecord btrSouce = (BlockTableRecord)rid.GetObject(OpenMode.ForRead);
  79.                 ObjectId idRes = GetRecordId(btDesc, btrSouce.Name);
  80.                 if (idRes == ObjectId.Null)
  81.                 {
  82.                     ObjectIdCollection ids = new ObjectIdCollection();
  83.                     ids.Add(rid);
  84.                     btSouce.Database.Wblock(
  85.                         btDesc.Database,
  86.                         ids,
  87.                         new Point3d(),
  88.                         DuplicateRecordCloning.Replace
  89.                         );
  90.                     idRes = GetRecordId(btDesc, btrSouce.Name);
  91.                 }
  92.                 return idRes;
  93.             }
  94.             return ObjectId.Null;
  95.         }
  96.         //获取符号表记录名
  97.         public static ObjectId GetRecordId(SymbolTable st, string key)
  98.         {
  99.             if (st.Has(key))
  100.             {
  101.                 ObjectId idres = st[key];
  102.                 if (!idres.IsErased)
  103.                     return idres;
  104.                 foreach (ObjectId id in st)
  105.                 {
  106.                     if (!id.IsErased)
  107.                     {
  108.                         SymbolTableRecord str =
  109.                             (SymbolTableRecord)id.GetObject(OpenMode.ForRead);
  110.                         if (str.Name == key)
  111.                             return id;
  112.                     }
  113.                 }
  114.                     return st[key];
  115.             }
  116.             return ObjectId.Null;
  117.         }
回复

使用道具 举报

16

主题

48

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2011-4-13 20:35:00 | 显示全部楼层
公司要用C#做AutoCAD的二次开发,我是第一次做。现在要用combox绑定AutoCAD中所有textstyle。请问怎么样才能获取AutoCAD中的textstyle
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 12:49 , Processed in 0.796359 second(s), 56 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表