阅读:6941回复:7
IGeometry如何转为IFeature.Shape
在这段程序之前,生成了一个椭圆(IEllipticArc pEllipse = new EllipticArcClass()),并对其使用了PutCoords方法,现在想将其存在一个线类型的要素类中,却遇到错误:这个集合中找不到此项目。代码如下:<br><br> IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pWorkspace;<br> pWorkspaceEdit.StartEditing(false);<br> pWorkspaceEdit.StartEditOperation();<br><br> //IGeometryCollection pGeometryCollection = new GeometryBagClass();<br> //object missing = Type.Missing;<br> //pGeometryCollection.AddGeometry(pEllipse,ref missing, ref missing);<br> //IGeometry pGeometry = pGeometryCollection.get_Geometry(0);<br><br> IFeatureClass pFcDzx = pFeatureWorkspace.OpenFeatureClass("dzx");<br>
IFeature pFtEllipse;<br><br> pFtEllipse = pFcDzx.CreateFeature();<br> pFtEllipse.Shape = pEllipse;//pLine;//pGeometry; //运行到这里报错:这个集合中找不到此项目。<br> pFtEllipse.set_Value(pFtEllipse.Fields.FindField("zj"),ld);<br> pFtEllipse.Store();<br><br> pWorkspaceEdit.StopEditOperation();<br> pWorkspaceEdit.StopEditing(true);<br><br>以前我用VB6.0+AE9.0时,使用IFeature.Shape = IGeometry没有遇到问题,这里不知是怎么回事。像大家请教。谢谢!<br> |
|
1楼#
发布于:2007-09-25 21:53
<P>你用的是C# 吧。</P>
<P>VB好像是可以自动类型转换的。而 C#是不可以的吧,我C#不是很了解 。</P> <P>你可以这样些,试验一下。</P> <P>IGeometry ipGeo(pEllipse) ;</P> <P>pFtEllipse.Shape = ipGeo;</P> |
|
2楼#
发布于:2007-09-27 11:31
IEllipticArc pEllipse = new EllipticArcClass();<br><br> IEnvelope pE= new EnvelopeClass();<br> pE.PutCoords(0,0,1000,2000);<br><br> IConstructEllipticArc ppe=new EllipticArcClass();<br> ppe.ConstructEnvelope(pE);<br> <br> ISegment pS=(ISegment)ppe;<br><br> ISegmentCollection p2=new PolygonClass();<br> object a = Type.Missing;<br> object b = Type.Missing;<br><br> p2.AddSegment(pS,ref a,ref b);<br><br> pFtEllipse.Shape = (IGeometry)p2;<br><br>可以使用 ISegmentCollection做为转换
|
|
|
3楼#
发布于:2007-09-27 11:34
<P>现在想将其存在一个<FONT color=#ee3d11>线类型的要素类</FONT>中</P>
<P>pFtEllipse.Shape = pEllipse;//pLine;//pGeometry; //运行到这里报错:这个集合中找不到此项目。</P> <P>因为你是在一个<FONT color=#ee3d11>线类型的要素类,</FONT>你应该查一下IEllipticArc和IPolygon能转换?</P> <P>pFtEllipse.Shape = pPolygon;</P> |
|
4楼#
发布于:2007-09-27 13:39
1<br>谢谢!不过ISegmentCollection和IGeometryCollection我都试过了,结果仍是在pFtEllipse.Shape = (IGeometry)pSegmentCollection处报错。<br><br>2<br>椭圆和IPolygon、ILine均不能转换<br>
[此贴子已经被作者于2007-9-27 13:42:37编辑过]
|
|
5楼#
发布于:2007-09-27 16:08
<P>Dim pEArc As IEllipticArc</P>
<P>.........</P> <P>Dim pSeg As ISegment<BR>Set pSeg = pEArc<BR> <BR>Dim pPolyline As ISegmentCollection<BR>Set pPolyline = New Polyline<BR>pPolyline.AddSegment pSeg<BR><BR></P> |
|
6楼#
发布于:2007-09-28 11:26
IWorkspaceFactory pWorkspaceFactory=new AccessWorkspaceFactoryClass();<br> IWorkspace pWorkspace =pWorkspaceFactory.OpenFromFile(@"C:\work\20070820\temp\AAA.mdb",0);<br><br> IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pWorkspace;<br> pWorkspaceEdit.StartEditing(false);<br> pWorkspaceEdit.StartEditOperation();<br><br> IFeatureWorkspace pFeatureWorkspace=(IFeatureWorkspace)pWorkspace;<br><br> IFeatureClass pFcDzx = pFeatureWorkspace.OpenFeatureClass("hhh");<br><br> IFeature pFtEllipse;<br><br> pFtEllipse = pFcDzx.CreateFeature();<br><br> IEllipticArc pEllipse = new EllipticArcClass();<br> IEnvelope pE= new EnvelopeClass();<br> pE.PutCoords(0,0,1000,1000);<br><br> IConstructEllipticArc ppe=new EllipticArcClass();<br> ppe.ConstructEnvelope(pE);<br> <br> ISegment pS=(ISegment)ppe;<br><br> ISegmentCollection p2=new PolygonClass();<br> object a = Type.Missing;<br> object b = Type.Missing;<br><br> p2.AddSegment(pS,ref a,ref b);<br><br> IGeometry pp=(IGeometry)p2;<br><br> pFtEllipse.Shape = pp;<br> pFtEllipse.Store();<br><br> pWorkspaceEdit.StopEditOperation();<br> pWorkspaceEdit.StopEditing(true);<br><br> MessageBox.Show("ok");<br><br>
|
|
|
7楼#
发布于:2007-09-28 19:33
用追风浪子的方法搞定了!谢谢大家!
|
|