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

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   ObjectARX(C++) (http://www.dimcax.com/hust/forumdisplay.php?f=34)
-   -   【转帖】如何进入指定点所在的浮动视口 (http://www.dimcax.com/hust/showthread.php?t=7487)

yang686526 2009-04-17 10:17 PM

【转帖】如何进入指定点所在的浮动视口
 
如何进入指定点所在的浮动视口
如何进入指定点所在的浮动视口
我想在图纸空间进入指定点所在的浮动视口,代码如下:
// ----- drv._equivalence command (do not rename)
static void drv_equivalence(void)
{
// add your code for command drv._equivalence here
ads_name en;
ads_point pt;
ads_matrix xform;
struct resbuf * rb=null;
int rtvalue=acednentselp("请选择模板对象:\n",en,pt,false,xform,&rb);
if (rtvalue!=rtnorm)
{
acdbdatabase *dbase=acdbhostapplicationservices()->workingdatabase();
if (!dbase->tilemode())
{
acdbviewport* pvp=null;
acaplayoutmanager * playoutmanager=null;
struct resbuf rbold,rbnew;
rbnew.restype=rtshort;
rbnew.resval.rint=0;
acedgetvar("osmode",&rbold);
acedsetvar("osmode",&rbnew);
rtvalue=acedgetpoint(null,"请选择模型空间对象上的点:\n",pt);
acedsetvar("osmode",&rbold);
if (rtvalue==rtnorm)
{
acgepoint3d pt3d=aspnt3d(pt);
playoutmanager=(acaplayoutmanager*)acdbhostapplicationservices()->layoutmanager();
acdbobjectidarray ids;
playoutmanager->pointinviewports(pt3d,ids);
int i=-1,len;
if (len=ids.length())
{
rtvalue=null;
do
{
if (++i>=len)
return;
acdbopenobject(pvp,ids,acdb::kforwrite);
acad::errorstatus es=pvp->seton();
if(es!=acad::eok)
afxmessagebox(_t("seton():")+(cstring)acaderrorstatustext(es));
//运行至下面一句出现问题错误返回值:es=eoutofrange
es=acedsetcurrentvport(pvp);
if(es==acad::eok)
rtvalue=acednentselp(null,en,pt,true,xform,&rb);
else
acedalert(_t("acedsetcurrentvport():")+(cstring)acaderrorstatustext(es));
pvp->close();
} while (rtvalue!=rtnorm);
}
}
}
}
if(rb)
{
acutrelrb(rb);
rb=null;
}
else
return;
}
复制代码
调试运行至“es=acedsetcurrentvport”出现错误返回值es=eoutofrange,请问为什么?
[ 本帖最后由 hi_tek 于 8-9-18 03:04 pm 编辑 ]
请高手给个实例!!!
站长教材里的那个viewport例子在vc++2编译后在autocad4里运行也得到eoutofrange的错误返回值,不知用vc++6.0编译后在autocad2里运行怎么样?
请哪位用autocad2试试?
用vc++6.0编译张帆站长教材里“第四章 4.5小节第二个命令‘createvportinspace’(第174页)”,执行这个命令后是否将新生成的视口置为当前(新视口高亮显示)?
我用vc++2编译后运行于autocad4上,函数acedsetcurrentvport()返回值为eoutofrange,没有把新视口置为当前,没进入到新视口中去,未达到程序设计目的。
经艰苦试验,证实要想acedsetcurrentvport()返回eok,必须已进入浮动视口的模型空间,也就是说:acedsetcurrentvport()仅能实现浮动视口之间的切换!
[ 本帖最后由 hi_tek 于 8-9-28 02:02 pm 编辑 ]
这个坛子有人解决问题么
很多问题都是类似楼主自问自答
或者干脆不了了之
我放上的帖子约有一半都是自答式的,真是无奈!
也是锻炼能力的方法
不过这个论坛的交流作用似乎已经衰退了
偶尔会冒出一点作品展示和自问自答的文章
可惜啊
其实objectarx的书和其他编程书籍相比,少得可怜。
基本上入门无非是 软件下载 安装设置 文档 函数使用 那几本 教材里面的问题
[ 本帖最后由 catface 于 8-10-29 09:47 pm 编辑 ]


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