SkylineGlobe 如何实现工程进度管理或者说是对象生命周期管理

SkylineGlobe 的 TerraExplorer Pro里面,给我们提供了一个Timespan Tags工具,通过这个工具,我们可以设置ProjectTree任务组对象的生命周期;
然后通过调用Time Slider工具,既可以控制这些对象的显示或者隐藏。
在这个功能的实现过程中,主要使用到了ProjectTree接口中的SetGroupStartTime和SetGroupEndTime方法;
以及TimeSpan接口中的Start和End属性的设置;
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ToolTitle</title>
<link rel="StyleSheet" href="../Style.css" type="text/css">
<link rel="stylesheet" type="text/css" media="all" href="./jscalendar/skins/aqua/theme.css"
title="Aqua" />
<style>
.MenuButton { height: 78px; width: 65px; margin: 5px; white-space: normal; }
.MenuButtonHighlight { color: Red; font-weight: bold; }
.tableHeader {background-color:Silver} </style>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" style="border: 0;
overflow: auto;" id="Body" onload="Init()">
<!-- onclick="bHide=true;HideOptionsNow()" > -->
<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td id="TopAreaTD" height="50px" width="100%" valign="middle" style="background-color: #CAD8E2">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="12px"></td>
<td width="55px"><img alt="find" src="TimeStampIcon.gif" /></td>
<td id="TitleTD" align="center" class="s12b i18n">ToolName</td>
<td valign="top" align="right" id="CloseHelpTd"><img src="../CommonImg/help.gif" 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 height="1px">
<td style="background-repeat: repeat-x;" background="../CommonImg/separator.gif">
</td>
</tr>
<tr>
<td> <br /> </td>
</tr>
</table>
<table>
<tr class="s8">
<td colspan="2">
<table border="0" cellspacing="0" cellpadding="1" bgcolor="#ffffff" class="s8">
<tr class='TableOtherLine'>
<td align="top" class="s8b i18n">Text15</td>
<td align="left">
<select id="Select1" size="1" style="z-index: 1;">
<option value="0" class="i18n" selected>Text16</option>
</select>
</td>
</tr>
<tr class="s8">
<td align="top" class="s8b i18n"> Text1 </td>
<td align="left">
<input type="text" name="date" id="start_date_c" readonly="1" />
<img alt="start" src="./jscalendar/img.gif" id="start_trigger_c" style="cursor: pointer; border: 0px;" title="Start Date and Time" onmouseover="this.style.background='red';" onmouseout="this.style.background=''" />
</td>
</tr>
<tr class='TableOtherLine'>
<td align="top" class="s8b i18n">
Text2
</td>
<td align="left">
<input type="text" name="date" id="end_date_c" readonly="1" />
<img alt="End" src="./jscalendar/img.gif" id="end_trigger_c" style="cursor: pointer; border: 0px;" title="End Date and Time" onmouseover="this.style.background='red';" onmouseout="this.style.background=''" />
</td>
</tr>
<tr class="s8">
<td align="top" class="s8b i18n">Text11</td>
<td align="left">
<select id="handleSubGroups" size="1" style="z-index: 1;">
<option value="0" class="i18n" selected>Text12</option>
<option value="1" class="i18n" >Text13</option>
</select>
</td>
</tr>
</table>
</td>
</tr>
<tr class="s8">
<td colspan="2">
<button id="groupButton" class="MenuButton" onclick="SelectGroupObjects(1)"> <img src="group.gif" /><br /> <span class="i18n">Text5</span></button>
<button id="cleanButton" class="MenuButton" onclick="SelectGroupObjects(2)"> <img src="clean.gif" /><br /> <span class="i18n">Text8</span></button>
</td>
</tr>
<tr>
<td>
<span id="resultLine"></span>
<table border=1 id="objectsTable">
</table>
</td>
</tr>
</table>
<object id="SGWorld" classid="CLSID:3a4f91b0-65a8-11d5-85c1-0001023952c1">
</object>
</body> <script language="javascript" src="../ToolsCommon.js"></script> <!-- import the calendar script --> <script type="text/javascript" src="./jscalendar/calendar.js"></script>
<script type="text/javascript">
//-------------------
// load lang file for calendar (function() {
document.write("<script language='javascript' src='./jscalendar/calendar-lang.js'></"+"script>");
var code = SGLang.getCode();
document.write("<script language='javascript' src='./jscalendar/" + code + "/calendar-lang.js'></"+"script>");
})();
</script>
<script type="text/javascript" src="./jscalendar/calendar-setup.js"></script> <script language="jscript"> var startTime;
var endTime;
var objectsTableContent;
var numObjects;
var deltaTime; // Init
function Init()
{ SGWorld.Window.ShowControls(SGWorld.Window.GetControls() | 64); // Turn on the time control
Reset(0, 0);
} //--------------
// Reset
function Reset(FirstTime, FromMouseInputMode) { $("#groupButton").removeClass("MenuButtonHighlight");
$("#cleanButton").removeClass("MenuButtonHighlight");
SGWorld.ProjectTree.EnableRedraw(1);
SGWorld.Window.HideMessageBarText();
numObjects = 0; }
//-----------
// SelectGroupObjects
function SelectGroupObjects(action) {
var parentNode = SGWorld.ProjectTree.GetNextItem(0, 10);
if (parentNode == 0 || !(SGWorld.ProjectTree.IsGroup(parentNode)))
{
alert(SGLang.i18n("Text69"));
return;
}
startTime = Date.parseDate($("#start_date_c").val(),"%b %e, %Y %H:%M").getTime();
endTime = Date.parseDate($("#end_date_c").val(),"%b %e, %Y %H:%M").getTime(); if (action == 1 && (isNaN(startTime) || isNaN(endTime))) {
alert(SGLang.i18n("Text6"));
return;
}
$("#objectsTable").html("");
objectsTableContent = "";
$(event.srcElement).addClass("MenuButtonHighlight");
SGWorld.Window.ShowMessageBarText(SGLang.i18n("Text7"), -1);
SGWorld.Window.ShowControls(SGWorld.Window.GetControls() | 64); // Turn on the time control
SGWorld.ProjectTree.EnableRedraw(0); searchLeaf(parentNode, 0, 0);
deltaTime = (endTime - startTime) / numObjects;
searchLeaf(parentNode, action, 0); if (action == 1)
$("#resultLine").html(SGLang.i18n("Text9") + numObjects + " <a onclick='showResultTable("+parentNode+");'><u>" + SGLang.i18n("Text10") + "</u></a>"); Reset(0, 0);
}
//--------------
//showResultTable
function showResultTable(parentNode) {
objectsTableContent = "<h1 style='width:100%;text-align:center'>" + SGLang.i18n("Text14") + "</h1><style>td { border:solid 1px black;padding-left:5px;padding-right:5px;font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-style: normal; font-weight: normal; }</style><table style='width:100%;height:100%' cellspacing=0 cellpadding=1><tr style='background-color:#3F5875;color:white;text-align:center' ><td >" + SGLang.i18n("Text70") + "</td> <td>" + SGLang.i18n("Text1") + "</td><td>" + SGLang.i18n("Text71") + "</td><td>" + SGLang.i18n("Text2") + "</td></tr>";
searchLeaf(parentNode, 3, 0);
objectsTableContent += "<tr style='height:100%'><td colspan='4' /></tr></table>";
var rowCount = $(objectsTableContent).find("tr").length;
var resultPopup = SGWorld.Creator.CreatePopupMessage(SGLang.i18n("Text14"), "", 50, 50, 550, Math.min(400, rowCount * 20 + 100), -1);
resultPopup.InnerHTML = objectsTableContent;
resultPopup.AllowDrag = true;
resultPopup.AllowResize = true;
SGWorld.Window.ShowPopup(resultPopup); //$("#objectsTable").append(objectsTableContent);
}
//-------------------
// searchGeometries
function searchLeaf(parentNode, action, level)
{
var node = SGWorld.ProjectTree.GetNextItem(parentNode, 11);
SGWorld.ProjectTree.SetGroupStartTime(parentNode, 0);
SGWorld.ProjectTree.SetGroupEndTime(parentNode, 0);
while (node != -1 && node != 0)
{
if (!SGWorld.ProjectTree.IsLayer(node))
{
if (SGWorld.ProjectTree.IsGroup(node))
{
searchLeaf(node, action, level + 1);
if (action == 1 && level == 0 && $("#handleSubGroups").attr("value")=="1")
startTime += deltaTime
if (action == 0 && level == 0 && $("#handleSubGroups").attr("value") == "1")
numObjects++;
}
else
{
var Object = SGWorld.ProjectTree.GetObject(node);
if (Object != null)
{
switch (action)
{
case 0: // count objects
if (level == 0 || $("#handleSubGroups").attr("value") == "0")
numObjects++;
break;
case 1: // Set time
SetTimes(Object);
if (level == 0 || $("#handleSubGroups").attr("value") == "0")
startTime += deltaTime
break;
case 2: // Clean
CleanTimes(Object);
break;
case 3: // Get time
GetTimes(Object);
break;
}
}
}
}
node = SGWorld.ProjectTree.GetNextItem(node, 13);
}
}
//-------------
// SetTimes
function SetTimes(Object)
{
try
{
Object.TimeSpan.Start = startTime;
Object.TimeSpan.End = startTime + deltaTime;
}
catch (e) {}
}
//-------------
// SetTimes
function GetTimes(Object)
{
//try
//{
if (!Object.TimeSpan)
return; var objStartDate = new Date(Object.TimeSpan.Start)
var objEndDate = new Date(Object.TimeSpan.End)
var objDeltaDateDays = Math.floor((objEndDate.getTime() - objStartDate.getTime()) / 86400000);
var objDeltaDatehours = Math.floor((objEndDate.getTime() - objStartDate.getTime()) / 3600000) - (objDeltaDateDays * 24);
var objDeltaDateMin = (objEndDate.getTime() - objStartDate.getTime()) / 60000 - (objDeltaDatehours * 60) - (objDeltaDateDays * 1440);
objDeltaDateMin = Math.floor((objDeltaDateMin + .005) * 100) / 100; startTimeStr = objStartDate.toDateString() + " " +prettyDate(objStartDate); // objStartDate.getHours() + ":" + objStartDate.getMinutes()
endTimeStr = objEndDate.toDateString() + " " + prettyDate(objEndDate); //objEndDate.getHours() + ":" + (objEndDate.getMinutes())? objEndDate.getMinutes()
objectsTableContent += "<tr><td >" + Object.TreeItem.Name + "</td> <td>" + startTimeStr + "</td><td>" +objDeltaDateDays+"d " + objDeltaDatehours + "h " + objDeltaDateMin + "m </td><td>" + endTimeStr + "</td></tr>";
//}
//catch (e) {}
}
function prettyDate(date)
{
var Hours = date.getHours() + "";
if (Hours.length == 1)
Hours = "0"+Hours; var minutes = date.getMinutes() + "";
if (minutes.length == 1)
minutes = "0"+minutes; return Hours+":"+minutes;
}
//-------------
// CleanTimes
function CleanTimes(Object) {
try
{
Object.TimeSpan.Start = 0;
Object.TimeSpan.End = 0;
}
catch (e) {}
} //----------------
Calendar.setup({
inputField: "start_date_c", // id of the input field
ifFormat: "%b %e, %Y %H:%M", // format of the input field
button: "start_trigger_c", // trigger for the calendar (button ID)
align: "Tl", // alignment (defaults to "Bl")
showsTime: true, // will display a time selector
singleClick: true
});
Calendar.setup({
inputField: "end_date_c", // id of the input field
ifFormat: "%b %e, %Y %H:%M", // format of the input field
button: "end_trigger_c", // trigger for the calendar (button ID)
align: "Tl", // alignment (defaults to "Bl")
showsTime: true, // will display a time selector
singleClick: true
}); </script> </html>
SkylineGlobe 如何实现工程进度管理或者说是对象生命周期管理的更多相关文章
- Delphi 接口使用中,对象生命周期管理,如何释放需要注意的问题
网上有篇文章<Delphi接口编程的两大陷阱>,里面提到接口的生存期管理的问题.但该文章里面提到的两个问题,其实都是对 Delphi 不理解导致的. 先说该篇文章中提到的第一个问题为什 ...
- 【转】Tomcat组件生命周期管理
Tomcat组件生命周期管理 Tomcat中Server,Service,Connector,Engine,Host,Context,它们都实现了org.apache.catalina.Lifecyc ...
- ElasticSearch——索引生命周期管理
从ES6.6开始,Elasticsearch提供索引生命周期管理功能,索引生命周期管理可以通过API或者kibana界面配置,详情参考[index-lifecycle-management] 本文仅通 ...
- Elasticsearch7.X ILM索引生命周期管理(冷热分离)
Elasticsearch7.X ILM索引生命周期管理(冷热分离) 一.“索引生命周期管理”概述 Elasticsearch索引生命周期管理指:Elasticsearch从设置.创建.打开.关闭.删 ...
- Elasticsearch索引生命周期管理探索
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484130&idx=1&sn=454f199 ...
- Uber三代API 生命周期管理平台实现 Uber
Uber三代API 生命周期管理平台实现 - InfoQ https://www.infoq.cn/article/H8Ml6L7vJGQz0efpWvyJ Uber 三代 API 生命周期管理平台实 ...
- [转载]DevOps建立全生命周期管理
全生命周期管理(ALM)领域作为企业DevOps实践的总体支撑,应该说是DevOps领域中最为重要的实践领域,也是所有其他实践的基础设施.现在很多企业都非常重视CI/CD自动化工具的引入和推广,但是对 ...
- Castle IOC容器组件生命周期管理
主要内容 1.生命处理方式 2.自定义生命处理方式 3.生命周期处理 一.生命处理方式 我们通常创建一个组件的实例使用new关键字,这样每次创建出来的都是一个新的实例,如果想要组件只有一个实例,我们会 ...
- Windows 8 动手实验系列教程 实验5:进程生命周期管理
动手实验 实验5:进程生命周期管理 2012年9月 简介 进程生命周期管理对构建Windows应用商店应用的开发者来说是需要理解的最重要的概念之一.不同于传统的Windows应用(它们即使在后台仍然继 ...
随机推荐
- Salesforce小知识:累计汇总字段类型
累计汇总字段类型的定义 Salesforce中可以在两个对象之间建立关系.一个对象的某一条记录可以有若干条相关联的其他对象记录. 累计汇总字段可以将这些相关联的记录中的某些字段值汇总起来,显示给用户. ...
- 移植marvell poncat3 demo板的总结
1.arm cpu自带的bootrom, 已经初始化好串口.SPI等外设,只要硬件设置好从SPI FLASH启动,则cpu自带的bootrom会自动打印出一些信息,显示出从SPI FLASH启动,驱动 ...
- Linux LB--负载均衡和高可靠
1.负载均衡典型应用场景,外网.内网.私网公共服务. 典型场景: (1)用户通过公网访问数据中心的ftp.web.https服务器. (2) 在数据中心内部东西向访问其他服务时,例如,访问其他虚拟机. ...
- 腾讯云部署golang flow流程,vue.js+nginx+mysql+node.js
这次总算把js-ojus/flow的ui部署到腾讯云上,比较吐槽的就是,为啥这么复杂,vue.js前后端分离,比golang编写的部署方面复杂几万倍.真是浪费人生啊. golang+sqlite写的东 ...
- 结对项目-四则运算"软件"之升级版
本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 github地址为:https://github.com/L ...
- 【第三篇】SAP ABAP7.5x新语法之程序结构&SubScreen
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文地址:SAP ABAP7.5x系列之程序结构& ...
- BOM 清除
[root@test3 11]# gcc 11.2.c11.2.c:1: 错误:程序中有游离的 ‘\357’ 8进制,相当于16进制 ef11.2.c:1: 错误:程序中有游离的 ‘\273’11.2 ...
- centos6.9NAT网络模式
1.对虚拟机进行设置,点击该虚拟机的设置在网络适配器下将网络连接设置为NAT模式. 2.对虚拟机进行设置,点击虚拟机左上方的编辑-->虚拟网络编辑器,将WMnet信息设置为NAT模式,其它的无需 ...
- [MapReduce_add_5] MapReduce 实现标签的生成与聚合
0. 说明 MapReduce 实现标签的生成与聚合 介绍 && 流程图 && 程序编写 1. 介绍 [1.1 原始有效数据] 86913510 {"revi ...
- idea 修改单个文件的 编码格式