![]() |
【转帖】[原创][arx]生成图层和设置线型(类型、颜色、线宽)
[原创][arx]生成图层和设置线型(类型、颜色、线宽)
[原创][arx]生成图层和设置线型(类型、颜色、线宽) 和大家一起分享生成图层和设置线型(类型、颜色、线宽)的简单东东。 acdblayertable *playertable; acdbcurdwg()->getlayertable(playertable, acdb::kforwrite); acdblayertablerecord *playertablerecord1 = new acdblayertablerecord; acdblayertablerecord *playertablerecord2 = new acdblayertablerecord; acdblayertablerecord *playertablerecord3 = new acdblayertablerecord; acdblayertablerecord *playertablerecord4 = new acdblayertablerecord; acdblayertablerecord *playertablerecord5 = new acdblayertablerecord; acdblayertablerecord *playertablerecord6 = new acdblayertablerecord; playertablerecord1->setname("a"); playertablerecord2->setname("b"); playertablerecord3->setname("c"); playertablerecord4->setname("d"); playertablerecord5->setname("e"); playertablerecord6->setname("f"); accmcolor color; color.setcolorindex(1); playertablerecord1->setcolor(color); playertablerecord1->setlineweight(acdb::lineweight::klnwt018);// color.setcolorindex(5); playertablerecord2->setcolor(color); playertablerecord2->setlineweight(acdb::lineweight::klnwt050); color.setcolorindex(4); playertablerecord3->setcolor(color); playertablerecord3->setlineweight(acdb::lineweight::klnwt018); color.setcolorindex(6); playertablerecord4->setcolor(color); playertablerecord4->setlineweight(acdb::lineweight::klnwt018); color.setcolorindex(3); playertablerecord5->setcolor(color); playertablerecord5->setlineweight(acdb::lineweight::klnwt018); color.setcolorindex(2); playertablerecord6->setcolor(color); playertablerecord6->setlineweight(acdb::lineweight::klnwt018); acdblinetypetable *plinetypetbl; acdbobjectid dashedlineid, centerlineid,dividelineid; acdbcurdwg()->getlinetypetable(plinetypetbl,acdb::kforread); if ((plinetypetbl->getat("dashed",dashedlineid))!=acad::eok); { plinetypetbl->close(); acdbcurdwg()->loadlinetypefile("dashed","acadiso.lin"); acdbcurdwg()->getlinetypetable(plinetypetbl,acdb::kforread); plinetypetbl->getat("dashed",dashedlineid); } if ((plinetypetbl->getat("center",centerlineid))!=acad::eok); { plinetypetbl->close(); acdbcurdwg()->loadlinetypefile("center","acadiso.lin"); acdbcurdwg()->getlinetypetable(plinetypetbl,acdb::kforread); plinetypetbl->getat("center",centerlineid); } if ((plinetypetbl->getat("divide",dividelineid))!=acad::eok); { plinetypetbl->close(); acdbcurdwg()->loadlinetypefile("divide","acadiso.lin"); acdbcurdwg()->getlinetypetable(plinetypetbl,acdb::kforread); plinetypetbl->getat("divide",dividelineid); } plinetypetbl->close(); playertablerecord1->setlinetypeobjectid(centerlineid); playertablerecord4->setlinetypeobjectid(dashedlineid); playertablerecord5->setlinetypeobjectid(dividelineid); playertable->add(playertablerecord1); playertable->add(playertablerecord2); playertable->add(playertablerecord3); playertable->add(playertablerecord4); playertable->add(playertablerecord5); playertable->add(playertablerecord6); playertablerecord1->close(); playertablerecord2->close(); playertablerecord3->close(); playertablerecord4->close(); playertablerecord5->close(); playertablerecord6->close(); playertable->close(); 上述过程还可以用c语言格式书写. 生成新的图层. ads_tblobjname("layer","0",ent); rb=ads_entget(ent); assoc_dxf_str(rb,1,new_layername); assoc_dxf_int(rb,0,new_color); ads_entmod(rb); ads_relrb(rb); 其中assoc_dxf_int为链表替换程序! 累死了,可不可以这么写? //添加层 acdbobjectid cljdwg::addlayer(const char* layername, const adesk::int16 layercolor, const char* linetype, acdbdatabase* pdb) { if(pdb==null) pdb=acdbcurdwg(); //装载线型 pdb->loadlinetypefile(linetype,linetype_filename); acdbobjectid linetypeid=addlinetype(pdb,linetype); acdblayertable* playertable=null; acdblayertablerecord* playerrecord=null; acdbobjectid layerid=acdbobjectid::knull; pdb->getlayertable(playertable,acdb::kforwrite); if(!playertable) return false; if(playertable->has(layername)) { playertable->getat(layername,layerid); } else { playerrecord=new acdblayertablerecord; accmcolor color; color.setcolorindex(layercolor); playerrecord->setcolor(color); playerrecord->setlinetypeobjectid(linetypeid); playerrecord->setname(layername); playertable->add(layerid,playerrecord); playerrecord->close(); } playertable->close(); return layerid; } 太好了,刚好在学这里,真是太感谢了!! 相当谢谢 |
所有的时间均为北京时间。 现在的时间是 06:49 PM. |