1. 介紹
在skyline中,建立對象包含三類對象,分别是文字、圖檔和模型。文字内容支援長字元、段落,圖檔類型包括大多數常用的圖檔格式(bmp、gif、jpg、jpeg、png、ico),模型類型包括一般的三維模型和點雲(cpt)。一般模型包括Derect的X模型(X、XPC、XPL、XPL2)檔案、FLT的flt和fpc檔案、Google的dae檔案以及3D Studio的3ds格式。
2. 方法
Skyline加入建立的對象分别對應三個不同的方法,CreateTextLable、CreateImageLable、CreateModel,三個方法的主要參數為:建立對象的位置資訊IPosition、對象内容或位置、建立對象的風格LabelStyle、以及模型的比例因子Scale和類型資訊ModelType。
3. 示例代碼
3.1. 建立文字對象
/**
*
*配置設定建立對象方法,增加相應監聽
*
*/
function GeoCreate() {
//添加左鍵按下監聽
SGWorld65.AttachEvent("OnLButtonDown", DrawPolyLButtonDown);
//添加右鍵監聽
SGWorld65.AttachEvent("OnRButtonUp", DrawPolyRButtonUp);
//設定滑鼠輸入狀态
SGWorld65.Window.SetInputMode(1);
}
/**
*
*左鍵點選DOWN事件
*
*/
function DrawPolyLButtonDown(Flags, X, Y) {
var CursorCoord = SGWorld65.Window.pixelToWorld(X, Y);
if(CursorCoord != null){
//添加文本标簽
AddTextLable(CursorCoord);
}
}
/**
*
*添加文字标簽
*
*/
function AddTextLable(CursorCoord){
//建立組
gids = CreateTempGroup("labelgroup");
//建立滑鼠位置
var CursorPosition = SGWorld65.Creator.CreatePosition(CursorCoord.Position.X, CursorCoord.Position.Y, 0, 2, 0, 0, 0, 0);
//建立标簽風格
var lableStyle = SGWorld65.Creator.CreateLabelStyle(0);
//建立文本标簽
SGWorld65.Creator.CreateTextLabel(CursorPosition,"文字标簽",lableStyle,gids,"labelgroup")
}
/**
*
*右鍵點選UP事件
*
*/
function DrawPolyRButtonUp(Flags, X, Y) {
//設定恢複滑鼠狀态
SGWorld65.Window.SetInputMode(0);
//去除監聽
SGWorld65.DetachEvent("OnLButtonDown", DrawPolyLButtonDown);
SGWorld65.DetachEvent("OnRButtonUp", DrawPolyRButtonUp);
}
/**
*
*建立組
*
*/
function CreateTempGroup(groupname) {
//查找組名,得到對應的組ID
var gid = SGWorld65.ProjectTree.FindItem(groupname);
//如果無對應組名,組ID為空
if (gid == "") {
//建立該組名的組,得到組ID
gid = SGWorld65.ProjectTree.CreateLockedGroup(groupname, "");
}
//傳回組ID
return gid;
}
3.2. 建立圖像對象
/**
*
*配置設定建立對象方法,增加相應監聽
*
*/
function GeoCreate(value) {
//添加左鍵按下監聽
SGWorld65.AttachEvent("OnLButtonDown", DrawPolyLButtonDown);
//添加右鍵監聽
SGWorld65.AttachEvent("OnRButtonUp", DrawPolyRButtonUp);
//設定滑鼠輸入狀态
SGWorld65.Window.SetInputMode(1);
}
/**
*
*左鍵點選DOWN事件
*
*/
function DrawPolyLButtonDown(Flags, X, Y) {
var CursorCoord = SGWorld65.Window.pixelToWorld(X, Y);
if(CursorCoord != null){
//添加圖檔标簽
AddImageLable(CursorCoord);
}
}
/**
*
*添加圖像标簽
*
*/
function AddImageLable(CursorCoord){
gids = CreateTempGroup("圖像标簽");
//建立滑鼠位置
var CursorPosition = SGWorld65.Creator.CreatePosition(CursorCoord.Position.X, CursorCoord.Position.Y, 0, 2, 0, 0, 0, 0);
var lableStyle = SGWorld65.Creator.CreateLabelStyle(0);
//建立圖檔
SGWorld65.Creator.CreateImageLabel(CursorPosition,"D:/imagePath/image.png",lableStyle,gids,"圖像标簽");
}
/**
*
*右鍵點選UP事件
*
*/
function DrawPolyRButtonUp(Flags, X, Y) {
//設定恢複滑鼠狀态
SGWorld65.Window.SetInputMode(0);
//去除監聽
SGWorld65.DetachEvent("OnLButtonDown", DrawPolyLButtonDown);
SGWorld65.DetachEvent("OnRButtonUp", DrawPolyRButtonUp);
}
/**
*
*建立組
*
*/
function CreateTempGroup(groupname) {
//查找組名,得到對應的組ID
var gid = SGWorld65.ProjectTree.FindItem(groupname);
//如果無對應組名,組ID為空
if (gid == "") {
//建立該組名的組,得到組ID
gid = SGWorld65.ProjectTree.CreateLockedGroup(groupname, "");
}
//傳回組ID
return gid;
}
3.3. 建立模型對象
/**
*
*配置設定建立對象方法,增加相應監聽
*
*/
function GeoCreate() {
//添加左鍵按下監聽
SGWorld65.AttachEvent("OnLButtonDown", DrawPolyLButtonDown);
//添加右鍵監聽
SGWorld65.AttachEvent("OnRButtonUp", DrawPolyRButtonUp);
//設定滑鼠輸入狀态
SGWorld65.Window.SetInputMode(1);
}
/**
*
*左鍵點選DOWN事件
*
*/
function DrawPolyLButtonDown(Flags, X, Y) {
var CursorCoord = SGWorld65.Window.pixelToWorld(X, Y);
if(CursorCoord != null){
//添加模型
AddModel(CursorCoord);
}
}
/**
*
*添加模型
*
*/
function AddModel(CursorCoord){
gids = CreateTempGroup("模型");
//建立滑鼠位置
var CursorPosition = SGWorld65.Creator.CreatePosition(CursorCoord.Position.X, CursorCoord.Position.Y, 10, 2, 0, 0, 0, 0);
//得到程式啟動路徑
var Propath = SGWorld65.Application.ExecutablePath;
//由啟動路徑得到shp檔案路徑
var shpPath = Propath + "Tools\\Data-Library\\3D-Objects\\Helicopters\\" + "ah64.xpc";
//建立模型
SGWorld65.Creator.CreateModel(CursorPosition,shpPath,1,0,gids,"模型")
}
/**
*
*右鍵點選UP事件
*
*/
function DrawPolyRButtonUp(Flags, X, Y) {
//設定恢複滑鼠狀态
SGWorld65.Window.SetInputMode(0);
//去除監聽
SGWorld65.DetachEvent("OnLButtonDown", DrawPolyLButtonDown);
SGWorld65.DetachEvent("OnRButtonUp", DrawPolyRButtonUp);
}
/**
*
*建立組
*
*/
function CreateTempGroup(groupname) {
//查找組名,得到對應的組ID
var gid = SGWorld65.ProjectTree.FindItem(groupname);
//如果無對應組名,組ID為空
if (gid == "") {
//建立該組名的組,得到組ID
gid = SGWorld65.ProjectTree.CreateLockedGroup(groupname, "");
}
//傳回組ID
return gid;
}