syhdesign 发表于 2022-7-6 21:43:59

请帮助错误:额外权限

大家好,
 
我真的需要口齿不清,但不知道如何修复该脚本!谁能告诉我剧本中的问题在哪里?我甚至找不到命令名
 
谢谢并致以最良好的问候
 
原始脚本点:https://adndevblog.typepad.com/autocad/2014/03/extracting-isolines-from-surface.html
 

// 1) Enable support for the BRep API in StdAfx.h

#define _BREP_SUPPORT_            //- Support for the BRep API



// 2) Code to retrieve the IsoLines from a surface

Acad::ErrorStatus es;



ads_point pt;

ads_name ename;

if (RTNORM != acedEntSel(L"Select a Surface", ename, pt))

    return;



AcDbEntity *pEnt = NULL;

AcDbObjectId id;

es = acdbGetObjectId(id, ename);

es = acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite);

AcDbSurface *pSurface = AcDbSurface::cast(pEnt);

if(NULL == pSurface)

{

    acutPrintf(ACRX_T("\nPlease select a surface."));

    return;

}



AcDbNurbSurfaceArray nsArray;

es = pSurface->convertToNurbSurface(nsArray);

if(es == Acad::eOk)

{

    if(nsArray.length() == 1)

    {

        AcDbDatabase *pDb

            = acdbHostApplicationServices()->workingDatabase();



        AcDbBlockTable *pBlockTable = NULL;

        es = pDb->getBlockTable(pBlockTable, AcDb::kForRead);



        AcDbBlockTableRecord *pMS = NULL;

        es = pBlockTable->getAt(

                       ACDB_MODEL_SPACE, pMS, AcDb::kForWrite);



        AcDbNurbSurface *pNS = NULL;

        pNS = AcDbNurbSurface::cast(nsArray.at(0));



        Adesk::UInt16 uIsoDensity = pSurface->uIsolineDensity();

        Adesk::UInt16 vIsoDensity = pSurface->vIsolineDensity();



        AcDbBody* pBody = new AcDbBody();



        es = pBody->setASMBody(pSurface->getLockedASMBody());



        AcBr::ErrorStatus ebs;

        AcBrBrep* pBrep = new AcBrBrep();

        ebs = pBrep->set(*pBody);

        if(AcBr::eOk == ebs)

        {

            AcBrBrepFaceTraverser* pFaceTrav

                                = new AcBrBrepFaceTraverser;

            ebs = pFaceTrav->setBrep(*pBrep);

            if(AcBr::eOk == ebs)

            {

                for(pFaceTrav->restart();

                        !pFaceTrav->done();pFaceTrav->next())

                {

                    AcBrFace face;

                    ebs = pFaceTrav->getFace(face);

                    if(AcBr::eOk == ebs)

                    {

                        AcGeSurface *pGeSurface;

                        ebs = face.getSurface(pGeSurface);



                        Adesk::Boolean isClosedInU

                                  = pGeSurface->isClosedInU();



                        Adesk::Boolean isClosedInV

                                  = pGeSurface->isClosedInV();



                        int ucMax = uIsoDensity+2;

                        if(isClosedInU)

                            ucMax = uIsoDensity;



                        int vcMax = vIsoDensity+2;

                        if(isClosedInV)

                            vcMax = vIsoDensity;



                        AcGeInterval intervalU, intervalV;

                        pGeSurface->getEnvelope

                                       (intervalU, intervalV);



                        double boundMinU = 0.0,

                               boundMaxU = 0.0,

                               boundMinV = 0.0,

                               boundMaxV = 0.0;



                        intervalU.getBounds

                                       (boundMinU, boundMaxU);



                        intervalV.getBounds

                                       (boundMinV, boundMaxV);



                        double paramIncrU =

                        (boundMaxU - boundMinU) /

                        (isClosedInU ? uIsoDensity :

                                       (uIsoDensity+1));



                        double paramIncrV =

                        (boundMaxV - boundMinV) /

                        (isClosedInV ? vIsoDensity :

                                       (vIsoDensity+1));



                        double paramU = boundMinU;

                        for(int uc = 0; uc < ucMax; uc++)

                        {

                            double paramV = boundMinV;

                            for(int vc = 0; vc < vcMax; vc++)

                            {

                                AcArray<AcDbCurve*> uIsoLines;

                                es = pNS->getIsolineAtU(

                                           paramU, uIsoLines);



                                if(es == Acad::eOk)

                                {

                                    for(int cnt = 0;

                                        cnt < uIsoLines.length();

                                        cnt++)

                                    {

                                        AcDbCurve *pCurve

                                            = uIsoLines;



                                        pCurve->setColorIndex(1);



                                        pMS->appendAcDbEntity

                                                     (pCurve);



                                        pCurve->close();

                                    }

                                }



                                AcArray<AcDbCurve*> vIsoLines;

                                es = pNS->getIsolineAtV(

                                           paramV, vIsoLines);



                                if(es == Acad::eOk)

                                {

                                    for(int cnt = 0;

                                        cnt < vIsoLines.length();

                                        cnt++)

                                    {

                                        AcDbCurve *pCurve

                                             = vIsoLines;



                                        pCurve->setColorIndex(1);



                                        pMS->appendAcDbEntity

                                                     (pCurve);



                                        pCurve->close();

                                    }

                                }



                                paramV += paramIncrV;

                            }

                            paramU += paramIncrU;

                        }

                    }

                    else

                    {

                        acutPrintf(

                              ACRX_T("\nSorry, BRep error."));



                        break;

                    }

                }

            }

            else

            {

                acutPrintf(ACRX_T("\nSorry, BRep error."));

            }



            delete pFaceTrav;

        }

        else

        {

            acutPrintf(ACRX_T("\nSorry, BRep error."));

        }



        delete pBrep;



        es = pMS->close();

        es = pBlockTable->close();

    }

    else

    {

        acutPrintf(ACRX_T("\nSorry, this code cannot handle

                               multiple Nurb surfaces yet."));

    }



    // Cleanup

    for(int cnt = 0; cnt < nsArray.length(); cnt++)

    {

        AcDbNurbSurface *pNS = NULL;

        pNS = AcDbNurbSurface::cast(nsArray.at(cnt));

        if(pNS != NULL)

        {

            delete pNS;

        }

    }

}

else

{

    acutPrintf(

        ACRX_T("\nSorry, could not convert to Nurb surface."));

}



pSurface->close();[颜色=#000000]
页: [1]
查看完整版本: 请帮助错误:额外权限