- UID
- 281852
- 积分
- 62
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-6-22
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
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; |
|