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