乐筑天下

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

使用Linq选择同心圆

[复制链接]

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-8-11 08:49:00 | 显示全部楼层 |阅读模式
在Lisp版看见这个问题
感觉用Linq应该是最简单的,就试着写了下

apcenkgswxy.JPG

apcenkgswxy.JPG


  1.         [CommandMethod("cc")]
  2.         public static void CC()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Editor ed = doc.Editor;
  6.             Database db = doc.Database;
  7.             PromptEntityOptions optsEnt = new PromptEntityOptions("\n请选择同心圆:");
  8.             optsEnt.SetRejectMessage("\n类型选择错误!");
  9.             optsEnt.AddAllowedClass(typeof(Circle), false);
  10.             double[] rads = null;
  11.             PromptEntityResult resEnt = ed.GetEntity(optsEnt);
  12.             while (resEnt.Status != PromptStatus.Cancel)
  13.             {
  14.                 if (resEnt.Status == PromptStatus.OK)
  15.                 {
  16.                     using (Transaction tr = db.TransactionManager.StartTransaction())
  17.                     {
  18.                         var cir = tr.GetObject(resEnt.ObjectId, OpenMode.ForRead) as Circle;
  19.                         var ss1 = ed.SelectAll(new ResultList { { 0, "circle" }, { 10, cir.Center } });
  20.                         if (ss1.Value.Count == 2)
  21.                         {
  22.                             rads =
  23.                                 (from ObjectId id in ss1.Value.GetObjectIds()
  24.                                  let c = tr.GetObject(id, OpenMode.ForRead) as Circle
  25.                                  select c.Radius)
  26.                                 .ToArray();
  27.                             break;
  28.                         }
  29.                     }
  30.                 }
  31.                 ed.WriteMessage("\n你选择的不是同心圆!");
  32.                 resEnt = ed.GetEntity(optsEnt);
  33.             }
  34.             if (resEnt.Status == PromptStatus.Cancel)
  35.                 return;
  36.             var ss = ed.SelectAll(
  37.                 new ResultList {
  38.                     { 0, "circle" },
  39.                     { -4, ""}
  40.                 });
  41.             using (Transaction tr = db.TransactionManager.StartTransaction())
  42.             {
  43.                 var q =
  44.                     from ObjectId id in ss.Value.GetObjectIds()
  45.                     let c = tr.GetObject(id, OpenMode.ForRead) as Circle
  46.                     group id by c.Center;
  47.                 var q2 = q.Where(g => g.Count() == 2).SelectMany(g => g).ToArray();
  48.                 ed.SetImpliedSelection(q2);
  49.             }
  50.         }

回复

使用道具 举报

31

主题

360

帖子

18

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
479
发表于 2014-8-11 09:16:00 | 显示全部楼层
严重支持大侠。可惜只会LISP!
回复

使用道具 举报

1

主题

7

帖子

3

银币

初来乍到

Rank: 1

铜币
11
发表于 2014-8-22 13:05:00 | 显示全部楼层
ResultList类是自定义的?还是哪个父类里面的?我这里提示没有
回复

使用道具 举报

1

主题

7

帖子

3

银币

初来乍到

Rank: 1

铜币
11
发表于 2014-8-23 09:51:00 | 显示全部楼层

谢谢!我刚才自己已经写了一半了。。。还是版主写的好,果断扔了我的半成品
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 21:16 , Processed in 0.378713 second(s), 63 queries .

© 2020-2025 乐筑天下

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