alfalfa 发表于 2006-5-27 11:01:00

求助:调试的问题。

本帖最后由 作者 于 2006-5-27 11:31:25 编辑 <br /><br /> <P>这是我编的一个选取实体来生成block的一段程序,但是当调试运行到:err=acdbGetObjectId(idsel,sget);</P>
<P>跳出上面的Find Symble的 对话框,"Please enter the path for acdbhdr.pdb"不知道什么意思。。。</P>
<P>并且编译以后,在cad中运行并不能生成图块,但是凭我的水平怎么也找不出问题了。</P>
<P>希望哪位大虾能帮帮我,先谢了。</P>
<P></P>
<P><BR>#include "StdAfx.h"<BR>#include "StdArx.h"<BR>#include "resource.h"<BR>#include "dbsymtb.h "<BR>#include "acedads.h"<BR>#include "dbmain.h"</P>
<P>// This is command 'SETLAYER'<BR>void Asdkpblock()</P>
<P>{</P>
<P>&nbsp; bool const openErasedEntity = false;<BR>&nbsp; bool const openErasedRec = false;<BR>&nbsp; ads_name sget;<BR>&nbsp; ads_point pt;<BR>&nbsp; AcDbObjectId idsel;<BR>&nbsp; AcDbEntity *entsel;<BR>&nbsp; Acad::ErrorStatus err;<BR>&nbsp; int rc=1;</P>
<P>&nbsp; AcDbBlockTableRecord *pSelRec=new AcDbBlockTableRecord;<BR>&nbsp; pSelRec-&gt;setName("firstblock");<BR>&nbsp; pSelRec-&gt;setOrigin(AcGePoint3d(0,0,0));<BR>&nbsp; while(rc)<BR>&nbsp; {<BR>&nbsp;&nbsp; rc=acedEntSel("\nplease select an entity:",sget,pt);<BR>&nbsp;&nbsp; switch(rc)<BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp; case RTNORM:<BR>&nbsp;&nbsp;&nbsp; err=acdbGetObjectId(idsel,sget);<BR>&nbsp;&nbsp;&nbsp; if(err!=Acad::eOk) <BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp; acutPrintf("\n Invalid ads_name.");<BR>&nbsp;&nbsp;&nbsp;&nbsp; return;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; acutPrintf("\n ObjectId is %s",idsel);<BR>&nbsp;&nbsp;&nbsp; acdbOpenAcDbEntity(entsel,idsel,AcDb::kForRead,openErasedEntity);&nbsp; <BR>&nbsp;&nbsp;&nbsp; entsel-&gt;highlight();<BR>&nbsp;&nbsp;&nbsp; pSelRec-&gt;appendAcDbEntity(entsel);<BR>&nbsp;&nbsp;&nbsp; entsel-&gt;close();<BR>&nbsp;&nbsp;&nbsp; acedSSFree(sget);<BR>&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp; case RTERROR:<BR>&nbsp;&nbsp;&nbsp; acutPrintf("\n Invalid selection.");<BR>&nbsp;&nbsp;&nbsp; return;<BR>&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp; case RTCAN:<BR>&nbsp;&nbsp;&nbsp; acutPrintf("\n Selection over.");<BR>&nbsp;&nbsp;&nbsp; rc=0;<BR>&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp; } //End of switch.<BR>&nbsp; }</P>
<P>&nbsp; AcDbDatabase *pcurdb=NULL;<BR>&nbsp; AcDbBlockTable *pbTable;<BR>&nbsp; pcurdb=acdbHostApplicationServices()-&gt;workingDatabase();<BR>&nbsp; pcurdb-&gt;getBlockTable(pbTable,AcDb::kForWrite);<BR>&nbsp; pbTable-&gt;add(pSelRec);<BR>&nbsp; pbTable-&gt;close();<BR>&nbsp; pSelRec-&gt;close();<BR>}</P>

HuaiYu 发表于 2006-5-29 22:01:00

<P>我的这个可以点选以生成块,</P>
<P>void test()<BR>{<BR>&nbsp;ads_name en;<BR>&nbsp;ads_point pt;<BR>&nbsp;int rt=1;<BR>&nbsp;Acad::ErrorStatus es;<BR>&nbsp;AcDbBlockTable *pBlockTable;<BR>&nbsp;acdbHostApplicationServices()-&gt;workingDatabase()-&gt;getSymbolTable(pBlockTable,AcDb::kForWrite);<BR>&nbsp;AcDbBlockTableRecord *pBlk=new AcDbBlockTableRecord;<BR>&nbsp;es=pBlk-&gt;setName("TestBlk");<BR>&nbsp;es=pBlk-&gt;setOrigin(AcGePoint3d(0,0,0));<BR>//&nbsp;-------------------<BR>&nbsp;while (rt)<BR>&nbsp;{<BR>&nbsp;&nbsp;rt=acedEntSel("\nSpecify a object:",en,pt);<BR>&nbsp;&nbsp;switch(rt)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;case RTERROR:<BR>&nbsp;&nbsp;&nbsp;&nbsp;acutPrintf("\n Invalid selection.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;case RTCAN:<BR>&nbsp;&nbsp;&nbsp;&nbsp;acutPrintf("\n Selection over.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;rt=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;case RTNORM:<BR>&nbsp;&nbsp;&nbsp;&nbsp;AcDbObjectId eId;<BR>&nbsp;&nbsp;&nbsp;&nbsp;acdbGetObjectId(eId,en);<BR>&nbsp;&nbsp;&nbsp;&nbsp;AcDbEntity *pEnt=NULL,*pClone=NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;es=acdbOpenAcDbEntity(pEnt,eId,AcDb::kForRead);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pClone=AcDbEntity::cast(pEnt-&gt;clone());<BR>&nbsp;&nbsp;&nbsp;&nbsp;es=pBlk-&gt;appendAcDbEntity(eId,pClone);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pBlockTable-&gt;add(eId,pBlk);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pEnt-&gt;close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;pClone-&gt;close();<BR>&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>//&nbsp;------------------------<BR>&nbsp;pBlk-&gt;close();<BR>&nbsp;pBlockTable-&gt;close();<BR>}</P>

alfalfa 发表于 2006-6-3 18:54:00

<P>呵呵,谢谢,想明白是什么问题了。</P>
<P>还有一个问题是:当在调试模式下面,运行到acdbGetObjectId()时,会跳出一个Find Symble对话框,提示:"Please enter the path for acdbhdr.pdb"&nbsp; 不知道什么意思。。。</P>
<P>不知各位碰到过没有。我选择的 结束 ,没有理它,但是并不影响程序的运行。如果不在调试模式下,就不会出现这个问题。</P>
<P>我用的是vc++6.0和acad2002。</P>

HuaiYu 发表于 2006-6-4 20:56:00

<P>我也不知道,我也是半桶水,应该还没有半桶昵,</P>
<P>我用的也是 VC6+CAD2002的了</P>
<P>有机会一起来学习啊</P>

alfalfa 发表于 2006-6-8 22:55:00

<P>好啊好啊。。。。</P>
<P>其实觉得学objectarx也不难,有帮助文档就可以啦。现在开始有整体的感觉了。</P>
页: [1]
查看完整版本: 求助:调试的问题。