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函数实现
      

 AcEdJig::DragStatus CDrawJig::sampler()
        {  // 在用户拖动过程中 收集用户输入信息 并更新到成员变量
                //  用户输入控制
            setUserInputControls((UserInputControls)(AcEdJig::kAccept3dCoordinates |
                                                     AcEdJig::kNoNegativeResponseAccepted |
                                                     AcEdJig::kNullResponseAccepted));
                //  采集移动的点坐标 判断鼠标是否没有移动
            static AcGePoint3d pointtemp;
            //  acedGetPoint函数除了可以在屏幕上鼠标点击获取点坐标之外 还可以在命令行输入距离来计算得到点坐标
            DragStatus dragstatus = acquirePoint(m_pointend,m_pointstart);
            if ((pointtemp != m_pointend))
            {
                pointtemp = m_pointend;
            }
            
            else if (dragstatus == AcEdJig::kNormal)
            {
                return AcEdJig::kNoChange;
            }            return dragstatus;
        }


    4    update函数实现
      

 Adesk::Boolean CDrawJig::update()
        {    //更新实体
            m_pPolyLine->setPointAt(1, m_pointend.convert2d(AcGePlane()));
            return Adesk::kTrue;
        }


    5    entity函数实现
      

 AcDbEntity * CDrawJig::entity() const
        {    //  返回发生变化的实体
            return m_pPolyLine;
        }


    6    测试函数
      

 void
        createLine() {
            AcGePoint3d tempPt; struct resbuf rbFrom, rbTo;
            acedGetPoint(NULL, _T("\n输入第一点: "), asDblArray(tempPt));
            rbFrom.restype = RTSHORT;
            rbFrom.resval.rint = 1; // from UCS
            rbTo.restype = RTSHORT;
            rbTo.resval.rint = 0; // to WCS

            acedTrans(asDblArray(tempPt), &rbFrom, &rbTo,
                Adesk::kFalse, asDblArray(tempPt));

            CDrawJig* jig = new CDrawJig(tempPt);
            jig->doIt();
            delete jig;
        }


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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React中实现拖拽组件的方法有多种,其中比较常用的是使用react-dnd库。下面是一个简单的使用示例: 1. 安装react-dnd和react-dnd-html5-backend: ``` npm install --save react-dnd react-dnd-html5-backend ``` 2. 创建可拖拽和可放置的组件: ```jsx import { useDrag, useDrop } from 'react-dnd'; function DraggableItem(props) { const [{ isDragging }, drag] = useDrag({ item: { type: 'item', id: props.id }, collect: monitor => ({ isDragging: monitor.isDragging(), }), }); return ( <div ref={drag} style={{ opacity: isDragging ? 0.5 : 1 }}> {props.children} </div> ); } function DroppableArea(props) { const [{ isOver }, drop] = useDrop({ accept: 'item', drop: (item, monitor) => { props.onDrop(item.id); }, collect: monitor => ({ isOver: monitor.isOver(), }), }); return ( <div ref={drop} style={{ backgroundColor: isOver ? 'lightgreen' : 'white' }}> {props.children} </div> ); } ``` 3. 在父组件中使用拖拽和可放置的组件: ```jsx function App() { const [items, setItems] = useState([1, 2, 3]); const handleDrop = (id) => { setItems(items.filter(item => item !== id)); }; return ( <div> {items.map(item => ( <DraggableItem key={item} id={item}> Item {item} </DraggableItem> ))} <DroppableArea onDrop={handleDrop}> Drop here </DroppableArea> </div> ); } ``` 在上面的示例中,`DraggableItem`组件是可拖拽的,`DroppableArea`组件是可放置的。当`DraggableItem`被拖拽到`DroppableArea`上时,会调用`handleDrop`函数删除该项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值