Diagram tartalmához, alakzati formák: Téglalap = figure: "Rectangle" Rombusz = figure: "Diamond" Kör vagy ovális = figure: "Ellipse" Háromszög = figure: "Triangle" Négyszög = figure: "Square" Ötszög = figure: "Pentagon" Hatszög = figure: "Hexagon" Hétszög = figure: "Heptagon" Nyolsszög = figure: "Octagon" Tízenkétszög = figure: "Dodecagon" Megjegyzés: Ellipse = Kör vagy ovális, a diagram tartalma határozza meg. Ötszög, hatszög stb. szabályos vagy sem, a diagram tartalma határozza meg. Diagramhoz többsoros szöveget alkalmazunk, sortöréshez <br> elemet nem alkalmazhatjuk, helyette alkalmazzuk a \n jelölést.
Diagram használata:
A HTML panel eleme, kölcsönhatásban áll a fő diagrammal.
A panel területén lévő diagramok szövegére kattintva, megjelenik egy kijelölőnégyzet.
A kijelölőnégyzet egérrel történő elhúzása a fő diagram területére és billentyű felengedését követően, bővebb információ jelenik meg.
Kijelölőnégyzet egérrel történő elhúzásával, alakzatot elrejthetjük a panel mögé, vagy hagyhatjuk a fő diagram területén is.
Eredeti állapot visszaállításához, kattintsunk az oldal frissítésre, vagy nyomjuk le az F5 billentyűt.
<!doctype html> <html lang="hu"> <html> <head> <meta charset="UTF-8"> <title>Gojs alakzatok</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <!-- jQuery. --> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.0/jquery-ui.min.js"></script> <!-- jQuery. --> <script src="https://cdnjs.cloudflare.com/ajax/libs/gojs/1.8.17/go-debug.js"></script> <!-- goJS --> <link href="gojsalakzatok.css" rel="stylesheet" type="text/css" /> <!-- CSS azaz stílus fájlunk. --> </head> <body onload="init()"> <div id="container"> <h1>goJS alakzatok és infó</h1> <div id="minta"> <div style="padding: 5px; width:85%;"> <!-- Panel és tartalma. --> <div id="panel" class="huzhato"> <div id="panelFogantyu" class="pfogantyu">Panel</div> <div id="paneltartalom"> <div id="panelElemek"></div> </div> </div> <!-- Információs ablak. --> <div id="info" class="huzhato"> <div id="infoFogantyu" class="pfogantyu">Információs ablak.</div> <div id="informacio">Információhoz, panelon válasszunk ki egy elemet egér balos billentyűjének lenyomásával, és húzzuk panelon kívülre, majd a billentyűt, engedjük fel.</div> </div> <!-- Fő diagram. --> <div id="diagram"> </div> </div> </div> <script type="text/javascript" src="gojsalakzatok.js"> </script> </div> </body> </html>
body {font-family: Arial, Helvetica, sans-serif; font-size: 100.01%; margin: 0; background-color: #ccc; }
#container {width: 950px; margin-top: 15px; margin-right: auto; margin-left: auto;}
h1 {font-size: 33px; color: #363; text-align: center;}
#minta{width:97%; margin-left:5px; padding:5px; background-color: pink;}
.huzhato {
position: absolute; margin-top: 20px; margin-left: 80px; z-index: 40;
display: inline-block; vertical-align: top;
border: 4px solid #BBB; border-radius: 5px; background-color: whitesmoke;
}
/* A panel és Információs terület fogantyújának fejlécének stílusa. */
.pfogantyu { background-color: lightblue; cursor: move; text-align: center; font: bold 12px sans-serif; }
/* Információs ablak. */
#info {position: absolute; width: 300px; margin-top: 200px; margin-left: 380px; border:2px solid red; }
/* Tájékoztató szövegterület formázása. */
#informacio { padding: 15px; font-size:12px;}
#panel{height: 400px; border:2px solid black;}
/* Panel oszlop tartalmának pozíciói, és a div kitöltse a helyét. */
#paneltartalom {position:absolute; bottom: 5px; left: 0px; right: 0px; top: 14px;}
/* Panel oszlop. Méreteit a #paneltatalom határozza meg. */
#panelElemek { width: 100%; height: 100%; background-color: moccasin; }
/* A fő diagram területe. */
#diagram{ height:750px; border:solid 2px blue; background-color: lavender; }
function init() {
if (window.goSamples) goSamples(); // Ezeknek a mintáknak, nem kell az init-et meghívni.
var GO = go.GraphObject.make; // A sablonok meghatározásához kell.
Diagrammom = GO(go.Diagram, "diagram", // Meg kell adni, a HTML DIV elem azonosítóját.
{ allowDrop: true }); // Igaznak kell lennie, hogy elfogadja a panelon lévő elemeket.
// Meghatározunk több választható háttérszínt és keretszínt a diagram alakzataihoz. -----------------------------
// Meghatározhatunk gradient színátmenetet is.
var hatter1 = GO(go.Brush, go.Brush.Linear, { 0: "rgb(115,220,241)", 0.6: "rgb(105,210,231)", 1: "rgb(75,180,201)" });
var keret1 = "blue";
var hatter2 = GO(go.Brush, go.Brush.Linear, { 0: "rgb(177,229,226)", 0.6: "rgb(234,238,214)", 1: "rgb(137,189,186)" });
var keret2 = "cyan";
var hatter3 = GO(go.Brush, go.Brush.Linear, { 0: "rgb(234,238,214)", 0.6: "rgb(224,228,204)", 1: "rgb(194,198,174)" });
var keret3 = "green";
var hatter4 = GO(go.Brush, go.Brush.Linear, { 0: "rgb(253,164,58)", 0.6: "rgb(243,134,48)", 1: "rgb(213,104,18)" });
var keret4 = "rgb(203,84,08)";
var hatter5 = GO(go.Brush, go.Brush.Linear, { 0: "rgb(250,0,0)", 0.6: "rgb(243,134,48)", 1: "rgb(213,104,18)" });
var keret5 = "firebrick";
var keret7 = "red";
var keret8 = "black";
var keret12 = "sienna";
var keret15 = "orangered"; // Körhöz keret.
var keret44 = "darkred"; // Négyzethez keret.
var keretu = "moccasin"; // Üres területhez keret.
var hatteru = "moccasin"; // Üres területhez háttér.
// ---------------------------------------------------------------------------------------------------------------------
Diagrammom.nodeTemplateMap.add("", // Alapértelmezett, default kategória.
GO(go.Node, "Auto", { locationSpot: go.Spot.Center },
new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
GO(go.Shape, "Ellipse",
{ strokeWidth: 2, fill: hatter1, name: "D_ALAK" }, // Diagram alakzat egyedi neve = D_ALAK
new go.Binding("figure", "figure"),
new go.Binding("fill", "fill"),
new go.Binding("stroke", "stroke")
),
GO(go.TextBlock,
{ margin: 5, maxSize: new go.Size(100, NaN),
wrap: go.TextBlock.WrapFit,
textAlign: "center", // Diagram szöveg igazítás: left, center, right
editable: true,
font: "bold 9pt Helvetica, Arial, sans-serif",
name: "SZOVEG" }, // Diagram tartalmának egyedi neve = SZOVEG
new go.Binding("text", "text").makeTwoWay()
)
)
);
// ---------------------------------------------------------------------------------------------------------------------
// HTML tárolóban lévő, húzható palettát / panelt inicializálja.
panelElemek = new go.Palette("panelElemek"); // Meg kell adni, a HTML DIV elem azonosítóját.
panelElemek.nodeTemplateMap = Diagrammom.nodeTemplateMap;
panelElemek.model = new go.GraphLinksModel( [
{ text: "\n \n", fill: hatteru, stroke: keretu, figure: "Rectangle" },
{ text: "Téglalap", fill: hatter2, stroke: keret2, figure: "Rectangle"},
{ text: "Rombusz", fill: hatter3, stroke: keret3, figure: "Diamond" },
{ text: "Tojás és\n Kör", fill: hatter1, stroke: keret15, figure: "Ellipse" },
{ text: "3 szög", fill: hatter5, stroke: keret3, figure: "Triangle" },
{ text: "Négyzet", fill: hatter5, stroke: keret44, figure: "Square" },
{ text: "5\n szög", fill: hatter5, stroke: keret5, figure: "Pentagon" },
{ text: "6 szög", fill: hatter5, stroke: keret1, figure: "Hexagon" },
{ text: "7\n szög", fill: hatter3, stroke: keret7, figure: "Heptagon" },
{ text: "8\n szög", fill: hatter4, stroke: keret8, figure: "Octagon" },
{ text: "12\n szög", fill: hatter3, stroke: keret12, figure: "Dodecagon" }
] );
// ---------------------------------------------------------------------------------------------------------------------
panelElemek.addDiagramListener("InitialLayoutCompleted", function(diagramEvent) {
var paneldrag = document.getElementById("panel");
var dpanel = diagramEvent.diagram;
var paddingHorizontal = dpanel.padding.left + dpanel.padding.right;
var paddingVertical = dpanel.padding.top + dpanel.padding.bottom;
paneldrag.style.width = dpanel.documentBounds.width + 50 + "px"; // Panel szélességének növelése.
paneldrag.style.height = dpanel.documentBounds.height + 40 + "px"; // Panel magasságának növelése.
});
// ---------------------------------------------------------------------------------------------------------------------
var info = document.getElementById("informacio");
Diagrammom.addChangedListener(function (e) {
var sel = e.diagram.selection;
var str = "";
if (sel.count === 0) {
str = "Alakzatok, csomópontok kiválasztása és elmozgatása után, itt a fő diagramban jelenik meg, az információ.";
info.innerHTML = str;
return;
} else if (sel.count > 1) {
str = sel.count + " objects selected.";
info.innerHTML = str;
return;
}
// ---------------------------------------------------------------------------------------------------------------------
// Egy kiválasztott diagram objektumhoz, megjelenítünk néhány információt. ----------------------------
var elem = sel.first();
var alakzat = elem.findObject("D_ALAK");
var txtblock = elem.findObject("SZOVEG");
str += "<p><strong>Kiválasztott csomópont adatai:</strong></p>";
str += "<p>Forma: " + alakzat.figure + "</p>";
str += "<p>Szöveg: " + txtblock.text + "</p>";
var strokeColor = alakzat.stroke;
str += '<p style="color:blue;">Keretszín: <b>'+strokeColor+'</b></p>';
// Tetszőleges tájékoztató szöveg, a diagram objektumaihoz. -----------------------------------
var azonos=txtblock.text; // Kiválasztott diagram tartalmának beazonosítása.
// Diagram elemek tartalmát, változókhoz rendeljük.
var teglalap="Téglalap"; var rombusz="Rombusz"; var kor="Tojás és\n Kör"; var haromszog="3 szög"; var negyzet="Négyzet";
var otsz="5\n szög"; var hatsz="6 szög"; var hetsz="7\n szög"; var nyolcsz="8\n szög"; var tkettosz="12\n szög";
if(teglalap==azonos){str += "<p>Kerülete = a+b*2<br>Területe = a*b</p>";}
if(rombusz==azonos){str += "<p>Kerülete = a*4</p>";}
if(kor==azonos){str += "<p>Kör:<br>Kerülete = 2*r*π<br>Területe = r<sup>2</sup> * π</p>";}
if(haromszog==azonos){str += "<p>Kerülete = a+b+c<br>Területe = a*m / 2</p>";}
if(negyzet==azonos){str += "<p>Kerülete = a*4<br>Területe = a*a</p>";}
if(otsz==azonos){str += "<p>Szabályos ötszög:<br>Kerülete = a*5<br>
Területe:<br>x = r<sup>2</sup> : (a/2)<sup>2</sup><br> m = x négyzetgyöke.<br>T = (a*m /2)*5</p>";}
if(hatsz==azonos){str += "<p>Szabályos hatszög:<br>Kerülete = a*6<br>
Területe:<br>x = r<sup>2</sup> : (a/2)<sup>2</sup><br> m = x négyzetgyöke.<br>T = (a*m /2)*6</p>";}
if(hetsz==azonos){str += "<p>Szabályos hétszög:<br>Kerülete = a*7<br>
Területe:<br>x = r<sup>2</sup> : (a/2)<sup>2</sup><br> m = x négyzetgyöke.<br>T = (a*m /2)*7</p>";}
if(nyolcsz==azonos){str += "<p>Szabályos nyolcszög:<br>Kerülete = a*8<br>
Területe:<br>x = r<sup>2</sup> : (a/2)<sup>2</sup> <br> m = x négyzetgyöke.<br>T = (a*m /2)*8</p>";}
if(tkettosz==azonos){str += "<p>Szabályos tizenkétszög:<br>Kerülete = a*12<br>
Területe:<br>x = r<sup>2</sup> : (a/2)<sup>2</sup> <br> m = x négyzetgyöke.<br>T = (a*m /2)*12</p>";}
info.innerHTML = str;
});
// Fogantyú a penel és info ablak területének mozgatáshoz. ------------------------------
$(function() {
$("#panel").draggable({handle: "#panelFogantyu"}).resizable({
// Áthelyezéskor, végezzen el egy másik elrendezést, hogy illeszkedjen minden a panel nézetablakában.
stop: function(){ panelElemek.layoutDiagram(true); }
});
$("#info").draggable({handle: "#infoFogantyu"});
});
}