天气与日历 切换到窄版

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

AcEdJig 拖拽类使用的一点心得

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
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函数实现
  1. AcEdJig::DragStatus CDrawJig::sampler()
  2.         {  // 在用户拖动过程中 收集用户输入信息 并更新到成员变量
  3.                 //  用户输入控制
  4.             setUserInputControls((UserInputControls)(AcEdJig::kAccept3dCoordinates |
  5.                                                      AcEdJig::kNoNegativeResponseAccepted |
  6.                                                      AcEdJig::kNullResponseAccepted));
  7.                 //  采集移动的点坐标 判断鼠标是否没有移动
  8.             static AcGePoint3d pointtemp;
  9.             //  acedGetPoint函数除了可以在屏幕上鼠标点击获取点坐标之外 还可以在命令行输入距离来计算得到点坐标
  10.             DragStatus dragstatus = acquirePoint(m_pointend,m_pointstart);
  11.             if ((pointtemp != m_pointend))
  12.             {
  13.                 pointtemp = m_pointend;
  14.             }
  15.             
  16.             else if (dragstatus == AcEdJig::kNormal)
  17.             {
  18.                 return AcEdJig::kNoChange;
  19.             }            return dragstatus;
  20.         }
复制代码

  1. Adesk::Boolean CDrawJig::update()
  2.         {    //更新实体
  3.             m_pPolyLine->setPointAt(1, m_pointend.convert2d(AcGePlane()));
  4.             return Adesk::kTrue;
  5.         }
复制代码
  1. AcDbEntity * CDrawJig::entity() const
  2.         {    //  返回发生变化的实体
  3.             return m_pPolyLine;
  4.         }
复制代码

  1. void
  2.         createLine() {
  3.             AcGePoint3d tempPt; struct resbuf rbFrom, rbTo;
  4.             acedGetPoint(NULL, _T("\n输入第一点: "), asDblArray(tempPt));
  5.             rbFrom.restype = RTSHORT;
  6.             rbFrom.resval.rint = 1; // from UCS
  7.             rbTo.restype = RTSHORT;
  8.             rbTo.resval.rint = 0; // to WCS
  9.             acedTrans(asDblArray(tempPt), &rbFrom, &rbTo,
  10.                 Adesk::kFalse, asDblArray(tempPt));
  11.             CDrawJig* jig = new CDrawJig(tempPt);
  12.             jig->doIt();
  13.             delete jig;
  14.         }
复制代码

注意:sampler函数 update函数 不是用户自己调用

 

 

 

 

AcEdJig 拖拽类使用的一点心得
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-18 13:36 , Processed in 0.181933 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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