<!DOCTYPE html>
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
<head>
|
<meta http-equiv="X-UA-Compatible" content="IE=9" />
|
<title>ToolTitle</title>
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
<link rel="StyleSheet" href="../Style.css" type="text/css">
|
<link rel="stylesheet" href="../css/coomom.css" />
|
<style>
|
html, body {
|
|
overflow: hidden;
|
}
|
|
table .s8 .PropertiesSheet tr td, table .s8 .PropertiesSheet tr select, table .s8 .PropertiesSheet tr input {
|
background-color: #151515;
|
color: white;
|
}
|
|
.i18n{
|
font-size:12px;
|
}
|
.title{
|
width:90%;
|
}
|
</style>
|
</head>
|
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" style="border: 0px" id="Body" class="hideUntillTranslated" onload="Init()">
|
<!--oncontextmenu="return false;"> onclick="bHide=true;HideOptionsNow()" > -->
|
<div class="border">
|
<div class="FourBorder">
|
<div class="topleft"></div>
|
<div class="topright"></div>
|
<div class="bottomleft"></div>
|
<div class="bottomright"></div>
|
</div>
|
<div class="content">
|
<table border="0" width="100%" cellspacing="0" cellpadding="2">
|
<tr style="display:none">
|
<td class="ToolTopArea" id="TopAreaTD" width="100%" valign="middle">
|
<table border="0" width="100%" cellspacing="0" cellpadding="0">
|
<tr>
|
<td width="55px"><img style="margin-left:5px;" src="ToolIcon.png" alt="" /></td>
|
<td id="TitleTD" align="center" class="s12w i18n">ToolName</td>
|
<td align="right" id="CloseHelpTd"><img style="margin-right:5px;" alt="" src="../CommonImg/help.png" border="0" class="i18n" alt="help" title="help" onclick="DisplayHelpPopup6(SGLang.i18nFile('help.html'),SGLang.i18n('help'))" style="cursor: pointer;"></td>
|
</tr>
|
</table>
|
</td>
|
</tr>
|
<tr style="display:none">
|
<td class="ToolTopSeperator"></td>
|
</tr>
|
<tr class="s8">
|
<td>
|
<table class="PropertiesSheet" cellspacing="0" cellpadding="2">
|
<tr class='TableOtherLine'>
|
<td class="s8b">
|
<label class="i18n">Text7</label>
|
</td>
|
<td align="left">
|
<select id="OutputTypeID" onchange="TypeChanged();" class="title">
|
<option class="i18n" value=0 selected="selected">Text8</option>
|
<option class="i18n" value=1>Text9</option>
|
<option class="i18n" value=2>Text10</option>
|
</select>
|
</td>
|
</tr>
|
|
<tr style="display:none">
|
<td class="s8b">
|
<label class="i18n">Text4</label>
|
</td>
|
<td align="left">
|
<select id="AccuracyID" class="title">
|
<option class="i18n" value=0 selected="selected">Text5</option>
|
<option class="i18n" value=1>Text6</option>
|
</select>
|
</td>
|
</tr>
|
|
<tr class='TableOtherLine'>
|
<!--Radius-->
|
<td class="s8b">
|
<label class="i18n">Text12</label>
|
</td>
|
<td align="left">
|
<input id="radiusID" type="text" value="1000" onchange="ValidateInput();" /> <span class="i18n">Text13</span>
|
</td>
|
</tr>
|
<tr>
|
<!--Viewer Altitude-->
|
<td class="s8b">
|
<label class="i18n">Text16</label>
|
</td>
|
<td align="left">
|
<input id="ViewerAltitudeID" type="text" value="5" /> <span class="i18n">Text13</span>
|
</td>
|
</tr>
|
<tr class='TableOtherLine'>
|
<!-- Elevation Angle-->
|
<td class="s8b">
|
<label class="i18n">Text22</label>
|
</td>
|
<td align="left">
|
<input id="ElevationAngleID" type="text" value="0" onchange="ValidateInput();" /> <span class="i18n">Text34</span>
|
</td>
|
</tr>
|
|
|
</table>
|
</td>
|
</tr>
|
<tr>
|
<td colspan="2" align="center" class="ToolButtonsArea">
|
<button id="Draw" class="MenuButton" onclick="CreateObjects(1);" style="background-color:#000000;border:none;cursor:pointer"> <img src="../img/SetPoint.png" /><br /> <span class="i18n" style="display:none">Text20</span></button>
|
<button style="display:none" id="groupButton" class="MenuButton" onclick="SelectGroupClipboard(0)"><img src="../commonimg/group.png" /><br /><span class="i18n">Text14</span></button>
|
<button style="display:none" id="clipboardButton" class="MenuButton" onclick="SelectGroupClipboard(1)"><img src="../commonimg/Clipboard.png" /><br /><span class="i18n">Text15</span></button>
|
<div id="ProfileID" style="display:none;"> <button class="MenuButton MenuButtonLast" onclick="ShowProfile();"><img src="../img/profile.png" /><br /><span style="display:none" class="i18n">Text18</span></button> </div>
|
</td>
|
</tr>
|
</table>
|
</div>
|
</div>
|
<object id="SGWorld" classid="CLSID:3a4f9199-65a8-11d5-85c1-0001023952c1"> </object>
|
|
<script language="javascript" src="../tooljs/ToolsCommon65.js"></script>
|
<script language="JavaScript">
|
|
var gCircle = null;
|
var gViewshed = null;
|
var gLayer;
|
var gType = 0;
|
//var gPositionsArray = [];
|
var gDomePoints = [];
|
var gLineArray = [];
|
var gRingArray = [];
|
var gRingList = [];
|
//var gElevationRingArray = [];
|
var gYawArray = [];
|
var gRingObj = null;
|
var gColorArray = ["#ff0000", "#00ff00", "#0000FF", "#FF00FF", "#C0FFFF", "#FFFF00", "#FFC119", "#B16CF8", "#D2FF01", "#AD8943"];
|
var gPopupCaption = "";
|
|
var gLineIndex = 0;
|
var gMainGroup = null;
|
var gGroup = null;
|
var gVisibilityDistance;
|
var gInEdit = 0;
|
var gOriginalPosition = null;
|
var yawStep;
|
var pitchStep;
|
var gNumDome = 1;
|
|
//--------------
|
// Init
|
function Init() {
|
if (GetParamValue("inSG", "") == "1") {
|
$("#TopAreaTD").attr("height", "57");
|
$("#TitleTD").attr("align", "left");
|
$("#CloseHelpTd").attr("display", "none");
|
}
|
}
|
|
//------------------
|
// Reset
|
//------------------
|
function Reset(FirstTime, FromMouseInputMode) {
|
|
try {
|
if (gCircle != null)
|
SGWorld.Creator.DeleteObject(gCircle.ID);
|
if (gViewshed != null)
|
SGWorld.Creator.DeleteObject(gViewshed.ID);
|
} catch (e) { }
|
|
gType = 0;
|
gCircle = null;
|
gViewshed = null;
|
gLayer = null;
|
gGroup = null;
|
gOriginalPosition = null;
|
//gPositionsArray = [];
|
gLineArray = [];
|
gRingArray = [];
|
// gElevationRingArray = [];
|
gYawArray = [];
|
gLineIndex = 0;
|
|
$("#Draw").removeClass("MenuButtonHighlight");
|
$("#groupButton").removeClass("MenuButtonHighlight");
|
$("#clipboardButton").removeClass("MenuButtonHighlight");
|
|
SGWorld.ProjectTree.EnableRedraw(1);
|
SGWorld.Window.HideMessageBarText();
|
|
if (gInEdit > 0) {
|
SGWorld.DetachEvent("OnLButtonClicked", OnLButtonClicked);
|
SGWorld.DetachEvent("OnRButtonUp", OnRButtonUp);
|
SGWorld.DetachEvent("OnFrame", OnFrame);
|
SGWorld.DetachEvent("OnInputModeChanged", OnInputModeChanged);
|
}
|
gInEdit = 0;
|
|
if (FirstTime != 1 && FromMouseInputMode == 0)
|
SGWorld.Window.SetInputMode(0);
|
}
|
|
//--------------
|
// CreateObjects
|
//--------------
|
function CreateObjects(method) {
|
if (gInEdit == 0) {
|
gInEdit = 1;
|
gNumDome = 1;
|
gRingArray = [];
|
gRingList = [];
|
SGWorld.AttachEvent("OnLButtonClicked", OnLButtonClicked);
|
SGWorld.AttachEvent("OnRButtonUp", OnRButtonUp);
|
SGWorld.AttachEvent("OnFrame", OnFrame);
|
SGWorld.AttachEvent("OnInputModeChanged", OnInputModeChanged);
|
SGWorld.Window.SetInputMode(1, abspath() + "/cursor_m.cur", true);
|
SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text23"));
|
$(event.srcElement).addClass("MenuButtonHighlight");
|
|
try {
|
var a = SGWorld.ProjectTree.GetItemName(gMainGroup);
|
}
|
catch (e) { gMainGroup = SGWorld.ProjectTree.CreateGroup(SGLang.i18n("ToolName"), SGWorld.ProjectTree.RootID); }
|
|
var pos = SGWorld.Creator.CreatePosition(0, 0, 0, 0, 0, 0, 0, 0);
|
gCircle = SGWorld.Creator.CreateCircle(pos, $("#radiusID").val(), SGWorld.Creator.CreateColor(255, 0, 0, 255), SGWorld.Creator.CreateColor(255, 255, 255, 100), gMainGroup, SGLang.i18n("Text24"));
|
gCircle.NumberOfSegments = 50;
|
gCircle.LineStyle.Width = -5;
|
}
|
else {
|
Reset(false, false);
|
}
|
}
|
//-----------
|
// SelectGroupClipboard
|
function SelectGroupClipboard(searchType) {
|
if (searchType == 0) {
|
var node = SGWorld.ProjectTree.GetNextItem("", 10);
|
if (node == 0 || !(SGWorld.ProjectTree.IsGroup(node) || SGWorld.ProjectTree.IsLayer(node))) {
|
alert(SGLang.i18n("Text32"));
|
return;
|
}
|
}
|
|
$(event.srcElement).addClass("MenuButtonHighlight");
|
SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text31"));
|
gNumDome = 1;
|
|
gDomePoints = [];
|
gRingArray = [];
|
gRingList = [];
|
|
if (searchType == 0)
|
searchGeometries2(node, AddDomeToList);
|
if (searchType == 1)
|
searchGeometriesClipboard(AddDomeToList);
|
|
var CreateTheObjects = true;
|
if (gDomePoints.length > 10)
|
CreateTheObjects = confirm(SGLang.i18n("Text35") + gDomePoints.length + SGLang.i18n("Text36"));
|
|
if (CreateTheObjects)
|
for (var i = 0; i < gDomePoints.length; i++)
|
CalculateDome(gDomePoints[i].pos, gDomePoints[i].objType, gDomePoints[i].AltitudeType);
|
|
Reset(0, 0);
|
}
|
|
//------------
|
// OnLButtonClicked
|
function OnLButtonClicked(Flags, X, Y) {
|
if (gInEdit == 0)
|
return;
|
var CursorCoord = SGWorld.Window.pixelToWorld(X, Y, 1 + 16 + 64 + 128 + 8192);
|
if (CursorCoord == null)
|
return false;
|
|
if (gInEdit == 1) // First click, center point
|
{
|
var viewerAltitude = 1.0 * $("#ViewerAltitudeID").val();
|
CursorCoord.Position.Altitude = CursorCoord.Position.Altitude + viewerAltitude;
|
gCircle.Position = CursorCoord.Position.Copy();
|
|
if (gCircle != null) {
|
|
CalculateDome(gCircle.Position, 18, 3); //supported types: 18 = label, 24 = image label
|
}
|
}
|
}
|
//------------
|
// OnRButtonUp
|
function OnRButtonUp(Flags, X, Y) {
|
if (gInEdit == 0)
|
return;
|
|
Reset(false, false);
|
}
|
//------------
|
// OnFrame
|
function OnFrame() {
|
if (gInEdit != 1)
|
return;
|
try {
|
var mouseInfo = SGWorld.Window.GetMouseInfo();
|
var CursorCoord = SGWorld.Window.pixelToWorld(mouseInfo.X, mouseInfo.Y, 1 + 16 + 64 + 128 + 8192);
|
if (CursorCoord == null)
|
return false;
|
var viewerAltitude = 1.0 * $("#ViewerAltitudeID").val();
|
CursorCoord.Position.Altitude = CursorCoord.Position.Altitude + viewerAltitude;
|
gCircle.Position = CursorCoord.Position.Copy();
|
|
gCircle.Radius = $("#radiusID").val();
|
}
|
catch (e) { }
|
}
|
//------------
|
// OnInputModeChanged
|
function OnInputModeChanged(NewMode) {
|
if (NewMode != 1)
|
if (gInEdit != 0)
|
Reset(0, 1);
|
}
|
|
//---------
|
//AddDomeToList
|
function AddDomeToList(pos, objType, AltitudeType) {
|
gDomePoints.push({ pos: pos, objType: objType, AltitudeType: AltitudeType });
|
return true;
|
}
|
//---------
|
//CalculateDome
|
function CalculateDome(pos, objType, AltitudeType) {
|
|
if (objType != 0 && objType != 18 && objType != 24)
|
return true;
|
|
try {
|
ValidateInput();
|
// Houre glass cursor
|
SGWorld.Window.SetInputMode(1, abspath() + "/hourglass.cur", true);
|
|
var position = pos.Copy(); // to make sure we do not change the position of an object
|
// Make sure the point altitude is not lower than the Viewer Altitude the user provided
|
var viewerAltitude = 1.0 * $("#ViewerAltitudeID").val();
|
position.ChangeAltitudeType(3);
|
var groundHeight = SGWorld.Terrain.GetGroundHeightInfo(position.X, position.Y, 1, true);
|
position.Altitude = Math.max(groundHeight.Position.Altitude + viewerAltitude, position.Altitude);
|
|
if (AnalyzePoints(position))
|
DrawPoints(position);
|
if (gLayer != null) {
|
gLayer.Save();
|
}
|
Reset(false, false);
|
gNumDome++;
|
}
|
catch (e) { alert(e.description); }
|
|
return true;
|
}
|
|
//------------
|
// AnalyzePoints
|
function AnalyzePoints(position) {
|
var radius = $("#radiusID").val();
|
var ElevationAngle = 1.0 * $("#ElevationAngleID").val();
|
var pos = null;
|
var pointIndex = 0;
|
var lastVisiblePos;
|
|
gType = $("#OutputTypeID").val();
|
|
gVisibilityDistance = radius * 20;
|
|
// Create the Viewshed
|
SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text31") + " [" + gNumDome + "]", -1);
|
gViewshed = SGWorld.Analysis.Create3DViewshed(position, 360, 180, radius * 1.01, SGWorld.ProjectTree.HiddenGroupID, SGLang.i18n("Text25")); // HiddenGroupID
|
gViewshed.Quality = 2;
|
gViewshed.SaveInFlyFile = false;
|
SGWorld.Analysis.StartViewshedVisibilityQuery(gViewshed.ID);
|
|
// calculate ray accuracy
|
var raySteps = Math.floor((Math.log(radius) * 5) / Math.LN10) + 4;
|
|
if ($("#AccuracyID").val() == 0) { // Normal
|
yawStep = 2;
|
pitchStep = 0.1;
|
}
|
else { // high
|
yawStep = 1;
|
pitchStep = 0.05;
|
}
|
|
// dome or base
|
if (gType == 0 || gType == 1) { // Dome || Base
|
|
for (var yaw = 0; yaw < 360; yaw += yawStep) {
|
SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text26") + " [" + gNumDome + "] " + Math.floor((yaw * 100) / (360)) + "%", -1);
|
pointIndex = 0;
|
var numVisiblePoint = 0;
|
gLineArray[gLineIndex] = [];
|
var bFoundVisible = true;
|
pointIndex = AddPoint(gLineIndex, pointIndex, position); // add point at the center
|
gYawArray[gLineIndex] = yaw;
|
|
for (var pitch = ElevationAngle; pitch <= 90; pitch += pitchStep) {
|
pos = position.Move(radius, yaw, pitch);
|
var PointVisible = SGWorld.Analysis.QueryVisibilityDistance(pos); // Returns the radius of the visibility from the viewer to the position point
|
if (PointVisible >= radius) { // visible
|
if (numVisiblePoint > 1 && numVisiblePoint % 20 != 0) // reduce number of point on the outer dome
|
pointIndex -= 1;
|
pointIndex = AddPoint(gLineIndex, pointIndex, pos);
|
if (bFoundVisible)
|
AddRing(gLineIndex, pos);
|
bFoundVisible = false;
|
if (gType == 1)
|
break;
|
numVisiblePoint++;
|
|
}
|
else {
|
pos = position.Move(PointVisible, yaw, pitch);
|
pointIndex = AddPoint(gLineIndex, pointIndex, pos);
|
numVisiblePoint = 0;
|
}
|
}
|
gLineIndex++;
|
} // yaw
|
} // if dome|base
|
else if (gType == 2) { // Skyline
|
for (var yaw = 0; yaw < 360; yaw += yawStep / 4) {
|
SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text26") + " [" + gNumDome + "] " + Math.floor((yaw * 100) / (360)) + "%", -1);
|
var bAllVisible = true;
|
for (var pitch = 90; pitch >= -45; pitch -= pitchStep) {
|
pos = position.Move(radius, yaw, pitch);
|
var PointVisible = SGWorld.Analysis.QueryVisibilityDistance(pos); // Returns the radius of the visibility from the viewer to the position point
|
|
if (PointVisible < radius && PointVisible > -1) { // not visible
|
bAllVisible = false;
|
pos = position.Move(PointVisible, yaw, pitch);
|
AddRing(gLineIndex, pos);
|
break;
|
}
|
} // pitch
|
|
if (bAllVisible) { // add point to the border line
|
AddRing(gLineIndex, pos);
|
}
|
gLineIndex++;
|
} // yaw
|
}
|
|
// close the ring
|
var ringFirstPoint = SGWorld.Creator.CreatePosition(gRingArray[0], gRingArray[1], gRingArray[2], 0, 0, 0, 0, 0);
|
AddRing(gLineIndex, ringFirstPoint);
|
|
SGWorld.Analysis.EndVisibilityQuery();
|
|
return true;
|
}
|
//------------
|
// AddPoint
|
function AddPoint(line, point, position) {
|
gLineArray[line][point * 3] = position.X;
|
gLineArray[line][point * 3 + 1] = position.Altitude;
|
gLineArray[line][point * 3 + 2] = position.Y;
|
point++;
|
return point;
|
}
|
|
//-------------
|
// AddRing
|
function AddRing(point, position) {
|
gRingArray[point * 3] = position.X;
|
gRingArray[point * 3 + 1] = position.Y;
|
gRingArray[point * 3 + 2] = position.Altitude;
|
}
|
//------------
|
// DrawPoints
|
function DrawPoints(position) {
|
var radius = $("#radiusID").val();
|
try {
|
var a = SGWorld.ProjectTree.GetItemName(gMainGroup);
|
}
|
catch (e) { gMainGroup = SGWorld.ProjectTree.CreateGroup(SGLang.i18n("ToolName"), SGWorld.ProjectTree.RootID); }
|
|
try {
|
var layerName = $("#OutputTypeID option:selected").text() + " [" + gNumDome + "]";
|
gGroup = SGWorld.ProjectTree.CreateGroup(layerName, gMainGroup);
|
|
// Viewer label
|
var labelStyle = SGWorld.Creator.CreateLabelStyle(0);
|
var CenterLabel = SGWorld.Creator.CreateImageLabel(position, abspath() + "/image11.gif", labelStyle, gGroup, SGLang.i18n("Text11"));
|
CenterLabel.Action.Code = 11;
|
CenterLabel.Style.Scale = radius / 100;
|
CenterLabel.Style.IconColor.FromHTMLColor(gColorArray[(gNumDome - 1) % 10]);
|
|
// Dome
|
if (gType == 0 || gType == 1) { // dome || Base || elevation rings
|
for (var i = 0; i < gLineIndex; i++) {
|
DrawObject(gLineArray[i], radius, gYawArray[i], gType);
|
}
|
}
|
/******
|
// Elevation Rings
|
if (gType == 3) { // dome or Base
|
for (var alt = -10; alt < 100; alt++)
|
gElevationRingArray[alt] = [];
|
for (var i = 0; i < gLineIndex; i++) {
|
for (var j = 0; j < gLineArray[i].length / 3 - 1; j++) {
|
var pointA = gLineArray[i][j * 3 + 1];
|
var pointB = gLineArray[i][(j + 1) * 3 + 1];
|
if (Math.floor(pointA / 100) != Math.floor(pointB / 100)) {
|
var positionA = SGWorld.Creator.CreatePosition(gLineArray[i][j * 3 ], gLineArray[i][j * 3 + 2], gLineArray[i][j * 3 + 1], 3, 0, 0, 0, 0);
|
var positionB = SGWorld.Creator.CreatePosition(gLineArray[i][(j + 1) * 3 ], gLineArray[i][(j + 1) * 3 + 2], gLineArray[i][(j + 1) * 3 + 1], 3, 0, 0, 0, 0);
|
var l = positionA.DistanceTo(positionB);
|
var l1 = (l * (Math.floor(pointB / 100) * 100 - pointA)) / (pointB - pointA);
|
var positionC = positionA.MoveToward(positionB, l1);
|
gElevationRingArray[Math.floor(pointB / 100)].push(positionC.X, positionC.Altitude, positionC.Y);
|
}
|
}
|
}
|
for (var alt = -10; alt < 100; alt++) {
|
if (gElevationRingArray[alt].length > 3) // at least two points
|
DrawObject(gElevationRingArray[alt], radius, alt);
|
}
|
}
|
******/
|
// Outer ring
|
gRingObj = SGWorld.Creator.CreatePolylineFromArray(gRingArray, gColorArray[(gNumDome - 1) % 10], 3, gGroup, SGLang.i18n("Text21"));
|
gRingObj.LineStyle.Width = -3;
|
gRingObj.Visibility.MaxVisibilityDistance = radius * 50;
|
|
gRingList.push(gRingObj);
|
$("#ProfileID").show();
|
$("#ProfileID").css('display', 'inline');
|
}
|
catch (e) { alert(e.message); Reset(false, false); }
|
|
return true;
|
}
|
|
//---------
|
// DrawObject
|
function DrawObject(LineArray, range, Yaw, gType) {
|
var node;
|
var TEObj;
|
var scale = range * 50;
|
var ObjType; // = "ImageLabel";
|
|
if (gType == 0)
|
ObjType = "Polygon";
|
else
|
ObjType = "Polyline";
|
|
|
SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text27") + " [" + gNumDome + "]");
|
|
if (gLayer == null) {
|
CreateGroupOrLayer(ObjType);
|
|
// style the feature group
|
if (featureLayerStyles[ObjType] != null) {
|
var result = featureLayerStyles[ObjType](scale);
|
if (result === false)
|
return false;
|
}
|
}
|
|
if (ObjType == "Polygon")
|
gLayer.FeatureGroups.Polygon.CreateFeature(LineArray, range + ";" + Yaw);
|
if (ObjType == "Polyline")
|
gLayer.FeatureGroups.Polyline.CreateFeature(LineArray, range + ";" + Yaw);
|
|
return true;
|
|
}
|
//----------
|
// CreateGroupOrLayer
|
function CreateGroupOrLayer(ObjType) {
|
|
var radius = $("#radiusID").val();
|
|
if (gLayer == null) {
|
var postfix = new Date().getTime();
|
var layerName = $("#OutputTypeID option:selected").text() + postfix;
|
if (ObjType == "Polygon")
|
gLayer = SGWorld.Creator.CreateNewFeatureLayer(layerName, LayerGeometryType.LGT_POLYGON, "FileName=ThreatDome" + postfix + ".shp;TEPlugName=OGR;", gGroup);
|
if (ObjType == "Polyline")
|
gLayer = SGWorld.Creator.CreateNewFeatureLayer(layerName, LayerGeometryType.LGT_POLYLINE, "FileName=ThreatDome" + postfix + ".shp;TEPlugName=OGR;", gGroup);
|
|
// gLayer = SGWorld.Creator.CreateNewFeatureLayer(layerName, LayerGeometryType.LGT_POINT, "FileName=ThreatDome" + postfix + ".shp;TEPlugName=OGR;", gGroup);
|
gLayer.Streaming = true;
|
gLayer.BlockWidth = radius / 4;
|
gLayer.Refresh();
|
///gLayer.DataSourceInfo.Attributes.CreateAttribute(SGLang.i18n("Text29"), 1, 20, 0);
|
gLayer.DataSourceInfo.Attributes.CreateAttribute(SGLang.i18n("Text30"), 1, 20, 0);
|
gLayer.DataSourceInfo.Attributes.CreateAttribute(SGLang.i18n("Text33"), 2, 20, 1);
|
gLayer.DataSourceInfo.Attributes.ImportAll = true;
|
gLayer.Visibility.MaxVisibilityDistance = gVisibilityDistance;
|
|
}
|
|
}
|
var featureLayerStyles = {
|
|
"Polygon": function (size) {
|
gLayer.FeatureGroups.Polygon.SetProperty("Line Color", "#ffffff");
|
gLayer.FeatureGroups.Polygon.SetProperty("Line Opacity", 0.5);
|
gLayer.FeatureGroups.Polygon.SetProperty("Fill Opacity", 0);
|
gLayer.FeatureGroups.Polygon.SetProperty("Altitude Method", 11);
|
gLayer.Visibility.MaxVisibilityDistance = size;
|
},
|
"Polyline": function (size) {
|
gLayer.FeatureGroups.Polyline.SetProperty("Line Color", "#ffffff");
|
gLayer.FeatureGroups.Polyline.SetProperty("Line Opacity", 0.5);
|
gLayer.FeatureGroups.Polyline.SetProperty("Altitude Method", 11);
|
gLayer.Visibility.MaxVisibilityDistance = size;
|
}
|
}
|
//---------------
|
// TypeChanged
|
function TypeChanged() {
|
gType = $("#OutputTypeID").val();
|
if (gType == 2) // Skyline
|
$("#ElevationAngleID").attr('disabled', 'disabled');
|
else
|
$("#ElevationAngleID").attr('disabled', '');
|
}
|
//---------------
|
// ValidateInput
|
function ValidateInput() {
|
var radius = $("#radiusID").val();
|
radius = Math.max(radius, 0.1);
|
$("#radiusID").val(radius);
|
|
var ElevationAngle = $("#ElevationAngleID").val();
|
ElevationAngle = Math.max(Math.min(ElevationAngle, 80), -90);
|
$("#ElevationAngleID").val(ElevationAngle);
|
return;
|
}
|
//--------------
|
// ShoeProfile
|
function ShowProfile() {
|
var objList = "";
|
|
if (gRingList.length == 0)
|
return;
|
|
try {
|
for (var i = 0 ; i < gRingList.length ; i++)
|
objList += "&ObjID" + i + "=" + gRingList[i].ID;
|
}
|
catch (e) { alert(SGLang.i18n("Text37")); return; }
|
|
// Remove previos popup
|
SGWorld.Window.RemovePopupByCaption(gPopupCaption);
|
|
var a = new Date();
|
gPopupCaption = SGLang.i18n("Text19") + Date().toString();
|
var url = abspath() + "/TerrainProfilePopup.html?Type=3" + objList + "&Density=1&Compare=0&Caption=" + gPopupCaption + "&lang=" + SGLang.getCode();
|
var popupMsg = SGWorld.Creator.CreatePopupMessage(gPopupCaption, url, 1, -1000, 100, 100, -1);
|
|
popupMsg.Flags = 2 + 32;
|
SGWorld.Window.ShowPopup(popupMsg);
|
|
}
|
//--------------
|
// CheckNumberEx
|
function CheckNumberEx(field, defVal, MinNum, MaxNum) {
|
try {
|
field.value = validateNumber(field.value);
|
|
if (field.value < MinNum)
|
field.value = MinNum;
|
if (field.value > MaxNum)
|
field.value = MaxNum;
|
}
|
catch (e) { field.value = defVal }
|
}
|
|
</script>
|
|
</body>
|
</html>
|
<!--Sig:00000040swRU8NBbaFXhPK5cxD8N8Trstvd5P7PQDtJF4mYc45KDVIS08pzRP03IAiztVkVxGmE5iGFIKa#7JaHYClKrJWJJ-->
|