freejustin 发表于 2006-3-1 11:17:00

为什么已经切换当前数据库,acedSSGet还是对老的数据库操作?

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