Hi,
I’m trying to substitute default rectangles for nodes with custom shapes created from geometry strings.
I have defined the strings inside symbols var then I perform the binding with a custom function as you can see below:
var symbols = {
"SYMBBTS":
"F M0 0 L0 30 30 30 30 0 0 0 M0 0 L30 30 M0 30 L30 0z",
"SYMBCOF":
"F M0 50 L50 0 100 50 M10 60 L50 20 90 60 M20 50 L80 50 80 110 20 50 M50 50 L50 110 M20 80 L80 80"
};
function nodeType2Symbol(type)
{
return symbols[type];
}
myDiagram.nodeTemplate = $(go.Node, "Vertical",
$(go.Shape,
{
strokeWidth: 2,
portId: ""
},
new go.Binding("geometryString", "symbol", nodeType2Symbol),
new go.Binding("fill", "mptype", nodeType2Color)
),
$(go.TextBlock, {
margin: 8,
font: "700 14pt helvetica"
},
new go.Binding("text", "", createNodeLabel)
)
);
Everything works fine, but I would like to know if it is possible to proportionally scale the shapes without manually changing the geometry strings. The first shape bounding box, for example, is 30x30px and if I would like to make is smaller, I have to multiply every coordinate for a scaling factor (let’s say 0.7), but it is a bit tedious and I have to add many more symbols.
Is there a way to do it programmatically? I have found this page about Geometry where there is the scale(x,y)
method, but I do not know how to apply it to my case.
Many thanks,
Guido