高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
这个程序谁帮我测一下阿
这个程序谁帮我测一下阿
这个程序谁帮我测一下阿
在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....
谢谢你了,你在哪,请你吃饭
|