/**** JQuery was removed from toolsCommon70. You should include one of the JQuery files under the "JQuery" folder ****/ if(!this.JSON){this.JSON={};} (function(){function f(n){return n<10?'0'+n:n;} if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+ f(this.getUTCMonth()+1)+'-'+ f(this.getUTCDate())+'T'+ f(this.getUTCHours())+':'+ f(this.getUTCMinutes())+':'+ f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};} var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';} function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);} if(typeof rep==='function'){value=rep.call(holder,key,value);} switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';} gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i will be used to determine the appropriate * dictionary. Dictionaries are stored in . * * Parameters: * key - {String} The key for an i18n string value in the dictionary. * context - {Object} Optional context to be used with * . * * Returns: * {String} A internationalized string. */ i18n: function(key, context) { var message = SGLang.lang[key]; if(!message) { // Message not found, fall back to message key message = key; } if(context) { message = SGLang.format(message, context); } return message; }, i18nFile: function(file) { var code = this.getCode(); if(code == "0" || code == "1033") return file; return code + "/" + file; }, format: function(template, context, args) { if(!context) { context = window; } // Example matching: // str = ${foo.bar} // match = foo.bar var replacer = function(str, match) { var replacement; // Loop through all subs. Example: ${a.b.c} // 0 -> replacement = context[a]; // 1 -> replacement = context[a][b]; // 2 -> replacement = context[a][b][c]; var subs = match.split(/\.+/); for (var i=0; i< subs.length; i++) { if (i == 0) { replacement = context; } replacement = replacement[subs[i]]; } if(typeof replacement == "function") { replacement = args ? replacement.apply(null, args) : replacement(); } // If replacement is undefined, return the string 'undefined'. // This is a workaround for a bugs in browsers not properly // dealing with non-participating groups in regular expressions: // http://blog.stevenlevithan.com/archives/npcg-javascript if (typeof replacement == 'undefined') { return 'undefined'; } else { return replacement; } }; return template.replace(SGLang.tokenRegEx, replacer); }, /** * Property: SGLang.tokenRegEx * Used to find tokens in a string. * Examples: ${a}, ${a.b.c}, ${a-b}, ${5} */ tokenRegEx: /\$\{([\w.]+?)\}/g }; //------------------- // load requested lang file (function() { // document.write(""); // var code = SGLang.getCode(); // document.write(""); var head = document.head || document.getElementsByTagName("head")[0]; // New way to support IE10 firstScript = head.getElementsByTagName("script")[0]; var script = document.createElement("script"); script.setAttribute("src", "Lang.js"); head.insertBefore(script, firstScript); var code = SGLang.getCode(); var script2 = document.createElement("script"); script2.setAttribute("src", code + "/Lang.js"); head.insertBefore(script2, firstScript); })(); // hide document body, so that TextXXX won't be visible until we replace them on document ready $(document.body).hide(); //------------------- $(document).ready(function () { $(document.body).hide(); var translateDocument = function() { document.title = SGLang.i18n(document.title); $(".i18n").each(function () { if (this.tagName == "INPUT") { this.value = SGLang.i18n(this.value); } else if (this.tagName == "IMG") { $(this).attr("src",SGLang.i18n($(this).attr("src"))); $(this).attr("alt", SGLang.i18n($(this).attr("alt"))); $(this).attr("title", SGLang.i18n($(this).attr("title"))); } else { $(this).attr("title", SGLang.i18n($(this).attr("title"))); $(this).attr("alt", SGLang.i18n($(this).attr("alt"))); // set element html only if it does not contain any other html elements. // otherwise it will erase them. if ($(this).children().length == 0) { $(this).html(SGLang.i18n($.trim($(this).text()))); } } }); $(".i18nFile").each(function () { if (this.tagName == "IMG") { $(this).attr("src",SGLang.i18nFile($(this).attr("src"))); } }); $(document.body).show(); } // make sure that hiding document body really worked. // I am not sure if IE will update the document view, until the function has finished executing. // so I am giving it here a few milliseconds of unused time. setTimeout(translateDocument,1); }); $(document).ready(function () { if (GetParamValue("inSG","") == "1") { document.getElementById("TopAreaTD").style.height = "57"; document.getElementById("TitleTD").align = "left"; document.getElementById("CloseHelpTd").style.display = "none"; } }); //------------------- // DisplayMessagePopup function DisplayMessagePopup(title, header, icon,body, x, y, width, height, CloseButton) { var HTMLString = ""; HTMLString += ""; if (icon != "") HTMLString += ""; if (header != "") HTMLString += ""; HTMLString += ""; if (CloseButton) HTMLString += ""; HTMLString += ""; var popupMsg = SGWorld.Creator.CreatePopupMessage(title, "", x, y, width, height, -1); popupMsg.Flags = 2 + 32 + 32768; popupMsg.InnerText = HTMLString; SGWorld.Window.ShowPopup(popupMsg); } //------------------- // TEAlert function TEAlert(caption, text,info) { var icon; if (info==true) icon=abspath() + "/../commonimg/info.png"; else icon=abspath() + "/../commonimg/alert.png"; DisplayMessagePopup(caption, "",icon,text, (SGWorld.Window.Rect.Width)/2-200, (SGWorld.Window.Rect.Height)/2-75, 400, 150, true); } //------------------- // DisplayHelpPopup6 function DisplayHelpPopup6(HTMLSrc, title) { if (title == null || title == "") title = "?"; var popup = SGWorld.Creator.CreatePopupMessage(title, abspath() + "/" + HTMLSrc, 5, 5, 850, 500); popup.AllowDrag = true; popup.AllowResize = true; SGWorld.Window.ShowPopup(popup); } //------------------- // CloseTool function CloseTool (ToolName) { var Cont = TE.interface("IContainer2"); Cont.RemoveURL (1,ToolName); } //-------------- // abspath function abspath() { var abspath = unescape(window.location.href); // Remove query String var index=abspath.indexOf("?"); if (index > 0) abspath = abspath.substr (0,index-1); index=abspath.lastIndexOf("/"); var index2 = abspath.lastIndexOf("\\"); index = (index > index2) ? index : index2; if (index <= 0) return abspath; abspath = abspath.substring(0,index); if(abspath.substring(0,1) == "/") abspath = abspath.slice(1); var re = /file:\/\/\//gi; if (abspath.match(re) != null) abspath = abspath.replace(re,""); // if this is indeed a local file, we strip the "file://" prefix from it. return(abspath); } // GetParamValue function GetParamValue(findParam, defaultValue) { var arr = document.location.href.split("?"); if (arr.length <= 1) return defaultValue; arr = arr[1].split("&"); for (var i = 0; i < arr.length; i++) { if (arr[i].indexOf(findParam) == 0 && arr[i].indexOf("=") == findParam.length) { arr = arr[i].split("="); return arr[1]; } } return defaultValue; } //----------------- // validateNumber function validateNumber(strNum) { strNum = strNum.replace(/,/, "."); return parseFloat (strNum); } //-------------- // validateNumberEx function validateNumberEx(field, defVal, MinNum, MaxNum) { try { field.val (validateNumber(field.val())); if (field.val() < MinNum) field.val(MinNum); if (field.val() > MaxNum) field.val( MaxNum); } catch (e) {field.val(defVal); } } //-------------- // CheckNumberEx function CheckNumberEx(field, defVal, MinNum, MaxNum) { try { if (isNaN(field.value)) field.value = defVal; if (field.value < MinNum) field.value = MinNum; if (field.value > MaxNum) field.value = MaxNum; } catch (e) { field.value = defVal } } /** * APIMethod: drawing tools * */ var gDrawingEditMode = 0; var drawing = { drawingEditMode: -1, polyObject: null, helpLine: null, // Vertical line in case we select Horizontal Plane and want to see the connection between the cursor and the plane drawPolygon: function (options) { drawing_startDrawing (2,options); }, drawPolyline: function (options) { drawing_startDrawing (1,options); }, //drawPoints: drawing_startDrawing (0,options), abort: function (deleteObj) {drawing_finishDrawing(true); } } //------------- //drawing_startDrawing function drawing_startDrawing(type,options) { try { drawing.drawingEditMode = type; drawing.options = options; SGWorld.AttachEvent("OnLButtonClicked", drawing_DrawPolyLButtonClicked); SGWorld.AttachEvent("OnRButtonUp", drawing_DrawPolyRButtonUp); SGWorld.AttachEvent("OnFrame", drawing_DrawPolyOnFrame); SGWorld.AttachEvent("OnInputModeChanged", drawing_DrawPolyInputModeChanged); SGWorld.Window.SetInputMode(1, abspath() + "/cursor_m.cur", true); } catch (err) {if (gDebug) alert(err.message);} } //------------- //drawing_finishDrawing function drawing_finishDrawing (deleteObject){ try { if (deleteObject && drawing.polyObject != null) SGWorld.Creator.DeleteObject(drawing.polyObject.ID); if (drawing.helpLine != null) SGWorld.Creator.DeleteObject(drawing.helpLine.ID); drawing.polyObject = null; drawing.helpLine = null; drawing.options.onAbort(); } catch (err) {} try { SGWorld.Window.SetInputMode(0); drawing.drawingEditMode = -1; SGWorld.DetachEvent("OnLButtonClicked", drawing_DrawPolyLButtonClicked); SGWorld.DetachEvent("OnRButtonUp", drawing_DrawPolyRButtonUp); SGWorld.DetachEvent("OnFrame", drawing_DrawPolyOnFrame); SGWorld.DetachEvent("OnInputModeChanged", drawing_DrawPolyInputModeChanged); } catch (err) {} } //------------- //drawing_DrawPolyInputModeChanged function drawing_DrawPolyInputModeChanged(NewMode) { if (NewMode != 1) if (drawing.drawingEditMode != -1) drawing.abort(); } //---------- // drawing_DrawPolyLButtonDown function drawing_DrawPolyLButtonDown(Flags, X, Y) { drawing_DrawPolyLButtonClicked(Flags, X, Y); } //---------- // drawing_DrawPolyLButtonClicked function drawing_DrawPolyLButtonClicked(Flags, X, Y) { try { var CursorCoord = SGWorld.Window.pixelToWorld(X, Y, -1 & ~(128 | 1024)); var altitudeMethod = (typeof drawing.options.altitudeMethod !== "undefined")?drawing.options.altitudeMethod :3; var parentGroup = (typeof drawing.options.parentGoupID !== "undefined")?drawing.options.parentGoupID :SGWorld.ProjectTree.HiddenGroupID; if (drawing.polyObject == null) { // We always start with a polyline and change it to Polygon (for area) after the second click) var myGeometry = SGWorld.Creator.GeometryCreator.CreateLineStringGeometry([CursorCoord.Position.x, CursorCoord.Position.y, CursorCoord.Position.Altitude, CursorCoord.Position.x, CursorCoord.Position.y, CursorCoord.Position.Altitude]) drawing.polyObject = SGWorld.Creator.createPolyline(myGeometry, SGWorld.Creator.CreateColor(0, 255, 0, 1), altitudeMethod, parentGroup, "polyline"); drawing_StylePoly(drawing.polyObject); drawing.polyObject.Geometry.StartEdit(); if (typeof drawing.options.horizontal !== "undefined" && drawing.options.horizontal==true){ var myGeometry = SGWorld.Creator.GeometryCreator.CreateLineStringGeometry([0, 0, 0, 0, 0, 0]) drawing.helpLine = SGWorld.Creator.createPolyline(myGeometry, SGWorld.Creator.CreateColor(0, 255, 0, 1), altitudeMethod, SGWorld.ProjectTree.HiddenGroupID, "helper"); drawing_StyleHelpLine(drawing.helpLine); drawing.helpLine.Geometry.StartEdit(); } } else { if (drawing.drawingEditMode == 2) // Polygon { if (drawing.polyObject.ObjectType == 1) { // Deleting the temporary line var x = drawing.polyObject.Geometry.Points.Item(0).X; var y = drawing.polyObject.Geometry.Points.Item(0).Y; var z = drawing.polyObject.Geometry.Points.Item(0).Z; SGWorld.Creator.DeleteObject(drawing.polyObject.ID); if (typeof drawing.options.horizontal !== "undefined" && drawing.options.horizontal==true) CursorCoord.Position.Altitude = z; // Creating the polygon var myGeometry = SGWorld.Creator.GeometryCreator.CreateLinearRingGeometry([x, y, z, CursorCoord.Position.x, CursorCoord.Position.y, CursorCoord.Position.Altitude, CursorCoord.Position.x, CursorCoord.Position.y, CursorCoord.Position.Altitude]); drawing.polyObject = SGWorld.Creator.createPolygon(myGeometry, SGWorld.Creator.CreateColor(0, 255, 0, 1), SGWorld.Creator.CreateColor(0, 255, 0, 0.5), altitudeMethod, parentGroup, "polygon"); drawing_StylePoly(drawing.polyObject); drawing.polyObject.Geometry.StartEdit(); } else { drawing.polyObject.Geometry.Rings(0).Points.Item(drawing.polyObject.Geometry.Rings(0).Points.count - 1).X = CursorCoord.Position.x; drawing.polyObject.Geometry.Rings(0).Points.Item(drawing.polyObject.Geometry.Rings(0).Points.count - 1).Y = CursorCoord.Position.y; drawing.polyObject.Geometry.Rings(0).Points.Item(drawing.polyObject.Geometry.Rings(0).Points.count - 1).Z = CursorCoord.Position.Altitude; if (typeof drawing.options.horizontal !== "undefined" && drawing.options.horizontal==true) drawing.polyObject.Geometry.Rings(0).Points.Item(drawing.polyObject.Geometry.Rings(0).Points.count - 1).Z = drawing.polyObject.Geometry.Rings(0).Points.Item(0).Z; drawing.polyObject.Geometry.Rings(0).Points.AddPoint(CursorCoord.Position.x, CursorCoord.Position.y, CursorCoord.Position.Altitude); } } else { // Polyline drawing.polyObject.Geometry.Points.Item(drawing.polyObject.Geometry.Points.count - 1).X = CursorCoord.Position.x; drawing.polyObject.Geometry.Points.Item(drawing.polyObject.Geometry.Points.count - 1).Y = CursorCoord.Position.y; drawing.polyObject.Geometry.Points.Item(drawing.polyObject.Geometry.Points.count - 1).Z = CursorCoord.Position.Altitude; if (typeof drawing.options.horizontal !== "undefined" && drawing.options.horizontal==true) drawing.polyObject.Geometry.Points.Item(drawing.polyObject.Geometry.Points.count - 1).Z = drawing.polyObject.Geometry.Points.Item(0).Z; drawing.polyObject.Geometry.Points.AddPoint(CursorCoord.Position.x, CursorCoord.Position.y, CursorCoord.Position.Altitude); } } if (typeof drawing.options.onAddPoint !== "undefined") drawing.options.onAddPoint(drawing.polyObject.Geometry, drawing.polyObject.ObjectType, drawing.polyObject.Position.AltitudeType); drawing.polyObject.SetParam(5440, 1); } catch (err) {if (gDebug) alert(err.message);} return false; } //----------- // drawing_StylePoly function drawing_StylePoly (poly){ try { // Line style poly.LineStyle.Width = (typeof drawing.options.style.lineWidth !== "undefined")?drawing.options.style.lineWidth*(-1):-2; poly.LineStyle.Color.fromHTMLColor((typeof drawing.options.style.lineColor !== "undefined")?drawing.options.style.lineColor :"#ffffff"); poly.LineStyle.Color.SetAlpha((typeof drawing.options.style.lineOpacity !== "undefined")?drawing.options.style.lineOpacity :1); poly.LineStyle.Pattern = (typeof drawing.options.style.linePattern !== "undefined")?drawing.options.style.linePattern :0xffffffff; // Line back color poly.LineStyle.BackColor.fromHTMLColor((typeof drawing.options.style.lineBackColor !== "undefined")?drawing.options.style.lineBackColor :"#000000"); poly.LineStyle.BackColor.SetAlpha((typeof drawing.options.style.lineBackOpacity !== "undefined")?drawing.options.style.lineBackOpacity :0); // Fill style poly.FillStyle.Color.fromHTMLColor((typeof drawing.options.style.fillColor !== "undefined")?drawing.options.style.fillColor :"#ffffff"); poly.FillStyle.Color.SetAlpha((typeof drawing.options.style.fillOpacity !== "undefined")?drawing.options.style.fillOpacity :0); // Generic style poly.SaveInFlyFile = (typeof drawing.options.saveOnExit !== "undefined")?drawing.options.saveOnExit :false; } catch (err) {if (gDebug) alert(err.message);} } //----------- // drawing_StyleHelpLine function drawing_StyleHelpLine (poly){ try { poly.LineStyle.Width = -2; poly.LineStyle.Color.fromHTMLColor("#ffff00"); poly.LineStyle.Pattern = 0xaaaaaaaa; poly.SaveInFlyFile = false; } catch (err) {if (gDebug) alert(err.message);} } //----------- // onFrame function drawing_DrawPolyOnFrame() { if (drawing.polyObject != null) { try { var mouseInfo = SGWorld.Window.GetMouseInfo() var CursorCoord = SGWorld.Window.pixelToWorld(mouseInfo.X, mouseInfo.Y, -1 & ~(128|1024)); if (CursorCoord == null) return false; if (drawing.polyObject.ObjectType == 2) { drawing.polyObject.Geometry.Rings(0).Points.Item(drawing.polyObject.Geometry.Rings(0).Points.count - 1).X = CursorCoord.Position.x; drawing.polyObject.Geometry.Rings(0).Points.Item(drawing.polyObject.Geometry.Rings(0).Points.count - 1).Y = CursorCoord.Position.y; drawing.polyObject.Geometry.Rings(0).Points.Item(drawing.polyObject.Geometry.Rings(0).Points.count - 1).Z = CursorCoord.Position.Altitude; if (typeof drawing.options.horizontal !== "undefined" && drawing.options.horizontal==true) drawing.polyObject.Geometry.Rings(0).Points.Item(drawing.polyObject.Geometry.Rings(0).Points.count - 1).Z = drawing.polyObject.Geometry.Rings(0).Points.Item(0).Z; } else { drawing.polyObject.Geometry.Points.Item(drawing.polyObject.Geometry.Points.count - 1).X = CursorCoord.Position.x; drawing.polyObject.Geometry.Points.Item(drawing.polyObject.Geometry.Points.count - 1).Y = CursorCoord.Position.y; drawing.polyObject.Geometry.Points.Item(drawing.polyObject.Geometry.Points.count - 1).Z = CursorCoord.Position.Altitude; if (typeof drawing.options.horizontal !== "undefined" && drawing.options.horizontal==true) drawing.polyObject.Geometry.Points.Item(drawing.polyObject.Geometry.Points.count - 1).Z = drawing.polyObject.Geometry.Points.Item(0).Z; } drawing.polyObject.SetParam(5440, 1); if (typeof drawing.options.horizontal !== "undefined" && drawing.options.horizontal==true && drawing.helpLine!= null){ drawing.helpLine.Geometry.Points.Item(0).X = CursorCoord.Position.x; drawing.helpLine.Geometry.Points.Item(0).Y = CursorCoord.Position.y; drawing.helpLine.Geometry.Points.Item(0).Z = CursorCoord.Position.Altitude; drawing.helpLine.Geometry.Points.Item(1).X = CursorCoord.Position.x; drawing.helpLine.Geometry.Points.Item(1).Y = CursorCoord.Position.y; drawing.helpLine.Geometry.Points.Item(1).Z = drawing.polyObject.Geometry.Points.Item(0).Z; } } catch (e) { } } } //------------- // drawing_DrawPolyRButtonUp function drawing_DrawPolyRButtonUp(Flags, X, Y) { var deleteWhenExit = (typeof drawing.options.deleteWhenExit !== "undefined")?drawing.options.deleteWhenExit :true; if (drawing.polyObject == null || ((drawing.polyObject.ObjectType == 1 && drawing.polyObject.Geometry.Points.count <= 2) || (drawing.polyObject.ObjectType == 2 && drawing.polyObject.Geometry.Rings(0).Points.count <= 3))) { drawing_finishDrawing(deleteWhenExit); return false; } if (drawing.polyObject.ObjectType == 1) drawing.polyObject.Geometry.Points.DeletePoint(drawing.polyObject.Geometry.Points.count - 1); else drawing.polyObject.Geometry.Rings(0).Points.DeletePoint(drawing.polyObject.Geometry.Rings(0).Points.count - 1); drawing.polyObject.Geometry.EndEdit(); drawing.options.onFinish(drawing.polyObject.Geometry, drawing.polyObject.ObjectType, drawing.polyObject.Position.AltitudeType,drawing.polyObject.ID ); drawing_finishDrawing (deleteWhenExit); return true; } //------------------- //searchGeometries function searchGeometries2(parentNode, callbackFunc) { SGWorld.ProjectTree.EnableRedraw(0); searchGeometriesLeaf2(parentNode, callbackFunc); SGWorld.ProjectTree.EnableRedraw(1); } //------------------- // searchGeometries function searchGeometriesLeaf2(parentNode, callbackFunc) { if (SGWorld.ProjectTree.IsLayer(parentNode)) // Layer { var layer = SGWorld.ProjectTree.GetLayer(parentNode); var featureGroups = layer.FeatureGroups; for (var i = 0; i < featureGroups.Count; i++) // Traverse all sub-layers { var featureGroup = featureGroups.Item(i); var altitudeType = AltitudeMethodToAltitudeType(featureGroup.GetProperty("Altitude Method")); var features = featureGroup.Features; for (var j = 0; j < features.Count; j++) { var ret; if (featureGroup.GeometryType != 0) ret = callbackFunc(features.Item(j).Geometry, featureGroup.GeometryType, altitudeType); else { if (features.Item(j).Geometry.GeometryType == 0) // Point { var position = SGWorld.Creator.CreatePosition(features.Item(j).Geometry.X, features.Item(j).Geometry.Y, features.Item(j).Geometry.Z); ret = callbackFunc(position, featureGroup.GeometryType, altitudeType); } } if (!ret) return; } } } else { var node = SGWorld.ProjectTree.GetNextItem(parentNode, 11); while (node != "") { if (SGWorld.ProjectTree.IsGroup(node) || SGWorld.ProjectTree.IsLayer(node)) searchGeometriesLeaf2(node, callbackFunc); else { var Object = SGWorld.Creator.GetObject(node); if (Object != null) { var altitudeType = Object.Position.AltitudeType; var ret; if (Object.ObjectType == 1 || Object.ObjectType == 2) ret = callbackFunc(Object.Geometry, Object.ObjectType, altitudeType, Object.Position); else ret = callbackFunc(Object.Position, Object.ObjectType, altitudeType, Object.Position); if (!ret) return; } } node = SGWorld.ProjectTree.GetNextItem(node, 13); } } } //------------------- //AltitudeMethodToAltitudeType function AltitudeMethodToAltitudeType(altitudeMethod) { switch(altitudeMethod) { case 10: return AltitudeTypeCode.ATC_TERRAIN_RELATIVE; case 11: return AltitudeTypeCode.ATC_TERRAIN_ABSOLUTE; case 12: return AltitudeTypeCode.ATC_ON_TERRAIN; case 13: return AltitudeTypeCode.ATC_PIVOT_RELATIVE; } } //------------------- //searchGeometriesClipbaord function searchGeometriesClipboard(callbackFunc) { SGWorld.ProjectTree.EnableRedraw(0); var Object; for (var i = 0; i < SGWorld.Application.Clipboard.Count; i++) { try { Object = SGWorld.Application.Clipboard.Item(i); var altitudeType = Object.Position.AltitudeType; var ret; if (Object.ObjectType == 1 || Object.ObjectType == 2) ret = callbackFunc(Object.Geometry, Object.ObjectType, altitudeType, Object.Position); else ret = callbackFunc(Object.Position, Object.ObjectType, altitudeType, Object.Position); if (!ret) { SGWorld.ProjectTree.EnableRedraw(1); return; } } catch (e) { } } SGWorld.ProjectTree.EnableRedraw(1); } //---------------- // GetElevationBuffer function getElevationBuffer(geometry, resolution){ try { var polygonGeometry = geometry.Clone(); // to enable edit geometry (ref) when geometry type is RelativeToPivot. Navon. var envelope = polygonGeometry.Envelope; // Multi polygon evnelope (min/max) var MinX = Math.min(envelope.Rings(0).Points(0).x, envelope.Rings(0).Points(2).x); var MaxX = Math.max(envelope.Rings(0).Points(0).x, envelope.Rings(0).Points(2).x); var MinY = Math.min(envelope.Rings(0).Points(0).y, envelope.Rings(0).Points(2).y); var MaxY = Math.max(envelope.Rings(0).Points(0).y, envelope.Rings(0).Points(2).y); var stepX = Math.abs(MaxX - MinX) / resolution; var stepY = Math.abs(MaxY - MinY) / resolution; // For now we call this query several times because of an engine bug!!! var elevatuinBuffer = []; elevatuinBuffer = SGWorld.Analysis.QueryElevationBuffer(MinX, MaxY, stepX, stepY, resolution, resolution).toArray(); elevatuinBuffer = SGWorld.Analysis.QueryElevationBuffer(MinX, MaxY, stepX, stepY, resolution, resolution).toArray(); elevatuinBuffer = SGWorld.Analysis.QueryElevationBuffer(MinX, MaxY, stepX, stepY, resolution, resolution).toArray(); return elevatuinBuffer; } catch (e) {return null; } } //------------------- // BuildObjectsList function BuildObjectsList(parentNode, list, objectType) { try { var node = SGWorld.ProjectTree.GetNextItem(parentNode, 11); while (node != "") { if (!SGWorld.ProjectTree.IsLayer(node)) { try{ var Object = SGWorld.Creator.GetObject(node); if (Object != null) { if (Object.ObjectType == objectType) list.push(Object.ID); } } catch (err){} if (SGWorld.ProjectTree.IsGroup(node)) BuildObjectsList(node, list, objectType); } else if (objectType==36) list.push(node); node = SGWorld.ProjectTree.GetNextItem(node, 13); } } catch (err) {if (gDebug) alert(err.message); } } //------------------- // BuildFoldersList function BuildFoldersList(parentNode, list) { try { var node = SGWorld.ProjectTree.GetNextItem(parentNode, 11); while (node != "") { if (SGWorld.ProjectTree.IsGroup(node)){ list.push(node); BuildFoldersList(node, list); } node = SGWorld.ProjectTree.GetNextItem(node, 13); } } catch (err) {if (gDebug) alert(err.message); } } //------------- // ScanPolygon // function scan2DPolygon (geometry, step, callback) { // var polygonGeometry = geometry.Clone(); // to enable edit geometry (ref) when geometry type is RelativeToPivot. Navon. // var envelope = polygonGeometry.Envelope; // Multi polygon evnelope (min/max) // var MinX = Math.min(envelope.Rings(0).Points(0).x, envelope.Rings(0).Points(2).x); // var MaxX = Math.max(envelope.Rings(0).Points(0).x, envelope.Rings(0).Points(2).x); // var MinY = Math.min(envelope.Rings(0).Points(0).y, envelope.Rings(0).Points(2).y); // var MaxY = Math.max(envelope.Rings(0).Points(0).y, envelope.Rings(0).Points(2).y); // var currCoord = SGWorld.Creator.CreatePosition(MinX, MinY, 0 , 0, 0); // while (currCoord.x < MaxX) { // currCoord.y = MinY; // while (currCoord.y < MaxY) { // var pointGeometry = SGWorld.Creator.GeometryCreator.CreatePointGeometry([currCoord.x, currCoord.y, 0]); // if (polygonGeometry.SpatialRelation.Intersects(pointGeometry)) { // var tmpCoord = currCoord.Copy(); // to avoid changes in the CurrCoord value in the DrawObject function // if (callback(tmpCoord) == false) // return false; // } // currCoord = currCoord.Move(step, 0, 0); // } // currCoord = currCoord.Move(step, 90, 0); // } // return true; // }
" + header + "
" + body + "