找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 739|回复: 4

[ARX程序]:编译成功,运行时一直不能打开MODEL SPACE?请问哪里出错?

[复制链接]
发表于 2004-5-16 02:14:42 | 显示全部楼层 |阅读模式

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

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

×
编译成功,运行时一直不能打开MODEL SPACE?请问哪里出错?
Failed to open MODEL SPACE for a write operation。
  
void drawWin()
{
        AcDbBlockTableRecord *pBlkTableRecord;
   
        RectWindow *pRectWindow;        // RectWindow class

        RectWindow *pGenericWind;
                acedInitGet(NULL, "Arch apeX Rect");

                         pRectWindow = new RectWindow;
                        pGenericWind = pRectWindow;
                        /*
                        AcDbBlockTableRecord *pBlkTableRecord;
                        if(!getModelSpaceRecord(pBlkTableRecord))
                        {
                                return;
                        }
                        pRectWindow->drawWindow(pBlkTableRecord);

                pGenericWind->setWindowLength(windInfo.m_dWindWt);
                pGenericWind->setWindowHeight(windInfo.m_dWindHt);
                pGenericWind->setWindowCols(windInfo.m_nCols);
                pGenericWind->setWindowRows(windInfo.m_nRows);
                pGenericWind->setWindowStartPoint(windInfo.m_startPt);

                if(!getModelSpaceRecord(pBlkTableRecord))
                {
                        return;
                }

                pGenericWind->drawWindow(pBlkTableRecord);

                if(pGenericWind != NULL)
                {
                        delete pGenericWind;
                }

                pBlkTableRecord->close();

                // variables.
//                g_bProceed = Adesk::kFalse;

}// if g_bProceed;
/*        else
        {
                acutPrintf("\nUser cancelled. ");
        }*/


Adesk::Boolean getModelSpaceRecord(AcDbBlockTableRecord*& pBlkTableRecord)
{
        AcDbDatabase *pCurDb;
        AcDbBlockTable *pBlkTable;
        Acad::ErrorStatus es;

        pCurDb = acdbHostApplicationServices()->workingDatabase();

        es = pCurDb->getBlockTable(pBlkTable, AcDb::kForRead);
        if(es != Acad::eOk)
        {
                acutPrintf("\nFailed to open Block Table for a read operation.");
                return Adesk::kFalse;
        }

        es = pBlkTable->getAt(ACDB_MODEL_SPACE, pBlkTableRecord, AcDb::kForWrite);
        if(es != Acad::eOk)
        {
                acutPrintf("\nFailed to open MODEL SPACE for a write operation.");
                pBlkTable->close();
                return Adesk::kFalse;
        }

        pBlkTable->close();

        return Adesk::kTrue;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-5-16 21:23:30 | 显示全部楼层
You open  pBlkTableRecord  under AcDb::kForWrite  for many times and
not to  use  ->close()  before the next  open,  when you call
GetModelSpaceRecord(pBlkTableRecord) for many times.

-------------------------------------------------

  1. void drawWin()
  2. {
  3. AcDbBlockTableRecord *pBlkTableRecord;

  4. RectWindow *pRectWindow; // RectWindow class

  5. RectWindow *pGenericWind;
  6. acedInitGet(NULL, "Arch apeX Rect");

  7. pRectWindow = new RectWindow;
  8. pGenericWind = pRectWindow;
  9. [COLOR=Blue]/*   [/COLOR][COLOR=Red]    <<---------why? where is the match */  ?   [/COLOR]
  10. AcDbBlockTableRecord *pBlkTableRecord;
  11. if(!getModelSpaceRecord(pBlkTableRecord))
  12. {
  13. return;
  14. }
  15. pRectWindow->drawWindow(pBlkTableRecord);

  16. pGenericWind->setWindowLength(windInfo.m_dWindWt);
  17. pGenericWind->setWindowHeight(windInfo.m_dWindHt);
  18. pGenericWind->setWindowCols(windInfo.m_nCols);
  19. pGenericWind->setWindowRows(windInfo.m_nRows);
  20. pGenericWind->setWindowStartPoint(windInfo.m_startPt);

  21. if(!getModelSpaceRecord(pBlkTableRecord))
  22. {
  23. return;
  24. }

  25. pGenericWind->drawWindow(pBlkTableRecord);

  26. if(pGenericWind != NULL)
  27. {
  28. delete pGenericWind;
  29. }

  30. pBlkTableRecord->close();

  31. // variables.
  32. // g_bProceed = Adesk::kFalse;

  33. }// if g_bProceed;
  34. /* else
  35. {
  36. acutPrintf("\nUser cancelled. ");
  37. }*/


  38. Adesk::Boolean getModelSpaceRecord(AcDbBlockTableRecord*& pBlkTableRecord)
  39. {
  40. AcDbDatabase *pCurDb;
  41. AcDbBlockTable *pBlkTable;
  42. Acad::ErrorStatus es;

  43. pCurDb = acdbHostApplicationServices()->workingDatabase();

  44. es = pCurDb->getBlockTable(pBlkTable, AcDb::kForRead);
  45. if(es != Acad::eOk)
  46. {
  47. acutPrintf("\nFailed to open Block Table for a read operation.");
  48. return Adesk::kFalse;
  49. }

  50. es = pBlkTable->getAt(ACDB_MODEL_SPACE, pBlkTableRecord, AcDb::kForWrite);
  51. if(es != Acad::eOk)
  52. {
  53. acutPrintf("\nFailed to open MODEL SPACE for a write operation.");
  54. pBlkTable->close();
  55. return Adesk::kFalse;
  56. }

  57. pBlkTable->close();

  58. return Adesk::kTrue;
  59. }

复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-17 07:59:32 | 显示全部楼层
/*不小心打上去的 ,请问具体怎么改?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-17 20:53:37 | 显示全部楼层
You have to do  pBlkTableRecord->close()  at several places.
It is easy!
You try by yourself!
Wish you success!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-18 20:19:01 | 显示全部楼层
我重新又改了几次 ,还是不能 open MODEL SPACE
有谁碰倒过 这种问题??
帮解释一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-21 11:13 , Processed in 0.393494 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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