明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2787|回复: 3

斑竹请进,如何取出AcDb2dPolyline实体中的点数组

[复制链接]
发表于 2003-10-13 19:03:00 | 显示全部楼层 |阅读模式
请问如何取出AcDb2dPolyline实体中的点数组,编程时正好碰上这个问题,很急,小弟先谢谢大家了.
发表于 2003-11-21 22:12:00 | 显示全部楼层
本帖最后由 作者 于 2003-11-22 10:33:50 编辑

请到源码共享中线形换向中找!
发表于 2003-12-2 09:03:00 | 显示全部楼层
BOOL GetPolylinePoint(AcDbObject * pDbO, AcGePoint3dArray &gePoi3dA, long &lNum)
{
        AcDbObjectId                        DbOId;
        AcGePoint3d                                gePoi3d;

        lNum=0;
        // 釋放數組gePoi3dA
        if (gePoi3dA.logicalLength() > 0) {
                gePoi3dA.removeSubArray(0, gePoi3dA.logicalLength()-1);
        }
        if (pDbO->isKindOf(AcDbPolyline::desc())) {
                // 處理Polyline
                lNum = ((AcDbPolyline *)pDbO)->numVerts();
                for(long i=0;i<lNum;i++) {
                        ((AcDbPolyline *)pDbO)->getPointAt(i , gePoi3d);
                        gePoi3dA.append(gePoi3d);
                }
        }else if (pDbO->isKindOf(AcDb2dPolyline::desc())) {
                // 處理2dPolyline
                AcDb2dVertex                        * pDb2dV;
                AcDbObjectIterator                * pDbOIt;
                pDbOIt = ((AcDb2dPolyline *)pDbO)->vertexIterator();
                for(pDbOIt->start();!pDbOIt->done(); pDbOIt->step()) {
                        DbOId = pDbOIt->objectId();
                        ((AcDb2dPolyline *)pDbO)->openVertex(pDb2dV, DbOId, AcDb::kForRead);
                        gePoi3d = pDb2dV->position();
                        pDb2dV->close();
                        gePoi3dA.append(gePoi3d);
                }
                delete pDbOIt;
        }else if (pDbO->isKindOf(AcDb3dPolyline::desc())) {
                // 處理3dPolyline
                AcDb3dPolylineVertex        * pDb3dPV;
                AcDbObjectIterator                * pDbOIt;
                pDbOIt = ((AcDb3dPolyline *)pDbO)->vertexIterator();
                for(pDbOIt->start();!pDbOIt->done(); pDbOIt->step()) {
                        DbOId = pDbOIt->objectId();
                        ((AcDb3dPolyline *)pDbO)->openVertex(pDb3dPV, DbOId, AcDb::kForRead);
                        gePoi3d = pDb3dPV->position();
                        pDb3dPV->close();
                        gePoi3dA.append(gePoi3d);
                }
                delete pDbOIt;
        }else{
                return FALSE;
        }
        lNum = gePoi3dA.logicalLength();
        return TRUE;       
}

评分

参与人数 1金钱 +2 贡献 +1 激情 +2 收起 理由
leeyeafu + 2 + 1 + 2 【好评】好文章

查看全部评分

发表于 2003-12-2 10:15:00 | 显示全部楼层
提个建议:
(AcDbPolyline *)pDb0强制类型转换使用AcDbPolyline::cast(pDb0)更好,尽管你那样做也可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 22:47 , Processed in 0.172202 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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