adminblue 发表于 2006-8-5 11:37:00

请教如何 根据层名获得层的Id

<P>是用acdbGetObjectId(AcDbObjectId&amp; objId,const ads_name objName);这个函数吗?要使的话CString和ads_name类型要怎么转换,如何给这个函数传值?</P>

iceberg2509 发表于 2006-8-5 23:28:00

<P>嘿嘿,如果vlisp我倒是会,arx我可不会</P>

shinjikun 发表于 2006-8-7 19:21:00

<P>获取图层的控制需要得到Layer Table,遍历里面的layer需要iterator</P>
<P>&nbsp;AcDbLayerTable *lt;<BR>&nbsp;AcDbLayerTableIterator *it;<BR>&nbsp;acdbHostApplicationServices()-&gt;workingDatabase()-&gt;getLayerTable(lt,AcDb::kForRead);//取得layer table<BR>&nbsp;lt-&gt;newIterator(it);//建立一个iterator<BR>&nbsp;for(;!it-&gt;done();it-&gt;step())//it-&gt;done()是结束判断,it-&gt;step()是遍历下一个,类似于链表或线形表<BR>&nbsp;{<BR>&nbsp;&nbsp;AcDbLayerTableRecord *ltr;<BR>&nbsp;&nbsp;it-&gt;getRecord(ltr,AcDb::kForRead);//通过it可以得到record<BR>&nbsp;&nbsp;char* text;<BR>&nbsp;&nbsp;ltr-&gt;getName(text);得到名字,注意这段内存是不可以动的,这个东西就赤裸的指向系统内部的那个存储图层名的地方<BR>&nbsp;&nbsp;ltr-&gt;close();//record必须关闭!<BR>&nbsp;&nbsp;acutPrintf("%s",text);<BR>&nbsp;}<BR>&nbsp;delete it;//it必须用这个方式删除<BR>&nbsp;lt-&gt;close();//lt必须关闭</P>
<P>注意iterator的用法,就如同STL的iterator的用法,记得用完删除!</P>

shinjikun 发表于 2006-8-7 19:24:00

<P>错了,呵呵,你问的是这个阿:</P>
<P>AcDbLayerTable *lt;<BR>&nbsp;acdbHostApplicationServices()-&gt;workingDatabase()-&gt;getLayerTable(lt,AcDb::kForRead);<BR>&nbsp;lt-&gt;getAt(图层名,id)<BR>&nbsp;lt-&gt;close();</P>
<P>使用getAt函数,直接得到</P>
页: [1]
查看完整版本: 请教如何 根据层名获得层的Id