画体要先有面,可以直接调用写好的画面函数先画面,再将面对象当作参数传给画体函数创建多面体。
绑定鼠标点击事件,然后画体
// 画体
function CreateBox() {
sgworld.Window.SetInputMode(1); //鼠标样式修改
sgworld.AttachEvent("OnLButtonDown", StartCreateBuild);
sgworld.AttachEvent("OnFrame", DrawCreateBuildOnFrame);
sgworld.AttachEvent("OnRButtonUp", StopCreateBuild)
}
function StartCreateBuild(flags, x, y) {
var CursorCoord = sgworld.Window.pixelToWorld(x, y);
var pos = CursorCoord.Position
var lineColor = sgworld.Creator.CreateColor(255, 100, 0, 125); //定义线渲染样式
try {
var pWorldPointInfo = sgworld.Window.PixelToWorld(x, y, -1); //将屏幕坐标转换为地理坐标
if (null == pWorldPointInfo) {
return false;
}
var pos = pWorldPointInfo.Position;
if (polygon == null) {
var geometry = sgworld.Creator.GeometryCreator.CreateLinearRingGeometry(
[pos.X, pos.Y, 0,
pos.X, pos.Y, 0,
pos.X, pos.Y, 0,
pos.X, pos.Y, 0
]);
// alert(22)
polygon = sgworld.Creator.CreatePolygon(geometry);
//alert(polygon.Geometry.Points)
polygon.Terrain.GroundObject = true;
polygon.Geometry.StartEdit(); //开始编辑线
} else {
//将最后一个点换成鼠标的坐标
var pPoints = polygon.Geometry;
polygon.Geometry.Rings(0).Points.Item(pPoints.Rings(0).Points.count - 1).X = pos.X;
polygon.Geometry.Rings(0).Points.Item(pPoints.Rings(0).Points.count - 1).Y = pos.Y;
polygon.Geometry.Rings(0).Points.Item(pPoints.Rings(0).Points.count - 1).Z = 0;
polygon.Geometry.Rings(0).Points.AddPoint(pos.X, pos.Y, 0);
}
} catch (ex) {
alert(ex.description);
}
}
function DrawCreateBuildOnFrame(flags, x, y) {
// console.dir(cou + "cou")
if (cou == 0) {
// console.dir(cou + "cou")
var mouseInfo = sgworld.Window.GetMouseInfo();
var mousePoint = sgworld.Window.PixelToWorld(mouseInfo.X, mouseInfo.Y);
if (null == mousePoint) {
return false;
}
var pos = mousePoint.Position;
if (polygon) {
if (polygon.ObjectType == 1) {
var pPoints = polygon.Geometry.Points;
// console.log('X===' + polygon.Geometry.Points.Item(pPoints.count - 1).X)
polygon.Geometry.Points.Item(pPoints.count - 1).X = pos.X;
polygon.Geometry.Points.Item(pPoints.count - 1).Y = pos.Y;
polygon.Geometry.Points.Item(pPoints.count - 1).Z = 0;
} else {
var pPoints = polygon.Geometry.Rings(0).Points;
// console.log('X===' + polygon.Geometry.Points.Item(pPoints.count - 1).X)
polygon.Geometry.Rings(0).Points.Item(pPoints.count - 1).X = pos.X;
polygon.Geometry.Rings(0).Points.Item(pPoints.count - 1).Y = pos.Y;
polygon.Geometry.Rings(0).Points.Item(pPoints.count - 1).Z = 0;
}
}
}
if (cou > 0) {
//console.dir(cou + "cou")
var mouseInfo = sgworld.Window.GetMouseInfo();
var mousePoint = sgworld.Window.PixelToWorld(mouseInfo.X, mouseInfo.Y);
var p2 = mousePoint.Position.Altitude
console.dir(build.Height)
build.Height = p2
console.dir(build.Height)
}
}
function StopCreateBuild(flags, x, y) {
console.log(cou)
if (cou == 0) {
polygon.Geometry.EndEdit();
var c = sgworld.Creator.CreateColor(0, 0, 0, 100)
build = sgworld.Creator.Create3DPolygon(polygon.Geometry, 10000, 0xFF00FF00, c, 0, "")
sgworld.DetachEvent("OnLButtonDown", StartCreateBuild);
cou++
} else {
sgworld.DetachEvent("OnLButtonDown", StartDrawPolygon);
sgworld.DetachEvent("OnFrame", DrawCreateBuildOnFrame);
sgworld.DetachEvent("OnRButtonUp", StopCreateBuild)
cou = 0
polygon = null;
sgworld.Window.SetInputMode(0); //鼠标样式修改
}
sgworld.DetachEvent("OnLButtonDown", StartCreateBuild);
}