几何尺寸与公差论坛------致力于产品几何量公差标准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, 11:35 AM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】[arx]

[arx]
[arx]
本人刚在学习objectarx,出现如下问题望各位看看:
1:在acdbentity派生类中定义了getgrippoints()函数,但在cad中看不到夹点,
是何原因(下附原程序).
2:在worlddraw()函数中采用acdbtext *ptext=new acdbtext()与
mode->geometry().text()定义实体有何区别.
类定义:
class dllimpexp dingteclass : public acdbcurve
{
public:
acrx_declare_members(dingteclass);
// constructor / destructor
dingteclass();
virtual ~dingteclass();
//{{afx_arx_methods(dingteclass)
virtual acad::errorstatus dxfoutfields(acdbdxffiler* pfiler) const;
virtual acad::errorstatus dxfinfields(acdbdxffiler* pfiler);
virtual acad::errorstatus dwgoutfields(acdbdwgfiler* pfiler) const;
virtual acad::errorstatus dwginfields(acdbdwgfiler* pfiler);
virtual acad::errorstatus getstartpoint(acgepoint3d& x0) const;
virtual acad::errorstatus getendpoint(acgepoint3d& x0) const;
virtual acad::errorstatus getgrippoints(acgepoint3darray& grippoints,
acdbintarray& osnapmodes,
acdbintarray& geomids) const;
virtual acad::errorstatus movegrippointsat(const acdbintarray& indices,
const acgevector3d& offset);

virtual acad::errorstatus transformby(const acgematrix3d& xform);
virtual adesk::boolean worlddraw(acgiworlddraw* mode);
//}}afx_arx_methods
//{{afx_arx_data_access(dingteclass)
acad::errorstatus setentpoint(const acgepoint3d entpoint);
acad::errorstatus entpoint(acgepoint3d& entpoint);
acad::errorstatus setstartpoint(const acgepoint3d startpoint);
acad::errorstatus startpoint(acgepoint3d& startpoint);
//}}afx_arx_data_access
private:
//{{afx_arx_data(dingteclass)
acgepoint3d m_entpoint;
acgepoint3d m_startpoint;
//}}afx_arx_data
private:
void *operator new[](unsigned nsize) { return 0; }
void operator delete[](void *p) {};
void *operator new[](unsigned nsize, const char *file, int line) { return 0; }
};
类实现:
adesk::boolean dingteclass::worlddraw(acgiworlddraw* mode)
{
assertreadenabled();
// todo: implement this function.
//acgepoint3d startpoint,entpoint;
//this->startpoint(startpoint);
//this->entpoint(entpoint);
//acgevector3d normal(0.0, 0.0, 1.0);
//acgevector3d direction=m_startpoint-m_entpoint;
//mode->geometry().text(m_startpoint,normal,direction,5,0.8,0,"toolte");
//acgepoint3d *pverts=new acgepoint3d[2];
//pverts[0]=m_startpoint;
//pverts[1]=m_entpoint;
//mode->geometry().polyline(2,pverts);
acdbtext *ptext=new acdbtext();
ptext->settextstring("hello");
ptext->setposition(m_startpoint);
ptext->setheight(5.0);
ptext->worlddraw(mode);
acdbline *line;
line=new acdbline(m_startpoint,m_entpoint);
line->worlddraw(mode);
return acdbentity::worlddraw(mode);
}
acad::errorstatus dingteclass::startpoint(acgepoint3d& startpoint)
{
assertreadenabled();
startpoint = m_startpoint;
return acad::eok;
}
acad::errorstatus dingteclass::setstartpoint(const acgepoint3d startpoint)
{
assertwriteenabled();
m_startpoint = startpoint;
return acad::eok;
}
acad::errorstatus dingteclass::entpoint(acgepoint3d& entpoint)
{
assertreadenabled();
entpoint = m_entpoint;
return acad::eok;
}
acad::errorstatus dingteclass::setentpoint(const acgepoint3d entpoint)
{
assertwriteenabled();
m_entpoint = entpoint;
return acad::eok;
}
acad::errorstatus dingteclass::transformby(const acgematrix3d& xform)
{
assertwriteenabled();
// todo: implement this function.
m_startpoint.transformby(xform);
m_entpoint.transformby(xform);
return acdbentity::transformby(xform);
}
acad::errorstatus dingteclass::movegrippointsat(const acdbintarray& indices,
const acgevector3d& offset)
{
assertwriteenabled();
// todo: implement this function.
dingteclass* te=new dingteclass();
acgepoint3d entpoint,startpoint;
te->getendpoint(entpoint);
te->getstartpoint(startpoint);
startpoint +=offset;
entpoint +=offset;
te->setentpoint(entpoint);
te->setstartpoint(startpoint);
return acdbentity::movegrippointsat(indices, offset);
}
acad::errorstatus dingteclass::getgrippoints(acgepoint3darray& grippoints,
acdbintarray& osnapmodes,
acdbintarray& geomids) const
{
assertreadenabled();
// todo: implement this function.
acgepoint3d entpoint,startpoint;
acgevector3d normal(0.0, 0.0, 1.0);
startpoint=m_startpoint;
entpoint=m_entpoint;
acdbecs2wcs(asdblarray(startpoint),
asdblarray(startpoint),asdblarray(normal),adesk::kfalse);
acdbecs2wcs(asdblarray(entpoint),
asdblarray(entpoint),asdblarray(normal),adesk::kfalse);
grippoints.append(startpoint);
grippoints.append(entpoint);

return acdbentity::getgrippoints(grippoints, osnapmodes, geomids);
}
acad::errorstatus dingteclass::getendpoint(acgepoint3d& x0) const
{
assertreadenabled();
// todo: implement this function.
x0=m_entpoint;
return acdbcurve::getendpoint(x0);
}
acad::errorstatus dingteclass::getstartpoint(acgepoint3d& x0) const
{
assertreadenabled();
// todo: implement this function.
x0=m_startpoint;
return acdbcurve::getstartpoint(x0);
}
acad::errorstatus dingteclass::dwginfields(acdbdwgfiler* pfiler)
{
assertwriteenabled();
acad::errorstatus es;
// call dwginfields from acdbcurve
if ((es = acdbcurve::dwginfields(pfiler)) != acad::eok) {
return es;
}
// read version number.
adesk::uint16 version;
pfiler->readitem(&version);
if (version > version_dingteclass)
return acad::emakemeproxy;
// read the data members.
switch (version)
{
case (1):
pfiler->readitem(&m_startpoint);
pfiler->readitem(&m_entpoint);
// todo: here you can file datamembers not
// created by the objectarx add-in.
break;
}
return pfiler->filerstatus();
}
acad::errorstatus dingteclass::dwgoutfields(acdbdwgfiler* pfiler) const
{
assertreadenabled();
acad::errorstatus es;
// call dwgoutfields from acdbcurve
if ((es = acdbcurve::dwgoutfields(pfiler)) != acad::eok) {
return es;
}
// write version number.
pfiler->writeitem((adesk::uint16) version_dingteclass);
// write the data members.
pfiler->writeitem(m_startpoint);
pfiler->writeitem(m_entpoint);
// todo: here you can file datamembers not
// created by the objectarx add-in.
return pfiler->filerstatus();
}
acad::errorstatus dingteclass::dxfinfields(acdbdxffiler* pfiler)
{
assertwriteenabled();
struct resbuf rb;
if ((acdbcurve::dxfinfields(pfiler) != acad::eok) ||
!pfiler->atsubclassdata("dingteclass"))
return pfiler->filerstatus();
// read version number.
pfiler->readitem(&rb);
if (rb.restype != acdb::kdxfint16) {
pfiler->pushbackitem();
pfiler->seterror(acad::einvaliddxfcode,
"nerror: expected object version group code %d",
acdb::kdxfint16);
return pfiler->filerstatus();
} else {
adesk::uint16 version = rb.resval.rint;
if (version > version_dingteclass)
return acad::emakemeproxy;
}
pfiler->readitem(&rb);
if (rb.restype == acdb::kdxfxcoord) {
m_startpoint = aspnt3d(rb.resval.rpoint);
} else {
pfiler->pushbackitem();
pfiler->seterror(acad::einvaliddxfcode,
"nerror: expected group code %d",
acdb::kdxfxcoord);
return pfiler->filerstatus();
}
pfiler->readitem(&rb);
if (rb.restype == acdb::kdxfxcoord + 1) {
m_entpoint = aspnt3d(rb.resval.rpoint);
} else {
pfiler->pushbackitem();
pfiler->seterror(acad::einvaliddxfcode,
"nerror: expected group code %d",
acdb::kdxfxcoord + 1);
return pfiler->filerstatus();
}
// todo: here you can file datamembers not
// created by the objectarx add-in.
return pfiler->filerstatus();
}
acad::errorstatus dingteclass::dxfoutfields(acdbdxffiler* pfiler) const
{
assertreadenabled();
acad::errorstatus es;
if ((es = acdbcurve::dxfoutfields(pfiler)) != acad::eok)
return es;
// write subclass marker.
pfiler->writeitem(acdb::kdxfsubclass, "dingteclass");
// write version number.
pfiler->writeitem(acdb::kdxfint16, (adesk::uint16) version_dingteclass);
pfiler->writeitem(acdb::kdxfxcoord, m_startpoint);
pfiler->writeitem(acdb::kdxfxcoord + 1, m_entpoint);
// todo: here you can file datamembers not
// created by the objectarx add-in.
return es;
}
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


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

高级搜索
显示模式

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

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



所有的时间均为北京时间。 现在的时间是 05:03 AM.


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