- UID
- 735305
- 积分
- 32
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2014-8-6
- 最后登录
- 1970-1-1
|
发表于 2016-10-26 23:35:22
|
显示全部楼层
C#版本 预防痴呆 :)
 - public class Rect
- {
-
- public Point2d Position;
- public double Width;
- public double Height;
- public bool IsSquare
- {
- get { return Width == Height; }
- }
- public Polyline Entity
- {
- get
- {
- Polyline pl = new Polyline();
- var pt = Position;
- pl.AddVertexAt(0, pt, 0, 0, 0);
- pt += Vector2d.XAxis * Width;
- pl.AddVertexAt(1, pt , 0, 0, 0);
- pt += Vector2d.YAxis * Height;
- pl.AddVertexAt(2, pt, 0, 0, 0);
- pt -= Vector2d.XAxis * Width;
- pl.AddVertexAt(3, pt, 0, 0, 0);
- pl.Closed = true;
- return pl;
- }
- }
- public Rect Cut()
- {
- Rect r = new Rect { Position = this.Position };
- if (Width > Height)
- {
- r.Width = r.Height = Height;
- Position += Vector2d.XAxis * Height;
- Width -= Height;
- }
- else
- {
- r.Width = r.Height = Width;
- Position += Vector2d.YAxis * Width;
- Height -= Width;
- }
- return r;
- }
- [CommandMethod("Tls:TestRect")]
- public void DoIt()
- {
- var doc = AcadApp.DocumentManager.MdiActiveDocument;
- var ed = doc.Editor;
- var resPt = ed.GetPoint("\n请输入起点:");
- if (resPt.Status != PromptStatus.OK) return;
- var resCor = ed.GetCorner("\n请输入第二点:", resPt.Value);
- if (resCor.Status != PromptStatus.OK) return;
- Rect r =
- new Rect
- {
- Position =
- new Point2d(
- Math.Min(resPt.Value.X, resCor.Value.X),
- Math.Min(resPt.Value.Y, resCor.Value.Y)),
- Width = Math.Abs(resPt.Value.X - resCor.Value.X),
- Height = Math.Abs(resPt.Value.Y - resCor.Value.Y),
- };
- List<Rect> rlst = new List<Rect>();
- while (!r.IsSquare)
- rlst.Add(r.Cut());
- rlst.Add(r);
- var db = doc.Database;
- using (var tr = db.TransactionManager.StartTransaction())
- {
- var btr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
- foreach (var rect in rlst)
- {
- var ent = rect.Entity;
- btr.AppendEntity(ent);
- tr.AddNewlyCreatedDBObject(ent, true);
- }
- tr.Commit();
- }
- }
- }
|
评分
-
查看全部评分
|