乐筑天下

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

如何实现动态面积呢

[复制链接]

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-8-4 20:26:00 | 显示全部楼层

简单的写了下 只实现了选点的 很多东东都没考虑 O(∩_∩)O~
  1. class PolygonJig: DrawJig
  2.         {
  3.             enum SelectState
  4.             {
  5.                 OnPoint,
  6.                 OnEdge
  7.             }
  8.             Polyline _pl;
  9.             SelectState state = SelectState.OnPoint;
  10.             Point3d _position;
  11.             int _id;
  12.             public PolygonJig(Polyline pl, int id)
  13.             {
  14.                 _pl = pl;
  15.                 _id = id;
  16.             }
  17.             protected override SamplerStatus Sampler(JigPrompts prompts)
  18.             {
  19.                 switch (state)
  20.                 {
  21.                     case SelectState.OnPoint:
  22.                         JigPromptPointOptions jigOpts = new JigPromptPointOptions();
  23.                         jigOpts.UserInputControls =
  24.                             UserInputControls.Accept3dCoordinates |
  25.                             UserInputControls.NoZeroResponseAccepted |
  26.                             UserInputControls.NoNegativeResponseAccepted;
  27.                         PromptPointResult res = prompts.AcquirePoint(jigOpts);
  28.                         Point3d pnt = res.Value;
  29.                         if (pnt != _position)
  30.                             _position = pnt;
  31.                         else
  32.                             return SamplerStatus.NoChange;
  33.                         if (res.Status == PromptStatus.Cancel)
  34.                             return SamplerStatus.Cancel;
  35.                         else
  36.                             return SamplerStatus.OK;
  37.                     case SelectState.OnEdge:
  38.                         return SamplerStatus.Cancel;
  39.                 }
  40.                 return SamplerStatus.Cancel;
  41.             }
  42.             protected override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.WorldDraw draw)
  43.             {
  44.                 _pl.SetPointAt(_id, _position.Convert2d(new Plane()));
  45.                 draw.Geometry.Draw(_pl);
  46.                 draw.Geometry.Text(_position, Vector3d.ZAxis, Vector3d.XAxis, 20, 0.75, 0, _pl.Area.ToString());
  47.                 return true;
  48.             }
  49.         }
  50.         [CommandMethod("cc")]
  51.         public static void CC()
  52.         {
  53.             Document doc = Application.DocumentManager.MdiActiveDocument;
  54.             Editor ed = doc.Editor;
  55.             Database db = doc.Database;
  56.             var optEnt = new PromptEntityOptions("\n请选择多边形");
  57.             optEnt.SetRejectMessage("选择错误!");
  58.             optEnt.AddAllowedClass(typeof(Polyline), false);
  59.             var resEnt = ed.GetEntity(optEnt);
  60.             if (resEnt.Status != PromptStatus.OK)
  61.                 return;
  62.             using (var tr = db.TransactionManager.StartTransaction())
  63.             {
  64.                 Polyline pl = tr.GetObject(resEnt.ObjectId, OpenMode.ForWrite) as Polyline;
  65.                 pl.Highlight();
  66.                
  67.                 int n = Convert.ToInt32(Math.Round(pl.GetParameterAtPoint(pl.GetClosestPointTo(resEnt.PickedPoint, true)), MidpointRounding.AwayFromZero));
  68.                 if (n >= pl.EndParam) n = 0;
  69.                 var jig = new PolygonJig(pl, n);
  70.                 ed.Drag(jig);
  71.                 tr.Commit();
  72.             }                        
  73.         }
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 01:43 , Processed in 0.153619 second(s), 53 queries .

© 2020-2024 乐筑天下

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