gqtlsj 发表于 2010-6-11 09:58:00

[求助]多文档和数据库写入的问题

本帖最后由 作者 于 2010-6-11 11:13:42 编辑 <br /><br /> <p>我要实现的功能是:在cad中已经打开了一个文件,然后我提取了这个数据库中我所需要的某些实体并存入ID,然后用<font face="Verdana">acDocManager再</font>新建一个文档,然后把刚才存起来的实体写入这个新建的模型空间,可是要么写入原来的文档中,要么就写不进去,请问要如何实现呢。<font style="BACKGROUND-COLOR: #ffffff"><font color="#ff0000">已经调试发现现在得问题是运行到写入的时候CAD提示不能写入</font>,</font>请问是为什么。下面是试验代码,请各位帮帮忙吧,谢谢大家:</p>
<p><font size="2">void main()</font></p>
<p><font size="2">{</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; <font face="Verdana">newSyncDoc();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font size="2">&nbsp;</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; <font face="Verdana">AcApDocument* NewDoc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</font></font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; pDocIter = acDocManager-&gt;newAcApDocumentIterator();&nbsp; //</font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; for ( ; !pDocIter-&gt;done(); pDocIter-&gt;step())&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//找到新建文档指针<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewDoc = pDocIter-&gt;document();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br/>&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br/>&nbsp;&nbsp;&nbsp; delete pDocIter;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //</font></p>
<p><font size="2">&nbsp;</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; </font><font size="2"><font face="Verdana">acDocManager-&gt;setCurDocument(NewDoc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置当前文档<br/>&nbsp;&nbsp;&nbsp; acDocManager-&gt;activateDocument(NewDoc,true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //激活当前文档,并且第2个参数要设为ture,否则不往下运行。</font></font></p>
<p><font size="2"><font face="Verdana">&nbsp;&nbsp;&nbsp; acDocManager-&gt;unlockDocument(NewDoc);</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将新建文档解锁</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; <font face="Verdana">AcDbDatabase* pNewDb=NewDoc-&gt;database();</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//得到新建文档连接的数据库</font></p>
<p><font size="2"></font>&nbsp;</p>
<p><font size="2">&nbsp;&nbsp;&nbsp; <font face="Verdana">AcDbBlockTable* pBlockTable;</font></font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; pNewDb-&gt;<font face="Verdana">getSymbolTable(pBlockTable,AcDb::kForRead);</font></font></p>
<p><font face="Verdana"><font size="2"><font face="Verdana">&nbsp;&nbsp;&nbsp; AcDbBlockTableRecord* pBlockTableRecord;</font><br/>&nbsp;&nbsp;&nbsp; pBlockTable-&gt;getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp; pBlockTable-&gt;close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; </font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; AcGePoint3d ptCenter(0,0,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br/>&nbsp;&nbsp;&nbsp; AcGeVector3d vec(0,0,1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br/>&nbsp;&nbsp;&nbsp; double rad=10000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br/>&nbsp;&nbsp;&nbsp; AcDbCircle* pCircle=new AcDbCircle(ptCenter,vec,rad);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //做了个圆写进去</font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; AcDbObjectId id;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br/>&nbsp;&nbsp;&nbsp; <font color="#ff0000"><strong>pBlockTableRecord-&gt;appendAcDbEntity(id,pCircle);&nbsp;&nbsp;&nbsp;</strong></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color="#ff0000">&nbsp;&nbsp;&nbsp; //到这里就出错了,CAD显示写入错误</font></strong></font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; <font face="Verdana">pBlockTableRecord-&gt;close();</font></font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; <font face="Verdana">acDocManager-&gt;l<font face="Verdana">ockDocument</font>(NewDoc);</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将新建文档锁定</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; <font face="Verdana">delete pNewDb;</font></font></p>
<p><font size="2">}</font></p>
<p><font size="2">&nbsp;</font></p>
<p><font face="Verdana" size="2">void newSyncDocHelper(void *pData)<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AcApDocument* pDoc = acDocManager-&gt;curDocument();<br/>&nbsp;&nbsp;&nbsp;&nbsp; if (acDocManager-&gt;isApplicationContext()) </font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acDocManager-&gt;appContextNewDocument((const TCHAR *)pData);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acDocManager-&gt;activateDocument(pDoc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//激活原先的文档,否则运行到<font face="Verdana">newSyncDoc()语句后不往下运行</font><br/>&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font face="Verdana" size="2">&nbsp;&nbsp;&nbsp; &nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp; acutPrintf(_T("\nERROR: in Document context : %s\n"),pDoc-&gt;fileName());</font></p>
<p><font face="Verdana" size="2">}</font></p><font face="Verdana">
<p><br/><font size="2">void newSyncDoc()<br/>{<br/>&nbsp;&nbsp;&nbsp; &nbsp;static TCHAR pData[] = _T(/*NOXLATE*/"acad.dwt");<br/>&nbsp;&nbsp;&nbsp;&nbsp; AcApDocument* pDoc = acDocManager-&gt;curDocument();<br/>&nbsp;&nbsp;&nbsp;&nbsp; if (pDoc) </font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acDocManager-&gt;executeInApplicationContext(newSyncDocHelper, (void *)pData);<br/>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; </font></font></p>
<p><font face="Verdana" size="2">}</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
页: [1]
查看完整版本: [求助]多文档和数据库写入的问题