基于Skyline的TerraExplorer6.1.1如何通过二次开发实现圆形对象的手动绘制
2012-10-06 20:07
513 查看
在Skyline的TerraExplorer Pro软件中,用户可以轻松实现几何对象的手动绘制;但在实际的项目中,为了满足不同行业的需求,我们更多情况需要定制开发一些几何对象。这里,通过Skyline提供的开发接口实现圆形对象的绘制,希望能够扩展大家的一些实现思路。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>手绘圆</title>
<script type = "text/javascript" language = "javascript">
var gPolyObj = null;
function StartCal() {
var SGWorld = new CreateSGObj();
SGWorld.AttachEvent("OnLButtonDown", DrawPolyLButtonDown);
SGWorld.AttachEvent("OnFrame", DrawPolyOnFrame);
SGWorld.Window.SetInputMode(1);
}
function EndCal() {
var SGWorld = new CreateSGObj();
SGWorld.DetachEvent("OnLButtonDown", DrawPolyLButtonDown);
SGWorld.DetachEvent("OnFrame", DrawPolyOnFrame);
SGWorld.Window.SetInputMode(0);
SGWorld = null;
gPolyObj = null;
}
function CreateTempGroup(groupname) {
var SGWorld = new CreateSGObj();
var gid = SGWorld.ProjectTree.FindItem(groupname);
if (gid > 0) {
}
else {
gid = SGWorld.ProjectTree.CreateLockedGroup(groupname, 0);
}
return gid;
}
function DelTemp(groupname) {
var SGWorld = new CreateSGObj();
var gid = SGWorld.ProjectTree.FindItem(groupname);
if (gid > 0) {
SGWorld.ProjectTree.DeleteItem(gid);
}
}
var gPolyText = "圆";
//********************************************绘制Circle
function DrawPolyLButtonDown(Flags, X, Y) {
try {
var SGWorld = CreateSGObj();
var CursorCoord = SGWorld.Window.pixelToWorld(X, Y);
if (CursorCoord == null)
return false;
if (gPolyObj == null) {
var gid = CreateTempGroup("标绘");
var pos = SGWorld.Creator.CreatePosition(CursorCoord.Position.X, CursorCoord.Position.Y, 0, 2, 0, 0, 0, 0);
gPolyObj = SGWorld.Creator.CreateCircle(pos, 1, SGWorld.Creator.CreateColor(255, 0, 0, 1), SGWorld.Creator.CreateColor(255, 0, 0, 1), gid, gPolyText);
gPolyObj.LineStyle.Width = 1;
}
else {
EndCal();
}
}
catch (e)
{ }
}
//-----------
// 跟随鼠标位置移动,改变圆半径大小
//-----------
function DrawPolyOnFrame() {
try {
var SGWorld = CreateSGObj();
if (gPolyObj != null) {
var mouseInfo = SGWorld.Window.GetMouseInfo();
var CursorCoord = SGWorld.Window.pixelToWorld(mouseInfo.X, mouseInfo.Y);
if (CursorCoord == null)
return false;
var dr = gPolyObj.Position.DistanceTo(CursorCoord.Position);
gPolyObj.Radius = dr;
}
}
catch (e) { }
}
/*
功能: 创建sgworld对象
备注: 赵贺 2011.04.01.
*/
function CreateSGObj() {
var obj = $("sgworld");
if (obj == null) {
obj = document.createElement('object');
document.body.appendChild(obj);
obj.name = "sgworld";
obj.id = "sgworld";
obj.classid = "CLSID:3a4f91b1-65a8-11d5-85c1-0001023952c1";
}
return obj;
}
function $(id) {
return window.document.getElementById(id);
}
</script>
</head>
<body onunload="DelTemp('标绘')">
<table style="margin: 0px; border: 0px;">
<tr>
<td colspan="4">
<input id="Button6" type="button" value="绘制" onclick="StartCal()" />
<input id="Button1" type="button" value="清除" onclick="DelTemp('标绘')" />
</td>
</tr>
</table>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>手绘圆</title>
<script type = "text/javascript" language = "javascript">
var gPolyObj = null;
function StartCal() {
var SGWorld = new CreateSGObj();
SGWorld.AttachEvent("OnLButtonDown", DrawPolyLButtonDown);
SGWorld.AttachEvent("OnFrame", DrawPolyOnFrame);
SGWorld.Window.SetInputMode(1);
}
function EndCal() {
var SGWorld = new CreateSGObj();
SGWorld.DetachEvent("OnLButtonDown", DrawPolyLButtonDown);
SGWorld.DetachEvent("OnFrame", DrawPolyOnFrame);
SGWorld.Window.SetInputMode(0);
SGWorld = null;
gPolyObj = null;
}
function CreateTempGroup(groupname) {
var SGWorld = new CreateSGObj();
var gid = SGWorld.ProjectTree.FindItem(groupname);
if (gid > 0) {
}
else {
gid = SGWorld.ProjectTree.CreateLockedGroup(groupname, 0);
}
return gid;
}
function DelTemp(groupname) {
var SGWorld = new CreateSGObj();
var gid = SGWorld.ProjectTree.FindItem(groupname);
if (gid > 0) {
SGWorld.ProjectTree.DeleteItem(gid);
}
}
var gPolyText = "圆";
//********************************************绘制Circle
function DrawPolyLButtonDown(Flags, X, Y) {
try {
var SGWorld = CreateSGObj();
var CursorCoord = SGWorld.Window.pixelToWorld(X, Y);
if (CursorCoord == null)
return false;
if (gPolyObj == null) {
var gid = CreateTempGroup("标绘");
var pos = SGWorld.Creator.CreatePosition(CursorCoord.Position.X, CursorCoord.Position.Y, 0, 2, 0, 0, 0, 0);
gPolyObj = SGWorld.Creator.CreateCircle(pos, 1, SGWorld.Creator.CreateColor(255, 0, 0, 1), SGWorld.Creator.CreateColor(255, 0, 0, 1), gid, gPolyText);
gPolyObj.LineStyle.Width = 1;
}
else {
EndCal();
}
}
catch (e)
{ }
}
//-----------
// 跟随鼠标位置移动,改变圆半径大小
//-----------
function DrawPolyOnFrame() {
try {
var SGWorld = CreateSGObj();
if (gPolyObj != null) {
var mouseInfo = SGWorld.Window.GetMouseInfo();
var CursorCoord = SGWorld.Window.pixelToWorld(mouseInfo.X, mouseInfo.Y);
if (CursorCoord == null)
return false;
var dr = gPolyObj.Position.DistanceTo(CursorCoord.Position);
gPolyObj.Radius = dr;
}
}
catch (e) { }
}
/*
功能: 创建sgworld对象
备注: 赵贺 2011.04.01.
*/
function CreateSGObj() {
var obj = $("sgworld");
if (obj == null) {
obj = document.createElement('object');
document.body.appendChild(obj);
obj.name = "sgworld";
obj.id = "sgworld";
obj.classid = "CLSID:3a4f91b1-65a8-11d5-85c1-0001023952c1";
}
return obj;
}
function $(id) {
return window.document.getElementById(id);
}
</script>
</head>
<body onunload="DelTemp('标绘')">
<table style="margin: 0px; border: 0px;">
<tr>
<td colspan="4">
<input id="Button6" type="button" value="绘制" onclick="StartCal()" />
<input id="Button1" type="button" value="清除" onclick="DelTemp('标绘')" />
</td>
</tr>
</table>
</body>
</html>
相关文章推荐
- 基于Skyline的TerraExplorer6.1.1如何通过二次开发实现折线和多边形对象的手动绘制
- 基于Skyline的TerraExplorer6.1.1如何通过二次开发实现矢量图层的空间查询和属性查询
- SharePoint基于windows验证的如何通过组策略实现IE自动以当前域账号登录SP站点
- 如何通过SuperMap iCloudManager实现基于nginx的Web应用的负载均衡
- 如何基于纯GDI实现alpha通道的矢量和文字绘制
- 基于ASP.net C#技术来实现,介绍如何处理Session对象变量失效的问题
- OpenGL中如何实现通过鼠标点击选取对象(正交投影)
- 第四章 基于对象的编程风格(如何实现一个class)
- js如何判断一个对象是array ,instanceof 是基于什么实现的呢?
- 基于Skyline的TerraExplorer6.1实现选中对象的高亮显示
- JavaScript中如何通过arguments对象实现对象的重载
- js如何判断一个对象是array ,instanceof 是基于什么实现的呢?
- Android基于mAppWidget实现手绘地图(十三)–如何显示/隐藏任意类型的地图对象
- 思考一个问题:如何将map里面的值,映射到一个对象里的属性,不通过手动方式设置!!!
- 如何通过COM接口得到实现该接口的对象实例
- 如何基于纯GDI实现alpha通道的矢量和文字绘制
- JavaScript中如何通过arguments对象实现对象的重载
- Android基于mAppWidget实现手绘地图(六)–如何展示地图对象
- Android基于mAppWidget实现手绘地图(九)–如何处理地图对象的touch事件
- 如何通过实现parcelable接口传递值对象