|
- DrawRecJig::DrawRecJig()
- {
- pl = NULL;
- }
-
-
- DrawRecJig::~DrawRecJig()
- {
- }
- //在拖动操作期间获取用户输入的点,并基于这个点以及拖动操作的状态来决定下一步的操作
- AcEdJig::DragStatus DrawRecJig::sampler()
- {
- setUserInputControls((AcEdJig::UserInputControls)(
- //这行代码设置了这个插件接受的用户输入控制。它接受三维坐标、不接受负响应以及接受空响应。
- AcEdJig::kAccept3dCoordinates |//接受z坐标
- AcEdJig::kNoNegativeResponseAccepted |//不接受负值
- AcEdJig::kNullResponseAccepted//空输入可接受
- ));
- AcGePoint3d ptTemp;//临时存储拖动操作中的点
- //获取用户输入的点并存储在ptTemp中
- AcEdJig::DragStatus status = acquirePoint(ptTemp);
- if (ptTemp != ptCurrent) {
- //判断当前拖动的点是否与之前的点不同。如果不同,则更新ptCurrent为新的拖动点。
- ptCurrent= ptTemp;
- }
- else if (status == DragStatus::kNormal) {
- //如果拖动点的状态为正常(即没有特殊情况,例如无效输入或用户取消操作),
- // 则返回AcEdJig::kNoChange,表示没有发生改变
- return AcEdJig::kNoChange;
- }
- return status;
-
-
- }
- //绘图辅助,x型
- bool DrawRecJig::update()
- {
- double dist = CConvertUtil::ToPoint2d(ptCenter).distanceTo(CConvertUtil::ToPoint2d(ptCurrent));
- for (int i = 0; i < 4; i++)
- {
- double angle = i*MathUtil::PI()*0.5 + MathUtil::PI()*0.25;
- AcGePoint2d pt = FymGeometry::Polar(CConvertUtil::ToPoint2d(ptCenter), angle, dist);
- pl->setPointAt(i, pt);//将pt(在折线OCS坐标中)设置为索引顶点的位置,并储存在pl中
- }
- return true;
- }
-
- AcDbEntity * DrawRecJig::entity() const
- {
- return pl;
- }
- //创建一个四边形多段线,并提示用户拖动它。如果用户按照提示操作,
- // 该方法将把多段线发布到模型空间并返回成功;否则,它将删除多段线并返回失败
- bool DrawRecJig::DoIt(AcGePoint3d & ptCenter, AcDbObjectId &plId)
- {
- this->ptCenter = ptCenter;
- pl = new AcDbPolyline();
- for (int i = 0; i < 4; i++)
- {
- pl->addVertexAt(i, CConvertUtil::ToPoint2d(ptCenter));
- }
- pl->setClosed(true);
-
- setDispPrompt(L"请拖动鼠标:");
-
- if (drag()==kNormal) {
-
- plId=CDwgDataBaseUtil::PostToModelSpace(pl);
-
- return true;
- }
- else {
- delete pl;
- return false;
-
- }
-
- }
复制代码 |
|