找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1352|回复: 5

[ARX程序]:郁闷啊。调试一天了还是找不出问题。内部错误

[复制链接]
发表于 2005-1-7 17:02:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
调试了一天,再仔细看了看代码,该关闭的指针什么的,都关闭了啊。奇怪,就是出问题,郁闷~~~~
上面的哪个代码太长了。选择传个只有几行代码的程序。麻烦高手指点迷津。

多谢。
这个文件很短,可是一运行就出错!
代码就这么点:
// This is command 'S1'
void cs1()
{
        ads_name en;
        ads_point pt;
        AcGePoint3d startPt(0,0,0),endPt(0,0,0),centerPt(0,0,0);
        AcDbLine *pLine;
        if(ads_entsel("\nÇëÑ¡ÔñʵÌå:",en,pt)!=RTNORM)
        {
                ads_printf("ûÓÐÑ¡ÖÐÈκÎʵÌå\n");
                return;
        }
        AcDbObjectId eld;
        if(acdbGetObjectId(eld,en)!=Acad::eOk)
                        acutPrintf("getobject id error\n");
        AcDbEntity *pEnt;
        acdbOpenObject(pEnt, eld, AcDb::kForWrite);
                if(strcmp(pEnt->isA()->name(),"AcDbLine")==0)
        {
                ads_printf(pEnt->linetype());
                pEnt->setLinetype("center");
                pEnt->setLinetypeScale(5.0);
                pLine=AcDbLine::cast(pEnt);
        ads_getpoint(NULL,"\nÊäÈëÖÕµã:",asDblArray(endPt));
                pLine->setStartPoint(startPt);
        ads_getpoint(NULL,"\nÊäÈëÖÕµã:",asDblArray(endPt));
                pLine->setEndPoint(endPt);
        }
        pEnt->close();
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-1-7 18:43:44 | 显示全部楼层
程序没问题,就是不可调试,可能是工程设置有误
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-1-7 22:15:59 | 显示全部楼层

非常感谢!

最初由 binbin 发布
[B]程序没问题,就是不可调试,可能是工程设置有误 [/B]


非常感谢您的帮忙,嗯。程序没有问题啊。我也觉的是,不过工程也没有问题,因为我这里可以调试,编译,就是运行命令的时候说什么内部错误,eWasOpenForWrite,。。。
工程里面就这2个函数,呵呵。看来是我这个autocad2002 D版有问题了。谢了!明天我换个机器看看。
再次感谢。

而且那么请看如下代码:

void arx93()
{
        double d1,d2,d3,d4,d,l1,l2,fillet_r,n;
        d1=50;
        d2=70;
        d3=110;
        d4=90;
        d=8;
        l1=110;
        l2=20;
        fillet_r=2;
        n=6;
        double af=(2*3.14)/n, chamfer_d=2;
        AcGePoint2dArray pt2d;
        pt2d.setLogicalLength(10);
        pt2d[0].set(-0.5*d1,0);
        pt2d[1].set(-0.5*d1,l1-chamfer_d);
        pt2d[2].set(-0.5*d1-chamfer_d,l1);
        pt2d[3].set(-0.5*d2+chamfer_d,l1);
        pt2d[4].set(-0.5*d2,l1-chamfer_d);
        pt2d[5].set(-0.5*d2,l2+fillet_r);
        pt2d[6].set(-0.5*d2-fillet_r, l2);
        pt2d[7].set(-0.5*d3+chamfer_d,l2);
        pt2d[8].set(-0.5*d3,l2-chamfer_d);
        pt2d[9].set(-0.5*d3,0);
        AcGeVector3d normal(0,0,1);
        AcDbPolyline *poly=new AcDbPolyline;
        for(int i=0; i<10; i++) {
                poly->addVertexAt(i,pt2d,0,0,0);
        }
        poly->setClosed(Adesk::kTrue);
        poly->setNormal(normal);
        AcDbVoidPtrArray lines, regions;
        lines.append((void*)poly);
        AcDbRegion::createFromCurves(lines,regions);
        AcDbRegion* pRegion=AcDbRegion::cast((AcRxObject*)regions[0]);
        pRegion->close();
        AcDb3dSolid *p3dObj=new AcDb3dSolid;
        AcGePoint3d axisPoint(0,0,0);
        AcGeVector3d axisDir(0,1,0);
        if(Acad::eOk==p3dObj->revolve(pRegion,axisPoint,axisDir,2*3.14))
                AddEntityToDbs(p3dObj);
       
        AcGeMatrix3d mat;
        AcGeVector3d x(1,0,0),y(0,0,1),z(0,1,0);
        AcGePoint3d moveBy;
        moveBy.y=0.5*l2;
                moveBy.x=0.5*d4*cos(af*1);
                moveBy.z=0.5*d4*sin(af*1);
                AcDb3dSolid *p3dObj1=new AcDb3dSolid;
        p3dObj1->createFrustum(l2,0.5*d,0.5*d,0.5*d);
                mat.setCoordSystem(moveBy,x,y,z);
                p3dObj1->transformBy(mat);
                AddEntityToDbs(p3dObj1);
                //if(p3dObj->booleanOper(AcDb::kBoolUnite        ,p3dObj1)==Acad::eGeneralModelingFailure)
                //        ads_printf("\n建模失败\n");
                p3dObj1->close();               
//上面这个布尔操作一运行就出错!!奇怪啊。按理这2个实体是可以进行布尔并运算的,因为我手动用autocad的union命令都可以将他们2个unite。这是为什么?程序中实现就出错呢?出错信息也是“内部错误,...ewasopenforwrite"多谢
//代码有点繁琐,但是前面的数字那些不用管,逻辑肯定没有问题~~如果注释掉布尔运算的那行代码,那么程序会正确的产生2个实体。
        delete poly;
        delete pRegion;

}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-9 23:23:58 | 显示全部楼层
p3dObj没有关闭.

上一个例子中

ads_getpoint(NULL,"\n&Ecirc;&auml;&Egrave;&euml;&Ouml;&Otilde;&micro;&atilde;:",asDblArray(endPt));
pLine->setStartPoint(startPt);
ads_getpoint(NULL,"\n&Ecirc;&auml;&Egrave;&euml;&Ouml;&Otilde;&micro;&atilde;:",asDblArray(endPt));
pLine->setEndPoint(endPt);

你看startPt没有被赋值,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-10 09:26:27 | 显示全部楼层
又学到东西了。怎么有些是乱码?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-1-10 16:12:00 | 显示全部楼层

非常感谢

最初由 binbin 发布
[B]p3dObj没有关闭.

上一个例子中

ads_getpoint(NULL,"\n&Ecirc;&auml;&Egrave;&euml;&Ouml;&Otilde;&micro;&atilde;:",asDblArray(endPt));
pLine->setStartPoint(startPt);
ads_getpoint(NULL,"\n&Ecirc;&a... [/B]



谢谢了!!!!初学的时候就这些小毛病多,但是这些小毛病足够让程序死掉也足够让我一个晚上不睡觉~~~
呜呜~~多谢老手不厌其烦地指教!

对了,有没有人学习李世国编的那本ARX教程阿?有的话交流下,互相学习。
有没有人调试过里面的代码?如果有能否发给我一份。谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-6-2 20:58 , Processed in 0.383596 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表