找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1629|回复: 2

[求助]:关于CAdUiPalette的问题求助

[复制链接]
发表于 2007-4-28 21:28:01 | 显示全部楼层 |阅读模式

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

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

×
各位大虾,我用CAdUiPalette和CAdUiPaletteSet作了一个自定义图形的工具,在CAdUiPalette中加入了一个ChildDlg模板,有一个Button类按钮,用此按钮绘制图形,可在绘制时出现无法以AcDb::kForWrite方式打开块表记录(AcDbBlockTableRecord)的问题,以AcDb::kForRead方式可以打开(当然也无法绘图),不知是何原因,请指教!!!!!!!!!!
void GZGPaletteChildDlg::OnBnClickedButtonInsert()
{
        // TODO: 在此添加控件通知处理程序代码        double rh,rb,rd,rt,rr,rr1;
        CString numstr;
        rh=_wtof(m_datalist.get_TextMatrix(1,1));
        rb=_wtof(m_datalist.get_TextMatrix(2,1));
        rd=_wtof(m_datalist.get_TextMatrix(3,1));
        rt=_wtof(m_datalist.get_TextMatrix(4,1));
        rr=_wtof(m_datalist.get_TextMatrix(5,1));
        rr1=_wtof(m_datalist.get_TextMatrix(6,1));
        double scale;
        AcGePoint3d basePt;
        int retcade=acedGetReal(_T("\n比例<1>:"),&scale);
        if(retcade!=RTERROR && retcade!=RTCAN)
        {
                if(retcade==RTNONE)
                        scale=1;
                acedInitGet(RSG_NONULL,_T("J T F"));
                TCHAR retstr;
                if(acedGetKword(_T("\n选择视图\n<截面(J)/俯视(T)/侧视(F)>:"),&retstr)==RTNORM)
                {
                        if(_tcscmp(&retstr,_T("J"))==0)
                        {
                                acedInitGet(RSG_NONULL,_T("C B T"));
                                TCHAR str;
                                if(acedGetKword(_T("\n插入基点\n<中心(C)/底部中心(B)/顶部中心(T)>:"),&str)==RTNORM)
                                {
                                        if(_tcscmp(&str,_T("C"))==0)
                                        {
                                                basePt.set(0,0,0);
                                        }
                                        DrawGZGSection(scale,basePt, rh,rb,rd,rt,rr,rr1);
                                }
                        }
                }
        }
}

void GZGPaletteChildDlg::DrawGZGSection(double scale, AcGePoint3d inpt, double h, double b, double d, double t, double r, double r1)
{
ads_name Last_Line,GZGss;
acedSSAdd(NULL,NULL,GZGss);
        //Acad::ErrorStatus es;
        AcDbDatabase * CurDataBase = NULL;
        CurDataBase = acdbHostApplicationServices()->workingDatabase();
        if(CurDataBase == NULL)
        {
                acutPrintf(_T("\n图形错误!"));
                return;
        }
        AcDbBlockTable* CurBlockTable;
        if((CurDataBase->getSymbolTable(CurBlockTable,AcDb::kForRead))!=Acad::eOk)
        {
                acutPrintf(_T("\n块表打开错误!"));
                return;
        }
        AcDbBlockTableRecord* CurBlockTableRec;
        if(CurBlockTable->getAt(ACDB_MODEL_SPACE,CurBlockTableRec,AcDb::kForWrite,false)!=Acad::eOk)//出现问题
        {
                CurBlockTable->close();
                acutPrintf(_T("\n块表记录打开错误!"));
                return;
        }
        CurBlockTable->close();
//-----------------------------------------------
        CurBlockTableRec->close();
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-4-29 08:36:03 | 显示全部楼层
在函数最前面加一句, acaxdoclock lock;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-29 22:31:55 | 显示全部楼层
谢谢binbin  的指点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 11:43 , Processed in 0.362357 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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