[Dojo-interest] Is this at all possible with dojo.gfx ordojoingeneral?

Michael Schall mike.schall at gmail.com
Tue Apr 29 18:23:57 UTC 2008


As I researched the jsviz library, my current needs of multiple edges
between 2 entities is not currently supported.  I still think seeing this in
dojo would be awesome, I will not be able to work on it for a while.

On Thu, Apr 24, 2008 at 11:50 AM, Peter Svensson <psvensson at gmail.com>
wrote:

> Craig, you're absolutely right. That's a very good idea. Take the file
> Spring.js, for instance;
>
> /* Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
>  * You may obtain a copy of the License at
>  *
>  *     http://www.apache.org/licenses/LICENSE-2.0
>  *
>  * Unless required by applicable law or agreed to in writing, software
>  * distributed under the License is distributed on an "AS IS" BASIS,
>  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
>  * See the License for the specific language governing permissions and
>  * limitations under the License.
>  *
>  * Author: Kyle Scholz      http://kylescholz.com/
>  * Copyright: 2006-2007
>  */
>
> /**
>  * Spring
>  *
>  * @author Kyle Scholz
>  *
>  * @version 0.3
>  *
>  * A Spring Force between two Particle.
>  *
>  * @param {Particle} a  - A Particle.
>  * @param {Particle} b  - The other Partilce.
>  * @param {Number} springConstant - The Spring constant.
>  * @param {Number} dampingConstant  - The damping constant.
>  * @param {Number} r  - The rest length of the Spring.
>  */
> var Spring = function( a, b, springConstant, dampingConstant, restLength )
> {
>     this.init( a, b, springConstant, dampingConstant, restLength );
> }
> Spring.prototype = {
>
>     /*
>      * Initialize the Spring Force.
>      *
>      * @param {Particle} a  - A Particle.
>      * @param {Particle} b  - The other Partilce.
>      * @param {Number} springConstant - The Spring constant.
>      * @param {Number} dampingConstant  - The damping constant.
>      * @param {Number} restLength  - The length of the Spring at rest.
>      */
>     init: function( a, b, springConstant, dampingConstant, restLength ) {
>         this['springConstant'] = springConstant;
>
>         this['damping'] = dampingConstant;
>
>         this['restLength'] = restLength;
>
>         this['a'] = a;
>
>         this['b'] = b;
>
>         // The force exerted by the Spring on the X axis.
>         this.forceX = 0;
>
>         // The force exerted by the Spring on the Y axis.
>         this.forceY = 0;
>     },
>
>     /*
>      * Apply a spring force based on distance between particles.
>      */
>     apply: function() {
>
>         // Determine the current length of the spring
>         var dx = this.a.positionX - this.b.positionX;
>         var dy = this.a.positionY - this.b.positionY;
>         var springLength = Math.sqrt( dx*dx + dy*dy );
>
>         if ( springLength == 0 ) {
>             dx = 0;
>             dy = 0;
>         } else {
>             dx *= (1/springLength);
>             dy *= (1/springLength);
>         }
>
>         // Determine the spring force
>         var springForce = -(springLength - this.restLength) *
> this.springConstant;
>
>         // Determine the damping force
>         var vx = this.a.velocityX - this.b.velocityX;
>         var vy = this.a.velocityY - this.b.velocityY;
>         var dampingForce = -this.damping * (dx * vx + dy * vy);
>
>         // Determine the sum force
>         var force = springForce + dampingForce;
>
>         // Apply force to vectors
>         dx *= force;
>         dy *= force;
>
>         // Get the difference since last application
>         var dfx = dx - this.forceX;
>         var dfy = dy - this.forceY;
>
>         if (!this.a.fixed && !this.a.selected) {
>             this.a.forceX += dfx;
>             this.a.forceY += dfy;
>         }
>
>         if (!this.b.fixed && !this.b.selected) {
>             this.b.forceX -= dfx;
>             this.b.forceY -= dfy;
>         }
>
>         // Update the spring force
>         this.forceX = dx;
>         this.forceY = dy;
>     }
> }
>
>
> This could probably be integrated with dojox.fx, I think
>
> Cheers,
> PS
>
>
> On Thu, Apr 24, 2008 at 5:57 PM, Craig L. Ching <cching at mqsoftware.com>
> wrote:
>
> > > What I would recommend to do first is to take the base file and create
> > a
> > > dijit out of it. take a small custom dijit example, and convert all
> > > function definitions from foo.prototype.bar = function() .. to   bar:
> > > function(){ .. },  ...
> > >
> >
> > Just a quick comment, I'm assuming that there are some good
> > force-directed graph layout algorithms in the code (I haven't looked at
> > it at all, so pardon me if I'm wrong), wouldn't those go well in a
> > separate dojox project?  I'm asking because I recently wrote a
> > force-directed graph layout implementation for use with dojo, but I'd
> > love to use this instead.
> >
> > A dijit would be wonderful, but I'm guessing there are some other
> > reusable components under the hood.
> >
> > > Cheers,
> > > PS
> >
> > Cheers,
> > Craig
> > _______________________________________________
> > FAQ: http://dojotoolkit.org/support/faq
> > Book: http://dojotoolkit.org/docs/book
> > Forums: http://dojotoolkit.org/forum
> > Dojo-interest at dojotoolkit.org<http://dojotoolkit.org/forumDojo-interest@dojotoolkit.org>
> > http://turtle.dojotoolkit.org/mailman/listinfo/dojo-interest
> >
>
>
> _______________________________________________
> FAQ: http://dojotoolkit.org/support/faq
> Book: http://dojotoolkit.org/docs/book
> Forums: http://dojotoolkit.org/forum
> Dojo-interest at dojotoolkit.org<http://dojotoolkit.org/forumDojo-interest@dojotoolkit.org>
> http://turtle.dojotoolkit.org/mailman/listinfo/dojo-interest
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://turtle.dojotoolkit.org/pipermail/dojo-interest/attachments/20080429/22e4a2f4/attachment.html 


More information about the Dojo-interest mailing list