lihongyu2467 发表于 2003-10-13 19:03:00

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

请问如何取出AcDb2dPolyline实体中的点数组,编程时正好碰上这个问题,很急,小弟先谢谢大家了.

yfy2003 发表于 2003-11-21 22:12:00


请到源码共享中线形换向中找!

SPLiuJun 发表于 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;igetPointAt(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;      
}

leeyeafu 发表于 2003-12-2 10:15:00

提个建议:
(AcDbPolyline *)pDb0强制类型转换使用AcDbPolyline::cast(pDb0)更好,尽管你那样做也可以。
页: [1]
查看完整版本: 斑竹请进,如何取出AcDb2dPolyline实体中的点数组