znwifan 发表于 2004-7-8 10:49:00

怎么在ARX中实现CAD中的Pline命令的功能?

请高手指点

jx_lgq 发表于 2004-7-24 21:47:00

<BR>BOOL CCurveHanlder::DrawLWPline(double lineWid/*实际的线宽,没有与比例尺运算*/,<BR>                                                                CString strLayerName,<BR>                                                                CString strCode,<BR>                                                                CString strLtypeName,<BR>                                                                AcDbObjectId &amp;crvId)<BR>{        <BR>        AcTransaction *pTran;<BR>        AcDbPolyline *pLwPl;<BR>        pLwPl=new AcDbPolyline;<BR>        AcGePoint3d pickPnt;<BR>        AcGePoint3dArray vtxArray;<BR>        AcGePlane plane;<BR>        if(acedGetPoint(NULL,"\n第一点:",asDblArray(pickPnt))!=RTNORM)<BR>                return FALSE;<BR>        vtxArray.append(pickPnt);<BR>        pLwPl-&gt;addVertexAt(pLwPl-&gt;numVerts(),pickPnt.convert2d(plane));<BR>        if(lineWid&gt;0)<BR>                pLwPl-&gt;setConstantWidth(lineWid);<BR>        pLwPl-&gt;setPlinegen(TRUE);<BR>        Acad::ErrorStatus es=pLwPl-&gt;setLinetype(strLtypeName);<BR>        pTran=actrTransactionManager-&gt;startTransaction();<BR>        AddToModalSpace (pLwPl,crvId);<BR>        actrTransactionManager-&gt;addNewlyCreatedDBRObject(pLwPl);<BR>        while(TRUE)<BR>        {<BR>                pLwPl-&gt;getPointAt(pLwPl-&gt;numVerts()-1,pickPnt);<BR>                acedInitGet(NULL,"Undo Close Track GyClose Jgyd Wdx Yh");<BR>                int rc=acedGetPoint(asDblArray(pickPnt),<BR>                        "\n下一点或[&lt;U&gt;回退/&lt;C&gt;闭合/&lt;G&gt;隔一闭合/&lt;T&gt;跟踪/&lt;J&gt;隔一点/&lt;W&gt;微导线/&lt;Y&gt;圆弧]:",<BR>                        asDblArray(pickPnt));<BR>                <BR>                if(rc!=RTNORM)<BR>                {<BR>                        if(rc==RTKWORD)//回退一个点<BR>                        {<BR>                                char kw;<BR>                                acedGetInput(kw);<BR>                                if(strcmp(kw,"Undo")==0)//回退<BR>                                {<BR>                                        if(pLwPl-&gt;numVerts()&gt;0)<BR>                                        {<BR>                                                pLwPl-&gt;removeVertexAt(pLwPl-&gt;numVerts()-1);<BR>                                                vtxArray.removeAt(vtxArray.length()-1);<BR>                                                pLwPl-&gt;draw();<BR>                                                actrTransactionManager-&gt;flushGraphics();<BR>                                        }<BR>                                        continue;<BR>                                }<BR>                                else if(strcmp(kw,"Close")==0)//闭合<BR>                                {<BR>                                        pLwPl-&gt;setClosed(TRUE);<BR>                                        break;<BR>                                }


.............


...............<BR>                else<BR>                {<BR>                        pLwPl-&gt;addVertexAt(pLwPl-&gt;numVerts(),pickPnt.convert2d(plane));<BR>                        vtxArray.append(pickPnt);<BR>                }<BR>                pLwPl-&gt;draw();<BR>                actrTransactionManager-&gt;flushGraphics();<BR>        }<BR>        pLwPl-&gt;close();<BR>        if(!strCode.IsEmpty ())<BR>                SetCodeToEntity(crvId,strCode);<BR>        SetEntLayer(crvId,strLayerName.GetBuffer (strLayerName.GetLength ()));<BR>        actrTransactionManager-&gt;endTransaction();<BR>        char kw="No";<BR>        acedInitGet(NULL,"Yes No");<BR>        acedGetKword("\n是否拟合?[&lt;Y&gt;是/&lt;N&gt;否]&lt;N&gt;:",kw);<BR>        if(strcmp(kw,"Yes")==0)<BR>        {<BR>                AcDbObjectId tmpId;<BR>                if(SmoothCurve(vtxArray,crvId,lineWid,tmpId))<BR>                {<BR>                        if(acdbOpenObject(pLwPl,crvId,AcDb::kForWrite)==Acad::eOk)<BR>                        {<BR>                                pLwPl-&gt;erase();<BR>                                pLwPl-&gt;close();<BR>                                crvId=tmpId;<BR>                        }<BR>                }<BR>        }        <BR>        return TRUE;<BR>}


给你一段代码,可以实现Pline命令相同的效果,中间的是我的专业用途,可能用不了,所以删了

easypower 发表于 2004-7-25 16:58:00

用jig实现比较好.
页: [1]
查看完整版本: 怎么在ARX中实现CAD中的Pline命令的功能?