瑞昭月华 发表于 2014-5-6 16:53:45

用闭合多段线创建面域的问题

我先用了一个函数将闭合多段线转换成曲线指针数组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 该贴已经同步到 瑞昭月华的微博

wowolwj 发表于 2014-5-15 17:25:33

几何类怎么会有open呢?
应该考虑用AcDbLine而不是AcGeLineSeg2d试试

瑞昭月华 发表于 2014-5-15 17:32:09

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里面的值,都没有效果,请问是什么?

wowolwj 发表于 2014-5-19 13:49:13

多试试
前面加上4个空格试试
    -2 (Byblock)
    40 (0.40)
页: [1]
查看完整版本: 用闭合多段线创建面域的问题