1. 程式人生 > >arcengine 圖層中節點抽稀功能(c++)

arcengine 圖層中節點抽稀功能(c++)

while (bdtbEnt.valid())     {         dan::Vector<dan::Vector<dan::Point3DF> > bdtbCircleNode = bdtbEnt->getNodes();  //獲得BDTB圖層的環節點         QNodesArray bdtbNodesArray = SDFUN::nodes3dTonodesArray(bdtbCircleNode); //轉成QVector         dan::Vector<int> deleteEnt;         bool isok;         for (int t = 0; t != bdtbNodesArray.size(); ++t)         {             for (int i = 0; i != bdtbNodesArray[t].size(); ++i)             {                dan::Object<iDataPlugin::IPGEntityCursor>  xzqEntCursor = ipDatabase->iDataSSGetPath(xzqLayer, bdtbEnt->getNodes(), iDataPlugin::IPGDataBase::IntersectsItemShape); //得到相接的xzqEntCursor                dan::Object<iDataPlugin::IPGEntity> xzqEnt = xzqEntCursor->next();                int ttk = 0;                isok = true;                while (xzqEnt.valid())                {                     ttk++;                     if (ttk == 1)                     {                         isok = false;                     }                     test = 2;                     dan::Vector<dan::Vector<dan::Point3DF> > xzqCircleNode = xzqEnt->getNodes(); //獲得BDTB圖層的環節點;                      QNodesArray xzqNodesArray = SDFUN::nodes3dTonodesArray(xzqCircleNode); //轉成QList                     for (int m = 0; m != xzqNodesArray.size(); ++m)                     {                         QPointF ptclose;                         int nidx;                         double dparam;                         double distanceShort = SquarePtDistPoly(bdtbNodesArray[t][i], xzqNodesArray[m], ptclose, nidx, dparam);  //得到點到面的最短距離                         if (distanceShort < 1e-3)  //如果距離最近則說明該點位於相交線上;而後進行判斷是否為同一點:                         {                             for (QPointF var : xzqNodesArray[m])                             {                                 double dist_tmp = square2dDist(bdtbNodesArray[t][i], var);                                 if (dist_tmp < 1e-3)//只要有一個點的距離很小,就認為是同一點                                 {                                     isok = true;                                     break;                                 }                             }                         }                     }                     xzqEnt = xzqEntCursor->next();                }                if (!isok)                {                    //需要再判斷是否在其他圖層當中--.--                    bdtbNodesArray[t].removeAt(i);                    i--;                    test = 0;                }             }         }         if (test == 0)         {             bdtbEnt->setNodes(SDFUN::nodes3dTonodesArray(bdtbNodesArray));             modifyEntList.append(bdtbEnt);         }         if (modifyEntList.size() > 5000)         {             ipDatabase->modifyEntityFromDatabase(bdtbLayer, modifyEntList);  //刪除節點後修改             modifyEntList.clear();         }         bdtbEnt = bdtbEntCursor->next();     }     progressbar->closeProgress();     if (modifyEntList.size() > 0)     {         ipDatabase->modifyEntityFromDatabase(bdtbLayer, modifyEntList);  //修改實體到圖層         QMessageBox::warning(NULL, QString::fromLocal8Bit("節點去除"), QString::fromLocal8Bit("多餘節點去除完成"));     }     adapter->refresh();