1 自定义一个类继承 AcEdJig
2 定义如下成员函数
AsdkEllipseJig(const AcGePoint3d&, const AcGeVector3d&);
void doIt(); // 启动拖拽 调用drag()
virtual DragStatus sampler(); // 被drag()调用
virtual Adesk::Boolean update(); // 被sampler()调用
virtual AcDbEntity* entity() const; // 返回被拖拽的实体指针
3 sampler函数实现
AcEdJig::DragStatus CDrawJig::sampler()
{ // 在用户拖动过程中 收集用户输入信息 并更新到成员变量
// 用户输入控制
setUserInputControls((UserInputControls)(AcEdJig::kAccept3dCoordinates |
AcEdJig::kNoNegativeResponseAccepted |
AcEdJig::kNullResponseAccepted));
// 采集移动的点坐标 判断鼠标是否没有移动
static AcGePoint3d pointtemp;
// acedGetPoint函数除了可以在屏幕上鼠标点击获取点坐标之外 还可以在命令行输入距离来计算得到点坐标
DragStatus dragstatus = acquirePoint(m_pointend,m_pointstart);
if ((pointtemp != m_pointend))
{
pointtemp = m_pointend;
}
else if (dragstatus == AcEdJig::kNormal)
{
return AcEdJig::kNoChange;
} return dragstatus;
}
4 update函数实现
Adesk::Boolean CDrawJig::update()
{ //更新实体
m_pPolyLine->setPointAt(1, m_pointend.convert2d(AcGePlane()));
return Adesk::kTrue;
}
5 entity函数实现
AcDbEntity * CDrawJig::entity() const
{ // 返回发生变化的实体
return m_pPolyLine;
}
6 测试函数
void
createLine() {
AcGePoint3d tempPt; struct resbuf rbFrom, rbTo;
acedGetPoint(NULL, _T("\n输入第一点: "), asDblArray(tempPt));
rbFrom.restype = RTSHORT;
rbFrom.resval.rint = 1; // from UCS
rbTo.restype = RTSHORT;
rbTo.resval.rint = 0; // to WCS
acedTrans(asDblArray(tempPt), &rbFrom, &rbTo,
Adesk::kFalse, asDblArray(tempPt));
CDrawJig* jig = new CDrawJig(tempPt);
jig->doIt();
delete jig;
}
注意:sampler函数 update函数 不是用户自己调用