阅读:6156回复:10
跪求二三维联动的代码或思路?
我用ArcScence做三维开发,由于本人很菜,二三维联动一直不知道如何实现,希望高手们不吝赐教!
|
|
1楼#
发布于:2011-11-14 09:39
<p>是定制ArcScence?</p><p>那可以在程序里获取arcsence已经打开的图层,利用二位的map控件打开,进行视图同步了,利用AO的接口,这个并不难做到了。</p>
|
|
|
2楼#
发布于:2011-11-14 11:14
<p>是用AE开发 实现MapControl与SceneControl同步</p>
|
|
3楼#
发布于:2011-11-14 11:14
<div class="quote"><b>以下是引用<i>gis</i>在2011-11-14 9:39:00的发言:</b><br/>
<p>是定制ArcScence?</p> <p>那可以在程序里获取arcsence已经打开的图层,利用二位的map控件打开,进行视图同步了,利用AO的接口,这个并不难做到了。</p></div> <p>是用AE开发 实现MapControl与SceneControl同步</p> |
|
4楼#
发布于:2011-11-14 12:50
其实你的要求就像给三维地图做个鹰眼一样,在ESRI中国社区有一个帖子,你看看.希望对你有帮助.<br/>http://bbs.esrichina-bj.cn/ESRI/thread-91380-1-1.html<br/>
|
|
5楼#
发布于:2011-11-14 13:29
<div class="quote"><b>以下是引用<i>happyGISer</i>在2011-11-14 12:50:00的发言:</b><br/> 其实你的要求就像给三维地图做个鹰眼一样,在ESRI中国社区有一个帖子,你看看.希望对你有帮助.<br/>http://bbs.esrichina-bj.cn/ESRI/thread-91380-1-1.html<br/></div>
<p>我也看到了这个帖子 只是这个帖子使用VC编的 我看不懂VC 呵呵 能不能帮我转一下 转为VB.net C#也行 谢谢</p> |
|
6楼#
发布于:2011-11-14 15:19
好的<br/> |
|
7楼#
发布于:2011-11-14 15:37
<br>1 [font=Consolas][font=Consolas]ICamera camera = axSceneControl1.Camera;<br>2 IPoint point = camera.Target;<br>3 Draw_Point(point.X, point.Y);<br>4 <br>5 [color=#0000ff][color=#0000ff]private[/color][/color] [color=#0000ff][color=#0000ff]void[/color][/color] Draw_Point([color=#0000ff][color=#0000ff]double[/color][/color] pointX, [color=#0000ff][color=#0000ff]double[/color][/color] pointY)<br>6 {<br>7 [color=#008000][color=#008000]//获取控件的map对象[/color][/color]<br>8 IMap pMap;<br>9 IActiveView pActive;<br>10 pMap = axMapControl1.Map;<br>11 [color=#008000][color=#008000]//pActive = pMap as IActiveView;[/color][/color]<br>12 pActive = (IActiveView)pMap;<br>13 <br>14 [color=#008000][color=#008000]//新建一个点[/color][/color]<br>15 IPoint p = [color=#0000ff][color=#0000ff]new[/color][/color] PointClass();<br>16 p.PutCoords(pointX, pointY);<br>17 <br>18 IPoint p1 = [color=#0000ff][color=#0000ff]new[/color][/color] PointClass();<br>19 p1.PutCoords(pointX + 50.0, pointY + 50.0);<br>20 <br>21 [color=#008000][color=#008000]//产生一个mark元素[/color][/color]<br>22 IMarkerElement pMarkElement;<br>23 pMarkElement = [color=#0000ff][color=#0000ff]new[/color][/color] MarkerElementClass();<br>24 <br>25 [color=#008000][color=#008000]//产生一个修饰mark元素的symbol对象[/color][/color]<br>26 ISimpleMarkerSymbol pSimpleMarkSymbol;<br>27 pSimpleMarkSymbol = [color=#0000ff][color=#0000ff]new[/color][/color] SimpleMarkerSymbolClass();<br>28 <br>29 [color=#008000][color=#008000]//设置符号颜色;[/color][/color]<br>30 IRgbColor pColor = [color=#0000ff][color=#0000ff]new[/color][/color] RgbColorClass();<br>31 pColor.Red = 255;<br>32 pColor.Green = 0;<br>33 pColor.Blue = 0;<br>34 pSimpleMarkSymbol.Color = pColor [color=#0000ff][color=#0000ff]as[/color][/color] IColor;<br>35 <br>36 [color=#008000][color=#008000]//设置符号大小[/color][/color]<br>37 pSimpleMarkSymbol.Size = 5;<br>38 <br>39 [color=#008000][color=#008000]//设置符号类型[/color][/color]<br>40 <br>41 IRgbColor pColor02 = [color=#0000ff][color=#0000ff]new[/color][/color] RgbColorClass();<br>42 pColor02.Red = 0;<br>43 pColor02.Green = 0;<br>44 pColor02.Blue = 255;<br>45 <br>46 pSimpleMarkSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond;<br>47 pSimpleMarkSymbol.Outline = [color=#0000ff][color=#0000ff]true[/color][/color];<br>48 pSimpleMarkSymbol.OutlineColor = pColor02 [color=#0000ff][color=#0000ff]as[/color][/color] IColor;<br>49 pSimpleMarkSymbol.OutlineSize = 0.5;<br>50 <br>51 [color=#008000][color=#008000]//QI到IElement为其设置Geometry属性[/color][/color]<br>52 IElement pElement;<br>53 pElement = pMarkElement [color=#0000ff][color=#0000ff]as[/color][/color] IElement;<br>54 <br>55 pElement.Geometry = p;<br>56 pMarkElement.Symbol = pSimpleMarkSymbol;<br>57 <br>58 [color=#008000][color=#008000]//添加元素到map中[/color][/color]<br>59 IGraphicsContainer pGraphicsContainer;<br>60 pGraphicsContainer = pMap [color=#0000ff][color=#0000ff]as[/color][/color] IGraphicsContainer;<br>61 pGraphicsContainer.AddElement(pMarkElement [color=#0000ff][color=#0000ff]as[/color][/color] IElement, 0);<br>62 pActive.PartialRefresh(esriViewDrawPhase.esriViewGraphics, [color=#0000ff][color=#0000ff]null[/color][/color], [color=#0000ff][color=#0000ff]null[/color][/color]);<br>63 <br>64 <br>65 pGraphicsContainer.DeleteElement(pElement);<br>66 pElement.Geometry = p1;<br>67 pGraphicsContainer.AddElement(pMarkElement [color=#0000ff][color=#0000ff]as[/color][/color] IElement, 0);<br>68 <br>69 }<br>70 <br>71 ICamera camera = axSceneControl1.Camera;<br>72 IPoint point = camera.Target;<br>73 point.PutCoords(e.mapX, e.mapY);<br>74 axSceneControl1.Camera.Target = point;<br>75 <br>76 ISceneGraph sceneGraph = [color=#0000ff][color=#0000ff]null[/color][/color];<br>77 sceneGraph = axSceneControl1.SceneGraph;<br>78 sceneGraph.RefreshViewers();<br>79 <br>80<br/> [此贴子已经被作者于2011-11-14 15:38:15编辑过]
|
|
8楼#
发布于:2011-11-14 17:21
<div class="quote"><b>以下是引用<i>happyGISer</i>在2011-11-14 15:37:00的发言:</b><br/></div>
<div class="quote"><pre class="htmlcode"><b>以下内容为程序代码:</b><br/><br/>1 ICamera camera = axSceneControl1.Camera;<br/>2 IPoint point = camera.Target;<br/>3 Draw_Point(point.X, point.Y);<br/>4 <br/>5 <font color="#0000ff"><font color="#0000ff">private</font></font> <font color="#0000ff"><font color="#0000ff">void</font></font> Draw_Point(<font color="#0000ff"><font color="#0000ff">double</font></font> pointX, <font color="#0000ff"><font color="#0000ff">double</font></font> pointY)<br/>6 {<br/>7 <font color="#008000"><font color="#008000">//获取控件的map对象</font></font><br/>8 IMap pMap;<br/>9 IActiveView pActive;<br/>10 pMap = axMapControl1.Map;<br/>11 <font color="#008000"><font color="#008000">//pActive = pMap as IActiveView;</font></font><br/>12 pActive = (IActiveView)pMap;<br/>13 <br/>14 <font color="#008000"><font color="#008000">//新建一个点</font></font><br/>15 IPoint p = <font color="#0000ff"><font color="#0000ff">new</font></font> PointClass();<br/>16 p.PutCoords(pointX, pointY);<br/>17 <br/>18 IPoint p1 = <font color="#0000ff"><font color="#0000ff">new</font></font> PointClass();<br/>19 p1.PutCoords(pointX + 50.0, pointY + 50.0);<br/>20 <br/>21 <font color="#008000"><font color="#008000">//产生一个mark元素</font></font><br/>22 IMarkerElement pMarkElement;<br/>23 pMarkElement = <font color="#0000ff"><font color="#0000ff">new</font></font> MarkerElementClass();<br/>24 <br/>25 <font color="#008000"><font color="#008000">//产生一个修饰mark元素的symbol对象</font></font><br/>26 ISimpleMarkerSymbol pSimpleMarkSymbol;<br/>27 pSimpleMarkSymbol = <font color="#0000ff"><font color="#0000ff">new</font></font> SimpleMarkerSymbolClass();<br/>28 <br/>29 <font color="#008000"><font color="#008000">//设置符号颜色;</font></font><br/>30 IRgbColor pColor = <font color="#0000ff"><font color="#0000ff">new</font></font> RgbColorClass();<br/>31 pColor.Red = 255;<br/>32 pColor.Green = 0;<br/>33 pColor.Blue = 0;<br/>34 pSimpleMarkSymbol.Color = pColor <font color="#0000ff"><font color="#0000ff">as</font></font> IColor;<br/>35 <br/>36 <font color="#008000"><font color="#008000">//设置符号大小</font></font><br/>37 pSimpleMarkSymbol.Size = 5;<br/>38 <br/>39 <font color="#008000"><font color="#008000">//设置符号类型</font></font><br/>40 <br/>41 IRgbColor pColor02 = <font color="#0000ff"><font color="#0000ff">new</font></font> RgbColorClass();<br/>42 pColor02.Red = 0;<br/>43 pColor02.Green = 0;<br/>44 pColor02.Blue = 255;<br/>45 <br/>46 pSimpleMarkSymbol.Style = esriSimpleMarkerStyle.esriSMSDiamond;<br/>47 pSimpleMarkSymbol.Outline = <font color="#0000ff"><font color="#0000ff">true</font></font>;<br/>48 pSimpleMarkSymbol.OutlineColor = pColor02 <font color="#0000ff"><font color="#0000ff">as</font></font> IColor;<br/>49 pSimpleMarkSymbol.OutlineSize = 0.5;<br/>50 <br/>51 <font color="#008000"><font color="#008000">//QI到IElement为其设置Geometry属性</font></font><br/>52 IElement pElement;<br/>53 pElement = pMarkElement <font color="#0000ff"><font color="#0000ff">as</font></font> IElement;<br/>54 <br/>55 pElement.Geometry = p;<br/>56 pMarkElement.Symbol = pSimpleMarkSymbol;<br/>57 <br/>58 <font color="#008000"><font color="#008000">//添加元素到map中</font></font><br/>59 IGraphicsContainer pGraphicsContainer;<br/>60 pGraphicsContainer = pMap <font color="#0000ff"><font color="#0000ff">as</font></font> IGraphicsContainer;<br/>61 pGraphicsContainer.AddElement(pMarkElement <font color="#0000ff"><font color="#0000ff">as</font></font> IElement, 0);<br/>62 pActive.PartialRefresh(esriViewDrawPhase.esriViewGraphics, <font color="#0000ff"><font color="#0000ff">null</font></font>, <font color="#0000ff"><font color="#0000ff">null</font></font>);<br/>63 <br/>64 <br/>65 pGraphicsContainer.DeleteElement(pElement);<br/>66 pElement.Geometry = p1;<br/>67 pGraphicsContainer.AddElement(pMarkElement <font color="#0000ff"><font color="#0000ff">as</font></font> IElement, 0);<br/>68 <br/>69 }<br/>70 <br/>71 ICamera camera = axSceneControl1.Camera;<br/>72 IPoint point = camera.Target;<br/>73 point.PutCoords(e.mapX, e.mapY);<br/>74 axSceneControl1.Camera.Target = point;<br/>75 <br/>76 ISceneGraph sceneGraph = <font color="#0000ff"><font color="#0000ff">null</font></font>;<br/>77 sceneGraph = axSceneControl1.SceneGraph;<br/>78 sceneGraph.RefreshViewers();<br/>79 <br/>80 </pre></div> <div class="quote"><br/></div> <div class="quote" align="right"><font color="#000066">[此贴子已经被作者于2011-11-14 15:38:15编辑过]</font></div> <p>非常感谢 我按着你的代码做了一下 我需要实现的基本上都实现了 最后我有一个很2的问题问一下 第一段代码应该写在哪个事件里 我是写在<font face="Verdana">axSceneControl1的OnMouseMove事件里 感觉不是很妥</font></p> |
|
9楼#
发布于:2011-11-14 17:22
<p>非常感谢 我按着你的代码做了一下 我需要实现的基本上都实现了 最后我有一个很2的问题问一下 第一段代码应该写在哪个事件里 我是写在<font face="Verdana">axSceneControl1的OnMouseMove事件里 感觉不是很妥</font></p>
|
|
上一页
下一页