批量把所有图层放入到0层
如何批量把所有的图层放入到0层并进行CAD中的“pu”命令 <p>删除一个图层上的所有实体是用如下代码的,那么放在0层是怎么操作的呢</p><p>void lcdlg::delSS(char* nLayerName,AcDbObjectIdArray& nIDs)<br/>{<br/> //AfxMessageBox(nLayerName);<br/> Acad::ErrorStatus es = Acad::eOk;<br/> ads_name ents;<br/> struct resbuf *rb;<br/> rb=acutNewRb(AcDb::kDxfLayerName);<br/> rb->restype=8;<br/> rb->resval.rstring=(char*)nLayerName;<br/> rb->rbnext=NULL;<br/> acedSSGet("X",NULL,NULL,rb,ents);<br/> long entNums=0;<br/> acedSSLength(ents,&entNums);<br/> if (entNums == 0)<br/> es = Acad::eInvalidInput;<br/> else<br/> {<br/> for (long a = 0; a < entNums ; a ++)<br/> {<br/> AcDbObjectId objId;<br/> ads_name ent;<br/> AcDbObject* obj;<br/> acedSSName(ents,a,ent);<br/> acdbGetObjectId(objId, ent);<br/> acdbOpenObject((AcDbObject *&) obj,objId,AcDb::kForWrite);<br/> nIDs.append(objId);<br/> obj->erase();<br/> nIDs.append(objId);<br/> }<br/> }<br/> acedSSFree(ents);<br/> acutRelRb(rb);<br/>}<br/></p> <p>我将上面代码做了如下修改,没有提示错误,但是没有执行。有人帮忙看下吗?</p><p>void lcdlg::delSS(char* nLayerName,AcDbObjectIdArray& nIDs)<br/>{<br/> //AfxMessageBox(nLayerName);<br/> Acad::ErrorStatus es = Acad::eOk;<br/> ads_name ents;<br/> struct resbuf *rb;</p><p> rb=acutNewRb(AcDb::kDxfLayerName);<br/> rb->restype=8;<br/> rb->resval.rstring=(char*)nLayerName;<br/> rb->rbnext=NULL;<br/> acedSSGet("X",NULL,NULL,rb,ents);<br/> long entNums=0;<br/> acedSSLength(ents,&entNums);<br/> if (entNums == 0)<br/> es = Acad::eInvalidInput;<br/> else<br/> {<br/> for (long a = 0; a < entNums ; a ++)<br/> {<br/> AcDbObjectId objId;<br/> ads_name ent;<br/> AcDbObject* obj;<br/> AcDbEntity *pE;<br/> acedSSName(ents,a,ent);<br/> acdbGetObjectId(objId, ent);<br/> acdbOpenObject(pE,objId,AcDb::kForWrite,false);<br/> // nIDs.append(objId);<br/> pE->setLayer("0");<br/> pE->close;<br/> // nIDs.append(objId);<br/> }<br/> }<br/> acedSSFree(ents);<br/> acutRelRb(rb);<br/>}</p> <p>人呢,没有人回答下的吗?</p> 看代码好像应该没什么问题啊,看一下你所选的图层是不是一个锁定的图层,锁定图层上的对象是不允许修改的 本帖最后由 作者 于 2007-2-8 9:54:39 编辑 <br /><br /> void DelSS(const char *sLay)<br/>{<br/> ads_name ss;<br/> struct resbuf *rb=acutBuildList(8,sLay,NULL);<br/> long nLen=0;<br/> if(acedSSGet("X",NULL,NULL,rb,ss)!=RTNORM)<br/> {<br/> acutRelRb(rb);<br/> return;<br/> }<br/> acutRelRb(rb);<br/><br/> acedSSLength(ss,&nLen);<br/> for(long n=0L;n<nLen;n++)<br/> {<br/> ads_name ent;<br/> acedSSName(ss,n,ent);<br/> AcDbObjectId idEnt;<br/> acdbGetObjectId(idEnt,ent);<br/> AcDbEntity *pEnt=NULL;<br/> if(acdbOpenObject(pEnt,idEnt,AcDb::kForWrite)==Acad::eOk)<br/> {<br/> pEnt->setLayer("0");<br/> pEnt->close();<br/> }<br/> }<br/> acedSSFree(ss);<br/>} <p>为什么还是不行呢</p><p>void lcdlg::delSS(char* nLayerName,AcDbObjectIdArray& nIDs)<br/>{<br/> Acad::ErrorStatus es = Acad::eOk;<br/> ads_name ents;<br/> struct resbuf *rb;<br/> struct resbuf blc;<br/> AcDbEntity *pE;</p><p> rb=acutNewRb(AcDb::kDxfLayerName);<br/> rb->restype=8;<br/> rb->resval.rstring=(char*)nLayerName;<br/> rb->rbnext=NULL;<br/> acedSSGet("X",NULL,NULL,rb,ents);</p><p>// long entNums=0;<br/> long entNums;</p><p> acedSSLength(ents,&entNums);<br/> if (entNums == 0)<br/> es = Acad::eInvalidInput;<br/> else<br/> {<br/> for (long a = 0; a < entNums ; a ++)<br/> {<br/> AcDbObjectId objId;<br/> ads_name ent;<br/> AcDbObject* obj;<br/> <br/> acedSSName(ents,a,ent);<br/> acdbGetObjectId(objId, ent);<br/> acdbOpenObject(pE,objId,AcDb::kForWrite,false);<br/> nIDs.append(objId);</p><p> pE->setLayer("0");<br/> pE->close;<br/> obj->close;<br/> nIDs.append(objId);<br/> }<br/> }<br/> acedSSFree(ents);<br/> blc.restype = RTSTR;<br/> blc.resval.rstring = "0";<br/> acedSetVar("CLAYER",&blc);//设置当前图层为0层 </p><p> AcDbLayerTable * pLayerTbl;//定义层表指针<br/> acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pLayerTbl, AcDb::kForWrite);<br/> <br/> AcDbLayerTableRecord * pLayerTblRcd; //定义层表记录指针<br/> if ( Acad::eOk == pLayerTbl->getAt((char*)nLayerName, pLayerTblRcd , AcDb::kForWrite))<br/> {<br/> pLayerTblRcd->erase(true);//删除图层<br/> } <br/> pLayerTblRcd->close(); <br/> pLayerTbl->close();<br/> acutRelRb(rb);<br/>}</p> <p>按照上面的方法没有出任何错误,但是也没有执行任何操作,包括最后最后从层表中删除图层也没有执行,为什么呢</p> <p>前面给你的代码是可以的啊,我试过了</p><p>但是不能应用于被锁定的层,锁定的层是不允许修改的</p> <p>我按照你的代码试过了,结果是可以改变图层的。看来你不能从代码找问题了,可能是别的问题。</p>
页:
[1]
2