fivegg 发表于 2004-6-12 13:47:00

急!请教高手

我编的打断线条的代码,为了测试,再求出交点后,在交点位置生成acdbtext,显示交点序号。命令执行后,如果删除生成的文字,autocad就会出现 scran.cpp!eHadMultipltReader的错误,然后死掉。请教高手到底是啥子问题。


代码如下:


Acad::ErrorStatus TOMbreakEnt(ads_name entSrc,ads_name entDis,int &amp;intersectNum)<BR>{<BR>        AcDbEntity *pEntSrc,*pEntDis;<BR>        AcDbObjectId idSrc,idDis;<BR>        if (entSrc==entDis &amp;&amp; entSrc==entDis)<BR>                return Acad::eInetUnknownError;<BR>        if (acdbGetObjectId(idDis,entDis)!=Acad::eOk)<BR>                return Acad::eInetUnknownError;<BR>        if (acdbOpenObject(pEntDis,idDis,AcDb::kForRead)!=Acad::eOk)<BR>                return Acad::eInetUnknownError;<BR>        if (!pEntDis-&gt;isKindOf(AcDbCurve::desc()) )<BR>                return Acad::eInetUnknownError;


        if (acdbGetObjectId(idSrc,entSrc)!=Acad::eOk)<BR>                return Acad::eInetUnknownError;<BR>        if (acdbOpenObject(pEntSrc,idSrc,AcDb::kForRead)!=Acad::eOk)<BR>                return Acad::eInetUnknownError;


        AcGePoint3dArray aIntersect;<BR>        AcGePoint3d or(0,0,0);<BR>        AcGeVector3d vx(1,0,0),vy(0,1,0);<BR>        AcGePlane pl(or,vx,vy);<BR>        ads_name entLast;<BR>        ads_point p1;<BR>        //pEntDis-&gt;intersectWith(pEntSrc,AcDb::kOnBothOperands,pl,aIntersect);<BR>        pEntSrc-&gt;intersectWith(pEntDis,AcDb::kOnBothOperands,pl,aIntersect);<BR>        pEntSrc-&gt;close();<BR>        pEntDis-&gt;close();<BR>        if (aIntersect.length()&gt;intersectNum)<BR>                intersectNum=aIntersect.length();<BR>        AcDbText *pText;<BR>        char text;<BR>        if (!aIntersect.isEmpty()){<BR>                for (long i=aIntersect.length()-1;i&gt;=0;i--){<BR>                        p1=(aIntersect);<BR>                        p1=(aIntersect);<BR>                        p1=(aIntersect);<BR>                        acedCommand(RTSTR,"_break",RTLB, RTENAME, entDis, RTPOINT, p1, RTLE,RTPOINT,p1,RTNONE);


                //测试用代码,如果把文字的插入点改为一样的,比如AcGePoint3d        point1


        //pText=new AcDbText(point1,text,AcDbObjectId::kNull,1,0)就不会出错了<BR>                        sprintf(text,"%d",i);<BR>                        pText=new AcDbText(aIntersect,text,AcDbObjectId::kNull,1,0);<BR>                        AddEntity(pText);<BR>                        pText-&gt;close();<BR>                }<BR>        }<BR>        return Acad::eOk;<BR>}<BR>

easypower 发表于 2004-6-12 19:57:00

acedCommand(RTSTR,"_break",RTLB, RTENAME, entDis, RTPOINT, p1, RTLE,RTPOINT,p1,RTNONE);


you delete this line.maybe error caused because of this line.


try.


good luck!

fivegg 发表于 2004-6-15 17:25:00

我解决乐,是有些entdis已经在上层函数中打开了,结果不能调用break打断它
页: [1]
查看完整版本: 急!请教高手