176 lines
7.5 KiB
C++
176 lines
7.5 KiB
C++
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: cad_scan_dwf.inc
|
|
Description: Scant een DWF en sla de gevonden contouren op
|
|
in de tabel CAD_IMP_CONTOUR
|
|
Daar kunnen andere schermen dan rapporten op definieren.
|
|
Context:
|
|
Note: ContoursXML is niet meer nodig sinds SlnkDWF.DLL 2.60: daar kun je
|
|
ContourCount en ContourItem gebruiken om te itereren over de contouren
|
|
*/ %>
|
|
<!--#include file="../SlnkDWF/DWFProperties.inc" -->
|
|
<%
|
|
|
|
// Als concept==1 dan wordt onder de concept folder gezocht en opgeslagen in cad_contour met concept=1
|
|
function scanDWF(ctKey, concept)
|
|
{
|
|
var sql;
|
|
// is bij aanroepers al wel geweest protectRequest.validateToken();
|
|
if (1) // Inout
|
|
{
|
|
sql = "SELECT ct.cad_tekening_key" // Concept tekeningnaam is altijd dezelfde als actueel
|
|
+ " , ct.cad_tekening_filenaam"
|
|
+ " , ct.cad_tekening_type"
|
|
+ " , ct.cad_tekening_key"
|
|
+ " , v.alg_verdieping_code"
|
|
+ " FROM cad_tekening ct"
|
|
+ " , alg_v_aanwezigverdieping v"
|
|
+ " WHERE ct.cad_tekening_verwijder IS NULL"
|
|
+ " AND ct.cad_tekening_type = 'P'"
|
|
+ " AND ct.alg_verdieping_key = v.alg_verdieping_key(+)"
|
|
+ " AND ct.cad_tekening_key = " + ctKey;
|
|
}
|
|
var oRs = Oracle.Execute(sql);
|
|
|
|
var fso, f1;
|
|
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
|
|
|
var msg;
|
|
if (!oRs.Eof)
|
|
{
|
|
var teknaam = oRs("cad_tekening_filenaam").value + ".DWF";
|
|
var verdieping_code = oRs("alg_verdieping_code").Value;
|
|
|
|
if (concept)
|
|
teknaam = S("flexfilespath") + "/cad/concept/" + teknaam;
|
|
else
|
|
teknaam = S("flexfilespath") + "/cad/" + teknaam;
|
|
if (!fso.FileExists(teknaam))
|
|
{
|
|
msg = L("lcl_fg_drawingnotfound") + ":" + teknaam;
|
|
__Log(msg);
|
|
}
|
|
else
|
|
{
|
|
var nnOpp = 0;
|
|
var nnLabel = 0;
|
|
var oOpp;
|
|
|
|
// Oude contouren altijd opruimen
|
|
Oracle.Execute("DELETE FROM CAD_IMP_CONTOUR"
|
|
+ " WHERE cad_tekening_key = " + ctKey
|
|
+ " AND cad_imp_contour_concept = " + concept);
|
|
|
|
if (S("fg_contourlayers_floor"))
|
|
{
|
|
__Log("Inscannen " + teknaam);
|
|
var verContour = GetContoursHandle(teknaam, S("fg_contourlayers_floor"));
|
|
|
|
// Als we 1 verdieping hebben gevonden, voeg die dan hieronder in
|
|
if (verContour.ContourCount === 1) {
|
|
var cont = verContour.ContourItem(0);
|
|
oOpp = cont.Area;
|
|
if (oOpp) {
|
|
nnOpp = (cont.Area/1e6);
|
|
nnLabel = 1;
|
|
sql = "INSERT INTO CAD_IMP_CONTOUR (cad_tekening_key, cad_imp_contour_nr, cad_imp_contour_opp, cad_imp_contour_concept)"
|
|
+ " VALUES(" + ctKey + ", " + safe.quoted_sql(L("lcl_floor") + " (" + verdieping_code + ")") + ", " + nnOpp + ", " + concept + ")";
|
|
Oracle.Execute(sql);
|
|
}
|
|
}
|
|
else
|
|
__Log("{0} verdieping contour(en) gevonden op laag {1}, BVO niet ingelezen".format(verContour.ContourCount, S("fg_contourlayers_floor")));
|
|
|
|
}
|
|
else
|
|
{
|
|
verContour = { ContourCount: 0 };
|
|
}
|
|
|
|
var dwfHandle = GetContoursHandle(teknaam, S("fg_contourlayers"), S("fg_labellayers"),
|
|
{ minArea: S("fg_contour_minArea")
|
|
, minmergedistance: S("fg_minmergedistance")
|
|
, flags: S("fg_slnkdwf_flags")
|
|
}
|
|
);
|
|
|
|
for (var i = 0; i < dwfHandle.ContourCount; i++)
|
|
{
|
|
var cont = dwfHandle.ContourItem(i);
|
|
oLabel = cont.Label;
|
|
if (oLabel) {
|
|
oOpp = cont.Area;
|
|
if (oOpp) {
|
|
nnLabel++;
|
|
nnOpp += (oOpp/1e6);
|
|
sql = "INSERT INTO CAD_IMP_CONTOUR (cad_tekening_key, cad_imp_contour_nr, cad_imp_contour_opp, cad_imp_contour_concept)"
|
|
+ " VALUES(" + ctKey + ", " + safe.quoted_sql(oLabel, 30) + " ," + oOpp/1e6 + " ," + concept + ")";
|
|
Oracle.Execute(sql);
|
|
}
|
|
}
|
|
}
|
|
var foundRooms = verContour.ContourCount + dwfHandle.ContourCount;
|
|
|
|
__Log("Scannen tekening " + teknaam + " met " + foundRooms + " contouren")
|
|
|
|
// Nu nog een tweede slag voor de eventuele alternatieve contourlagen
|
|
// Let wel: alleen contour-labels die we met de eerste slag gevonden hebben
|
|
// tellen we mee, we doen geen nieuwe inserts
|
|
if (S("fg_contourlayers_alt1")!="" && S("fg_labellayers_alt1")!="")
|
|
{
|
|
var dwfHandle = GetContoursHandle(teknaam, S("fg_contourlayers_alt1"), S("fg_labellayers_alt1"),
|
|
{ minArea: S("fg_contour_minArea")
|
|
, minmergedistance: S("fg_minmergedistance")
|
|
, flags: S("fg_slnkdwf_flags")
|
|
});
|
|
|
|
for (var i=0; i < dwfHandle.ContourCount; i++)
|
|
{
|
|
var cont = dwfHandle.ContourItem(i);
|
|
|
|
oLabel = cont.Label;
|
|
if (oLabel)
|
|
{
|
|
oOpp = cont.Area;
|
|
if (oOpp)
|
|
{
|
|
sql = "UPDATE CAD_IMP_CONTOUR "
|
|
+" SET cad_imp_contour_opp_alt1 = " + oOpp/1e6
|
|
+" WHERE cad_tekening_key = " + ctKey
|
|
+" AND cad_imp_contour_concept = " + concept
|
|
+" AND cad_imp_contour_nr = " + safe.quoted_sql(oLabel, 30)
|
|
Oracle.Execute(sql);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
sql = "UPDATE cad_tekening "
|
|
+ " SET cad_tekening_geimporteerd = SYSDATE"
|
|
+ " WHERE cad_tekening_key = " + ctKey;
|
|
Oracle.Execute(sql);
|
|
|
|
// Zoek dubbeleen
|
|
sql = "SELECT cad_imp_contour_nr"
|
|
+ " , COUNT(*) "
|
|
+ " FROM cad_imp_contour"
|
|
+ " WHERE cad_tekening_key = " + ctKey
|
|
+ " AND cad_imp_contour_concept = " + concept
|
|
+ " GROUP BY cad_imp_contour_nr HAVING COUNT(*) > 1"
|
|
var oRs2 = Oracle.Execute(sql);
|
|
|
|
if (oRs2.eof) {
|
|
msg = L("lcl_fg_tek_scannen").format(oRs("cad_tekening_filenaam").value, foundRooms, nnLabel, nnOpp.toFixed(1) );
|
|
} else {
|
|
msg = L("lcl_fg_tek_scandbl"); // Pas op: dubbelen
|
|
}
|
|
oRs2.Close();
|
|
}
|
|
// Kan er maar een zijn oRs.MoveNext();
|
|
}
|
|
oRs.Close();
|
|
return msg;
|
|
}
|
|
%> |