明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1722|回复: 2

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

[复制链接]
发表于 2004-7-8 10:49:00 | 显示全部楼层 |阅读模式
请高手指点
发表于 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[10];<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[5]="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命令相同的效果,中间的是我的专业用途,可能用不了,所以删了
发表于 2004-7-25 16:58:00 | 显示全部楼层
用jig实现比较好.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 06:32 , Processed in 0.147459 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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