明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5976|回复: 3

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

[复制链接]
发表于 2014-5-6 16:53:45 | 显示全部楼层 |阅读模式
我先用了一个函数将闭合多段线转换成曲线指针数组
  1. void PolyToGeCurve(const AcDbPolyline* pPline,AcDbVoidPtrArray& geCurves)
  2. {
  3.   int nSegs; // 多段线的段数
  4.   AcGeLineSeg2d line, *pLine; // 多段线的直线段部分
  5.   AcGeCircArc2d arc, *pArc; // 几何曲线的圆弧部分
  6.   nSegs = pPline->numVerts(); //闭合的线段数
  7.   // 得到所有分段的指针
  8.   for (int i = 0; i < nSegs; i++)
  9.   {
  10.     if (pPline->segType(i) == AcDbPolyline::kLine)  // 如果是直线
  11.     {
  12.       pPline->getLineSegAt(i, line);
  13.       pLine = new AcGeLineSeg2d(line);
  14.       geCurves.append(static_cast<void*>(pLine));  // 将该线段指针加到曲线指针数组中
  15.     }
  16.     else if (pPline->segType(i) == AcDbPolyline::kArc)  //如果是曲线
  17.     {
  18.       pPline->getArcSegAt(i, arc);
  19.       pArc = new AcGeCircArc2d(arc);
  20.       geCurves.append(static_cast<void*>(pArc));   
  21. // 将该曲线指针加到曲线指针数组中
  22.     }
  23. // 闭合多段线的其它 形式如重合点等忽略
  24.   }  


复制代码
这时将上面函数得到的geCurves指针数组传给面域创建函数
  1. AcDbVoidPtrArray regions; // 创建的面域
  2. 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,程序为什么还会崩溃呢?
求各位帮忙看下,弄了一天了,谢谢。







该贴已经同步到 瑞昭月华的微博
发表于 2014-5-15 17:25:33 | 显示全部楼层
几何类怎么会有open呢?
应该考虑用AcDbLine而不是AcGeLineSeg2d试试
 楼主| 发表于 2014-5-15 17:32:09 | 显示全部楼层
wowolwj 发表于 2014-5-15 17:25
几何类怎么会有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里面的值,都没有效果,请问是什么?
发表于 2014-5-19 13:49:13 | 显示全部楼层
多试试
前面加上4个空格试试
    -2 (Byblock)
    40 (0.40)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 07:44 , Processed in 0.166751 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表