Files
Facilitor/APPL/CAD/ins_change.asp
Jos Groot Lipman 1c84cba579 FSN#35529 Vaker correcter JSON_Result zetten in plaats van DOCTYPE_Disable
svn path=/Website/trunk/; revision=28208
2016-02-18 09:36:57 +00:00

304 lines
11 KiB
Plaintext

<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: ins_change.asp
Description: Wijzig een ins_deel of prj_deel. We onderscheiden
INS_DEEL gewone ins-delen
INS_DEEL gekoppeld aan werkplekken
PRJ_DEEL project ins-delen
PRJ_DEEL gekoppeld aan prj-werkplekken
Parameters: deel_key: te wijzigen ins_deel
wpdeel (optioneel): is het een werkplek gebonden deel?
floor: op welke verdieping staat hij (of locatie_key)
Rot
DeltaRot
Scale
clearXY
autoAlign
delete
NewX, NewY, orgX, orgY
Context: default.asp/Ajax.Updater
Result: JSON object
Note: - een nieuwe locatie (XY) (Eventueel wordt hij ook in een andere ALG_RUIMTE geplaatst.)
- Wissen locatie (XY)
- Rotatie vaste hoek
- Rotatie/ snappen op muur
- Schaal
*/
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../SlnkDWF/SLNK2IMG.inc" -->
<!-- #include file="FGII.inc" -->
<!-- #include file="symbols.inc" -->
<%
protectRequest.validateToken();
var deel_key = getQParamInt("deel_key");
var scenario_key = getQParamInt("scenario_key"); // current scenario.
var wpdeel = getQParamInt("wpdeel", 0);
if (wpdeel) // Het symbool is getekend relatief aan de werkplek. Voor veel
{ // situaties hebben we die info nodig dus haal die maar vast op
if (scenario_key == 0)
var sql = "SELECT prs_werkplek_dwgx dwgx, prs_werkplek_dwgy dwgy,"
+ " prs_werkplek_dwgrotatie rot, prs_werkplek_dwgschaal scl"
+ " FROM ins_deel id, prs_werkplek pw"
+ " WHERE id.ins_alg_ruimte_key = pw.prs_werkplek_key"
+ " AND id.ins_deel_key = " + deel_key
else
var sql = "SELECT prj_werkplek_dwgx dwgx, prj_werkplek_dwgy dwgy,"
+ " prj_werkplek_dwgrotatie rot, prj_werkplek_dwgschaal scl"
+ " FROM prj_deel id, prj_werkplek pw"
+ " WHERE id.prj_werkplek_key = pw.prj_werkplek_key"
+ " AND id.prj_deel_key = " + deel_key
var oRs = Oracle.Execute(sql);
var wpX = oRs("dwgX").value;
var wpY = oRs("dwgY").value;
var wpRot = oRs("rot").value;
var wpScale = oRs("scl").value;
oRs.Close();
if (wpX == null)
{
Response.Write(JSON.stringify({ success: false, message: L("lcl_fg_place_wp_first") }));
Response.End;
}
}
else
{
wpX = 0;wpY = 0;wpRot = 0;wpScale = 1.0;
}
dwRot = -wpRot * 3.1415926 / 180;
var vKey = getQParamInt("floor");
if (!canWriteInsDeel(deel_key, vKey, scenario_key))
{
Response.Write(JSON.stringify({ success: false, message: L("lcl_fg_obj_noedit") }));
Response.End;
}
var pContmode = getQParam("contmode", "");
function myMiniContourProcessor(cHandle)
{
var pDiscs_arr = getQParamIntArray("discs", []);
cHandle.SetFilterLayers(myFilterLayer(pDiscs_arr));
}
var sql = null; // Hierin gaan we het updatestatement bouwen.
if (getQParamInt("clearXY", 0) == 1)
{ // Geen nieuwe positie, XY wissen
if (scenario_key == 0)
sql = "UPDATE INS_DEEL"
+ " SET ins_deel_dwgx = NULL,"
+ " ins_deel_dwgy = NULL,"
+ " ins_deel_dwgrotatie = 0,"
+ " ins_deel_dwgschaal = 1.0"
+ " WHERE ins_deel_key = " + deel_key
else
sql = "UPDATE PRJ_DEEL"
+ " SET prj_deel_dwgx = NULL,"
+ " prj_deel_dwgy = NULL,"
+ " prj_deel_dwgrotatie = 0,"
+ " prj_deel_dwgschaal = 1.0"
+ " WHERE prj_deel_key = " + deel_key
}
else if (getQParamInt("delete", 0) == 1)
{ // Symbool wissen
if (scenario_key == 0)
{
sql = "UPDATE INS_DEEL"
+ " SET ins_deel_verwijder=SYSDATE"
+ " WHERE ins_deel_key = " + deel_key;
}
else
{ // Objecten binnen het project aangemaakt verwijderen we echt.
Oracle.Execute("DELETE FROM prj_deel WHERE ins_deel_key IS NULL AND prj_deel_key = " + deel_key);
sql = "UPDATE PRJ_DEEL"
+ " SET prj_deel_verwijder = SYSDATE"
+ " WHERE prj_deel_key = " + deel_key;
}
}
else if (Request.QueryString("newX").Count > 0)
{
var newX = getQParamFloat("newX");
var newY = getQParamFloat("newY");
var orgX = getQParamFloat("orgX");
var orgY = getQParamFloat("orgY");
var lblContour = getQParam("Contour", ""); // R:12345
var vKey = getQParamInt("floor");
var ruimte_key = -1;
if (lblContour.match(/^R:/))
ruimte_key = lblContour.substr(2);
// Eventueel correctie voor werkplekgebonden.
var inswpX = (Math.cos(dwRot) * (newX - orgX) - Math.sin(dwRot) * (newY - orgY)) / wpScale;
var inswpY = (Math.cos(dwRot) * (newY - orgY) + Math.sin(dwRot) * (newX - orgX)) / wpScale;
if (wpdeel)
{
newX = inswpX;
newY = inswpY;
}
// Als XY nog niet was ingevuld nemen we newX, newY
// Anders nemen we 'verplaatsing' wat nauwkeuriger is
if (scenario_key == 0)
{
sql = "UPDATE INS_DEEL"
+ " SET ins_deel_dwgx = coalesce(ins_deel_dwgx + " + inswpX + ", " + newX + "),"
+ " ins_deel_dwgy = coalesce(ins_deel_dwgy + " + inswpY + ", " + newY + "),"
+ " ins_deel_dwgrotatie = coalesce(ins_deel_dwgrotatie, 0),"
+ " ins_deel_dwgschaal = coalesce(ins_deel_dwgschaal, 1.0)"
if (ruimte_key > 0 && !wpdeel)
sql += " ,ins_alg_ruimte_key = " + ruimte_key
sql += " WHERE ins_deel_key = " + deel_key
}
else
{
sql = "UPDATE PRJ_DEEL"
+ " SET prj_deel_dwgx = coalesce(prj_deel_dwgx + " + inswpX + ", " + newX + "),"
+ " prj_deel_dwgy = coalesce(prj_deel_dwgy + " + inswpY + ", " + newY + "),"
+ " prj_deel_dwgrotatie = coalesce(prj_deel_dwgrotatie, 0),"
+ " prj_deel_dwgschaal = coalesce(prj_deel_dwgschaal, 1.0)"
if (ruimte_key > 0 && !wpdeel)
sql += " ,prj_ruimte_key = " + ruimte_key
sql += " WHERE prj_deel_key = " + deel_key
}
}
else if (Request.QueryString("DeltaRot").Count > 0)
{ // Rechtsom of linksom
var angle = getQParamFloat("DeltaRot");
if (angle == 0)
{
if (scenario_key == 0)
var sql = "UPDATE INS_DEEL"
+ " SET ins_deel_dwgrotatie = " + angle
+ " WHERE ins_deel_key = " + deel_key
else
var sql = "UPDATE PRJ_DEEL"
+ " SET prj_deel_dwgrotatie = " + angle
+ " WHERE prj_deel_key = " + deel_key
}
else
{
if (scenario_key == 0)
var sql = "UPDATE INS_DEEL"
+ " SET ins_deel_dwgrotatie = mod(coalesce(ins_deel_dwgrotatie + " + angle + ", " + angle + ")+360, 360)"
+ " WHERE ins_deel_key = " + deel_key
else
var sql = "UPDATE PRJ_DEEL"
+ " SET prj_deel_dwgrotatie = mod(coalesce(prj_deel_dwgrotatie + " + angle + ", " + angle + ")+360, 360)"
+ " WHERE prj_deel_key = " + deel_key
}
}
else if (Request.QueryString("Rot").Count > 0)
{ // Gespecificeerde rotatie
var angle = getQParamFloat("rot");
if (scenario_key == 0)
var sql = "UPDATE ins_deel"
+ " SET ins_deel_dwgrotatie = " + angle
+ " WHERE ins_deel_key = " + deel_key;
else
var sql = "UPDATE prj_deel"
+ " SET prj_deel_dwgrotatie = " + angle
+ " WHERE prj_deel_key = " + deel_key;
}
else if (getQParamInt("AutoAlign", 0) == 1)
{
inoutMode = getQParamInt("mode" , MODE_IN);
pvKey = getQParamInt("vKey" , -1);
dwfPath = SetVerdPlanDWF(pvKey, inoutMode, scenario_key);
if (dwfPath)
{ // Als we ook op symbolen (hun contour!) zouden willen snappen
// moeten we myContourProcessor meegeven
debugger;
var mySLNKDWF = new SLNKDWF({ dwfFile : dwfPath,
dwfProcessor : myMiniContourProcessor,
imgProcessor : null,
contourLayers: S("fg_contourlayers"),
labelLayers : S("fg_labellayers"),
maximize : S("fg_maximize"),
minArea : S("fg_contour_minArea"),
tempFolder : Server.MapPath("../../Temp")
});
//SlnkSetContourProcessor(new Function("x", ";"));
var SLNKEvent = mySLNKDWF.Find(); // Werkt op Querystring parameters findX en findY
// beter zou zijn DWF(!) coordinaten van INS_DEEL
if (SlnkEvent.ContourKey != "")
{
if (scenario_key == 0)
var sql = "SELECT ins_deel_dwgrotatie rot"
+ " FROM ins_deel"
+ " WHERE ins_deel_key = " + deel_key
else
var sql = "SELECT prj_deel_dwgrotatie rot"
+ " FROM prj_deel"
+ " WHERE prj_deel_key = " + deel_key
oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
var oldAngle = (wpRot + oRs("rot").value + 360) % 360;
// newangle wordt SLNKEvent.EdgeAngle, SLNKEvent.EdgeAngle+90, SLNKEvent.EdgeAngle+180
// of SLNKEvent.EdgeAngle+270, wat maar het dichtst bij oldAngle zit
var newAngle = SLNKEvent.EdgeAngle; // Eerste gok
var dist = Math.abs(oldAngle - newAngle);
__Log("oa: " + oldAngle + " na: " + newAngle + " d: " + dist);
for (var deg = 0; deg <= 360; deg += 90)
{
var dist2 = Math.min(Math.abs(oldAngle - (SLNKEvent.EdgeAngle + deg)),
Math.abs(oldAngle - (SLNKEvent.EdgeAngle + deg - 360)));
if (Math.abs(dist2) < dist)
{
dist = dist2;
newAngle = (SLNKEvent.EdgeAngle + deg + 360) % 360;
}
__Log(" na: " + newAngle + " d: " + dist);
}
newAngle=(newAngle - wpRot + 360) % 360
if (scenario_key == 0)
sql = "UPDATE INS_DEEL"
+ " SET ins_deel_dwgrotatie = " + newAngle
+ " WHERE ins_deel_key = " + deel_key
else
sql = "UPDATE PRJ_DEEL"
+ " SET prj_deel_dwgrotatie = " + newAngle
+ " WHERE prj_deel_key = " + deel_key
}
}
else
{ // Moet in ruimte
Response.Write(JSON.stringify({ success: false, message: L("lcl_fg_place_wp_in_room") }));
Response.End;
}
}
}
else if (Request.QueryString("Scale").Count > 0)
{
var scl = getQParamFloat("scale");
if (scenario_key == 0)
var sql = "UPDATE INS_DEEL"
+ " SET ins_deel_dwgschaal = " + scl
+ " WHERE ins_deel_key = " + deel_key
else
var sql = "UPDATE PRJ_DEEL"
+ " SET prj_deel_dwgschaal = " + scl
+ " WHERE prj_deel_key = " + deel_key
}
else
{
Response.Write(JSON.stringify({ success: false, message: "ins_change.asp: invalid parameter" }));
Response.End;
}
if (sql)
Oracle.Execute(sql);
Response.Write(JSON.stringify({ success: true }));
%>