用闭合多段线创建面域的问题
我先用了一个函数将闭合多段线转换成曲线指针数组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,程序为什么还会崩溃呢?
求各位帮忙看下,弄了一天了,谢谢。
http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 瑞昭月华的微博 几何类怎么会有open呢?
应该考虑用AcDbLine而不是AcGeLineSeg2d试试 wowolwj 发表于 2014-5-15 17:25 static/image/common/back.gif
几何类怎么会有open呢?
应该考虑用AcDbLine而不是AcGeLineSeg2d试试
谢谢,这个问题我已经搞定了,但我现在有另一个问题,是关于用DXF组码创建缓冲区链表的,我想滤得某图层上指定线宽的实体,但线宽的组码值我不知道是什么,程序如下:
FilterOfFireComp = acutBuildList(RTDXF0,_T("LWPOLYLINE,POLYLINE,CIRCLE"), // 实体类型
8,fireCompartmentName, //图层
370,_T("kLnWtByLayer"), // BLAYER线宽
RTNONE); // 实体类型为多段线)
就上面的370行,370在DXF里是表示线宽的,但后面的值呢?我试过了BYLAYER和-1以及其它AcDb::LineWidth里面的值,都没有效果,请问是什么? 多试试
前面加上4个空格试试
-2 (Byblock)
40 (0.40)
页:
[1]