本文整理汇总了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;
}
示例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;
}
示例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;
}
示例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();
}