|
AcEdJig 拖拽类使用的一点心得
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;
- }
复制代码
- Adesk::Boolean CDrawJig::update()
- { //更新实体
- m_pPolyLine->setPointAt(1, m_pointend.convert2d(AcGePlane()));
- return Adesk::kTrue;
- }
复制代码- AcDbEntity * CDrawJig::entity() const
- { // 返回发生变化的实体
- return m_pPolyLine;
- }
复制代码
- 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函数 不是用户自己调用 |
|