明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3441|回复: 1

从其他文件复制标注样式

[复制链接]
发表于 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.         }
发表于 2011-4-13 20:35:53 | 显示全部楼层
公司要用C#做AutoCAD的二次开发,我是第一次做。现在要用combox绑定AutoCAD中所有textstyle。请问怎么样才能获取AutoCAD中的textstyle
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 22:44 , Processed in 0.218449 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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