找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1501|回复: 1

[分享] 筛选

[复制链接]

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-5-7 06:08:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 csharp 于 2014-5-7 06:18 编辑

http://www.acadnetwork.com/index.php?action=profile;area=showposts;u=131


  1. using (Transaction tr = db.TransactionManager.StartTransaction())
  2.             {
  3.                 LayerTable lt = (LayerTable)db.LayerTableId.GetObject(OpenMode.ForRead);
  4.                 BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
  5.                 BlockTableRecord ms = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  6.                 BlockTableRecord ps = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.PaperSpace], OpenMode.ForWrite);
  7.                     LayoutManager layMgr = LayoutManager.Current;
  8.                     Layout lay = (Layout)tr.GetObject(layMgr.GetLayoutId(layMgr.CurrentLayout), OpenMode.ForRead);


  9. //Collect LayerNames to exclude e.q.  Layers OFF or Frozen
  10. List<string> frozenLayerNames= lt
  11.                         .Cast<ObjectId>()
  12.                         .Select(id => (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead))
  13.                         .Where(ly => ly.IsOff)
  14.                         .Where(ly => ly.IsFrozen)
  15.                         .Select(ly => ly.Name)
  16.                         .ToList();

  17. //Same but now from within PaperSpace Viewports
  18. List<string> pvpFrozenLayerNames = lay
  19.                         .GetViewports().Cast<ObjectId>()
  20.                         .Select(id => (Viewport)tr.GetObject(id, OpenMode.ForRead))
  21.                         .SelectMany(pvp => pvp.GetFrozenLayers().Cast<ObjectId>())
  22.                         .Distinct().ToArray()
  23.                         .Select(id => (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead))
  24.                         .Select(ly => ly.Name)
  25.                         .ToList();

  26. // List (visible) Layers named "...~..." and "...TXT..." and NOT "...NOTTOBEINCLUDED..."
  27. var visLayerNames = lt
  28.                     .Cast<ObjectId>()
  29.                     .Select(id => (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead))
  30.                     .Where(ly => ly.Name.Contains('~'))
  31.                     .Where(ly => ly.Name.IndexOf("TXT", StringComparison.CurrentCultureIgnoreCase) > 0)
  32.                     .Where(ly => ly.Name.IndexOf("NOTTOBEINCLUDED", StringComparison.CurrentCultureIgnoreCase) < 0)
  33.                     .Where(ly => !ly.IsOff)
  34.                     .Where(ly => !ly.IsFrozen)
  35.                     .Where(ly => !pvpFrozenLayerNames.Contains(ly.Name))
  36.                     .Select(ly => ly.Name)
  37.                     .ToList();

  38. //select ModelSpace Text from specific layers
  39.                var visTxt = ms.Cast<ObjectId>()
  40.                     .Where(id => id.ObjectClass.DxfName.ToUpper() == "TEXT" || id.ObjectClass.DxfName.ToUpper() == "MTEXT")
  41.                     .Select(id => (Entity)tr.GetObject(id, OpenMode.ForRead))
  42.                     .Where(ent => visLayerNames.Contains(ent.Layer))
  43.                     .ToList();

  44. //select Text from specific layers within specific Blocks
  45.                var visTxtInSpecificBlks = ms.Cast<ObjectId>()
  46.                     .Where(id => id.ObjectClass.DxfName.ToUpper() == "INSERT")
  47.                     .Select(id => (BlockReference)tr.GetObject(id, OpenMode.ForRead))
  48.                     .Where(blkRef => visLayerNames.Contains(blkRef.Layer))
  49.                     .Where(blkRef => blkRef.Name.IndexOf("-xxx-", StringComparison.CurrentCultureIgnoreCase) > 0)
  50.                     .SelectMany(blkRef => ((BlockTableRecord)tr.GetObject(bt[blkRef.Name], OpenMode.ForRead)).Cast<ObjectId>())
  51.                     .Where(id => id.ObjectClass.DxfName.ToUpper() == "TEXT" || id.ObjectClass.DxfName.ToUpper() == "MTEXT")
  52.                     .Select(id => (Entity)tr.GetObject(id, OpenMode.ForRead))
  53.                     .Where(ent => visLayerNames.Contains(ent.Layer))
  54.                     .ToList();

  55. //Join Modelspace and Block Specific text
  56.                 visTxt.AddRange(visTxtInSpecificBlks);


  57. // build regular pattern to select certain string contents
  58. // use regex tester to help build the search pattern.
  59.                 string searchNrs = @"(^3\(|^)(...)(.*)";
  60.                 string returnNrs = "$2";
  61.                 var matchNr = new Regex(searchNrs , RegexOptions.IgnoreCase | RegexOptions.Compiled);


  62. //find visible text containing a complex patter
  63.                 var textNrs = visTxt
  64.                     .Select(ent => GetType().Name == "MTEXT" ? ((MText)ent).Text : ((DBText)ent).TextString)
  65.                     .Select(txt => matchNr.Replace(txt, searchNrs))
  66.                     .Distinct().ToArray()
  67.                     .ToList();

  68. //List in numeric order
  69.                 kabelNrs = kabelNrs
  70.                     .OrderBy(kabelNr => kabelNr.Length)
  71.                     .ThenBy(kabelNr => kabelNr)
  72.                     .ToList();

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

 楼主| 发表于 2014-6-1 11:10:30 | 显示全部楼层
筛选点集中的 X  Y Z
  1.         private  Point3d CenterPoint(Point3d[] pts)
  2.         {
  3.             var xCol = from x in pts
  4.                        select x.X;
  5.             var yCol = from y in pts
  6.                        select y.Y;
  7.             var zCol = from z in pts
  8.                        select z.Z;
  9.             return new Point3d(xCol.Average(), yCol.Average(), zCol.Average());
  10.         }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 22:26 , Processed in 0.238342 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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