- 积分
- 204
- 明经币
- 个
- 注册时间
- 2014-5-5
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
我先用了一个函数将闭合多段线转换成曲线指针数组- void PolyToGeCurve(const AcDbPolyline* pPline,AcDbVoidPtrArray& geCurves)
- {
- int nSegs; // 多段线的段数
- AcGeLineSeg2d line, *pLine; // 多段线的直线段部分
- AcGeCircArc2d arc, *pArc; // 几何曲线的圆弧部分
- nSegs = pPline->numVerts(); //闭合的线段数
- // 得到所有分段的指针
- for (int i = 0; i < nSegs; i++)
- {
- if (pPline->segType(i) == AcDbPolyline::kLine) // 如果是直线
- {
- pPline->getLineSegAt(i, line);
- pLine = new AcGeLineSeg2d(line);
- geCurves.append(static_cast<void*>(pLine)); // 将该线段指针加到曲线指针数组中
- }
- else if (pPline->segType(i) == AcDbPolyline::kArc) //如果是曲线
- {
- pPline->getArcSegAt(i, arc);
- pArc = new AcGeCircArc2d(arc);
- geCurves.append(static_cast<void*>(pArc));
- // 将该曲线指针加到曲线指针数组中
- }
- // 闭合多段线的其它 形式如重合点等忽略
- }
复制代码 这时将上面函数得到的geCurves指针数组传给面域创建函数- AcDbVoidPtrArray regions; // 创建的面域
- Acad::ErrorStatus es = AcDbRegion::createFromCurves(geCurves,regions);// 创建面域
复制代码 但程序运行到createFromCurves(geCurves,regions);时CAD直接崩溃了。
我已经检查过前面程序得到的曲线指针数组geCurves 所有的线段是闭合的没问题,而文档里createFromCurves 函数描述了一个要求:
The objects in curveSegments(也就是这里的geCurves ) must be opened for read and not for write. If the objects are opened, calling this function will crash AutoCAD.
这里我也确定了我之前的多段线是处于read模式下而不是write,程序为什么还会崩溃呢?
求各位帮忙看下,弄了一天了,谢谢。
该贴已经同步到 瑞昭月华的微博 |
|