- UID
- 1
- 积分
- 16111
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-3
- 最后登录
- 1970-1-1
|
发表于 2002-9-22 19:34:34
|
显示全部楼层
最初由 z954134 发布
[B]这个帖子中缺少XdDbUtils::convertPolylineToGeCurve(pPoly,pGeCurve)的实现啊? [/B]
看下面,遍历AcDbPolyline每个顶点,然后得到该段的简单的几何实体,添加到VOID数组里面,最后如果数组里面是一个实体,直接得到,如果有多个段,那么得到:AcGeCompositeCurve2d类对象
- [FONT=courier new]
- //转换AcDbPolyline to GeCurve2d
- Acad::ErrorStatus XdDbUtils::convertPolylineToGeCurve(AcDbPolyline* pPoly, AcGeCurve2d*& pGeCurve)
- {
- AcGeVector3d normal;
- double elevation;
- int nSegs;
- AcGeLineSeg2d *pLine;
- AcGeLineSeg2d line;
- AcGeCircArc2d *pArc;
- AcGeCircArc2d arc;
- AcGeVoidPointerArray geCurves;
-
- normal = pPoly->normal();
- elevation = pPoly->elevation();
- nSegs = pPoly->numVerts() - 1;
-
- for(int i = 0; i < nSegs; i++)
- {
-
- if(pPoly->segType(i) == AcDbPolyline::kLine)
- {
- pPoly->getLineSegAt(i, line);
- pLine = new AcGeLineSeg2d(line);
- geCurves.append(pLine);
- }
- else if(pPoly->segType(i) == AcDbPolyline::kArc)
- {
- pPoly->getArcSegAt(i, arc);
- pArc = new AcGeCircArc2d(arc);
- geCurves.append( pArc );
- }
- }// for
-
- if(geCurves.length() == 1)
- {
- pGeCurve = (AcGeCurve2d*)(geCurves[0]);
- }
- else
- {
- pGeCurve = new AcGeCompositeCurve2d(geCurves);
- }
- return Acad::eOk;
- }
- //转换AcDbPolyline to GeCurve3d
- Acad::ErrorStatus XdDbUtils::convertPolylineToGeCurve(AcDbPolyline* pPoly, AcGeCurve3d*& pGeCurve)
- {
- AcGeVector3d normal;
- double elevation;
- int nSegs;
- AcGeLineSeg3d *pLine;
- AcGeLineSeg3d line;
- AcGeCircArc3d *pArc;
- AcGeCircArc3d arc;
- AcGeVoidPointerArray geCurves;
-
- normal = pPoly->normal();
- elevation = pPoly->elevation();
- nSegs = pPoly->numVerts() - 1;
-
- for(int i = 0; i < nSegs; i++)
- {
-
- if(pPoly->segType(i) == AcDbPolyline::kLine)
- {
- pPoly->getLineSegAt(i, line);
- pLine = new AcGeLineSeg3d(line);
- geCurves.append(pLine);
- }
- else if(pPoly->segType(i) == AcDbPolyline::kArc)
- {
- pPoly->getArcSegAt(i, arc);
- pArc = new AcGeCircArc3d(arc);
- geCurves.append( pArc );
- }
- }// for
-
- if(geCurves.length() == 1)
- {
- pGeCurve = (AcGeCurve3d*)(geCurves[0]);
- }
- else
- {
- pGeCurve = new AcGeCompositeCurve3d(geCurves);
- }
- return Acad::eOk;
- }
- [/FONT]
复制代码 |
|