美文网首页
CATIA-V5-干涉检查

CATIA-V5-干涉检查

作者: 游在路上的鱼 | 来源:发表于2019-03-06 20:23 被阅读0次

干涉检查接口Framework及头文件:

// SpaceAnalysisInterfaces Framework

#include "CATIClash.h"

#include "CATIClashFactory.h"

#include "CATIClashResult.h"

#include "CATIConflict.h"

mk文件中追加:CATSaiSpaceAnalysisItf

/************************************************************************/

/* 干涉检查                                                      */

/************************************************************************/

// SavePart零件包含干涉检查实体,使用AgainstAll模式与其他零件执行干涉检查

_listBUnkOnClashPart.RemoveAll();

_listBUnkOnClashPart.Append(_spProductOnSave);

// 通过CATDocument指针,获取CATIClashFactory

CATIClashFactory* pClashFactory = NULL;

hr = pDocumentOnAssy->QueryInterface(IID_CATIClashFactory,(void**)&pClashFactory);

if (pClashFactory != NULL)

{

    // 创建干涉检查特征

    CATIClash* pClashOnWeldAround;

    pClashFactory->Create(pClashOnWeldAround);

    // 指定干涉检查的场景:干涉、接触或间隙等

    pClashOnWeldAround->SetComputationCase(CATComputationCaseClashContact);

    // 指定干涉检查的模式:指定零件与其他所有零件检查干涉情况

    pClashOnWeldAround->SetGroupMode(CATGroupModeAgainstAll);

    // 指定干涉检查的零件分组1

    pClashOnWeldAround->SetGroup(1, _listBUnkOnClashPart);

    // 指定干涉检查的零件分组2(干涉模式为CATGroupModeBetweenTwo,使用零件分组2)

    //pClashOnWeldAround->SetGroup(2, _listBUnkOnAllPart);

    // 指定干涉检查的零件分组

    //pClashOnWeldAround->SetClearance(1.0);

    // 执行干涉检查

    pClashOnWeldAround->Compute();

    // 获取干涉检查结果的指针

    CATIClashResult* pClashResult = NULL;

    hr = pClashOnWeldAround->GetResult(pClashResult);

// 获取干涉检查结果

    int nbConflict = 0;

    pClashResult->CountConflicts(nbConflict);

    for (int nIdxConflict = 0; nIdxConflict < nbConflict; nIdxConflict++)

    {

        // 获取干涉冲突

        CATIConflict* pConflict = NULL;

        pClashResult->GetConflict(nIdxConflict, pConflict);

        // 获取干涉冲突的类型

        CATResultType resultType = CATTypeClash;

        pConflict->GetResultType(resultType);

        if (resultType != CATTypeClash)

        {

            pConflict->Release();

            pConflict = NULL;

            continue;

        }

        // 获取干涉冲突的干涉值

        double dClashValue = 0.0;

        pConflict->GetValue(dClashValue);

        if (dClashValue < 0.0)

        {

            cout << "Clash Value : " << dClashValue << endl;

            // 获取干涉冲突的干涉点

            double* pPointCOG = NULL;

            double* pSecondPoint = NULL;

            hr = pConflict->GetMinOrExtractionVectorCoordinates(pPointCOG, pSecondPoint);

            // 获取干涉冲突的两个零件

            CATIProduct* spiProduct1 = NULL;

            CATUnicodeString ustrShapeName1;

            hr = pConflict->GetFirstProduct(spiProduct1, ustrShapeName1);

            CATIProduct* spiProduct2 = NULL;

            CATUnicodeString ustrShapeName2;

            hr = pConflict->GetSecondProduct(spiProduct2, ustrShapeName2);

        }

        pConflict->Release();

        pConflict = NULL;

    }

       pClashResult->Release();

        pClashResult = NULL;

        pClashOnWeldAround->Release();

        pClashOnWeldAround = NULL;

    }

    pClashFactory->Release();

    pClashFactory = NULL;

完成干涉检查之后,获取两个要素之间的干涉点:

int iNumberOfConflicts = 0;

hr = spiClashResult->CountConflicts (iNumberOfConflicts);

if (FAILED(hr))

{

        return FALSE;

}

double dMaxCalshValue = 0.0;

if (iNumberOfConflicts != 0)

{

        double dClashValue = 0.0;

        double* dFirstPoint = new double[3];

        double* dSecondPoint = new double[3];

        for (int iLoop = 0; iLoop < iNumberOfConflicts;iLoop++)

        {

            CATIConflict* pConflict = NULL;

            hr = spiClashResult->GetConflict (iLoop, pConflict);

            if (!(FAILED(hr) || NULL == pConflict))

            {

                dClashValue = 0.0;

                // 计算干涉值

                pConflict->GetValue (dClashValue);

                // 获取干涉点

                pConflict->GetMinOrExtractionVectorCoordinates ( dFirstPoint, dSecondPoint);

                if (fabs(dClashValue) > dMaxCalshValue)

                {

                    dMaxCalshValue = dClashValue;

                    mathWrkPoint1 = CATMathPoint(dFirstPoint[0],dFirstPoint[1],dFirstPoint[2]);

                    mathWrkPoint2 = CATMathPoint(dSecondPoint[0],dSecondPoint[1],dSecondPoint[2]);

                }

    }

     pConflict->Release();

     pConflict = NULL;

    }

    if (dFirstPoint != NULL){delete[] dFirstPoint; dFirstPoint = NULL;}

    if (dSecondPoint != NULL){delete[] dSecondPoint; dSecondPoint = NULL;}

}

当干涉发生在两个装配要素之间,计算出的干涉点的坐标是以各个装配要素的坐标系为主坐标系。

相关文章

  • CATIA-V5-干涉检查

    干涉检查接口Framework及头文件: // SpaceAnalysisInterfaces Framework...

  • RhinoCommon:Clash detection

    干涉检查

  • CATIA VBA 干涉检查

    原文链接以下代码使用Clash及Group检查干涉情况: 原文链接 Clash Detection In CATI...

  • 积极倾听

    用不干涉的方式来表达接纳。父母不干涉孩子的活动,就表达了父母对孩子接纳的信息。 父母经常通过干涉,打扰,接手,检查...

  • proe看图大法(二):究竟有没有碰到

    3D评审时,很重要的一点,就是检查零件之间是否有干涉,而proe内置的干涉检查功能,可以很方便地帮助用户进行零件配...

  • 干涉

    如果我们给孩子自由,不去干涉他们,他们就会专心致志地投入工作。遗憾的是,我们经常忍不住去打断孩子,进而自以为是地提...

  • 干涉

    我非常讨厌被人干涉。在我按照自己的时间表行走的时候,我讨厌有人干涉我的行动。这种感觉比厌恶更甚,是一种接近恶心的极...

  • 干涉

    好像都错了。 似乎作为一个学生,就应该埋头苦读学业有成;似乎作为一个男人,就应该好好工作赚钱买房买车;似乎作为一个...

  • 干涉

    最讨厌的一种人,就是自己不想做的事情,当别人想去的时候,她横加干涉,并且一个劲的说,一个劲的说,直到你放弃为止。 ...

  • 干涉

    这是我的生活不是你的,这是我的人生不是你的,这是我的世界不是你的,你可以给我意见,但是不可以强制干涉,因为一...

网友评论

      本文标题:CATIA-V5-干涉检查

      本文链接:https://www.haomeiwen.com/subject/rstfpqtx.html