几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(C++)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 2009-04-16, 01:19 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】[原创][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;
}

太好了,刚好在学这里,真是太感谢了!!
相当谢谢
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 10:26 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多