[求助]我写的计算面积的函数总觉得有点不对劲,高手看看?
<p>float Draw2dPLArea()<br/>{<br/> AcGePoint2dArray points;<br/> AcGePoint3d myptCurrent;<br/> ads_point pt,ptStart;<br/> AcGePoint3d pthigh;<br/> int i=0;<br/> double area=0;<br/> ads_point ptPrevious, ptCurrent; // 前一个参考点,当前拾取的点<br/> int index = 2; // 当前输入点的次数<br/> AcDbObjectId polyId; // 多段线的ID<br/> int ptnum=0;<br/> <br/> int rc; // 返回值<br/> ACHAR kword; // 关键字<br/> acedInitGet(RSG_NONULL,_T("C"));</p><p> //提示用户选择想要勾画的工程面积点<br/> if (acedGetPoint(NULL, _T("\n输入第一点:"),ptStart) != RTNORM)<br/> return 0;<br/> acdbPointSet(ptStart, ptPrevious);<br/> <br/> while (acedGetPoint(ptPrevious,_T("\n输入下一点:"), ptCurrent) ==RTNORM)<br/> { </p><p> if (index==2)<br/> {<br/> <br/> // 创建多段线<br/> AcGePoint2d ptGe1, ptGe2; // 两个节点<br/> ptGe1 = ptPrevious;<br/> ptGe1 = ptPrevious;<br/> ptGe2 = ptCurrent;<br/> ptGe2 = ptCurrent;</p><p> points.insertAt(0,ptGe1);<br/> points.insertAt(1,ptGe2);</p><p> /*pPoly->addVertexAt(0, ptGe1);<br/> pPoly->addVertexAt(1, ptGe2);*/<br/> <br/> <br/> }<br/> else if (index>2)<br/> {<br/> // 修改多段线,添加最后一个顶点<br/> <br/> AcGePoint2d ptGe; // 增加的节点<br/> ptGe = ptCurrent;<br/> ptGe = ptCurrent;<br/> /*pPoly->addVertexAt(index - 1, ptGe);*/<br/> points.insertAt(index-1,ptGe);</p><p> }<br/> index++;</p><p> acdbPointSet(ptCurrent, ptPrevious); </p><p><br/> }</p><p><br/> //add points into AcDbLine<br/> int vexnum=points.length();<br/> AcDbPolyline *pPoly=new AcDbPolyline(vexnum);<br/> for(i=0;i<vexnum;i++)<br/> {<br/> pPoly->addVertexAt(i,points.at(i));<br/> }<br/> </p><p> pPoly->getArea(area);</p><p> pPoly->close();</p><p> return area;<br/>}</p><p></p><p>高手帮看看行么?总觉得有些地方不妥。小妹谢谢了!</p><p></p> AcDbPolyline *pPoly=new AcDbPolyline();<br/> for(i=0;i<vexnum;i++)<br/> {<br/> pPoly->addVertexAt(i,points.at(i));<br/> }<br/> 其他的对么?总感觉不是很完整?另外正么将起点设为高亮,方便用户捕捉?谢谢?请各位各抒己见! <p>返回结果是对的。</p><p>最好设置多线为闭合。</p><p>acedGetPoint在这情况不太合用,可以尝试用AcEdJig类。</p><p></p> AcEdJig没用过,您能简单介绍下么?我查帮助怎么是用于拖拽的呢?
页:
[1]