请选择 进入手机版 | 继续访问电脑版
天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 132|回复: 0

鼠标拖动

[复制链接]
  • TA的每日心情
    开心
    昨天 19:35
  • 签到天数: 2 天

    [LV.1]初来乍到

    85

    主题

    9

    回帖

    1047

    积分

    管理员

    积分
    1047
    QQ
    发表于 2024-3-6 11:47:56 | 显示全部楼层 |阅读模式
    1. DrawRecJig::DrawRecJig()
    2. {
    3.         pl = NULL;
    4. }
    5. DrawRecJig::~DrawRecJig()
    6. {
    7. }
    8. //在拖动操作期间获取用户输入的点,并基于这个点以及拖动操作的状态来决定下一步的操作
    9. AcEdJig::DragStatus DrawRecJig::sampler()
    10. {
    11.         setUserInputControls((AcEdJig::UserInputControls)(
    12.                 //这行代码设置了这个插件接受的用户输入控制。它接受三维坐标、不接受负响应以及接受空响应。
    13.                 AcEdJig::kAccept3dCoordinates |//接受z坐标
    14.                 AcEdJig::kNoNegativeResponseAccepted |//不接受负值
    15.                 AcEdJig::kNullResponseAccepted//空输入可接受
    16.                 ));
    17.         AcGePoint3d ptTemp;//临时存储拖动操作中的点
    18.         //获取用户输入的点并存储在ptTemp中
    19.         AcEdJig::DragStatus status = acquirePoint(ptTemp);
    20.         if (ptTemp != ptCurrent) {
    21.      //判断当前拖动的点是否与之前的点不同。如果不同,则更新ptCurrent为新的拖动点。
    22.                 ptCurrent= ptTemp;
    23.         }
    24.         else if (status == DragStatus::kNormal) {
    25.         //如果拖动点的状态为正常(即没有特殊情况,例如无效输入或用户取消操作),
    26.         // 则返回AcEdJig::kNoChange,表示没有发生改变
    27.                 return AcEdJig::kNoChange;
    28.         }
    29.         return status;
    30. }
    31. //绘图辅助,x型
    32. bool DrawRecJig::update()
    33. {
    34.         double dist = CConvertUtil::ToPoint2d(ptCenter).distanceTo(CConvertUtil::ToPoint2d(ptCurrent));
    35.         for (int i = 0; i < 4; i++)
    36.         {
    37.                 double angle = i*MathUtil::PI()*0.5 + MathUtil::PI()*0.25;
    38.                 AcGePoint2d pt = FymGeometry::Polar(CConvertUtil::ToPoint2d(ptCenter), angle, dist);
    39.                 pl->setPointAt(i, pt);//将pt(在折线OCS坐标中)设置为索引顶点的位置,并储存在pl中
    40.         }
    41.         return true;
    42. }
    43. AcDbEntity * DrawRecJig::entity() const
    44. {
    45.         return pl;
    46. }
    47. //创建一个四边形多段线,并提示用户拖动它。如果用户按照提示操作,
    48. // 该方法将把多段线发布到模型空间并返回成功;否则,它将删除多段线并返回失败
    49. bool DrawRecJig::DoIt(AcGePoint3d & ptCenter, AcDbObjectId &plId)
    50. {
    51.         this->ptCenter = ptCenter;
    52.         pl = new AcDbPolyline();
    53.         for (int i = 0; i < 4; i++)
    54.         {
    55.                 pl->addVertexAt(i, CConvertUtil::ToPoint2d(ptCenter));
    56.         }
    57.         pl->setClosed(true);
    58.         setDispPrompt(L"请拖动鼠标:");
    59.         if (drag()==kNormal) {
    60.                 plId=CDwgDataBaseUtil::PostToModelSpace(pl);
    61.                 return true;
    62.         }
    63.         else {
    64.                 delete pl;
    65.                 return false;
    66.         }
    67. }
    复制代码

     

     

     

     

    鼠标拖动
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-10-13 03:02 , Processed in 0.152544 second(s), 28 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表