![]() |
【转帖】pglyxq 朋友,重载捕捉函数出错,帮看看
pglyxq 朋友,重载捕捉函数出错,帮看看
pglyxq 朋友,重载捕捉函数出错,帮看看 重载捕捉函数出错 acgepoint3d cmarectwindow::startpt() { assertreadenabled(); return m_startpt; } acad::errorstatus cmarectwindow::getosnappoints(acdb::osnapmode osnapmode, int gsselectionmark,const acgepoint3d& pickpoint, const acgepoint3d& lastpoint,const acgematrix3d& viewxform, acgepoint3darray& snappoints,acdbintarray& geomids) const { assertreadenabled(); acad::errorstatus es=acad::eok ; if (gsselectionmark == 0) return es; if (osnapmode != acdb::kosmodeins) return es; acgepoint3d pt; //插入点 pt = startpt(); //这里出错了,信息如下 snappoints.append( pt ); return es; } 你在worlddraw里是这样 pt = startpt() 调用点的,为什么在这里调用会出错? error c2662: “cmarectwindow::startpt” : 不能将“this”指针从“const cmarectwindow”转换为“cmarectwindow & 要定义插入点的目标捕捉函数可作如下修改: 在类的申明里增加如下内容: virtual acad::errorstatus getosnappoints(acdb::osnapmode osnapmode, int gsselectionmark, const acgepoint3d& pickpoint, const acgepoint3d& lastpoint, const acgematrix3d& viewxform, acgepoint3darray& snappoints, acdbintarray& geomids) const; acad::errorstatus osnapins(const acgepoint3d& pickpoint, acgepoint3darray& snappoints) const; 在类的实现中增加如下内容: acad::errorstatus cmarectwindow::osnapins(const acgepoint3d& pickpoint, acgepoint3darray& snappoints) const { assertreadenabled(); snappoints.append(m_startpt); return acad::eok; } acad::errorstatus cmarectwindow::getosnappoints(acdb::osnapmode osnapmode, int gsselectionmark, const acgepoint3d& pickpoint, const acgepoint3d& lastpoint, const acgematrix3d& viewxform, acgepoint3darray& snappoints, acdbintarray& geomids) const { assertreadenabled(); switch(osnapmode) { case acdb::kosmodeins: //228 return osnapins(pickpoint, snappoints); default: break; } return acdbentity::getosnappoints(osnapmode, gsselectionmark, pickpoint, lastpoint, viewxform, snappoints, geomids); } 你如果还是不行我这有完整的代码和编译好的程序,我可以给你! 谢谢你。问题已解决。现在正试图移动夹点,但是没有成功。附上代码,有空帮看看。 acad::errorstatus cmarectwindow::movegrippoints(const acdbintarray& indices,const acgevector3d& offset) { assertwriteenabled(); acgevector3d off(offset); switch(indices[0]) { case 1: m_startpt.x +=off.x; break; default: break; } return acad::eok; } 要移动夹点必须先定义夹点,贴上你定义夹点的代码,看看你是如何定义的(还是你根本就没有定义夹点的代码)? |
所有的时间均为北京时间。 现在的时间是 08:00 AM. |