找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 743|回复: 0

[ARX程序]:polysamp程序中moveGripPointsAt()的疑惑?

[复制链接]
发表于 2005-8-25 16:18:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
D:\objectarx2002\samples\polysamp\poly.cpp中源码如下:

Acad::ErrorStatus
AsdkPoly::moveGripPointsAt(
    const AcDbIntArray& indices,
    const AcGeVector3d& offset)
{
    if (indices.length()== 0 || offset.isZeroLength())
        return Acad::eOk; //that's easy :-)

    if (mDragDataFlags & kCloneMeForDraggingCalled) {
        mDragDataFlags |= kUseDragCache;
        // we need to make sure that all the poly's drag data members
        // are in sync with the true data members
        //
        //mDragCenter = mCenter;
        //mDragStartPoint = mStartPoint;
    } else
        // Only if we're not dragging do we want to make an undo
        // recording and check if the object's open for write.
        //
        assertWriteEnabled();

    //if there more than one hot vertex or there's one and it is the center
    //then simply transform
    if (indices.length()>1 || indices[0] == mNumSides)
        return transformBy(AcGeMatrix3d::translation(offset));
        
    AcGeVector3d off(offset);
    //calculate the offset vector of the startpoint
        //from the offset vector on a vertex
    double rotateBy = 2.0 * 3.14159265358979323846 / mNumSides * indices[0];
    AcGePoint3d cent;
    getCenter(cent);
    off.transformBy(AcGeMatrix3d::rotation(-rotateBy,normal(),cent));
     acdbWcs2Ecs(asDblArray(off),asDblArray(off),asDblArray(normal()),Adesk::kTrue);
    if (mDragDataFlags & kUseDragCache){
        mDragCenter = mCenter;
        mDragPlaneNormal = mPlaneNormal;
        mDragStartPoint = mStartPoint + AcGeVector2d(off.x,off.y);
        mDragElevation = mElevation + off.z;
    }else{
        mStartPoint = mStartPoint + AcGeVector2d(off.x,off.y);
        mElevation = mElevation + off.z;
    }
    return Acad::eOk;
}


请问程序中后面的代码实现什么功能?
    double rotateBy = 2.0 * 3.14159265358979323846 / mNumSides * indices[0];
    AcGePoint3d cent;
    getCenter(cent);
    off.transformBy(AcGeMatrix3d::rotation(-rotateBy,normal(),cent));
     acdbWcs2Ecs(asDblArray(off),asDblArray(off),asDblArray(normal()),Adesk::kTrue);
    if (mDragDataFlags & kUseDragCache){
        mDragCenter = mCenter;
        mDragPlaneNormal = mPlaneNormal;
        mDragStartPoint = mStartPoint + AcGeVector2d(off.x,off.y);
        mDragElevation = mElevation + off.z;
    }else{
        mStartPoint = mStartPoint + AcGeVector2d(off.x,off.y);
        mElevation = mElevation + off.z;
    }
    return Acad::eOk;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-22 20:21 , Processed in 0.375964 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表