为什么已经切换当前数据库,acedSSGet还是对老的数据库操作?
<P><BR>bool CBlueprintDrawing::CreateBlueprint(long lBluePrintTemplateID, int iPageNo)<BR>{<BR> Acad::ErrorStatus es;<BR> AcDbDatabase *pDb;<BR> CString m_BlueprintFileFullName; <BR> CString t_BlueprintTemplateFileName;</P><P> pDb = new AcDbDatabase;</P>
<P><BR> //获取模板文件名<BR> es = pDb->readDwgFile( t_BlueprintTemplateFileName);<BR> if( es != Acad::eOk )<BR> {<BR> acutPrintf("\n没有发现 %c 文件!\n", t_BlueprintTemplateFileName);<BR> delete pDb;<BR> return false;<BR> }</P>
<P> AcDbDatabase *pOldDb = acdbHostApplicationServices()->workingDatabase();<BR> acdbHostApplicationServices()->setWorkingDatabase(pDb);</P>
<P> AcDbBlockTable *pBlockTable;<BR> pDb->getSymbolTable(pBlockTable, AcDb::kForRead);<BR> //acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);</P>
<P> AcDbBlockTableRecord *pBlockTableRecord;<BR> pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);<BR> pBlockTable->close(); <BR> <BR> //---- 绘制图形<BR> CBlueprintDrawing::CreateTableGroup( pBlockTableRecord );<BR> <BR> //---- 绘制图纸框架 <BR>//?????????????? 选择集出现问题<BR><FONT color=#ff0000>//如果pOldDb中在选择区域中有实体,就可以;反之不行。<BR>//希望pDb中在选择区域中有实体,就可以;反之不行。<BR>//pDb已经是当前数据库为什么还关联pOldDb</FONT><BR> CBlueprintDrawing::CreateFrameLine( pBlockTableRecord );</P>
<P> //---- 关闭块表<BR> pBlockTableRecord->close(); </P>
<P> //切换回原工作表<BR> acdbHostApplicationServices()->setWorkingDatabase(pOldDb);<BR> //保存图纸<BR> pDb->saveAs(m_BlueprintFileFullName);</P>
<P> delete pDb;<BR>}</P>
<P>bool CBlueprintDrawing::CreateFrameLine(AcDbBlockTableRecord *pBlockTableRecord)<BR>{<BR> int stat;<BR> long Number;<BR> ads_name SSName;</P>
<P> ads_point t_ptW0, t_ptW1;<BR> AcGePoint3d ptW0(0, 0, 0), ptW1(0, 297, 0);</P>
<P> Number = 0; </P>
<P> t_ptW0 = 210.0;<BR> t_ptW0 = 0.0;<BR> t_ptW0 = 0.0;</P>
<P> t_ptW1 = 420.0;<BR> t_ptW1 = 297.0;<BR> t_ptW1 = 0.0;</P>
<P> //建一个交叉窗口选择集<BR> stat = acedSSGet("C", t_ptW0, t_ptW1, NULL, SSName); <BR> if ( stat != RTNORM )<BR> {<BR> acedAlert("创建交叉选择集不成功!");<BR> }<BR> else<BR> {<BR> acedSSLength(SSName, &Number);<BR> acedAlert("创建交叉选择集成功!");<BR> while ( Number != 0 )<BR> {<BR> ptW0.x = t_ptW0;<BR> ptW1.x = t_ptW1;</P>
<P> t_ptW0 += 210.0;<BR> t_ptW1 += 210.0;</P>
<P> Number = 0;<BR> acedSSFree(SSName);</P>
<P> acedSSGet("C", t_ptW0, t_ptW1, NULL, SSName);<BR> acedSSLength(SSName, &Number);<BR> }<BR> } </P>
<P> //-- 绘制外框线<BR> AcGePoint3d pt0(0, 0, 0), pt1(0, 297, 0), pt2(0, 0, 0), pt3(0, 0, 0);</P>
<P> pt2.x = ptW1.x;<BR> pt2.y = ptW1.y;<BR> pt3.x = ptW1.x;<BR> pt3.y = ptW0.y;</P>
<P> CreateLine(pBlockTableRecord, pt0, pt1);<BR> CreateLine(pBlockTableRecord, pt1, pt2);<BR> CreateLine(pBlockTableRecord, pt2, pt3);<BR> CreateLine(pBlockTableRecord, pt3, pt0);</P>
<P> return true;<BR>} </P>
页:
[1]