admin 发表于 2024-3-6 11:47:56

鼠标拖动

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;

        }

}
页: [1]
查看完整版本: 鼠标拖动