明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 532|回复: 0

[图元] 【field相关】查找图纸中所有的fieldcode

[复制链接]
发表于 2022-6-9 17:16 | 显示全部楼层 |阅读模式
  1. class ImportsR19
  2. {
  3.     public struct ads_name
  4.     {
  5.         public IntPtr a;
  6.         public IntPtr b;
  7.     };
  8.     [DllImport("acdb19.dll",
  9.         CallingConvention = CallingConvention.Cdecl,
  10.         EntryPoint = "?acdbGetAdsName@@YA?AW4ErrorStatus@Acad@@AAY01JVAcDbObjectId@@@Z")]
  11.     public static extern int acdbGetAdsName32(
  12.         ref ads_name name,
  13.         ObjectId objId);
  14.     [DllImport("acdb19.dll",
  15.         CallingConvention = CallingConvention.Cdecl,
  16.         EntryPoint = "?acdbGetAdsName@@YA?AW4ErrorStatus@Acad@@AEAY01_JVAcDbObjectId@@@Z")]
  17.     public static extern int acdbGetAdsName64(
  18.         ref ads_name name,
  19.         ObjectId objId);
  20.     public static int acdbGetAdsName(
  21.         ref ads_name name,
  22.         ObjectId objId)
  23.     {
  24.         if (Marshal.SizeOf(IntPtr.Zero) > 4)
  25.             return acdbGetAdsName64(ref name, objId);
  26.         return acdbGetAdsName32(ref name, objId);
  27.     }
  28.     [DllImport("accore.dll",
  29.         CharSet = CharSet.Unicode,
  30.         CallingConvention = CallingConvention.Cdecl,
  31.         EntryPoint = "acdbEntGet")]
  32.     public static extern System.IntPtr acdbEntGet(
  33.         ref ads_name ename);
  34.     public static System.Collections.Generic.List<TypedValue>
  35.         acdbEntGetTypedValues(ObjectId id)
  36.     {
  37.         System.Collections.Generic.List<TypedValue> result =
  38.             new System.Collections.Generic.List<TypedValue>();
  39.         ads_name name = new ads_name();
  40.         int res = acdbGetAdsName(ref name, id);
  41.         ResultBuffer rb = new ResultBuffer();
  42.         Autodesk.AutoCAD.Runtime.Interop.AttachUnmanagedObject(
  43.             rb,
  44.             acdbEntGet(ref name),
  45.             true);
  46.         ResultBufferEnumerator iter = rb.GetEnumerator();
  47.         while (iter.MoveNext())
  48.         {
  49.             result.Add((TypedValue)iter.Current);
  50.         }
  51.         return result;
  52.     }
  53. }
  54. [CommandMethod("FieldList")]
  55. public void FieldList()
  56. {
  57.     Document doc = Application.DocumentManager.MdiActiveDocument;
  58.     Database db = doc.Database;
  59.     Editor ed = doc.Editor;
  60.     using (var tx = db.TransactionManager.StartTransaction())
  61.     {
  62.         var nod = tx.GetObject(
  63.             db.NamedObjectsDictionaryId,
  64.             OpenMode.ForRead) as DBDictionary;
  65.         if (!nod.Contains("ACAD_FIELDLIST"))
  66.         {
  67.             ed.WriteMessage("\nDrawing has no field...");
  68.             return;
  69.         }
  70.         var id = nod.GetAt("ACAD_FIELDLIST");
  71.         List<TypedValue> dxf = ImportsR19.acdbEntGetTypedValues(id);
  72.         foreach (var entry in dxf)
  73.         {
  74.             if (entry.TypeCode == 330)
  75.             {
  76.                 ObjectId objId = (ObjectId)entry.Value;
  77.                 if (objId.ObjectClass.Name == "AcDbField")
  78.                 {
  79.                     Field field = tx.GetObject(
  80.                         objId,
  81.                         OpenMode.ForWrite) as Field;
  82.                     field.Evaluate();
  83.                     ed.WriteMessage(
  84.                      "\n - Format: " + field.Format +
  85.                      " Value: " +
  86.                      field.GetStringValue());                        
  87.                 }
  88.             }
  89.         }
  90.     }
  91. }

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

本版积分规则

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

GMT+8, 2024-4-28 02:33 , Processed in 1.872704 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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