注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

【原创】根据两点和半径绘制一段圆弧  

2010-12-01 13:46:28|  分类: ObjectARX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

/// <summary>

/// pprArc用于输入两点和半径

/// 然后在模型空间中绘制圆弧

/// Point-Point-Radius-Arc

/// </summary>

[CommandMethod("pprArc")]       

public void pprArc()

{

    //准备工作

    Document doc = Application.DocumentManager.MdiActiveDocument;

    Database db = doc.Database;

    Editor ed = doc.Editor;

    Transaction trans = db.TransactionManager.StartTransaction();

    BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

    BlockTableRecord btr = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

 

    PromptPointOptions ppo = new PromptPointOptions("");

    PromptPointResult ppr;

    Point3d temp=new Point3d();

    Point2d p1, p2;

    //获取两个点

    ppo.Message = "\n请输入第一个点:";

    do

    {

        ppr = ed.GetPoint(ppo);

        temp = ppr.Value;

        p1 = new Point2d(temp.X, temp.Y);

 

    } while (ppr.Status != PromptStatus.OK);

   

    ppo.Message = "\n请输入第二个点:";

    do

    {

        ppr = ed.GetPoint(ppo);

        temp = ppr.Value;

        p2 = new Point2d(temp.X, temp.Y);

 

    } while (ppr.Status != PromptStatus.OK);

   

    double L = p1.GetDistanceTo(p2);

    double R = 0;

   

    //获取半径

    do

    {//避免出现半径比弦长一半还小的情况出现

        PromptDoubleOptions pdo = new PromptDoubleOptions("\n最后,请输入半径:");

        PromptDoubleResult pdr = ed.GetDouble(pdo);

        if (pdr.Status == PromptStatus.OK)

            R = pdr.Value;

    } while (R < L/2);          

    double H = R - Math.Sqrt(R * R - L * L / 4);

   

    Polyline poly = new Polyline();

    poly.AddVertexAt(0, p1, 2*H/L, 0, 0);

    poly.AddVertexAt(1, p2, 0, 0, 0);

    btr.AppendEntity(poly);

    trans.AddNewlyCreatedDBObject(poly, true);

    trans.Commit();

    trans.Dispose();

}

运行效果如下:

【原创】根据两点和半径绘制一段圆弧 - 379910987 - 379910987的博客

 

  评论这张
 
阅读(901)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016