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);

  • 相关阅读:
    jQuery火箭图标返回顶部代码
    类库引用EF
    Html.DropDownList
    MVC validation
    MVC @functions
    MVC 扩展方法特点
    Class 实现IDisposing方法
    MVC两个必懂核心
    Asp.net 服务器Application,Session,Cookie,ViewState和Cache区别
    sqlserver log
  • 原文地址:https://www.cnblogs.com/xzh1993/p/7242982.html
Copyright © 2011-2022 走看看