找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: newer

[有奖答题] 大家画下把矩形用正方形填满的图形

[复制链接]
发表于 2016-10-26 23:35:22 | 显示全部楼层
C#版本 预防痴呆 :)

  1.     public class Rect
  2.     {
  3.         
  4.         public Point2d Position;
  5.         public double Width;
  6.         public double Height;

  7.         public bool IsSquare
  8.         {
  9.             get { return Width == Height; }
  10.         }

  11.         public Polyline Entity
  12.         {
  13.             get
  14.             {
  15.                 Polyline pl = new Polyline();
  16.                 var pt = Position;
  17.                 pl.AddVertexAt(0, pt, 0, 0, 0);
  18.                 pt += Vector2d.XAxis * Width;
  19.                 pl.AddVertexAt(1, pt , 0, 0, 0);
  20.                 pt += Vector2d.YAxis * Height;
  21.                 pl.AddVertexAt(2, pt, 0, 0, 0);
  22.                 pt -= Vector2d.XAxis * Width;
  23.                 pl.AddVertexAt(3, pt, 0, 0, 0);
  24.                 pl.Closed = true;
  25.                 return pl;
  26.             }
  27.         }

  28.         public Rect Cut()
  29.         {
  30.             Rect r = new Rect { Position = this.Position };
  31.             if (Width > Height)
  32.             {
  33.                 r.Width = r.Height = Height;
  34.                 Position += Vector2d.XAxis * Height;
  35.                 Width -= Height;
  36.             }
  37.             else
  38.             {
  39.                 r.Width = r.Height = Width;
  40.                 Position += Vector2d.YAxis * Width;
  41.                 Height -= Width;
  42.             }
  43.             return r;
  44.         }

  45.         [CommandMethod("Tls:TestRect")]
  46.         public void DoIt()
  47.         {
  48.             var doc = AcadApp.DocumentManager.MdiActiveDocument;
  49.             var ed = doc.Editor;
  50.             var resPt = ed.GetPoint("\n请输入起点:");
  51.             if (resPt.Status != PromptStatus.OK) return;
  52.             var resCor = ed.GetCorner("\n请输入第二点:", resPt.Value);
  53.             if (resCor.Status != PromptStatus.OK) return;
  54.             Rect r =
  55.                 new Rect
  56.                 {
  57.                     Position =
  58.                         new Point2d(
  59.                             Math.Min(resPt.Value.X, resCor.Value.X),
  60.                             Math.Min(resPt.Value.Y, resCor.Value.Y)),
  61.                     Width = Math.Abs(resPt.Value.X - resCor.Value.X),
  62.                     Height = Math.Abs(resPt.Value.Y - resCor.Value.Y),
  63.                 };
  64.             List<Rect> rlst = new List<Rect>();
  65.             while (!r.IsSquare)
  66.                 rlst.Add(r.Cut());
  67.             rlst.Add(r);
  68.             var db = doc.Database;
  69.             using (var tr = db.TransactionManager.StartTransaction())
  70.             {
  71.                 var btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  72.                 foreach (var rect in rlst)
  73.                 {
  74.                     var ent = rect.Entity;
  75.                     btr.AppendEntity(ent);
  76.                     tr.AddNewlyCreatedDBObject(ent, true);
  77.                 }
  78.                 tr.Commit();
  79.             }
  80.         }

  81.     }

评分

参与人数 1D豆 +50 贡献 +1 收起 理由
XDSoft + 50 + 1

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2016-10-27 00:01:20 | 显示全部楼层

这个没法验证啊:)

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

使用道具 举报

发表于 2016-10-27 00:35:46 | 显示全部楼层
GGG做的Gif 无法上传。。。不用验证 也不需奖励 O(∩_∩)O~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

发表于 2016-10-27 18:46:31 来自手机 | 显示全部楼层
哈哈,多参与,多交流…
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 17:12 , Processed in 0.389699 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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