找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 143|回复: 0

鼠标拖动

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 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. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 14:15 , Processed in 0.137556 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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