当前位置: 首页>>代码示例>>C++>>正文


C++ AcGeVector3d::isZeroLength方法代码示例

本文整理汇总了C++中AcGeVector3d::isZeroLength方法的典型用法代码示例。如果您正苦于以下问题:C++ AcGeVector3d::isZeroLength方法的具体用法?C++ AcGeVector3d::isZeroLength怎么用?C++ AcGeVector3d::isZeroLength使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在AcGeVector3d的用法示例。


在下文中一共展示了AcGeVector3d::isZeroLength方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: ASSERT

Acad::ErrorStatus
ArxDbgDbEntity::setNormal(const AcGeVector3d& nvec)
{
    if (nvec.isZeroLength()) {
        ASSERT(0);
        return Acad::eInvalidInput;
    }

    if (nvec != m_zDir) {
        assertWriteEnabled();

        AcGeVector3d txdir, tydir;
        AcGeVector3d txdiro, tydiro;

        ArxDbgUtils::getEcsXAxis(nvec, txdir);       // get AutoCAD's arbitrary X-Axis for this normal
        ArxDbgUtils::getEcsXAxis(m_zDir, txdiro);    // get AutoCAD's arbitrary X-Axis for this normal

        tydir = nvec.crossProduct(txdir);
        tydir.normalize();

        tydiro = m_zDir.crossProduct(txdiro);
        tydiro.normalize();

        AcGeMatrix3d mat;
        mat.setToAlignCoordSys(m_origin, txdiro, tydiro, m_zDir,
                               m_origin, txdir,  tydir,  nvec);

        m_xDir.transformBy(mat);
        m_zDir.transformBy(mat);
        m_origin.transformBy(mat);
    }

    return Acad::eOk;
}
开发者ID:kevinzhwl,项目名称:ObjectARXMod,代码行数:34,代码来源:ArxDbgDbEntity.cpp

示例2: CalActParameter

/*!
* 根据已经输入到类中的参数,修正终点和偏心方向,使其值正确。
*
* @param none
*
* @return Acad::ErrorStatus  : 永远为Acad::eOk
*/
Acad::ErrorStatus PDEcone::CalActParameter()
{
    assertWriteEnabled();
    AcGeVector3d centerVect = (m_ptEnd - m_ptStart).normalize();
    if(centerVect.isZeroLength() && m_vect.isZeroLength())
    {
        m_ptEnd = m_ptStart + AcGeVector3d(0, 0, 1);
        m_vect.set(1, 0, 0);
    }
    else if(centerVect.isZeroLength())
    {
        AcGeVector3d Wy(0, 1, 0), Wz(0, 0, 1), Ax;// Ay;
        if (fabs(m_vect[X]) <1.0/64 && fabs(m_vect[Y])<1.0/64) 
            Ax = Wy.crossProduct(m_vect);
        else
            Ax = Wz.crossProduct(m_vect);
        Ax.normalize();
        //Ay = vect.crossProduct(Ax);
        //Ay.normalize();

        m_ptEnd = m_ptStart + Ax;
    }
    else if(m_vect.isZeroLength() || m_vect.isParallelTo(centerVect))
    {
        AcGeVector3d Wy(0, 1, 0), Wz(0, 0, 1), Ax;// Ay;
        if (fabs(centerVect[X]) <1.0/64 && fabs(centerVect[Y])<1.0/64) 
            Ax = Wy.crossProduct(centerVect);
        else
            Ax = Wz.crossProduct(centerVect);
        Ax.normalize();
        //Ay = vect.crossProduct(Ax);
        //Ay.normalize();

        m_vect = Ax;
    }
    return Acad::eOk;
}
开发者ID:wangfeilong321,项目名称:PDMS_ExportModel,代码行数:44,代码来源:PDEcone.cpp

示例3: setLocation

Acad::ErrorStatus
ArxDbgDbEntity::moveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset)
{
    if (offset.isZeroLength() == Adesk::kTrue)
        return Acad::eInvalidOffset;

    if (indices.length() == 1) {
        if (indices[0] == 0) {
            setLocation(m_origin + offset);
            return Acad::eOk;
        }
    }

    return Acad::eOk;
}
开发者ID:kevinzhwl,项目名称:ObjectARXMod,代码行数:15,代码来源:ArxDbgDbEntity.cpp

示例4: EdgeJunctionClosureImpl

// 至少需要2个元素才能正确的闭合
static void EdgeJunctionClosureImpl( const AcGePoint3d& junctionPt, EdgeInfo& ges )
{
    //acutPrintf(_T("\n队列中的元素个数:%d"), ges.size());
    if( ges.size() == 1 )
    {
        ges.push_back( ges.front() );
    }

    // 把第1个添加到末尾,构成循环
    ges.push_back( ges.front() );

    // 记录每次处理闭合的当前向量
    AcGeVector3d v3 = ges.front().angle;
    v3.rotateBy( PI / 2, AcGeVector3d::kZAxis );

    AcTransaction* pTrans = actrTransactionManager->startTransaction();
    if( pTrans == 0 ) return;

    for( EdgeInfoIter itr = ges.begin(); itr != ges.end(); itr++ )
    {
        EdgeInfoIter itr2 = itr + 1;
        if( itr2 == ges.end() ) break;

        //acutPrintf(_T("\n巷道1角度:%.3f, 巷道2角度:%.3f"),
        //	itr->angle.angleTo(AcGeVector3d::kXAxis, -AcGeVector3d::kZAxis),
        //	itr2->angle.angleTo(AcGeVector3d::kXAxis, -AcGeVector3d::kZAxis));

        AcGeVector3d cv = itr->angle.crossProduct( itr2->angle ); // 叉乘(如果夹角等=0或PI,则向量=0)
        //if(cv.length() > 0.001)
        if( !cv.isZeroLength() )
        {
            //acutPrintf(_T("\n叉乘长度=%.3f"), cv.length());
            //v3 = CaclAverageVector3(itr->angle, itr2->angle);
            v3 = CaclAverageVector2( itr->angle, 1, itr2->angle, 1 );
        }
        else
        {
            // 平行(夹角=0或PI)
            //acutPrintf(_T("\n叉乘=0"));
            v3.negate();
        }

        DealWithBoundary2( pTrans, *itr, junctionPt, v3 );
        DealWithBoundary2( pTrans, *itr2, junctionPt, v3 );
    }
    actrTransactionManager->endTransaction();
}
开发者ID:kanbang,项目名称:TIDS,代码行数:48,代码来源:EdgeJunctionClosure.cpp


注:本文中的AcGeVector3d::isZeroLength方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。