![]() |
这个程序谁帮我测一下阿
这个程序谁帮我测一下阿
这个程序谁帮我测一下阿 在cad里可以加载,但是输入命令之后cad就弹出窗口说致命错误,我是初学者,谢谢你们了 .cpp文件 //包含头文件 #include "stdafx.h" #include <string.h> #include <aced.h> #include <dbents.h> #include <dbsymtb.h> #include <dbgroup.h> #include <dbapserv.h> #include <dbid.h> #include <gepnt3d.h > #include <rxdlinkr.h > #include <rxregsvc.h> //函数声明 acdbobjectid createnewline(); acdbobjectid createnewcricle(); acdbobjectid createnewlayer(); void createnewgroup(); acad::errorstatus changecolor(acdbobjectid,adesk::uint16); //创建直线对象,并返回对象id acdbobjectid createnewline() { //定义直线起点,终点 acgepoint3d ptstart(5, 4, 0); acgepoint3d ptend(15, 10, 0); acdbline *pline = new acdbline(ptstart, ptend); // 获得指向块表的指针 acdbblocktable *pblocktable; acdbhostapplicationservices()->workingdatabase() ->getsymboltable(pblocktable, acdb::kforread); // 获得指向特定的块表记录(模型空间)的指针 acdbblocktablerecord *pblocktablerecord; pblocktable->getat(acdb_model_space, pblocktablerecord, acdb::kforwrite); // 将acdbline类的对象添加到块表记录中 acdbobjectid lineid; pblocktablerecord->appendacdbentity(lineid, pline); // 关闭图形数据库的各种对象 pblocktable->close(); pblocktablerecord->close(); pline->close(); return lineid; } acdbobjectid createnewcricle() { acgepoint3d center(10.0, 7.0, 0.0); acgevector3d normal(0.0, 0.0, 5.0); acdbcircle *pcirc = new acdbcircle(center, normal,4.5); // 获得指向块表的指针 acdbblocktable *pblocktable; acdbhostapplicationservices()->workingdatabase() ->getsymboltable(pblocktable, acdb::kforread); // 获得指向特定的块表记录(模型空间)的指针 acdbblocktablerecord *pblocktablerecord; pblocktable->getat(acdb_model_space, pblocktablerecord, acdb::kforwrite); // 将acdbline类的对象添加到块表记录中 acdbobjectid circleid; pblocktablerecord->appendacdbentity(circleid, pcirc); // 关闭图形数据库的各种对象 pblocktable->close(); pblocktablerecord->close(); pcirc->close(); return circleid; } acdbobjectid createnewlayer() { acdblayertable *playertable; acdbhostapplicationservices()->workingdatabase() ->getsymboltable(playertable, acdb::kforwrite); // 获得指向特定的块表记录(模型空间)的指针 acdblayertablerecord *playertablerecord; playertablerecord->setname("mynewlayer"); //层表记录的其他属性(例如颜色,线形等)若未设置都取缺省值 //如:颜色为white,线形为continous等 //将新建的层表记录添加到层表中 //并将表层记录的id保存到playerid作为函数的返回值 acdbobjectid playerid; playertable->add(playerid,playertablerecord); //关闭层表和层表记录对象 playertable->close(); playertablerecord->close(); //返回新建层表记录对象的id return playerid; } void createnewgroup(acdbobjectidarray& objids,char* pgroupname,acdbobjectid playerid) { //初始化数组对象实例,以参数pgroupname为数组名 acdbgroup *pgroup=new acdbgroup(pgroupname); //向组对象中加入实体 for(int i=0 ;i<objids.length();i++) { pgroup->append(objids[i]); } //打开组词典 (存放于对象词典中) acdbdictionary *pgroupdict; acdbhostapplicationservices()->workingdatabase() ->getgroupdictionary(pgroupdict, acdb::kforwrite); //将新建的组词典条目加入到组词典中 acdbobjectid pgroupid; pgroupdict->setat(pgroupname,pgroup,pgroupid); //将组pgroup的层属性修改为playerid所代表的层 pgroup->setlayer(pgroupid); pgroupdict->close(); pgroup->close(); } //修改实体对象颜色,并返回一个状态码 acad::errorstatus changecolor(acdbobjectid endid,adesk::uint16 newcolor) { //定义一个实体对象,并利用参数entid打开这个实体对象 acdbentity *pentity; acdbopenobject(pentity,endid,acdb::kforwrite); //修改实体对象的颜色 pentity->setcolorindex(newcolor); //关闭实体对象 pentity->close(); //返回acad::eok, 对于有容错处理的程序,可能在函数当中就返回另外的状态码 return acad::eok; } //命令makenewents的执行函数 void runit() { //新建图层 acdbobjectid newlayerid=createnewlayer(); //定义一个对象id序列idarray acdbobjectidarray idarray; //创建一条直线和一个圆 //将新建的直线,圆对象加入idarray中 idarray.append(createnewline()); idarray.append(createnewcricle()); //由于新建的两个对象均在0层,他们的缺省颜色值为bylayer //将直线对象的颜色改为红色(1) //将圆对象的颜色改为绿色(3) changecolor(idarray.first(),1); changecolor(idarray.last(),3); //将直线和圆对象放到组"mynewgroup"中, //并将组的层属性改为"mynewgroup"层, //组中的两个实体对象的层属性也相应的改为"mynewgroup"层 //创建新层的函数也可以写成带名称参数 createnewgroup(idarray,"mynewgroup",newlayerid); } //初始化函数 void initapp() { acedregcmds->addcommand("asdk_make-entities", "asdk_makenewents", "makenewents", acrx_cmd_modal, runit); } void unloadapp() { acedregcmds->removegroup("asdk_make_entities"); } //应用程序主函数 extern "c" acrx::appretcode acrxentrypoint(acrx::appmsgcode msg,void *appid) { switch(msg) { case acrx::kinitappmsg: acrxdynamiclinker->unlockapplication(appid); acrxdynamiclinker->registerappmdiaware(appid); initapp(); break; case acrx::kunloadappmsg: unloadapp(); } return acrx::kretok; } .def文件 library line exports acrxentrypoint private acrxgetapiversion private 应该是:acdblayertablerecord *playertablerecord=new acdblayertablerecord; silence of happiness.... 谢谢你了,你在哪,请你吃饭 |
所有的时间均为北京时间。 现在的时间是 06:02 PM. |