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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

[即时预览] 多段线即时预览

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

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

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:00:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  1. /////////////////////////////////////////////////////////////////////////////////////////////////
  2. //https://www.eabim.net EaBIM论坛
  3. /////////////////////////////////////////////////////////////////////////////////////////////////
  4. using System;
  5. using Autodesk.AutoCAD.Runtime;
  6. using Autodesk.AutoCAD.DatabaseServices;
  7. using Autodesk.AutoCAD.Geometry;
  8. using Autodesk.AutoCAD.EditorInput;
  9. [assembly: CommandClass(typeof(Sample.PolylineJigSample))]
  10. namespace Sample
  11. {
  12.     class PolylineJigSample
  13.     {
  14.         [CommandMethod("PolylineJig")]
  15.         public void PolylineJig()
  16.         {
  17.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  18.             Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  19.             PromptPointOptions opts = new PromptPointOptions("\n选择起点:");
  20.             PromptPointResult res = ed.GetPoint(opts);
  21.             if (res.Status != PromptStatus.OK)
  22.                 return;
  23.             Point3dCollection pts = new Point3dCollection();
  24.             pts.Add(res.Value);
  25.             PolylineJig jig = new PolylineJig(pts);
  26.             int pcount = pts.Count;
  27.             ed.Drag(jig);
  28.             while (jig.Status == 1)
  29.             {
  30.                 pts = new Point3dCollection();
  31.                 for (int i = 0; i <= pcount; i++)
  32.                 {
  33.                     pts.Add(((Polyline)jig.GetEntity()).GetPoint3dAt(i));
  34.                 }
  35.                 jig = new PolylineJig(pts);
  36.                 pcount += 1;
  37.                 ed.Drag(jig);
  38.             }
  39.             if (jig.Status == 0)
  40.                 return;
  41.             ToModelSpace(jig.GetEntity());
  42.         }
  43.         /// <summary>
  44.         /// 添加对象到模型空间
  45.         /// </summary>
  46.         /// <param name="ent">要添加的对象</param>
  47.         /// <returns></returns>
  48.         public static ObjectId ToModelSpace(Entity ent)
  49.         {
  50.             Database db = HostApplicationServices.WorkingDatabase;
  51.             ObjectId entId;
  52.             using (Transaction trans = db.TransactionManager.StartTransaction())
  53.             {
  54.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
  55.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  56.                 entId = btr.AppendEntity(ent);
  57.                 trans.AddNewlyCreatedDBObject(ent, true);
  58.                 trans.Commit();
  59.             }
  60.             return entId;
  61.         }
  62.     }
  63.     public class PolylineJig : EntityJig
  64.     {
  65.         Point3d endPoint, startPoint;
  66.         int status = 1;
  67.         int pcount = 0;
  68.         public PolylineJig(Point3dCollection p3ds)
  69.             : base(new Autodesk.AutoCAD.DatabaseServices.Polyline())
  70.         {
  71.             for (int i = 0; i < p3ds.Count; i++)
  72.             {
  73.                 ((Autodesk.AutoCAD.DatabaseServices.Polyline)Entity).AddVertexAt(i, new Point2d(p3ds.X, p3ds.Y), 0, 0, 0);
  74.             }
  75.             ((Autodesk.AutoCAD.DatabaseServices.Polyline)Entity).AddVertexAt(p3ds.Count, new Point2d(p3ds[p3ds.Count - 1].X, p3ds[p3ds.Count - 1].Y), 0, 0, 0);
  76.             pcount = p3ds.Count;
  77.             endPoint = p3ds[p3ds.Count - 1];
  78.             startPoint = endPoint;
  79.         }
  80.         protected override bool Update()
  81.         {
  82.             try
  83.             {
  84.                 ((Autodesk.AutoCAD.DatabaseServices.Polyline)Entity).SetPointAt(pcount, new Point2d(endPoint.X, endPoint.Y));
  85.             }
  86.             catch (System.Exception ex)
  87.             {
  88.                 return false;
  89.             }
  90.             return true;
  91.         }
  92.         protected override SamplerStatus Sampler(JigPrompts prompts)
  93.         {
  94.             try
  95.             {
  96.                 JigPromptPointOptions jigopts = new JigPromptPointOptions();
  97.                 jigopts.UserInputControls = UserInputControls.NullResponseAccepted;
  98.                 jigopts.BasePoint = startPoint;
  99.                 jigopts.UseBasePoint = true;
  100.                 jigopts.Message = "\n选择下一个顶点:";
  101.                 PromptPointResult dres = prompts.AcquirePoint(jigopts);
  102.                 if (dres.Value != endPoint)
  103.                 {
  104.                     endPoint = dres.Value;
  105.                 }
  106.                 else
  107.                 {
  108.                     return SamplerStatus.NoChange;
  109.                 }
  110.                 if (dres.Status == PromptStatus.Cancel || dres.Status == PromptStatus.Error)
  111.                 {
  112.                     status = 0;
  113.                     return SamplerStatus.Cancel;
  114.                 }
  115.                 else if (dres.Status == PromptStatus.None)
  116.                 {
  117.                     status = 2;
  118.                     return SamplerStatus.Cancel;
  119.                 }
  120.                 else
  121.                 {
  122.                     return SamplerStatus.OK;
  123.                 }
  124.             }
  125.             catch (System.Exception ex)
  126.             {
  127.                 return SamplerStatus.OK;
  128.             }
  129.         }
  130.         public int Status { get { return status; } }
  131.         public Entity GetEntity()
  132.         {
  133.             return Entity;
  134.         }
  135.     }
  136. }



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

本版积分规则

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

GMT+8, 2024-11-27 09:59

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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