Files
Facilitor/APPL/CAD/mySlnk2IMG.asp
Koen Reefman c69f150fef Merge 2024.3 Gold (en enkele Gold A) patches
svn path=/Website/trunk/; revision=66926
2024-11-06 14:44:31 +00:00

760 lines
32 KiB
Plaintext

<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: mySlnkIMG.asp
Description: Genereer een PNG image/Image MAP/Find informatie
Parameters:
vKey required: ALG_VERDIEPING.ALG_VERDIEPING_KEY
mode optional: MODE_IN (default) or MODE_OUT
Thema optional: THM_THEMA.THEM_THEMA_KEY
Label optional: THM_THEMA.THEM_THEMA_KEY
Discs optional: comma-separated INS_DISCIPLINE_KEY
contmode optional: -1 uit, 0 default, 1 en voor alt1 en alt2
werkplek 1 aan, 0 uit
highlight optional: comma-separated ALG_RUIMTE_KEY
scenario_key optional: dan zitten we in PRJ-mode (en impliciet binnen)
caddwgx x coördinaat van een specifieke plek in de ruimte die gehighlight moet worden.
caddwgy y coördinaat van een specifieke plek in de ruimte die gehighlight moet worden.
Context: Called from SlnkDwf\ToonIMG.js through gIMGGenerator
Note:
*/
DOCTYPE_Disable = 1;
%>
<!-- #include file='../Shared/common.inc' -->
<!-- #include file='../CAD/FGII.inc' -->
<!-- #include file='../CAD/symbols.inc' -->
<!-- #include file='../CAD/werkplek.inc' -->
<!-- #include file='../shared/flexfiles.inc' -->
<!-- #include file="../SlnkDWF/Slnk2IMG.inc" -->
<%
var pvKey = getQParamInt("vKey", -1);
if (pvKey == -1)
{
new SLNKDWF({}).Warning(L("lcl_fg_select_floor"));
Response.End;
}
var highlight_arr = getQParamIntArray("highlight", []); // Comma-separated room_key_list (terrains). Optional
var ins_key = getQParamInt("ins_key", -1); // highlight
var stdm_key = getQParamInt("stdm_key", -1);
var pDiscs_arr = getQParamIntArray("discs", []);
var pSrtG_arr = getQParamIntArray("srtgs", []);
var pSrtD_arr = getQParamIntArray("srtds", []);
var pContmode = getQParam("contmode", "");
var pWerkplek = getQParam("werkplek", "0");
var pThema_key = getQParamInt("thema", -1);
var noLabel = getQParamInt("nolabel", 0) == 1; // Onderdruk default ruimtelabel
var pLabel_key = getQParamInt("label", getQParamInt("bordlabel_key", -1));
var pLabelW_key = getQParamInt("labelW", -1); // *moet* een werkplek label zijn
var pLabelI_key = getQParamInt("labelI", -1); // *moet* een ins (objecten) label zijn
var pThemaW_key = getQParamInt("themaW", -1); // *moet* een werkplek thema zijn
var pThemaI_key = getQParamInt("themaI", -1); // *moet* een ins (objecten) thema zijn
var inoutMode = getQParam("mode", MODE_IN);
var concept = getQParamInt("concept", 0);
var scenario_key = getQParamInt("scenario_key", 0); // current scenario, 0 voor geen
var pRuimteFilter = getQParamInt("resruimtefilter", 0);
var caddwgx = getQParamFloat("caddwgx", null); // x coördinaat van een specifieke plek in de ruimte die gehighlight moet worden.
var caddwgy = getQParamFloat("caddwgy", null); // y coördinaat van een specifieke plek in de ruimte die gehighlight moet worden.
var mld_key_dwgxy = getQParamInt("mld_key_dwgxy", -1); // Melding van de meegegeven coördinaten x en y.
var imageonly = getQParamInt("imageonly", 0); // er komt geen &asMap dus temp hoeft niet bewaard te worden
var themaType = 0x0; // bitmap
var thema_click_urlR = null;
var thema_click_urlI = null;
var thema_click_urlW = null;
var labelType = 0x0; // bitmap
if (inoutMode == MODE_IN && scenario_key == 0 && (S("ph_placeFG") == 0 || (pDiscs_arr.length > 0 && pDiscs_arr.join(",").indexOf("-1") == -1)))
{
var xfunc = user.func_enabled2((scenario_key==0)? "CAD" : "PRJ",
{ alg_key: pvKey,
isOptional: true }); // alleen isOptional omdat we grafische foutmelding willen geven.
var autfunction=(scenario_key == 0)? "WEB_CADUSE" : "WEB_PRJBOF";
if (!xfunc || !xfunc.canRead(autfunction))
{
new SLNKDWF({}).Warning(L("lcl_no_auth"));
Response.End;
}
}
function myGeoProcessor(cHandle)
{
var geo_sample =
{ "type": "FeatureCollection",
"features": [
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
"properties": {"prop0": "value0"}
},
{ "type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
]
},
"properties": {
"prop0": "value0",
"prop1": 0.0
}
},
{ "type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
[100.0, 1.0], [100.0, 0.0] ]
]
},
"properties": {
"prop0": "value0",
"prop1": {"this": "that"}
}
}
]
}
var geo =
{ "type": "FeatureCollection",
"features": []
}
for (var i2=0; i2 < cHandle.ContourCount; i2++)
{
var c = cHandle.ContourItem(i2);
var feat =
{ "type": "Feature",
"geometry": {"type": "Polygon", "coordinates": []},
"properties": {"key": c.Key,
"name": c.Label,
"area": c.area }
}
var poly = [];
for (var i =0; i < c.PointCount; i++)
{
var pt = c.PointItem(i);
poly.push([Math.round(pt.dwgX), Math.round(pt.dwgY)])
}
feat.geometry.coordinates.push(poly);
geo.features.push(feat);
}
Response.ContentType = "application/json";
Response.Write(JSON.stringify(geo));
Response.End;
}
/************************************************************\
* Processes Theme and room highlight
* Voeg symbolen en werkplekken toe
\************************************************************/
function myContourProcessor(cHandle)
{
if (S("fg_planforcecolor") >= 0) // vooralsnog geldt dit dus overal
{
cHandle.forcePlanColor = S("fg_planforcecolor");
}
__Log("Scanning found {0} contours".format(cHandle.ContourCount));
if (cHandle.DwgLimits)
{
__Log("DWG Limits: ({0}, {1})-({2}, {3})".format(Math.round(cHandle.DwgLimits.min.DwgX), Math.round(cHandle.DwgLimits.min.DwgY),
Math.round(cHandle.DwgLimits.max.DwgX), Math.round(cHandle.DwgLimits.max.DwgY)));
}
var rarFilter = {from: "", where: ""};
if (inoutMode == MODE_IN)
{
if (scenario_key == 0)
{
dbTable = "alg_ruimte";
dbLabel = "alg_ruimte_nr";
colKey = "alg_ruimte_key";
syncView = S("fg_syncruimteview"); //"ALG_V_AANWEZIGRUIMTE";
syncParent = "alg_verdieping_key";
scenFilter = "";
rarFilter.from = (stdm_key > 0
? ", alg_srtruimte sr"
: "");
rarFilter.where = (pRuimteFilter > 0 // Verwijderde en vervallen ruimten uitsluiten.
? " AND EXISTS"
+ " (SELECT 1"
+ " FROM res_ruimte x_rr"
+ " , alg_ruimte x_ar"
+ " , res_alg_ruimte x_rar"
+ " WHERE x_rar.alg_ruimte_key = x_ar.alg_ruimte_key"
+ " AND x_rar.res_ruimte_key = x_rr.res_ruimte_key"
+ " AND x_rar.res_alg_ruimte_verwijder IS NULL"
+ " AND x_rr.res_ruimte_verwijder IS NULL"
+ " AND ( x_rr.res_ruimte_startdatum IS NULL"
+ " OR x_rr.res_ruimte_startdatum <= " + datumfilter.toSQL()
+ " )"
+ " AND ( x_rr.res_ruimte_vervaldatum IS NULL"
+ " OR x_rr.res_ruimte_vervaldatum > " + datumfilter.toSQL()
+ " )"
+ " AND x_ar.alg_verdieping_key = " + pvKey
+ " AND x_ar.alg_ruimte_key = ar.alg_ruimte_key"
+ " )"
: "")
+ (stdm_key > 0
? " AND sr.alg_srtruimte_key(+) = ar.alg_srtruimte_key"
+ " AND (EXISTS"
+ " (SELECT '1'"
+ " FROM mld_stdmelding_srtruimte mss"
+ " WHERE mss.alg_srtruimte_key = sr.alg_srtruimte_key"
+ " AND mss.mld_stdmelding_key = " + stdm_key + ")"
+ " OR NOT EXISTS"
+ " (SELECT '1'"
+ " FROM mld_stdmelding_srtruimte mss"
+ " WHERE mss.mld_stdmelding_key = " + stdm_key + "))"
: "");
}
else
{
dbTable = "prj_ruimte";
dbLabel = "prj_ruimte_nr";
colKey = "prj_ruimte_key";
syncView = S("fg_prj_syncruimteview"); //"PRJ_RUIMTE";
syncParent = "alg_verdieping_key";
scenFilter = " AND ar.prj_scenario_key = " + scenario_key; // En in eigen scenario
}
}
else
{
dbTable = "alg_terreinsector";
dbLabel = "alg_terreinsector_code";
colKey = "alg_terreinsector_key";
syncView = S("fg_syncterreinview");
syncParent = "alg_locatie_key";
scenFilter = "";
}
// Doorloop zo snel mogelijk alle ruimtes van onze verdieping
// en zoek de ruimte_key erbij. Die stoppen we met R:12345 in de contour.key
// zodat alle volg-queries geen syncView meer nodig hebben (die soms duur is)
sql = "SELECT sync.cadlabel"
+ " , ar." + dbLabel + " dbNummer"
+ " , sync." + colKey + " colkey"
+ " FROM " + syncView + " sync"
+ " , " + dbTable + " ar"
+ rarFilter.from
+ " WHERE sync." + syncParent + " = " + pvKey
+ " AND ar." + colKey + " = sync." + colKey
+ scenFilter
+ rarFilter.where;
oRs = Oracle.Execute(sql);
while (!oRs.Eof)
{
var rnrTek = oRs("cadlabel").value; // Zoals in de tekening
var cnt = cHandle.Contour(rnrTek); //
if (cnt)
{
cnt.Key = "R:" + oRs("colkey").Value;
cnt.Label = oRs("dbNummer").Value
}
oRs.MoveNext();
}
oRs.Close();
if (getQParamInt("AsGeo", 0) == 1)
myGeoProcessor(cHandle)
//
// Het mooie: vanaf hier is syncView en cadlabel nooit meer nodig!
//
if (pThema_key != -1)
{ // Haal de schema definitie op
sql = "SELECT cad_thema_type "
+ " FROM cad_thema"
+ " WHERE cad_thema_key = " + pThema_key
oRs = Oracle.Execute(sql);
themaType = oRs("cad_thema_type").Value;
oRs.Close();
}
if (pLabel_key != -1)
{ // Haal de schema definitie op
sql = "SELECT cad_label_type "
+ " FROM cad_label"
+ " WHERE cad_label_key = " + pLabel_key
oRs = Oracle.Execute(sql);
labelType = oRs(0).Value;
oRs.Close();
}
// Als je een werkplek thema kiest automatisch werkplekken aanzetten
if ((labelType & 0x18) == 0x08 || (themaType & 0x18) == 0x08)
pWerkplek = 1;
cHandle.SetLabelFont("Tahoma", (inoutMode==MODE_IN?S("fg_inlabelsize"):S("fg_outlabelsize")));
// Dit gaat langs alle ruimtes ongeacht of ze in de database zijn gevonden
var labelRot = getQParamInt("labelrot", 0);
for (var i2=0; i2 < cHandle.ContourCount; i2++)
{
var cont = cHandle.ContourItem(i2);
cont.setcolor(0x00ff00); // grijs randjes
if (labelRot != 0) // Voor als nog niet DLL versie 3.01
cont.LabelRotation = labelRot;
// contouren kleiner dan een bepaalde oppervlakte geven we een pro forma 10% label
if (cont.area < S("fg_areathreshold")*1000000) //setting im m2, area im mm2
{
cont.Label = "[s10]" + cont.Label;
}
cont.lineweight = S("fg_contourweight");
if (noLabel)
cont.Label = "";
if (concept == 0 || cont.Key.match(/^R:/))
cont.SetColor(S("fg_contourcolor"), S("fg_contouralpha")); // Alle herkende ruimtes initieel transparant
else if (concept == 1)
cont.SetColor(S("fg_contourcolorcpt"), 255); // Concept kleur niet herkende ruimtes
}
/************************************************************\
* Highlight specifieke ruimtes
* Voor thema doen: die kan eventueel andere kleur geven
\************************************************************/
for (var r in highlight_arr)
{
var cnt = cHandle.Contour("R:" + highlight_arr[r]);
if (cnt)
{
cnt.SetColor(getQParamInt("highlightcolor", S("fg_hilitefillcolor")), 255); // door 255 onderliggend
cnt.Lineweight = Math.min(250, 5 * getQParamFloat("hintScale", 100)); // Constant 5 pixel width maar niet te dik
cnt.SetoutlineColor(getQParamInt("highlightbordercolor", S("fg_hilitebordercolor")), 255);
cnt.Hatch = getQParamInt("highlighthatch", 3); // Diagonal Cross
cnt.MoveTop();
}
}
/************************************************************\
* Kleur de ruimtes in aan de hand van een thema
* Let wel: we ondersteunen ook terreinsectoren
\************************************************************/
if (themaType>0&&(themaType & 0x18) == 0x00) // Bit 4/5 moet 00 zijn voor contouren
{
kleurThema(cHandle, { kleurThema_key: pThema_key,
highlight_arr: (themaType & 0x80) ? null: highlight_arr, // (als niet sleepbaar) dan alleen degene hierin
fnSql:function (viewName)
{ return "SELECT 'R:' || ar." + colKey + " key, waarde"
+ " FROM " + dbTable + " ar, " + viewName + " thema"
+ " WHERE thema." + colKey + "= ar." + colKey
+ " AND ar." + syncParent + "=" + pvKey
+ (datumfilter && hasColumn(viewName, 'fclt_f_datum', 'DATE') ? " AND THEMA.fclt_f_datum = " + datumfilter.toSQL():"")
+ (hasColumn(viewName, 'fclt_f_3d_user_key', 'NUMBER') ? " AND THEMA.fclt_f_3d_user_key = " + user_key:"")
+ scenFilter
}
}
)
}
/************************************************************\
* Label de ruimtes in aan de hand van een thema
* Als het thema meerdere records oplevert voor een ruimte
* dan worden die teksten onder elkaar geplaatst
* Let wel: we ondersteunen ook terreinsectoren
\************************************************************/
if (labelType > 0 && (labelType & 0x18) == 0x00) // Bit 4/5 moet 00 zijn voor contouren
{ // Haal de schema definitie op
sql = "SELECT cad_label_view"
+ " , cad_label_size"
+ " , cad_label_visible"
+ " , cad_label_rotation"
+ " FROM cad_label"
+ " WHERE cad_label_key = " + pLabel_key
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; // negatief als we default label niet willen hebben
var lh = (ls * 100 / S("fg_inlabelsize") ).toFixed(0);
var lhs = "[s" + lh + "]";
// TODO: iets met de tekstkleur goed forceren, met name als er geen thema gekozen is.
// met thema gaat het vanzelf goed, zonder thema niet als de ruimtecontouren met een alfa gevuld zijn
//lhs += "[c000001]"; // niet helemaal zwart om automagie obv background te voorkomen..
oRs.Close();
if (!zichtbaar) // dan de default teksten wissen
{
for (var i=0; i < cHandle.ContourCount; i++)
{
var cont = cHandle.ContourItem(i);
cont.Label = "";
}
}
// Doorloop alle ruimtes van onze verdieping en zoek de label-tekst er bij
// TH.* omdat iets verderop de HIGHLIGHT optioneel is
sql = "SELECT th.*, ar." + dbLabel + " dbNummer, ar." + colKey + " colkey"
+ " FROM " + viewName + " th, " + dbTable + " ar"
+ " WHERE ar." + syncParent + " = " + pvKey
+ " AND th." + colKey + "(+) = ar." + colKey
+ (datumfilter && hasColumn(viewName, 'fclt_f_datum', 'DATE') ? " AND th.fclt_f_datum = " + datumfilter.toSQL():"")
+ (hasColumn(viewName, 'fclt_f_3d_user_key', 'NUMBER') ? " AND th.fclt_f_3d_user_key = " + user_key:"")
+ scenFilter
+ " ORDER BY ar." + colKey +", waarde"
rs_r = Oracle.Execute(sql);
if (!rs_r.EOF)
{
var hasHighlightField = false;
var hasPhotoField = false;
var hasTooltipField = false;
for (i=0; i<rs_r.Fields.Count; i++)
{
if (rs_r.Fields(i).Name.toUpperCase() == "HIGHLIGHT")
hasHighlightField = true;
if (rs_r.Fields(i).Name.toUpperCase() == "PHOTO")
hasPhotoField = true;
if (rs_r.Fields(i).Name.toUpperCase() == "TOOLTIP")
hasTooltipField = true;
}
prevContour = null;
var urltxt; // Tooltip zonder opmaak codes in wording
while (!rs_r.EOF)
{
var rkey = "R:" + rs_r("colkey").value; // Dit zit in de DWF
if (!prevContour || prevContour.Key != rkey)
{
if (prevContour)
prevContour.SetUrl("", urltxt)
prevContour = cHandle.Contour(rkey);
urltxt = rs_r("dbNummer").value;
if (prevContour)
{
prevContour.Key = rkey;
if (zichtbaar)
prevContour.Label = "[u]"+rs_r("dbNummer").value;
else
prevContour.Label = "";
prevContour.LabelRotation = rotation;
if (getQParamInt("labelPos", -1) == 2)
{ // Als gecentreerd dan individuele tekstregels
// ook centreren binnen de bounding-box
prevContour.Label = "[c]"+prevContour.Label;
}
}
}
var w = rs_r("waarde").value;
if (w != null)
{
if (hasPhotoField && rs_r("photo").value)
{
var photo_x = prevContour.Center.DwgX;
var photo_y = prevContour.Center.DwgY;
var symbolname = rs_r("photo").value;
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 dyRoom = prevContour.Extents.max.dwgY - prevContour.Extents.min.dwgY;
var symcnt = cHandle.DefineBitmapSymbol(symbolname, symbolFile, dyRoom / 2);
var symbol = cHandle.AddSymbol(photo_x, photo_y, symbolname);
}
}
if (w.substring(0,1)=="[") w = "[" + w;
if (hasTooltipField && rs_r("tooltip").value)
urltxt+= "\n" + rs_r("tooltip").value;
else
urltxt+= "\n" + w;
if (hasHighlightField)
{
var hghl = rs_r("HIGHLIGHT").Value;
if (hghl & 0x2) // rood
w = "[cff0000][i]" + w;
else if (hghl & 0x1) // grijs
w = "[ca0a0a0][i]" + w;
}
if (prevContour)
prevContour.Label += (prevContour.Label&&prevContour.Label!="[c]"?"\n":"") + lhs + w;
}
rs_r.MoveNext();
}
if (prevContour) // Last one
prevContour.SetUrl("", urltxt)
}
rs_r.Close();
}
// Nu de symbolen
if (S("fg_ins_symbols"))
{
if (scenario_key == 0)
addObjecten(cHandle, ins_key);
else
addPRJObjecten(cHandle);
}
// En de werkplekken als ze aanstaan
if (pWerkplek==1)
{
if (scenario_key == 0)
addWerkplekken(cHandle);
else
addPRJWerkplekken(cHandle, scenario_key);
// En de symbolen gekoppeld aan werkplekken
if (S("fg_ins_symbols"))
{
if (scenario_key == 0)
addWerkplekObjecten(cHandle);
else
addPRJWerkplekObjecten(cHandle);
}
}
// PRJ Aantekeningen
if (scenario_key > 0)
{
sql = "SELECT prj_scenario_note_nr, prj_scenario_note_nr || ': ' || prj_scenario_note_omschrijving oms,"
+ " prj_scenario_note_dwgx dwgx, prj_scenario_note_dwgy dwgy"
+ " FROM prj_scenario_note"
+ " WHERE prj_scenario_note_dwgx IS NOT NULL"
+ " AND prj_scenario_note_dwgy IS NOT NULL"
+ " AND prj_scenario_key = " + scenario_key
+ " AND alg_verdieping_key = " + pvKey
var oRs = Oracle.Execute(sql);
while (!oRs.EOF)
{
//var symbol = cHandle.AddSymbol(oRs("dwgX").Value, oRs("dwgY").Value,"*STAR"); // liever *DIAMOND, bestaat die?
//var symbol = cHandle.AddSymbol(oRs("dwgX").Value, oRs("dwgY").Value,"*SQUARE");
//symbol.rotation = 45; // omdat Peter graag een DIAMOND wil
var x = oRs("dwgX").Value;
var y = oRs("dwgY").Value;
var shape = [[-800,0],[0,800],[800,0],[0,-800]];
var cnt = cHandle.AddContour;
cnt.labelPosition = 5; // outside bottom
cnt.SetoutlineColor(0xff0000);
cnt.LineWeight = 200;
for (var i = 0; i < shape.length; i++)
cnt.AddPoint(x + shape[i][0],y + shape[i][1]);
symbol = cnt;
cnt.Key = oRs("prj_scenario_note_nr").Value;
cnt.Label = "[c010101,FEFEFE,255]" + oRs("oms").Value;
cnt.SetUrl("", L("lcl_prj_scenario_draggable_note")+"&nbsp;"+oRs("prj_scenario_note_nr").Value);
oRs.MoveNext();
}
oRs.close();
}
// Pas op: dit geldt globaal voor alle applicaties die de DLL gebruiken
// opt = new ActiveXObject("SLNKDWF.Options")
// opt.SetOption("SYMBOLOUTLINEALPHA", 0)
/************************************************************\
* Highlight een specifieke plek in de ruimte
\************************************************************/
if (caddwgx != null && caddwgy != null)
{
// TODO: Meegegeven punt aangeven met een ster of punaise??
//var star = cHandle.AddSymbol(caddwgx, caddwgy,"*OCTAGON"); // TODO: meer cirkel of punaise?
var symbol = cHandle.AddSymbol(caddwgx, caddwgy, "*STAR");
symbol.Contour.SetColor(0xFFFF00, 255);
symbol.Contour.Key = 1;
var clabel = "";
if (mld_key_dwgxy > 0) clabel = L("lcl_mld_complain") + " " + mld_key_dwgxy;
symbol.Contour.Label = clabel;
}
cHandle.SetFilterLayers(myFilterLayer(pDiscs_arr));
}
// Kleurvertalingen callback functie
// S("fg_translateprintcolor") = [{paper: 0xffffff, from:0x00ffff, to:0x000000}];
function myIMGProcessor(IMGHandle)
{
IMGHandle.setAntialias(getQParamInt("antialias", S("fg_antialias")));
// De meeste gefilterde lagen zitten niet eens meer in de temp-dwf
// De SLNK contour lagen zitten er echter altijd (sinds ergens tussen DLL 2.70 en 2.84)
// in dus die verbergen we hier
if (pContmode<0)
IMGHandle.SetLayers(myFilterLayer(pDiscs_arr));
var i;
for (i = 0; i< S("fg_translateprintcolor").length; i++)
{
var clr = S("fg_translateprintcolor")[i];
IMGHandle.ReplaceColor(clr.paper, clr.from, clr.to); // Geel naar zwart
}
}
// Vanuit SLNKDWF krijgen we alleen een aangewezen tekst of een contournaam (ruimtenummer)
// Vertaal dat zo mogelijk naar alg_ruimte_key dan wel ins_deel_key
function myFindKeys(SlnkEvent)
{
if (SlnkEvent.TextLabel != "" && SlnkEvent.TextLayer == "SLNK Labels")
{ // Precies op ruimte label geklikt negeren we
SlnkEvent.TextLabel = "";
SlnkEvent.TextLayer = "";
}
SlnkEvent.click_urlR = thema_click_urlR;
SlnkEvent.click_urlI = thema_click_urlI;
SlnkEvent.click_urlW = thema_click_urlW;
if (SlnkEvent.TextLabel != "")
{ // Op objectlabel (willekeurige AutoCAD tekst bij object) geklikt. Zoek het object
// Volgens mij alleen bij AKZA in gebruik
// Op het moment negeren we de laag omdat in de database een (ATL)Wildcard
// staat waar we niets meer mee kunnen.
// Eventueel TODO: De SLNKDWF DLL uitbreiden om ATLREGEXP te testen en True/False op
// te leveren
__Log("Zoeken TextLabel '{0}'".format(SlnkEvent.TextLabel));
if (inoutMode==MODE_IN)
sql = "SELECT INS_DEEL_KEY "
+ " FROM ins_v_aanwezigdeel id, alg_ruimte ar, ins_disc_params idp"
+ " WHERE id.ins_discipline_key = idp.ins_discipline_key"
+ " AND ID.ins_alg_ruimte_key = ar.alg_ruimte_key"
+ " AND alg_verdieping_key = " + pvKey
// + " AND " + safe.quoted_sql(SlnkEvent.TextLayer + " LIKE idp.ins_disc_params_cadlayers||'%'"
+ " AND ins_deel_omschrijving = " + safe.quoted_sql(SlnkEvent.TextLabel);
else
sql = "SELECT ins_deel_key "
+ " FROM ins_v_aanwezigdeel id, ins_disc_params idp"
+ " WHERE id.ins_discipline_key = idp.ins_discipline_key"
+ " AND ins_alg_locatie_key = " + pvKey
+ " AND ins_alg_ruimte_type = 'T'"
// + " AND " + safe.quoted_sql(SlnkEvent.TextLayer) + " LIKE idp.ins_disc_params_cadlayers||'%'"
+ " AND ins_deel_omschrijving = " + safe.quoted_sql(SlnkEvent.TextLabel);
}
else if (SlnkEvent.ContourKey != "")
{
__Log("Zoeken ContourKey '{0}'".format(SlnkEvent.ContourKey));
if (SlnkEvent.ContourLayer == "SLNK Symbols")
{
if (scenario_key > 0)
return; // In scenario mode kunnen we (nog) niets met werkplekken of symbolen
SlnkEvent.Key = SlnkEvent.ContourKey;
if (SlnkEvent.ContourKey.match(/^W:/))
{ // Bij impliciet willen we heel graag weten of de werkplek vast dan wel flex is
// omdat vervolg acties er nog wel eens van af willen hangen.
var sql = "SELECT prs_werkplek_type"
+ " , prs_werkplek_omschrijving"
+ " FROM prs_werkplek"
+ " WHERE prs_werkplek_key = " + parseInt(SlnkEvent.Key.substring(2),10);
var oRs = Oracle.Execute(sql);
SlnkEvent.wp_type = oRs("prs_werkplek_type").Value;
SlnkEvent.ContourLabel = oRs("prs_werkplek_omschrijving").Value;
oRs.Close();
}
return;
}
if (SlnkEvent.ContourKey.match(/^R:/))
{
SlnkEvent.Key = parseInt(SlnkEvent.ContourKey.substr(2),10);
// Zoek het contourlabel (zoals zichtbaar in de tekening) en dbLabel (zoals in de db) er bij
sql = "SELECT sync.cadlabel, ar." + dbLabel + " dbNummer, sync." + colKey + " colkey"
+ " FROM " + dbTable + " ar, " + syncView + " sync"
+ " WHERE sync." + syncParent + " = " + pvKey
+ " AND ar." + colKey + " = sync." + colKey
+ " AND ar." + colKey + " = " + SlnkEvent.Key
+ scenFilter;
oRs = Oracle.Execute(sql);
if (!oRs.EOF)
{
SlnkEvent.ContourLabel = oRs("cadlabel").Value;
SlnkEvent.DbLabel = oRs("dbNummer").Value;
}
else
__DoLog("mySlnk2IMG.asp: Vreemd, " + SlnkEvent.ContourKey + " niet terug te vinden?", "#FFFF00");
oRs.Close();
return;
}
// Hier komen we als je klikt in een ruimte die geen database record heeft.
// Dan is de ContourKey nog altijd default gevuld met het label
// Dat negeren we verder
return;
}
else
return;
oRs = Oracle.Execute(sql);
if (!oRs.EOF)
{
SlnkEvent.Key = String(oRs(0).Value);
}
oRs.Close();
}
dwfPath = SetVerdPlanDWF(pvKey, inoutMode, scenario_key, concept);
if (dwfPath)
{
var lCont = S("fg_contourlayers");
var lLabel = S("fg_labellayers");
if (pContmode==1) // Alt1
{
lCont = S("fg_contourlayers_alt1");
lLabel = S("fg_labellayers_alt1");
}
else
{
if (pContmode==2) // Alt2
{
lCont = S("fg_contourlayers_alt2");
lLabel = S("fg_labellayers_alt2");
}
}
// Sommige DWF's hebben extreme coördinaat problemen
// Door ze hier eerst te herschrijven wordt het vanzelf
// een versie rond (0, 0) een hebben we geen overflow meer
var tmp_dwf;
if (S("fg_move_origin") & 1)
{
var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
var digest = oCrypto.hex_sha1_file(dwfPath);
var tmp_dwf = shared.tempFolder() + "/CAD_MOVED_" + pvKey + "_" + digest +".w2d"
if (!fso.FileExists(tmp_dwf))
{
var xd = new ActiveXObject("SLNKDWF.DWFFile");
xd.Open(dwfPath);
var y = new ActiveXObject("SLNKDWF.WhipFile");
y.SetLayers("NotExist", "NotExist");
if (xd.EplotSections.Count == 0)
y.Load(dwfPath);
else
{
var epl = xd.EplotSections.Item(0);
y.LoadStream(epl);
}
y.SaveAs(tmp_dwf); // wordt na 24 uur in fgii.inc/cleanup_tempfolder wel opgeruimd
}
dwfPath = tmp_dwf;
}
var myProps = { dwfFile : dwfPath,
dwfProcessor : myContourProcessor,
imgProcessor : myIMGProcessor,
fndProcessor : myFindKeys,
contourLayers: lCont,
labelLayers : lLabel,
minArea : S("fg_contour_minarea"),
minmergedistance: S("fg_minmergedistance"),
maximize : S("fg_maximize"),
tempFolder : shared.tempFolder(),
imageonly : imageonly,
flags : S("fg_slnkdwf_flags"),
keepTemp : (__Logging & 8) == 8,
asciiTemp : (__Logging & 8) == 8
};
var mySLNKDWF = new SLNKDWF(myProps);
mySLNKDWF.Process();
if (myProps.cached)
__Log("myContourProcessor not called because tempfile {0} was reused".format(myProps.tempfile));
}
%>
<% ASPPAGE_END(); %>