乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 8|回复: 0

我的画圆角的方法,请指正

[复制链接]

2

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
12
发表于 2010-8-26 13:05:00 | 显示全部楼层 |阅读模式
对于在CAD平台上的开发,本人是个新手,前段时间想画一个带圆角的矩形,在网上找了好几天也没找到答案,本论坛中也有不少想求此解的朋友。后来看了张帆的,受到启发,终于得解,现分享一下。
    我用的主要的函数是AcDbPolyline,其下有个addVertexAt(unsigned int index,const AcGePoint2d& pt,double bulge = 0.,double startWidth = -1.,double endWidth = -1);
我们向其输入一系列的点,以及点与点之间的凸度,至于后面两个参数,可以不理会它。
     下面我把代码贴出来。说明一下,我是要在一块板四角打四个孔,图纸只给出了孔间距a、 b,以及孔径。板的边尺寸和圆角半径自己看着办,这里不牵涉打孔问题,只要知道孔中心位置即可,设圆角半径设为r。 需要用人工方法算出圆角与直线连接点的坐标,共八个点(从右下角开始按逆时针方向):
AcGePoint2d vertex[8];
    vertex[0] = AcGePoint2d(a/2-r, -b/2);
    vertex[1] = AcGePoint2d(a/2, -b/2+r);
    vertex[2] = AcGePoint2d(a/2, b/2-r);
    vertex[3] = AcGePoint2d(a/2-r, b/2);
    vertex[4] = AcGePoint2d(-a/2+r, b/2);
    vertex[5] = AcGePoint2d(-a/2, b/2-r);
    vertex[6] = AcGePoint2d(-a/2, -b/2+r);
    vertex[7] = AcGePoint2d(-a/2+r, -b/2);
   
    AcGePoint2dArray points;
    for (int i = 0; i
    {
        points.append(vertex[i]);
    }
//生成圆角矩形
    AcDbPolyline *pPoly= new AcDbPolyline(8);
    pPoly->addVertexAt(0,points.at(0),0.5);
    pPoly->addVertexAt(1,points.at(1),0);
    pPoly->addVertexAt(2,points.at(2),0.5);
    pPoly->addVertexAt(3,points.at(3),0);
    pPoly->addVertexAt(4,points.at(4),0.5);
    pPoly->addVertexAt(5,points.at(5),0);
    pPoly->addVertexAt(6,points.at(6),0.5);
    pPoly->addVertexAt(7,points.at(7),0);
    pPoly->setClosed(Adesk::kTrue);//将其闭合
    AcDbObjectId polyId;
    polyId=PostToModelSpace(pPoly);
    pPoly->close();


     上面的0.5是凸度,90度。我的八个点坐标是按逆时针顺序的,如果顺时针,那么凸度就是负值。  
也可以用一个结构体,将points和凸度存在一起,那么生成矩形就可以用一个循环来完成。
     上面所说的是矩形,如果是梯形、三角形等非直角情况,则要计算出角度,而连接点的坐标算法也会复杂得多。如果算出夹角为alfa,那么凸度就应为1-alfa/pi    pi指圆周率。
上面是用AcDbPolyline函数,但是AcDb2dPolyline和AcDb3dPolyline都找不到类似的方法。特别是AcDb3dPolyline的构造函数(AcDb:oly3dType unnamed,AcGePoint3dArray& vertices,Adesk::Boolean closed = Adesk::kFalse);  我想要用这个函数,因为它可以定义三维坐标,但是不知道第一个参数是什么意思,它有三个选项k3dSimplePoly 、k3dQuadSplinePoly、k3dCubicSplinePoly,第一个比较明白,就是最基本的把所有点直接连起来,我在画六角螺母时就用了这个函数,但是后面两个选项就不明白了,哪位高人可以给指点一下。
最好能够用AcDb3dPolyline来生成带圆角的图形。象我现在用AcDbPolyline生成的,如果想表现在三维空间中,还要用诸如移动、旋转等一系列操作,麻烦。
     本人水平有限,代码就是直接实现功能,至于错误判断、指针释放等都不怎么会用,见笑了。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 19:40 , Processed in 0.147467 second(s), 54 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表