哪位高手帮我看下程序啊
static void XiangMu_lvdi(void){
double area;
/*double allarea=500;*/
// Add your code for command XiangMu._lvdi here
AcDbLayerTable *pLayerTbl;
acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTbl,AcDb::kForRead);
if(!pLayerTbl->has(_T("绿地")))
{
acutPrintf(_T("当前图形不包含该图层"));
pLayerTbl->close();
return;
}
AcDbObjectId layerId;
pLayerTbl->getAt(_T("绿地"),layerId);
pLayerTbl->close();
AcDbBlockTable *pBlkTbl;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForRead);
AcDbBlockTableRecord *pBlkTblRcd;
pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,AcDb::kForRead);
pBlkTbl->close();
AcDbBlockTableRecordIterator *pltr;
pBlkTblRcd->newIterator(pltr);
AcDbEntity *pEnt;
for(pltr->start();!pltr->done();pltr->step())
{
pltr->getEntity(pEnt,AcDb::kForWrite);
if(pEnt->layerId()==layerId)
{
AcDb2dPolyline *pPolyLine=AcDb2dPolyline::cast(pEnt);
pPolyLine->getArea(area);
}
pEnt->close();
}
/*lvdilv=area/allarea;*/
acutPrintf(_T("%10.2f\n"),area);
delete pltr;
pBlkTblRcd->close();
}
} ;
执行命令之后出现acad.exe 中的 0x1001231e (XiangMu.arx) 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
错误
我把acutPrintf(_T("%10.2f\n"),area);删了就没有错了 AcDbEntity *pEnt;
for(pltr->start();!pltr->done();pltr->step())
{
pltr->getEntity(pEnt,AcDb::kForWrite);
if(pEnt->layerId()==layerId)
{
AcDb2dPolyline *pPolyLine=AcDb2dPolyline::cast(pEnt);
pPolyLine->getArea(area);
}
pEnt->close();
}
/*lvdilv=area/allarea;*/
acutPrintf(_T("%10.2f\n"),area);上面这段有些地方不理解:
(1)pltr->getEntity(pEnt,AcDb::kForWrite);,kForWrite没有必要,改为kForRead好
(2)图层“绿地”上的物件都是这个AcDb2dPolyline类型吗,如果不是应该会出错。
(3)pPolyLine->getArea(area);这个取面积很多次,但好像只用到最后一次的面积
多谢多谢,已经搞定了 第七根弦 发表于 2012-4-10 19:39 static/image/common/back.gif
多谢多谢,已经搞定了
具体什么原因? hgf876 发表于 2012-4-10 19:56 static/image/common/back.gif
具体什么原因?
线的类型不对,再问一个问题啊,一个封闭的图形怎么计算面积的,getarea()函数得到的值怎么为0啊 第七根弦 发表于 2012-4-10 20:07 static/image/common/back.gif
线的类型不对,再问一个问题啊,一个封闭的图形怎么计算面积的,getarea()函数得到的值怎么为0啊
我把线的类型改成acdbline了
就一般的封闭线段怎么求面积。要转化成什么吗
页:
[1]