622 lines
25 KiB
C++
622 lines
25 KiB
C++
<%
|
|
/*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: FGII.inc
|
|
Description: Common functies voor FGII
|
|
Parameters:
|
|
Context:
|
|
Note:
|
|
*/
|
|
%>
|
|
<!-- #include file="../Shared/flexfiles.inc" -->
|
|
<%
|
|
|
|
// Constants for this file
|
|
var MODE_IN = 0;
|
|
var MODE_OUT = 1;
|
|
|
|
var _LINEWEIGHT = S("fg_symbolweight");
|
|
var _DOBBELLINEWEIGHT = S("fg_symbolweight")*2/3;
|
|
|
|
// dwfmode afwezig/0=normaal, 1=conceptfolder, 2=vluchtplan mode
|
|
function FindDWF(drawing, scenario_key, dwfmode)
|
|
{
|
|
// Strip eventuele DWG en DWF van filenaam
|
|
var fname = drawing.replace(/\.dwg$/ig,'');
|
|
var fname = fname.replace(/\.dwf$/ig,'');
|
|
switch (dwfmode)
|
|
{
|
|
case 1: var fullpath = S("flexfilespath") + "/cad/concept/";
|
|
break;
|
|
case 2: var fullpath = S("flexfilespath") + "/cad/vlucht/";
|
|
break;
|
|
default: var fullpath = S("flexfilespath") + "/cad/";
|
|
}
|
|
var fullname = fullpath + fname + ".dwf"
|
|
|
|
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
|
if (scenario_key > 0)
|
|
{
|
|
var fullnameScenario = S("flexfilespath") + "/cad/prj/" + scenario_key + "\\" + fname + ".dwf";
|
|
__Log("Searching fullnameScenario: " + fullnameScenario);
|
|
if (fso.FileExists( fullnameScenario))
|
|
{
|
|
__Log("Gebruik scenario tekening (op webserver): " + fullnameScenario );
|
|
return fullnameScenario;
|
|
}
|
|
}
|
|
if (!fso.FolderExists(fullpath))
|
|
{
|
|
__Log("Unable to find/read folder: " + fullpath + "<BR>Security problem?")
|
|
return "";
|
|
}
|
|
|
|
if (fso.FileExists(fullname))
|
|
{
|
|
__Log("Gebruik tekening (op webserver): " + fullname );
|
|
return fullname;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
// Momenteel gebruiken we dezelfde DWF voor plan en voor cont
|
|
// Result: dwfPath als gevonden, false/error als niet gevonden
|
|
function SetVerdPlanDWF(pvKey, inoutMode, scenario_key, dwfmode, dwfName)
|
|
{
|
|
|
|
if (dwfmode == 2) // Ontruimingsplan mode
|
|
{
|
|
if ( dwfName)
|
|
{
|
|
var fname = FindDWF("V" + pvKey + "/" + dwfName, scenario_key, dwfmode);
|
|
if (fname)
|
|
return fname;
|
|
}
|
|
}
|
|
// Als voorkeur naam niet gevonden wordt teruggevallen op database naam
|
|
if (inoutMode == MODE_IN)
|
|
{
|
|
var sql = "SELECT cad_tekening_key,"
|
|
+ " cad_tekening_filenaam,"
|
|
+ " cad_tekening_type, cad_tekening_key"
|
|
+ " FROM cad_tekening ct, "
|
|
+ " alg_verdieping av"
|
|
+ " WHERE ct.alg_verdieping_key = av.alg_verdieping_key"
|
|
+ " AND cad_tekening_verwijder is null"
|
|
+ " AND cad_tekening_type = 'P'"
|
|
+ " AND ct.alg_verdieping_key = " + pvKey
|
|
}
|
|
else
|
|
{
|
|
var sql = "SELECT cad_tekening_key,"
|
|
+ " cad_tekening_filenaam,"
|
|
+ " cad_tekening_type, cad_tekening_key"
|
|
+ " FROM cad_tekening ct, "
|
|
+ " alg_locatie al"
|
|
+ " WHERE ct.alg_locatie_key = al.alg_locatie_key"
|
|
+ " AND cad_tekening_verwijder is null"
|
|
+ " AND cad_tekening_type = 'P'"
|
|
+ " AND ct.alg_verdieping_key is null"
|
|
+ " AND ct.alg_locatie_key = " + pvKey;
|
|
}
|
|
|
|
var oRs = Oracle.Execute(sql);
|
|
var teknaam = (!oRs.eof ? oRs("CAD_TEKENING_FILENAAM").Value : false);
|
|
oRs.Close();
|
|
|
|
if (!teknaam)
|
|
{
|
|
new SLNKDWF({}).Warning(L("lcl_fg_nodrawing"));
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
var fname = FindDWF(teknaam, scenario_key, dwfmode);
|
|
if( fname == "" )
|
|
{
|
|
switch (dwfmode)
|
|
{
|
|
case 1: var fullpath = L("lcl_fg_conceptnotfound");
|
|
break;
|
|
case 2: var msg = L("lcl_fg_nodrawing"); // niet aangetroffen
|
|
break;
|
|
default: var msg = L("lcl_fg_drawingnotfound") + "\n" + teknaam;
|
|
if (user.has("WEB_FACTAB"))
|
|
msg += "\nIn: " + S("flexfilespath") + "/cad/";
|
|
}
|
|
new SLNKDWF({}).Warning(msg);
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return fname;
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************************************************\
|
|
* Lever een reguliere expressie met te tonen lagen
|
|
* pDiscs_arr is comma-separated lijst met discipline-keys
|
|
* Vooraan -1 is contouren, -2 is alt1 en -3 is alt2
|
|
\************************************************************/
|
|
function myFilterLayer(pDiscs_arr)
|
|
{
|
|
var toBeShown = "{SLNK Symbols}|{SLNK Symbol Labels}";
|
|
if (pDiscs_arr.length > 0 && pDiscs_arr.join(",").indexOf("-1") == -1)
|
|
{
|
|
var sql = "SELECT t.ins_disc_params_cadlayers " // Formaat: {ADMIN\|.*}|{ADMIN!.}
|
|
+ " FROM ins_disc_params t"
|
|
+ " WHERE t.ins_discipline_key IN (" + pDiscs_arr.join(",") + ")"
|
|
var oRs = Oracle.Execute(sql);
|
|
while (!oRs.EOF)
|
|
{
|
|
lname = oRs(0).value;
|
|
//toBeShown= "|{" + lname + "\\|.*}"+toBeShown; // laag VEIL|AA65.....
|
|
//toBeShown= "|{" + lname + "!.}"+toBeShown; // laag VEIL (exact, vooraan)
|
|
toBeShown= toBeShown+"|" + lname;
|
|
oRs.MoveNext();
|
|
}
|
|
oRs.Close();
|
|
toBeShown="{SLNK Labels}|"+toBeShown;
|
|
if (pContmode>=0) // Contouren aan
|
|
toBeShown="{SLNK Contours}|"+toBeShown;
|
|
}
|
|
else if (pContmode>=0) // Geen disciplines dan minstens contouren aan
|
|
toBeShown="{SLNK Labels}|{SLNK Contours}|"+toBeShown;
|
|
|
|
__Log("toBeShown layers: " + toBeShown)
|
|
return toBeShown;
|
|
}
|
|
|
|
// buildDobbel: bouw een dobbelsteen voor een ruimte
|
|
// dobbelProps
|
|
// ruimte: ruimte_key
|
|
// aantal: integer
|
|
// sql : levert key, symbolname en oms
|
|
// fnProcess: optional functie die symbol en Recordset meekrijgt
|
|
// Geschikt om bijvoorbeeld extra te inkleuren o.i.d.
|
|
// fnLabel: optional functie die van Recordset een label tekst oplevert
|
|
// result: array of SLNKSymbol's
|
|
function buildDobbel(cHandle, dobbelProps)
|
|
{
|
|
var symArray = [];
|
|
var cnt = cHandle.Contour("R:" + dobbelProps.ruimte);
|
|
if (cnt) // Ruimte gevonden in de tekening
|
|
{
|
|
// Markeer center var symbol = cHandle.AddSymbol(cnt.Center.dwgX,cnt.Center.dwgY,"*STAR");
|
|
|
|
var dxRoom = Math.abs(cnt.Extents.max.dwgX - cnt.Extents.min.dwgX); // Voor aspect ratio
|
|
var dyRoom = Math.abs(cnt.Extents.max.dwgY - cnt.Extents.min.dwgY); // Melding 61676: dxRoom werd negatief, daarom de abs
|
|
|
|
var dx=0;
|
|
var dy=0; // Onze dobbelsteen bouwen
|
|
|
|
var symbX = S("fg_dobbelDist"); //grootte symbool
|
|
var symbY = S("fg_dobbelDist");
|
|
var wx = Math.min(dobbelProps.aantal, Math.ceil(Math.sqrt(dobbelProps.aantal * dxRoom / dyRoom))); // Aantal kolommen
|
|
var wy = Math.ceil(dobbelProps.aantal / wx); // Aantal rijen
|
|
wx = Math.ceil(dobbelProps.aantal / wy); // ipv. 3,1 willen we 2,2
|
|
// Symbolen die aan de rechterkant buiten de tekening vallen kunnen overflow geven
|
|
// Daarom zorgen dat symbolen nooit buiten de *ruimte* vallen, dan zetten
|
|
// we ze gewoon dichter bij elkaar
|
|
if (wx * symbX > dxRoom) // als horizontaal buiten de ruimte dan horizontaal inkrimpen
|
|
symbX = dxRoom / wx;
|
|
if (wy * symbY > dyRoom) // als verticaal buiten de ruimte dan verticaal inkrimpen
|
|
symbY = dyRoom / wy;
|
|
|
|
var cX = cnt.Center.dwgX - symbX/2*(wx-1); // Linksboven beginnen
|
|
var cY = cnt.Center.dwgY + symbY/2*(wy-1);
|
|
|
|
// Nu: Alle symbolen binnen onze ene ruimte zonder X en Y
|
|
oRsDobbel = Oracle.Execute(dobbelProps.sql);
|
|
|
|
while (!oRsDobbel.EOF)
|
|
{
|
|
if (dobbelProps.fnPreProcess)
|
|
dobbelProps.fnPreProcess(oRsDobbel, cHandle, cX+symbX*dx, cY+symbY*dy, S("fg_dobbelScale"), dobbelProps);
|
|
var insertionpoint = ( (oRsDobbel("orgx").Value != null && oRsDobbel("orgy").Value != null)
|
|
? {orgx: oRsDobbel("orgx").Value, orgy: oRsDobbel("orgy").Value}
|
|
: null
|
|
);
|
|
var symbolName = DefineSymbol(cHandle, oRsDobbel("symbolName").Value, insertionpoint);
|
|
var symbol = cHandle.AddSymbol(cX+symbX*dx, cY+symbY*dy, symbolName);
|
|
symbol.Contour.Key = oRsDobbel("key").Value;
|
|
symArray[symbol.Contour.Key] = {s: symbol, x: cX+symbX*dx, y: cY+symbY*dy, symbolName: symbolName}; // Onthouden voor later
|
|
symbol.Scale = S("fg_dobbelScale");
|
|
symbol.SetLineweight(_DOBBELLINEWEIGHT);
|
|
symbol.Contour.LabelPosition = dobbelProps.labelPosition || 5; // 5 is OUTSIDEBOTTOM
|
|
// POC. Is dit de manier? AutoCAD-kleur is te overrulen
|
|
if (oRsDobbel("color").value != null && !isNaN(parseInt(oRsDobbel("color").value,16)))
|
|
symbol.SetColor( parseInt(oRsDobbel("color").value, 16));
|
|
|
|
if (dobbelProps.fnLabel)
|
|
symbol.Contour.Label = dobbelProps.fnLabel(oRsDobbel);
|
|
else
|
|
symbol.Contour.Label = "[c][s30][c000000]"+ safe.nvl(oRs("oms").Value);
|
|
symbol.Contour.SetUrl("", safe.nvl(oRsDobbel("oms").Value));
|
|
//symbol.Contour.SetColor(0xFF0000,64);
|
|
if (dobbelProps.fnProcess) dobbelProps.fnProcess(symbol, oRsDobbel, cHandle, dobbelProps);
|
|
|
|
dx++;
|
|
if (dx >= wx)
|
|
{ // Volgende regel
|
|
dy--;
|
|
dx = 0;
|
|
}
|
|
|
|
oRsDobbel.MoveNext();
|
|
}
|
|
oRsDobbel.Close();
|
|
}
|
|
else
|
|
{
|
|
// Ruimte niet gevonden in de tekening. Wat nu?
|
|
}
|
|
return symArray;
|
|
}
|
|
|
|
// buildSymbols: bouw de symbolen (delen of werkplekken) met XY-coordinaten
|
|
// symbolProps
|
|
// sql : levert key, oms, dwgx, dwgy, rot, scl, lpos en symbolname
|
|
// fnLabel: optional functie die van Recordset een label tekst oplevert
|
|
// fnProcess: optional functie die symbol en Recordset meekrijgt
|
|
// Geschikt om bijvoorbeeld extra te inkleuren o.i.d.
|
|
// result: array of SLNKSymbol's
|
|
function buildSymbols(cHandle, symbolProps)
|
|
{
|
|
var symArray = [];
|
|
var useBackground = (S("fac_betafeatures")&1) == 1; // 20221@BETA1 experimentje om een schaduw-randje achter het symbool te plaatsen
|
|
var oRs = Oracle.Execute(symbolProps.sql);
|
|
|
|
while (!oRs.EOF)
|
|
{
|
|
if (symbolProps.fnPreProcess)
|
|
symbolProps.fnPreProcess(oRs, cHandle, oRs("dwgX").value, oRs("dwgY").value, oRs("scl").value, symbolProps)
|
|
|
|
var insertionpoint = ( (oRs("orgx").Value === null && oRs("orgy").Value === null)
|
|
? null
|
|
: {orgx: oRs("orgx").Value, orgy: oRs("orgy").Value}
|
|
);
|
|
var symbolName = DefineSymbol(cHandle, oRs("symbolname").Value, insertionpoint);
|
|
if (useBackground)
|
|
{
|
|
var symbolBack = cHandle.AddSymbol(oRs("dwgX").Value, oRs("dwgY").Value,symbolName);
|
|
}
|
|
var symbol = cHandle.AddSymbol(oRs("dwgX").Value, oRs("dwgY").Value,symbolName);
|
|
if (oRs("rot").value != null)
|
|
{
|
|
if (useBackground) symbolBack.rotation = (oRs("rot").Value+360)%360;
|
|
symbol.rotation = (oRs("rot").Value+360)%360;
|
|
}
|
|
var scl = 1.0;
|
|
if (oRs("scl").value != null)
|
|
scl = oRs("scl").value;
|
|
symbol.scale = scl;
|
|
symbol.SetLineweight(_LINEWEIGHT);
|
|
if (useBackground)
|
|
{
|
|
symbolBack.SetLineweight(_LINEWEIGHT * 1.5)
|
|
symbolBack.SetColor(0xffffff);
|
|
}
|
|
|
|
// POC. Is dit de manier? AutoCAD-kleur is te overrulen, nu alleen met hexkleuren (bv FF0000)
|
|
if (oRs("color").value != null && !isNaN(parseInt(toHexValue(oRs("color").value),16)))
|
|
symbol.SetColor( parseInt(toHexValue(oRs("color").value), 16) );
|
|
|
|
symbol.Contour.LabelPosition = oRs("lpos").Value || 5; // 5 is OUTSIDEBOTTOM
|
|
|
|
symbol.Contour.Key = oRs("key").Value;
|
|
symArray[symbol.Contour.Key] = {s: symbol, x: oRs("dwgX").value, y: oRs("dwgy").value, symbolName: symbolName}; // Onthouden voor later
|
|
if (symbolProps.fnLabel)
|
|
symbol.Contour.Label = symbolProps.fnLabel(oRs);
|
|
else
|
|
symbol.Contour.Label = "[c][s30][c000000]"+ safe.nvl(oRs("oms").Value);
|
|
symbol.Contour.SetUrl("", safe.nvl(oRs("oms").Value));
|
|
|
|
if (symbolProps.fnProcess) symbolProps.fnProcess(symbol, oRs, cHandle, symbolProps)
|
|
|
|
// Controleer of hij wel in de goede ruimte is geplaatst
|
|
// Zoniet markeer hem dan met een *STAR er achter
|
|
var rnr = cHandle.FindInContour(oRs("dwgX").Value, oRs("dwgY").Value);
|
|
// Let op: Sinds 5.3.2 zit R:12345 in de dwf-contour-key
|
|
if ((!rnr || !rnr.match(/^R:/) || rnr.substr(2) != oRs("cadkey").Value) && user.has(["WEB_CADBOF", "WEB_CADFOF"]))
|
|
{
|
|
var symbol = cHandle.AddSymbol(oRs("dwgX").Value+scl*S("fg_dobbelDist")/2, oRs("dwgY").Value+scl*S("fg_dobbelDist")/2,"*STAR");
|
|
symbol.Scale = scl*0.25;
|
|
symbol.Contour.SetColor(0xFFFF00, 255);
|
|
//symbol.Contour.Hatch = 3;
|
|
symbol.Contour.SetUrl("", L("lcl_fg_symbolshouldbein").format(oRs("dblabel").Value));
|
|
}
|
|
oRs.MoveNext();
|
|
}
|
|
oRs.Close();
|
|
|
|
return symArray;
|
|
}
|
|
|
|
// Process label thema voor objecten, voor ruimtes gebeurt dat in myContourProcessor
|
|
// labelProps.symbols bevat array van symbolen voor werkplek/objecten (is null voor ruimtes)
|
|
// labelProps.labelThema_key: key in CAD_LABEL
|
|
// labelProps.fnSQL(viewname) levert key en waarde op
|
|
function labelThema(cHandle, labelProps)
|
|
{
|
|
// Haal de labeldefinitie op
|
|
var sql = "SELECT cad_label_view"
|
|
+ " , cad_label_size"
|
|
+ " , cad_label_rotation"
|
|
+ " , cad_label_visible"
|
|
+ " FROM cad_label"
|
|
+ " WHERE cad_label_key = " + labelProps.labelThema_key
|
|
var oRs = Oracle.Execute(sql)
|
|
var viewName = oRs("cad_label_view").value;
|
|
var zichtbaar = oRs("cad_label_visible").value;
|
|
var rotation = oRs("cad_label_rotation").value||0;
|
|
var ls = oRs("cad_Label_size").value;
|
|
var lh = (ls * 100 / S("fg_inlabelsize") ).toFixed(0);
|
|
oRs.Close();
|
|
|
|
var labelCleared = [];
|
|
var sql = labelProps.fnSql(viewName);
|
|
var oRs = Oracle.Execute(sql);
|
|
var hasHighlightField = false;
|
|
var hasPhotoField = false;
|
|
var hasTooltipField = false;
|
|
for (i=0; i<oRs.Fields.Count; i++)
|
|
{
|
|
if (oRs.Fields(i).Name.toUpperCase() == "HIGHLIGHT")
|
|
hasHighlightField = true;
|
|
if (oRs.Fields(i).Name.toUpperCase() == "PHOTO")
|
|
hasPhotoField = true;
|
|
if (oRs.Fields(i).Name.toUpperCase() == "TOOLTIP")
|
|
hasTooltipField = true;
|
|
}
|
|
__Log('symboollabel-highlight:'+hasHighlightField)
|
|
__Log('symboollabel-photo:'+hasPhotoField)
|
|
__Log('symboollabel-tooltip:'+hasTooltipField)
|
|
while (!oRs.EOF)
|
|
{
|
|
//if (labelProps.symbols)
|
|
//{
|
|
var cnt = labelProps.symbols[oRs("key").Value];
|
|
if (cnt)
|
|
{
|
|
photo_x = cnt.x; // helaas geen cnt.Center.DwgX
|
|
photo_y = cnt.y;
|
|
cnt = cnt.s.Contour;
|
|
}
|
|
//}
|
|
if (cnt && !zichtbaar && !labelCleared[oRs("key").Value])
|
|
{
|
|
cnt.Label = "";
|
|
labelCleared[oRs("key").Value] = true;
|
|
}
|
|
|
|
if (cnt && oRs("waarde").value !== null)
|
|
{
|
|
cnt.fontHeight = ls;
|
|
var w = String(oRs("waarde").value);
|
|
if (hasPhotoField && oRs("photo").value)
|
|
{
|
|
var symbolname = oRs("photo").value;
|
|
// format is CODE:key, zie flexfiles.inc
|
|
var module = symbolname.split(":")[0];
|
|
var key = symbolname.split(":")[1];
|
|
var flexparam = flexProps(module, key, null, null, { getFiles: true });
|
|
if (flexparam.files.length)
|
|
{
|
|
var file = flexparam.files[0];
|
|
var symbolFile = flexparam.AttachPath + file.name;
|
|
var symcnt = cHandle.DefineBitmapSymbol(symbolname, symbolFile, 600);
|
|
var symbol = cHandle.AddSymbol(photo_x, photo_y, symbolname);
|
|
}
|
|
cnt.LabelPosition = 5; // 5 is OUTSIDEBOTTOM
|
|
}
|
|
if (w.substring(0,1)=="[") w = "[" + w;
|
|
if (hasTooltipField && oRs("tooltip").value)
|
|
{
|
|
cnt.SetUrl("", oRs("tooltip").value);
|
|
}
|
|
if (hasHighlightField)
|
|
{
|
|
// TODO ik verwacht dat dit bij 2 een rood label oplevert, maar..?
|
|
var hghl = oRs("HIGHLIGHT").Value;
|
|
if (hghl & 0x2) // rood
|
|
w = "[cff0000][i]" + w;
|
|
else if (hghl & 0x1) // grijs
|
|
w = "[ca0a0a0][i]" + w;
|
|
}
|
|
cnt.Label += "\n" + w;
|
|
cnt.LabelPosition = 2; // center (TODO?)
|
|
cnt.LabelRotation = rotation;
|
|
|
|
}
|
|
oRs.MoveNext();
|
|
}
|
|
oRs.Close();
|
|
}
|
|
|
|
// kleurProps.symbols is null voor ruimtes en bevat array van symbolen voor werkplek/objecten
|
|
// kleurProps.kleurThema: key in CAD_THEMA
|
|
// kleurProps.fnSQL(viewname) levert key en waarde op
|
|
// kleurProps.colorSymbol: optional: als true dan wordt het symbool zelf gekleurd ipv de contour
|
|
// kleurProps.highlight_arr alleen highlighten als ze hier in voorkomen
|
|
function kleurThema(cHandle, kleurProps)
|
|
{ // Haal de schema definitie op
|
|
var sql = "SELECT cad_thema_view, "
|
|
+ " l.cad_legenda_key, "
|
|
+ " l.cad_legenda_discreet, "
|
|
+ " cad_thema_type, "
|
|
+ " cad_thema_onclick_url, "
|
|
+ lcl.xsqla('cad_thema_omschrijving', 'cad_thema_key')
|
|
+ " FROM cad_thema T, cad_legenda L "
|
|
+ " WHERE T.cad_thema_key=" + kleurProps.kleurThema_key
|
|
+ " AND T.cad_legenda_key = L.cad_legenda_key";
|
|
|
|
var oRs = Oracle.Execute(sql)
|
|
var viewName = oRs("cad_thema_view").value;
|
|
var schKey = oRs("cad_legenda_key").value;
|
|
var discreet = oRs("cad_legenda_discreet").value;
|
|
var themaName = oRs("cad_thema_omschrijving").value;
|
|
var themaType = oRs("cad_thema_type").value;
|
|
switch (themaType & 0x18)
|
|
{
|
|
case 0x00:
|
|
/*global*/ thema_click_urlR = oRs("cad_thema_onclick_url").Value;
|
|
break;
|
|
case 0x10:
|
|
/*global*/ thema_click_urlI = oRs("cad_thema_onclick_url").Value;
|
|
break;
|
|
case 0x08:
|
|
/*global*/ thema_click_urlW = oRs("cad_thema_onclick_url").Value;
|
|
break;
|
|
}
|
|
oRs.Close();
|
|
|
|
var legenda = {}; // Legenda in wording
|
|
// Doorloop alle ruimtes van onze verdieping en zoek de schema-kleur er bij
|
|
|
|
if (discreet=='1' ) {
|
|
// themawaarde moet 1-op-1 in de legenda voorkomen (anders geen kleur)
|
|
var sql = kleurProps.fnSql(viewName);
|
|
// themawaarde moet 1-op-1 in de legenda voorkomen (anders geen kleur)
|
|
sql = "SELECT th.key, TI.cad_legendawaarde_rgb, TI.cad_legendawaarde_value,"
|
|
+ lcl.xsqla('TI.cad_legendawaarde_omschr', 'TI.cad_legendawaarde_key')
|
|
+ " FROM (" + sql + ") th, cad_legendawaarde TI"
|
|
+ " WHERE TI.cad_legendawaarde_value = TH.waarde "
|
|
+ " AND TI.cad_legenda_key = " + schKey
|
|
+ " ORDER BY cad_legendawaarde_omschr";
|
|
|
|
rs_r = Oracle.Execute(sql);
|
|
while (!rs_r.EOF)
|
|
{
|
|
var key = rs_r("KEY").Value;
|
|
var kleur = parseInt(toHexValue(rs_r("cad_legendawaarde_rgb").value), 16)||0;
|
|
if (kleurProps.highlight_arr && kleurProps.highlight_arr.length && key && !inArray(String(key.substr(2)), kleurProps.highlight_arr))
|
|
{
|
|
kleur = 0xC0C0C0;
|
|
}
|
|
if (!(rs_r("cad_legendawaarde_value").Value in legenda))
|
|
legenda[rs_r("cad_legendawaarde_value").Value] = { kleur: kleur, count: 0, tekst: rs_r("cad_legendawaarde_omschr").Value };
|
|
|
|
var cnt = null;
|
|
if (kleurProps.symbols)
|
|
{
|
|
var cntS = kleurProps.symbols[key];
|
|
if (cntS) cnt = cntS.s.Contour;
|
|
}
|
|
else
|
|
{
|
|
var cnt = cHandle.Contour(key);
|
|
}
|
|
if (cnt)
|
|
{
|
|
if (cntS && (cntS.symbolName.substr(0, 1) == "@" || cntS.symbolName.substr(0, 3) == "fa-"))
|
|
cntS.s.SetColor(kleur, 255); // Het symbool
|
|
else
|
|
{
|
|
cnt.SetColor(kleur, S("fg_ThemaAlpha")); // De bounding contour
|
|
if (kleurProps.symbols) // ook randje meekleuren
|
|
{
|
|
cnt.SetColor(kleur, 64); // De contour
|
|
//cnt.SetoutlineColor(kleur, S("fg_ThemaAlpha"));
|
|
cnt.SetoutlineColor(0x000000, 255);
|
|
cnt.lineweight = 50;
|
|
}
|
|
}
|
|
//cntS.SetColor(kleur ^ 0xFFFFFF, 128);
|
|
// URL tekst komt uiteindelijk in de tooltip
|
|
cnt.SetUrl("", rs_r("CAD_LEGENDAWAARDE_OMSCHR").Value);
|
|
}
|
|
rs_r.MoveNext();
|
|
}
|
|
rs_r.Close();
|
|
} else {
|
|
var sql = kleurProps.fnSql(viewName);
|
|
// we moeten het interval bepalen waarin deze waarde zit
|
|
sql = "SELECT th.key, th.waarde"
|
|
+ " FROM (" + sql + ") th"
|
|
+ " ORDER BY fac.safe_to_number(th.waarde)"
|
|
|
|
var rs_r = Oracle.Execute(sql);
|
|
var sql2 = "SELECT ti.cad_legendawaarde_rgb"
|
|
+ " , "+ lcl.xsqla('ti.cad_legendawaarde_omschr', 'ti.cad_legendawaarde_key')
|
|
+ " , fac.safe_to_number(Ti.cad_legendawaarde_value) waarde"
|
|
+ " FROM cad_legendawaarde ti"
|
|
+ " WHERE ti.cad_legenda_key = " + schKey
|
|
+ " ORDER BY fac.safe_to_number(ti.cad_legendawaarde_value)";
|
|
var rs_r2 = Oracle.Execute(sql2);
|
|
var prevColor = parseInt(toHexValue(rs_r2("cad_legendawaarde_rgb").value), 16)||0;
|
|
while (!rs_r.EOF)
|
|
{
|
|
// Schuif rs_r2 vooruit om te zien waar onze range eindigt
|
|
while (!rs_r2.EOF && rs_r2("waarde").value <= rs_r("waarde").value)
|
|
{
|
|
prevColor = parseInt(toHexValue(rs_r2("cad_legendawaarde_rgb").value), 16)||0;
|
|
rs_r2.MoveNext();
|
|
}
|
|
// prevColor is nu de laatste kleur die nog kleiner is
|
|
|
|
var cnt = null;
|
|
if (kleurProps.symbols)
|
|
{
|
|
var cntS=kleurProps.symbols[rs_r("KEY")];
|
|
if (cntS) cnt = cntS.s.Contour;
|
|
}
|
|
else
|
|
var cnt=cHandle.Contour(rs_r("KEY"));
|
|
|
|
// URL tekst komt uiteindelijk in de tooltip (echte waarde, niet de themawaarde)
|
|
if (cnt)
|
|
{
|
|
if (cntS && (cntS.symbolName.substr(0, 1) == "@" || cntS.symbolName.substr(0, 3) == "fa-"))
|
|
cntS.s.SetColor(prevColor, 255); // Het symbool
|
|
else
|
|
{
|
|
cnt.SetColor(prevColor, S("fg_ThemaAlpha")); // De bounding contour
|
|
if (kleurProps.symbols) // ook randje meekleuren
|
|
cnt.SetoutlineColor(prevColor, S("fg_ThemaAlpha"));
|
|
}
|
|
cnt.SetUrl("", rs_r("WAARDE").Value||"");
|
|
}
|
|
rs_r.MoveNext();
|
|
}
|
|
rs_r2.Close();
|
|
rs_r.Close();
|
|
}
|
|
}
|
|
|
|
// FSN#27251: tempfiles opruimen
|
|
// Merk op dat het heel goed mogelijk is dat het niet je eigen file is die
|
|
// je opruimt. Allemaal niet erg na 1 uur.
|
|
var cleanup_regexp = /^CAD_.*\.(w2d|dwf)$/;
|
|
function cleanup_tempfolder ()
|
|
{
|
|
var tempFolder = shared.tempFolder();
|
|
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
|
|
|
var f1 = fso.GetFolder(tempFolder);
|
|
var fc4 = new Enumerator(f1.files);
|
|
var expire = new Date();
|
|
expire.setHours(expire.getHours() - 1); // Na 1 uur weg
|
|
for (; !fc4.atEnd(); fc4.moveNext())
|
|
{
|
|
var vFile = fc4.item();
|
|
var vName = vFile.Name;
|
|
if (vName.match(cleanup_regexp))
|
|
{
|
|
var dt = vFile.DateLastModified;
|
|
if (dt < expire)
|
|
{
|
|
__Log("Auto deleting temp file: " + vName + " " + toDateTimeString(vFile.DateLastModified));
|
|
try { vFile.Delete(); } catch (e) { __DoLog("FAILED", "#f00"); };
|
|
}
|
|
else
|
|
__Log("Skipping: " + vName + " " + toDateTimeString(vFile.DateLastModified));
|
|
}
|
|
}
|
|
}
|
|
%>
|