阅读:2592回复:3
ArcEngine裁剪问题
<P>我用ArcEngine的一个接口,ITopologicalOperatorPtr来裁剪线图形时候,发现有的裁剪结果与裁剪前的线条方向一致,而有的结果却方向与裁减前恰好颠倒了。</P>
<P>我想的是,所有裁剪结果与裁剪前图形方向应该一致。</P> <P>请问各位指点指点,需要怎么做才使裁剪结果与裁剪前图形的方向保持一致?</P> |
|
|
1楼#
发布于:2007-07-30 13:29
<P>你可以利用IBasicGeoprocessor的clip方法来实现,或许可以解决这个问题</P>
|
|
|
2楼#
发布于:2007-07-30 11:08
<P>谢谢总统指点。我采用的裁剪代码与你给出的代码一样。代码如下:</P>
<P> ITopologicalOperatorPtr ipTopolog(CLSID_Line); </P> <P>long lCount = 0;<br>while (SUCCEEDED(ipSorCursor->NextFeature(;ipFeature))<br> ;; (NULL != ipFeature)) {<br> result = ipFeature->get_Shape(;ipGeometry);<br> if (FAILED(result) || NULL == ipGeometry) {<br> TRACE("%ld\n", result); <br> continue;<br> }</P> <P> ((IZAwarePtr)ipGeometry)->put_ZAware(VARIANT_FALSE);<br> ((IMAwarePtr)ipGeometry)->put_MAware(VARIANT_FALSE);</P> <P> // 入库图形都需要裁剪才能入库的。<br> ipTopolog = ipGeometry;<br> result = ipTopolog->Intersect((IGeometryPtr)ipGridPolygon, esriGeometry1Dimension, ;ipResult);<br> if (FAILED(result) || NULL == ipResult) {<br> TRACE("%ld\n", result); <br> continue;<br> }</P> <P> result = ipResult->get_IsEmpty(;vb);<br> if (VARIANT_TRUE == vb) {<br> TRACE("%ld\n", result); <br> continue; <br> }</P> <P> ...<br>}</P> <P>我不明白的,为什么有的线段被裁剪后方向反向,而有的线段却和裁剪前方向一致?当然,我要求是所有裁剪之后线段方向应该和裁剪前方向一致,因为线段的方向也是有用的。</P> <P>裁剪反向的图形说明:</P> <P> [此贴子已经被作者于2007-7-30 11:10:18编辑过]
|
|
|
3楼#
发布于:2007-07-12 17:35
<P>没注意方向,能把你的结果截图上来看看吗?</P>
<P>下面应该是你用的大概的代码</P> <P>Dim pClippedPolyline As IPolyline<BR>Dim pTopOp As ITopologicalOperator<BR>Set pTopOp = pPolygon<BR>Set pClippedPolyline = pTopOp.Intersect(pPolyline,esriGeometry1Dimension)</P> |
|
|