我想通过交互式操作在SceneView中绘制三维立方体。
我希望实现的功能是:
- 通过交互单击SceneView上的多个点(x1,y1,0(、(x2,y2,0(、(x3,y3,0(和(x4,y4,0(
- 通过弹出窗口输入高度
h
- 用这些点绘制一个立方体:(x1,y1,0(、(x2,y2,0(,(x3,y3,0(,(x4,y4,0(
我试过这个:
var centerPoint = new MapPoint(vm.X, vm.Y, vm.Z, onMapLocation.SpatialReference);
SimpleMarkerSceneSymbol symbol = SimpleMarkerSceneSymbol.CreateCube(System.Drawing.Color.DarkSeaGreen, 1, SceneSymbolAnchorPosition.Center);
symbol.Heading = vm.Heading;
symbol.Height = vm.Height;
symbol.Width = vm.Width;
symbol.Depth = vm.Depth;
// Create the graphic from the geometry and the symbol.
Graphic item = new Graphic(centerPoint, symbol);
// Add the graphic to the overlay.
graphicOverlay.Graphics.Add(item);
它有效,但我只能从几何中得到一个点。我想得到立方体的所有顶点。
然后我尝试画一个没有Z的多边形,并将Renderer
设置为显示:
// Create a new simple line symbol for the feature layer
SimpleLineSymbol mySimpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, System.Drawing.Color.Black, 1);
// Create a new simple fill symbol for the feature layer
SimpleFillSymbol mysimpleFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Solid, System.Drawing.Color.WhiteSmoke, mySimpleLineSymbol);
// Create a new simple renderer for the feature layer
SimpleRenderer mySimpleRenderer = new SimpleRenderer(mysimpleFillSymbol);
// Get the scene properties from the simple renderer
RendererSceneProperties myRendererSceneProperties = mySimpleRenderer.SceneProperties;
// Set the extrusion mode for the scene properties
myRendererSceneProperties.ExtrusionMode = ExtrusionMode.AbsoluteHeight;
// Set the initial extrusion expression
myRendererSceneProperties.ExtrusionExpression = "[Z]";
// Set the feature layer's renderer to the define simple renderer
featureLayer.Renderer = mySimpleRenderer;
在我的featureLayer中,它有一个功能Z
,所以它可以工作。但这不符合我的要求,我想实时绘制立方体,而不是读取数据。
我不知道如何实现。。。.NET解决方案是最好的,其他语言也是可以接受的。最后,请原谅我糟糕的英语:(
最后,我使用Render解决了这个问题,但我对这个解决方案不满意。这是我完成的结果:https://www.cnblogs.com/Lulus/p/13948464.html