第七根弦 发表于 2012-4-10 11:12:33

哪位高手帮我看下程序啊

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 时发生访问冲突
错误

第七根弦 发表于 2012-4-10 11:13:38

我把acutPrintf(_T("%10.2f\n"),area);删了就没有错了

hgf876 发表于 2012-4-10 19:36:02

       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:12

多谢多谢,已经搞定了

hgf876 发表于 2012-4-10 19:56:26

第七根弦 发表于 2012-4-10 19:39 static/image/common/back.gif
多谢多谢,已经搞定了

具体什么原因?

第七根弦 发表于 2012-4-10 20:07:49

hgf876 发表于 2012-4-10 19:56 static/image/common/back.gif
具体什么原因?

线的类型不对,再问一个问题啊,一个封闭的图形怎么计算面积的,getarea()函数得到的值怎么为0啊

第七根弦 发表于 2012-4-10 20:08:48

第七根弦 发表于 2012-4-10 20:07 static/image/common/back.gif
线的类型不对,再问一个问题啊,一个封闭的图形怎么计算面积的,getarea()函数得到的值怎么为0啊

我把线的类型改成acdbline了

第七根弦 发表于 2012-4-10 20:09:25

就一般的封闭线段怎么求面积。要转化成什么吗
页: [1]
查看完整版本: 哪位高手帮我看下程序啊