明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2052|回复: 1

[求助]SPLINE的橡皮筋问题

[复制链接]
发表于 2002-6-2 01:03 | 显示全部楼层 |阅读模式
版主或高手:
  在ARX中我需要用户自画样条曲线。1.如果用acedGetPoint得到系列点再画,则用户感觉不直观。2.如果用 acedIinitGet边拾点边橡皮筋,则只是直线。3.如果用acedCommand,并用钩子函数检测消息,可以得到曲线橡皮筋,而键盘、鼠标及弹出菜单的检测相当复杂,甚至不能。
  还有其它办法吗?请大师一定赐教!!!
发表于 2002-6-20 21:34 | 显示全部楼层

aaa

这段代码可以动态拉出一个SPLINE橡皮筋, 并以RButtonDown结束.
但存在一些问题. 谁知道如果解决请一定告诉我:
1.无法Osnap  2.如果想使用键盘回车结束绘制,如果检测?
void drag()
{
        int                                track, type;
        struct resbuf        result;
        AcGePoint3d                pt;

        //spline的橡皮筋
        AcDbBlockTable                        *pBlockTable;
        AcDbBlockTableRecord        *pBlockTableRecord;
        AcDbObjectId                        idSpline;
        AcDbSpline                                *pSpline;
        AcGePoint3dArray                pts;

        pts.append(AcGePoint3d(0, 0, 0));
       
        acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead);
        pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
        pBlockTable->close();
       
        track = 1;
        while (track > 0)
        {
                acedGrRead(track, &type, &result);
                pt.x = result.resval.rpoint[X];
                pt.y = result.resval.rpoint[Y];
                pt.z = result.resval.rpoint[Z];
                //acutPrintf("\n(track = %d, type = %d, %lf,%lf, %lf)",        track, type, pt.x, pt.y, pt.z);

                if (type == 2)        // keyboard
                {
                        //result.resval
                }

                if (type == 3)        // LButtonDown
                {
                        pts[pts.length() - 1] = pt;
                        pts.append(pt);
                }
                else if (type == 5)                // MouseMove
                {
                        if (pts.length() >= 2)
                        {
                                if (acdbOpenObject(pSpline, idSpline, AcDb::kForWrite) == Acad::eOk)
                                {
                                        pSpline->erase();
                                        pSpline->close();
                                }
                               
                                pts[pts.length() - 1] = pt;
                                pSpline = new AcDbSpline(pts);                               
                                pBlockTableRecord->appendAcDbEntity(idSpline, pSpline);                               
                                pSpline->close();
                        }
                }
                else if (type == 25)                // RButtonDown
                {
                        if (acdbOpenObject(pSpline, idSpline, AcDb::kForWrite) == Acad::eOk)
                        {
                                pSpline->erase();
                                pSpline->close();
                        }

                        pts.removeLast();
                        if (pts.length() >= 2)
                        {
                                pSpline = new AcDbSpline(pts);                               
                                pBlockTableRecord->appendAcDbEntity(idSpline, pSpline);                               
                                pSpline->close();
                        }
                       
                        track = 0;
                }
        }
        pBlockTableRecord->close();
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-20 14:35 , Processed in 0.385262 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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