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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 4667|回复: 90
打印 上一主题 下一主题

[即时预览] 画圆即时预览

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

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

积分
12406

社区QQ达人

跳转到指定楼层
F
发表于 2014-1-8 16:43:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  1. public void DrawCircle2P()
  2.         {
  3.             Database db = HostApplicationServices.WorkingDatabase;
  4.             Transaction trans = db.TransactionManager.StartTransaction();
  5.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  6.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  7.             using (trans)
  8.             {
  9.                 using (DocumentLock docLock = doc.LockDocument())
  10.                 {
  11.                     //获得
  12.                     BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
  13.                     BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  14.                      PromptPointOptions prPos = new PromptPointOptions("\n 指定圆心点");
  15.                     Point3d position = new Point3d(0, 0, 0);
  16.                     PromptPointResult prPosRes;
  17.                     prPosRes = ed.GetPoint(prPos);
  18.                     if (prPosRes.Status != PromptStatus.OK)
  19.                         return;
  20.                     position = prPosRes.Value;
  21.                     //Jig动态画圆
  22.                     CirJig circleJig = new CirJig(position);
  23.                     bool bSuccess = false;
  24.                     bool bCancle = false;
  25.                     do
  26.                     {
  27.                         PromptResult res = ed.Drag(circleJig);
  28.                         bCancle = (res.Status == PromptStatus.Cancel);
  29.                         bSuccess = (res.Status == PromptStatus.OK);
  30.                     } while (!bSuccess && !bCancle);
  31.                     if (!bSuccess)
  32.                         return;
  33.                     Circle circle = circleJig.GetEntity();
  34.                    btr.AppendEntity(circle);
  35.                     trans.AddNewlyCreatedDBObject(circle, true);
  36.                    trans.Commit();
  37.                    }
  38.              }
  39.        }



  40.    /// <summary>
  41.         /// Jig类  动态画圆
  42.         /// </summary>
  43.         class CirJig : DrawJig
  44.         {
  45.             private Circle mycircle;
  46.             private double radius;
  47.             private Point3d  center;
  48.             /// <summary>
  49.             /// 初始化Jig
  50.             /// </summary>
  51.             /// <param name="circenter">圆心点</param>
  52.             public CirJig(Point3d circenter)
  53.             {
  54.                 center = circenter;
  55.                 mycircle = new Circle();
  56.                 mycircle.Center = center;
  57.                 mycircle.Radius = 0.001;
  58.             }
  59.             protected override bool WorldDraw(Autodesk.AutoCAD.GraphicsInterface.WorldDraw draw)
  60.             {
  61.                 //throw new NotImplementedException();
  62.                 draw.Geometry.Draw(mycircle);
  63.                 return true;
  64.             }           
  65.             protected override SamplerStatus Sampler(JigPrompts prompts)
  66.             {
  67.                 //throw new NotImplementedException();
  68.                 JigPromptPointOptions optJigDis = new JigPromptPointOptions("\n选择半径");
  69.                 optJigDis.UserInputControls = UserInputControls.NullResponseAccepted | UserInputControls.Accept3dCoordinates;
  70.                 PromptPointResult resJigDis = prompts.AcquirePoint(optJigDis);
  71.                 Point3d tempPt = resJigDis.Value;
  72.                 //每次计算 新半径
  73.                 double tempradius = Math.Sqrt((tempPt.X - center.X) * (tempPt.X - center.X) + (tempPt.Y - center.Y) * (tempPt.Y - center.Y));
  74.                 if (resJigDis.Status == PromptStatus.Cancel)
  75.                 {
  76.                     return SamplerStatus.Cancel;
  77.                 }
  78.                 if (radius != tempradius)
  79.                 {   //将新半径 赋值给圆
  80.                     radius = tempradius;
  81.                     if (tempradius != 0)
  82.                     {
  83.                         mycircle.Radius = radius;
  84.                     }
  85.                         return SamplerStatus.OK;
  86.                     
  87.                 }
  88.                 else
  89.                 {
  90.                     return SamplerStatus.NoChange;
  91.                 }
  92.             }
  93.             /// <summary>
  94.             ///
  95.             /// </summary>
  96.             /// <returns>返回圆</returns>
  97.             public Circle  GetEntity()
  98.             {
  99.                 return mycircle;
  100.             }
  101.         }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

3

主题

1787

帖子

1926

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1926
推荐
发表于 2014-10-10 10:17:16 | 只看该作者

路过  

5

主题

874

帖子

1406

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1406
推荐
发表于 2014-9-18 16:56:02 | 只看该作者
路过!!!
不发表意见……

14

主题

2892

帖子

2085

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
2085
78F
发表于 2016-1-7 10:01:37 | 只看该作者
支持~~楼下跟上
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 12:11

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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