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

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

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

网易考拉推荐

面域的布尔运算  

2010-12-06 13:51:35|  分类: ObjectARX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

       面域作为一个特殊的区域,能够实现一般封闭区域不能完成的任务,例如可以对面域进行布尔运算,从而创建更加复杂的面域。

关于面域布尔运算的图形界面交互操作就不啰嗦了,相信许多AutoCAD的入门书籍中都有介绍,而且肯定比我说的要好。这里说说如何用程序来实现。

面域的实例具有方法BooleanOperation,用来实现布尔运算,第一个参数是一个BooleanOperationType的枚举,包含三种运算,即并集(BoolUnite)、交集(BoolIntersect)和差集(BoolSubtract),第二个参数则是参与运算的第二个面域。

    例如需要创建一个下图的法兰盘基座,首先就要创建一个面域,该面域是大圆减去小圆的复杂面域,可采用布尔运算得到。

面域的布尔运算 - 379910987 - 年轻,就要多折腾~~

 

截面尺寸参数如下图:

面域的布尔运算 - 379910987 - 年轻,就要多折腾~~

创建面域可以用大圆面域减去6个小圆面域,这里主要说明面域的运算,并不做实体的创建。代码清单如下:

public void Flange()

{

    Document doc = Application.DocumentManager.MdiActiveDocument;

    Database db = doc.Database;           

    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;

    double pi = Math.PI;

    DBObjectCollection dboc1 = new DBObjectCollection();

    DBObjectCollection dboc2 = new DBObjectCollection();

    Circle C1 = new Circle();//大圆

    C1.SetDatabaseDefaults();

    C1.Radius = 200;

    C1.Center = new Point3d(0, 0, 0);

    dboc1.Add(C1);

    Circle[] C2 = new Circle[6];//6个小圆

    for (int i = 0; i < 6; i++)

    {

        Point3d pc = new Point3d(150 * Math.Cos(i * pi / 3), 150 * Math.Sin(i * pi / 3), 0);

        C2[i] = new Circle();

        C2[i].SetDatabaseDefaults();

        C2[i].Radius = 20;

        C2[i].Center = pc;

        dboc2.Add(C2[i]);

    }

    //大圆面域

    DBObjectCollection RC1 = Region.CreateFromCurves(dboc1);

    //6个小圆面域

    DBObjectCollection RC2 = Region.CreateFromCurves(dboc2);

    //RC2中将会有个面域

    Region R1 = RC1[0] as Region;

    foreach (DBObject dbo in RC2)

    {

        R1.BooleanOperation(BooleanOperationType.BoolSubtract, dbo as Region);

    }

    btr.AppendEntity(R1);

    trans.AddNewlyCreatedDBObject(R1, true);

    trans.Commit();

    trans.Dispose();

}

 运行后将得到一个单一的面域。

  评论这张
 
阅读(1414)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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