找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 839|回复: 0

[求助]:仿CAD效果的自定义直线,一个问题求助(附源码)

[复制链接]
发表于 2006-8-9 15:12:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
void crtLine()
{
        int rc, i = 0;//输入返回状态和当前点数
        char kw[8];//获取用户输入关键字
        AcGePoint3d p;
        AcGePoint3dArray ptArr;//保存所有输入的有效点
        AcDbObjectId objId;
        AcDbLine *pLine = NULL;
        AcDbBlockTable *pBlockTable = NULL;
        AcDbBlockTableRecord *pBlockTableRecord = NULL;
        //打开数据库
        acdbHostApplicationServices()->workingDatabase()->
                getSymbolTable(pBlockTable, AcDb::kForRead);
        pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
        pBlockTable->close();

        while (TRUE)
        {
                if (i == 0)//没有点
                {
                        rc = acedGetPoint(NULL, "\n指定第一点: ",  asDblArray(p));
                }
                else if (i < 3)//少于三个点
                {
                        acedInitGet(RSG_OTHER, "Undo _ U");
                        rc = acedGetPoint(asDblArray(p),
                                "\n指定下一点或[放弃(U)]: ", asDblArray(p));
                }
                else//大于三个点
                {
                        acedInitGet(RSG_OTHER, "Close Undo _ C U");
                        rc = acedGetPoint(asDblArray(p),
                                "\n指定下一点或[闭合(C)/放弃(U)]: ",  asDblArray(p));
                }

                if (i == 0 && rc == RTNORM)
                {
                        ptArr.append(p);
                        ++i;
                }
                else if (i == 1)
                {
                        if (rc == RTNORM)//有两个点并返回正常,创建一条直线
                        {
                                ptArr.append(p);
                                ++i;
                                pLine = new AcDbLine(ptArr.first(), p);
                                actrTransactionManager->startTransaction();
                                pBlockTableRecord->appendAcDbEntity(pLine);
                                pLine->close();
                        }
                        else
                        {
                                actrTransactionManager->abortTransaction();
                                break;
                        }
                }
                else
                {
                        if (rc == RTNORM)//没增加一个点,创建一条直线
                        {
                                pLine = new AcDbLine(ptArr.last(), p);
                                ptArr.append(p);
                                ++i;
                                actrTransactionManager->startTransaction();
                                pBlockTableRecord->appendAcDbEntity(pLine);
                                pLine->close();
                        }
                        else if (rc == RTKWORD)
                        {
                                if (acedGetInput(kw) != RTNORM) break;;
                                if (strcmp(kw, "U") == 0)
                                {
                                        ptArr.removeLast();
                                        --i;
                                        p = ptArr.last();
                                        actrTransactionManager->abortTransaction();
                                }
                                else if (strcmp(kw, "C") == 0)
                                {
                                        pLine = new AcDbLine(p, ptArr.first());
                                        pBlockTableRecord->appendAcDbEntity(pLine);
                                        pLine->close();
                                        break;
                                }
                        }
                        else break;
                }
        }
        pBlockTableRecord->close();
        actrTransactionManager->endTransaction();
}
存在的问题是:直线创建完之后,选择直线改变颜色没有反应,要regen命令后才有反应
另外当把创建的直线与其它物体求交点之类的操作,都求不出来,好像是实体没进入数据库似的
但把图形保存起来重新打开就正常
请问该怎么处理
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 16:20 , Processed in 0.261712 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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