Hi,

Centering graph works fine with below calculation. But it effects the
*zoom.event* which works fine at the moment. So I had to revert it back to
the old method.

var graphBBoxClient = graph[1].getBoundingClientRect();

var x = graphBBox.x > 0 ? (graphScreen.width() -
graphBBoxClient.width) - Math.abs(graphBBox.x) : (graphScreen.width()
- graphBBoxClient.width) + Math.abs(graphBBox.x);
var y = graphBBox.y > 0 ? (graphScreen.height() -
graphBBoxClient.height) - Math.abs(graphBBox.y) :
(graphScreen.height() - graphBBoxClient.height) +
Math.abs(graphBBox.y);

d3.select("svg g#mainG").transition().attr("transform",
"scale("+scaleAmount+") translate("+x+","+y+")");

So i'm trying to calculate it properly using the current values, which i'm
getting already. but bounding box coordinate values cause a problem. If
anyone can help me to figure it out the centering graph would be appreciate.

Here is my current code,

var zoom = d3.behavior.zoom().on("zoom", redraw);

function getCenter() {
    var center = {
        x : this.width / 2,
        y : this.height / 2
    };
    return center;
}

function zoomIn(){
var coor = zoom.translate();
var x = (coor[0] - getCenter().x) * 1.1 + getCenter().x;
var y = (coor[1] - getCenter().y) * 1.1 + getCenter().y;

zoom.scale(zoom.scale() * 1.1);
zoom.translate([x, y]);

zoom.event(svg);
}

function zoomOut(){
var coor = zoom.translate();
var x = (coor[0] - getCenter().x) * 0.9 + getCenter().x;
var y = (coor[1] - getCenter().y) * 0.9 + getCenter().y;

zoom.scale(zoom.scale() * 0.9);
zoom.translate([x, y]);

zoom.event(svg);
}

function zoomFit(){

var graph = [d3.select("svg").node(),d3.select("svg g#mainG").node()],
svgBBox = graph[0].getBBox(),
graphBBox = graph[1].getBBox(),
graphScreen = $("svg");

var graphScreenWidth = graphScreen.width() / graphBBox.width,
graphScreenHeight = graphScreen.height() / graphBBox.height,
scaleAmount = graphScreenWidth > graphScreenHeight ? graphScreenHeight :
graphScreenWidth;

var xOffSet = graphBBox.x > 0 ? -Math.abs(graphBBox.x) : Math.abs(graphBBox.
x),
yOffSet = graphBBox.y > 0 ? -Math.abs(graphBBox.y) : Math.abs(graphBBox.y);

// Where the calculation should be done
var x = getCenter().x - scaleAmount * getCenter().x;
var y = getCenter().y - scaleAmount * getCenter().y;

zoom.scale(scaleAmount);
zoom.translate([x, y]);

zoom.event(svg);
}

Thanks,
Jerad


On Wed, Jan 28, 2015 at 11:32 AM, Jerad Rutnam <je...@wso2.com> wrote:

> Hi,
>
> I found that issue is not the way I calculate, but it was causing by a SVG
> Group (g) Element Bounding Box X,Y coordinates. So I just had to subtract
> it.
>
> If anyone needs to get the svg boundingBox values use the code (this
> returns an array),
>
> d3.select("svg g#groupElement").node().getBBox();
>
> d3.select("svg g#groupElement").node().getBoundingClientRect();
>
> If wants to get from jquery,
>
> $("svg").find("g")[0].getClientRects()[0];
>
> Thanks,
> Jerad
>
> On Mon, Jan 26, 2015 at 1:54 PM, Jerad Rutnam <je...@wso2.com> wrote:
>
>> Hi All,
>>
>> I'm working on a feature in G-Reg (Dependency Graph) using D3. And having
>> an issue to centering the graph after zoom-out to screen-size in viewport.
>>
>> Currently I'm getting these values,
>>
>> graphScreen = "svg";
>>
>> mainGraphGroup = "svg g"
>>
>> var topOffset = (graphScreen.width() - mainGraphGroupWidth)/2,
>>     leftOffset = (graphScreen.height() - mainGraphGroupHeight)/2;
>>
>> Is there anyway I can achieve centering by these values? or is there a 
>> method to achieving this? Any help will be appreciate. Searched on web but 
>> couldn't find a proper solution for it yet.
>>
>> Thanks,
>> Jerad
>> --
>> *Jerad Rutnam*
>> *Software Engineer - UI*
>>
>> WSO2 Inc.
>> lean | enterprise | middleware
>> M : +94 77 959 1609 | E : je...@wso2.com | W : www.wso2.com
>>
>
>
>
> --
> *Jerad Rutnam*
> *Software Engineer - UI*
>
> WSO2 Inc.
> lean | enterprise | middleware
> M : +94 77 959 1609 | E : je...@wso2.com | W : www.wso2.com
>



-- 
*Jerad Rutnam*
*Software Engineer*

WSO2 Inc.
lean | enterprise | middleware
M : +94 77 959 1609 | E : je...@wso2.com | W : www.wso2.com
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to