请教如何 根据层名获得层的Id
<P>是用acdbGetObjectId(AcDbObjectId& objId,const ads_name objName);这个函数吗?要使的话CString和ads_name类型要怎么转换,如何给这个函数传值?</P> <P>嘿嘿,如果vlisp我倒是会,arx我可不会</P> <P>获取图层的控制需要得到Layer Table,遍历里面的layer需要iterator</P><P> AcDbLayerTable *lt;<BR> AcDbLayerTableIterator *it;<BR> acdbHostApplicationServices()->workingDatabase()->getLayerTable(lt,AcDb::kForRead);//取得layer table<BR> lt->newIterator(it);//建立一个iterator<BR> for(;!it->done();it->step())//it->done()是结束判断,it->step()是遍历下一个,类似于链表或线形表<BR> {<BR> AcDbLayerTableRecord *ltr;<BR> it->getRecord(ltr,AcDb::kForRead);//通过it可以得到record<BR> char* text;<BR> ltr->getName(text);得到名字,注意这段内存是不可以动的,这个东西就赤裸的指向系统内部的那个存储图层名的地方<BR> ltr->close();//record必须关闭!<BR> acutPrintf("%s",text);<BR> }<BR> delete it;//it必须用这个方式删除<BR> lt->close();//lt必须关闭</P>
<P>注意iterator的用法,就如同STL的iterator的用法,记得用完删除!</P> <P>错了,呵呵,你问的是这个阿:</P>
<P>AcDbLayerTable *lt;<BR> acdbHostApplicationServices()->workingDatabase()->getLayerTable(lt,AcDb::kForRead);<BR> lt->getAt(图层名,id)<BR> lt->close();</P>
<P>使用getAt函数,直接得到</P>
页:
[1]