![]() |
【转帖】求助!创建多个图层的问题
求助!创建多个图层的问题
求助!创建多个图层的问题 acdbobjectid ccreateent::creatlayer (char layername[100],int nnewcolor,int weight,char linetype[50]) { // 获得当前图形的层表 acdblayertable *playertbl; acdbhostapplicationservices()->workingdatabase() ->getlayertable(playertbl, acdb::kforwrite); // 创建新的层表记录 acdbobjectid layertblrcdid; acdblayertablerecord *playertblrcd; playertblrcd = new acdblayertablerecord(); playertblrcd->setname(layername); accmcolor color; color.setcolorindex(nnewcolor); playertblrcd->setcolor(color); acdb:ineweight lineweight =(acdb:ineweight)weight; playertblrcd->setlineweight(lineweight); acdblinetypetable *plinetypetbl; acdbhostapplicationservices()->workingdatabase() ->getlinetypetable(plinetypetbl, acdb::kforwrite); acdbobjectid linetypeid; plinetypetbl->getat(linetype, linetypeid); playertblrcd->setlinetypeobjectid(linetypeid); // 将新建的层表记录添加到层表中 playertbl->add(layertblrcdid, playertblrcd); playertbl->close(); playertblrcd->close(); return layertblrcdid; } 这是 我 编写的 创建图层的 函数,我在调用时如果调用一次 运行可以成功,但当调用2次 或多次的时候 cad就运行错误,请 高手给解决一下! 谢谢了! 以下我是的调用过程,在下初学者,请多多指教! char name2[]="02"; char name3[]="03"; char linetype1[]="center"; char linetype2[]="dashed"; char linetype3[]="continuous"; ccreateent::creatlayer(name1,1,0,linetype1); ccreateent::creatlayer(name2,50,0,linetype2); ccreateent::creatlayer(name3,100,30,linetype3); 你不是已经解决了? 解决了 我没没有关闭 线性表指针~ 另外我改了一下 函数: acdbobjectid ccreateent::creatlayer (char layername[100],int nnewcolor, int weight,char linetype[50]) { // 获得当前图形的层表 acdblayertable *playertbl; acdbobjectid layertblrcdid; acdbhostapplicationservices()->workingdatabase() ->getlayertable(playertbl, acdb::kforwrite); if ((playertbl->getat(layername,layertblrcdid))!=acad::eok) { // 创建新的层表记录 acdbobjectid layertblrcdid; acdblayertablerecord *playertblrcd; playertblrcd = new acdblayertablerecord(); playertblrcd->setname(layername); accmcolor color; color.setcolorindex(nnewcolor); playertblrcd->setcolor(color); acdb:ineweight lineweight =(acdb:ineweight)weight; playertblrcd->setlineweight(lineweight); acdblinetypetable *plinetypetbl; acdbhostapplicationservices()->workingdatabase() ->getlinetypetable(plinetypetbl, acdb::kforwrite); acdbobjectid linetypeid; plinetypetbl->getat(linetype, linetypeid); playertblrcd->setlinetypeobjectid(linetypeid); plinetypetbl->close(); // 将新建的层表记录添加到层表中 playertbl->add(layertblrcdid, playertblrcd); playertbl->close(); playertblrcd->close(); acutprintf("\n [%s层] 创建成功!",layername); return layertblrcdid; }else{ acdbobjectid layertblrcdid; playertbl->getat(layername,layertblrcdid); return layertblrcdid; acutprintf("\n [%s层] 以创建!",layername); } } |
| 所有的时间均为北京时间。 现在的时间是 09:46 AM. |