EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 733|回复: 0
打印 上一主题 下一主题

[即时预览] 直线即时预览

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 15:01:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一般情况下,在提示用户输入一些信息绘图的过程中,是没有当前形状的预览的,这样不够直观,例如:提示用户输入两点创建一条直线,用户必须输入好两个点以后才能生成直线,如何让用户在选择点的过程中预览到他正在绘制的图形呢?用Jig可以解决这个问题。
      本例通过Jig的方式绘制一条直线,在选取过程中你可以预览到直线的形状,以便判断是不是你所需要的效果。


  1. using System;

  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.EditorInput;

  6. [assembly: CommandClass(typeof(Sample.lineJig))]
  7. namespace Sample
  8. {
  9.     class lineJig
  10.     {
  11.         [CommandMethod("LineJig")]
  12.         public void Jig()
  13.         {
  14.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  15.             LineJig lineJig = new LineJig();
  16.             PromptResult res = ed.Drag(lineJig);
  17.             if (res.Status == PromptStatus.OK)
  18.             {
  19.                 lineJig.SetCounter(1);
  20.                 res = ed.Drag(lineJig);
  21.                 ToModelSpace(lineJig.Entity);
  22.             }
  23.         }

  24.         /// <summary>
  25.         /// 添加对象到模型空间
  26.         /// </summary>
  27.         /// <param name="ent">要添加的对象</param>
  28.         /// <returns></returns>
  29.         public static ObjectId ToModelSpace(Entity ent)
  30.         {
  31.             Database db = HostApplicationServices.WorkingDatabase;
  32.             ObjectId entId;
  33.             using (Transaction trans = db.TransactionManager.StartTransaction())
  34.             {
  35.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
  36.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  37.                 entId = btr.AppendEntity(ent);
  38.                 trans.AddNewlyCreatedDBObject(ent, true);
  39.                 trans.Commit();
  40.             }
  41.             return entId;
  42.         }
  43.     }

  44.     public class LineJig : EntityJig
  45.     {
  46.         Line myline;
  47.         Point3d startpoint;
  48.         Point3d endpoint;
  49.         int count;

  50.         public LineJig()
  51.             : base(new Line())
  52.         {
  53.             myline = new Line();
  54.             count = 0;
  55.         }

  56.         protected override SamplerStatus Sampler(JigPrompts prompts)
  57.         {
  58.             JigPromptPointOptions pntops = new JigPromptPointOptions();
  59.             pntops.UserInputControls = (UserInputControls.Accept3dCoordinates | UserInputControls.NoZeroResponseAccepted | UserInputControls.NoNegativeResponseAccepted);
  60.             pntops.UseBasePoint = false;
  61.             pntops.DefaultValue = new Point3d();
  62.             if (count == 0)
  63.             {
  64.                 pntops.Message = "\n选择起点";
  65.                 PromptPointResult pntres = prompts.AcquirePoint(pntops);

  66.                 PromptStatus ss = pntres.Status;
  67.                 if (pntres.Status == PromptStatus.OK)
  68.                 {
  69.                     startpoint = pntres.Value;
  70.                     endpoint = pntres.Value;
  71.                     return SamplerStatus.OK;
  72.                 }
  73.             }
  74.             if (count == 1)
  75.             {
  76.                 pntops.Message = "\n选择终点";
  77.                 PromptPointResult pntres = prompts.AcquirePoint(pntops);
  78.                 if (pntres.Status == PromptStatus.OK)
  79.                 {
  80.                     endpoint = pntres.Value;
  81.                     return SamplerStatus.OK;
  82.                 }
  83.             }
  84.             return SamplerStatus.Cancel;
  85.         }

  86.         protected override bool Update()
  87.         {
  88.             ((Line)Entity).StartPoint = startpoint;
  89.             ((Line)Entity).EndPoint = endpoint;
  90.             return true;
  91.         }

  92.         public void SetCounter(int i)
  93.         {
  94.             this.count = i;
  95.         }

  96.         public Entity Entity
  97.         {
  98.             get { return base.Entity; }
  99.         }
  100.     }
  101. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-16 13:05

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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