zoukankan      html  css  js  c++  java
  • 散线转化成多段线

    std::vector<entStruct> vecInfo;
    AcDbObjectIdArray idarr=CDwgDatabaseUtil::GetAllEntityIds();
    int iLen = idarr.length();
    for (int i = 0; i < iLen;i++)
    {
    entStruct eTemp;
    AcDbObjectId idTemp = idarr[i];
    AcDbEntity *pEnt = NULL;
    Acad::ErrorStatus es;
    es = acdbOpenAcDbEntity(pEnt, idTemp, AcDb::kForWrite);
    if (es!=eOk)
    {
    continue;
    }
    if (pEnt->isKindOf(AcDbLine::desc()))
    {
    AcDbLine *pLine = static_cast<AcDbLine*>(pEnt);
    eTemp.id = idTemp;
    eTemp.rx = AcDbLine::desc();
    eTemp.ptStr = pLine->startPoint();
    eTemp.ptEnd = pLine->endPoint();
    eTemp.dBulge = 0;
    vecInfo.push_back(eTemp);
    pEnt->close();
    }
    else if (pEnt->isKindOf(AcDbArc::desc()))
    {
    AcDbArc *pArc = static_cast<AcDbArc*>(pEnt);
    eTemp.id = idTemp;
    eTemp.rx = AcDbArc::desc();
    AcGePoint3d pts, pte;
    pArc->getStartPoint(pts);
    pArc->getEndPoint(pte);
    eTemp.ptStr = pts;
    eTemp.ptEnd = pte;
    double dStart = pArc->startAngle();
    double dEnd = pArc->endAngle();
    double dAlfa = dEnd - dStart;
    if (dAlfa<0)
    {
    dAlfa += CMathUtil::PI()*2;
    }
    double dBu = tan((dAlfa) / 4.0);
    eTemp.dBulge = dBu;
    vecInfo.push_back(eTemp);
    pEnt->close();
    }
    else
    {
    pEnt->close();
    }
    }

    size_t iS = vecInfo.size();
    entStruct entTemp = vecInfo[0];
    AcGePoint3d pPolyStr=entTemp.ptEnd;
    AcGePoint3d pPolyEnt = entTemp.ptStr;
    AcDbObjectId idTemp = entTemp.id;

    AcDbPolyline *pPoly = new AcDbPolyline;
    pPoly->addVertexAt(0, CConvertUtil::ToPoint2d(pPolyStr));
    int iMark = 1;
    for (int j = 0; j < iS;j++)
    {
    for (int i = 0; i < iS; i++)
    {
    entStruct eT = vecInfo[i];
    if (idTemp==eT.id)
    {
    continue;
    }
    if (eT.ptStr == pPolyStr)
    {
    if (eT.rx == AcDbLine::desc())
    {
    pPoly->addVertexAt(iMark, CConvertUtil::ToPoint2d(eT.ptEnd));
    pPolyStr = eT.ptEnd;
    iMark++;
    idTemp = eT.id;
    break;
    }
    if (eT.rx==AcDbArc::desc())
    {
    pPoly->setBulgeAt(iMark - 1,eT.dBulge);
    pPoly->addVertexAt(iMark, CConvertUtil::ToPoint2d(eT.ptEnd));
    pPolyStr = eT.ptEnd;
    iMark++;
    idTemp = eT.id;
    break;
    }
    }
    else if (eT.ptEnd == pPolyStr)
    {
    if (eT.rx == AcDbLine::desc())
    {
    pPoly->addVertexAt(iMark, CConvertUtil::ToPoint2d(eT.ptStr));
    pPolyStr = eT.ptStr;
    iMark++;
    idTemp = eT.id;
    break;
    }
    if (eT.rx == AcDbArc::desc())
    {
    pPoly->setBulgeAt(iMark - 1, eT.dBulge);
    pPoly->addVertexAt(iMark, CConvertUtil::ToPoint2d(eT.ptEnd));
    pPolyStr = eT.ptStr;
    iMark++;
    idTemp = eT.id;
    break;
    }
    }
    else
    {
    continue;
    }
    }
    }
    if (entTemp.rx==AcDbArc::desc())
    {
    pPoly->setBulgeAt(iMark-1, entTemp.dBulge);
    }

    CDwgDatabaseUtil::PostToModelSpace(pPoly);

  • 相关阅读:
    当有触发器时,涉及触发器的列名不能再随便更改了,因为改变列名时并没有改变触发器,而使触发器不会发生作用
    PHP实现上次登录功能
    TRUNCATE 不能引发触发器
    unslider点导航不显示错误
    jquery插件中使用ajax并且获取使用插件的对象
    jquery插件函数传参错误
    jquery插件获取事件类型
    线程安全的 stack
    不要在锁的作用域之外通过指针或引用传递要保护的数据
    通过打包 accumulate 实现多线程版本的 accumulate
  • 原文地址:https://www.cnblogs.com/xzh1993/p/7242982.html
Copyright © 2011-2022 走看看