Skip to content

Instantly share code, notes, and snippets.

@roundrobin
Created July 8, 2012 04:57
Show Gist options
  • Save roundrobin/3069469 to your computer and use it in GitHub Desktop.
Save roundrobin/3069469 to your computer and use it in GitHub Desktop.
just another inlet to tributary
var pathWay = [[154,390],[153,118],[321,137],[333,185],[311,248],[360,319],[282,400]];
var currentPreviewChar = 'B';
//DONT REMOVE LINE BELOW
var lineWidth = 1414;
var lineStart = 80;
var lineDistance = 160;
var defs = d3.select('svg').append('defs');
var curves_array = [];
var curve = '';
var d = [];
var drawing = false;
//Creating Background Pattern
var pattern = defs.append('pattern').attr('id','pattern1').attr('pattermTransform','').attr('height',40).attr('width',40).attr('patternUnits','userSpaceOnUse')
var lineVertical = pattern.append('line').attr('class','drawit').attr('x1',0).attr('x2',40).attr('y1',0).attr('y2',0).attr('fill',"#4D8891").style("stroke-width", 2).style("stroke", "steelblue")
var line = pattern.append('line').attr('class','drawit').attr('x1',0).attr('x2',0).attr('y1',0).attr('y2',40).attr('fill',"#4D8891").style("stroke-width", 2).style("stroke", "steelblue")
var drawCanvas = d3.select('svg').append('g').attr('id','drawCanvas')
var mainCharacter = drawCanvas.append('text').attr('font-size',413).attr('fill',"#5E5E5E").attr('x',117).attr('y',91).attr('dominant-baseline',"hanging") .attr('id',"mainCharacter").attr('fill-opacity','0.4').text(currentPreviewChar);
var handlers = d3.select('svg').append('g').attr('id','handlers')
//TODOS:
// Hide Preview Character
// Show numbers of nodes
// Show beziers curves
// Hide Lines
// Hide Outline
// Change Point: move, snap to grid, angle two points
// Ligaturen
// Download Typeface
//
drawCanvas.append('rect')
.attr('height',779).attr('width',1442)
.attr('x',3).attr('y',81)
.attr('fill','url(#pattern1)')
.attr('id','drawArea')
.attr('class','drawit');
var alphabet = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
var characterToolbar = d3.select('svg').append('g').attr('id','characterToolbar');
var characters = characterToolbar.selectAll('.character text')
.data(alphabet)
.enter();
var group = characters.append('g').on('click',function(d,i){
d3.select('#mainCharacter').text(d)
currentPreviewChar = changePreviewChar(d);
});
group.append('rect')
.attr('height',80).attr('width',100)
.attr('x',function(d,i){ return (i*100)-10;})
.attr('fill',"#C7C79E")
.attr('stroke','black')
.attr('stroke-width','1')
group.append('text')
.attr('font-size',100)
.attr('fill',"#2F9675")
.attr('text-anchor',"start")
.attr('x',function(d,i){ return i*100;})
.attr('dominant-baseline',"hanging")
.text(function(d,i){ return d;})
characterToolbar.attr('transform','translate(300)');
// ---------------------------------------------------
var y1 = lineStart
var xheight = createLine(1,lineWidth,y1,y1)
var y2 = y1+ lineDistance
var baseline = createLine(1,lineWidth,y2,y2)
var y3 = y2 + lineDistance
var descentline = createLine(1,lineWidth,y3,y3)
var x4 = 121
var startCharacter = createLine(x4,x4,481,80)
var x5 = 390
var startCharacter = createLine(x5,x5,481,80)
var path = drawCanvas.append('path')
.attr('stroke','blue')
.attr('stroke-width',1)
.attr('fill',"#000000")
.attr('id','path')
.attr('fill-opacity','0.5')
.attr('class','drawit')
if(pathWay.length >= 1){
var prePath = '';
for(i in pathWay){
createCircle({x:pathWay[i][0],y:pathWay[i][1]})
if(pathWay[i] != undefined){
if(prePath == '')
prePath = 'M'+pathWay[i][0]+','+pathWay[i][1]+' '
else
prePath += 'L'+pathWay[i][0]+','+pathWay[i][1]+' '
}
createCircle({x:pathWay[i][0],y:pathWay[i][1]})
path.attr('d',prePath)
}
}
d3.selectAll('.drawit').on('click',function(){
var point = {x:d3.event.pageX ,y:d3.event.pageY-75}
d.push(point);
if((!drawing && curve == '') || drawing == true){
drawing = true;
createCircle(point,'red');
draw2(point)
}
});
// ---------------------------------------------------
addGradient("#363636", "#5B6B65", 46, 'g3201')
addGradient("#5B6B65", "#363636", 46, 'g3202')
addGradient("#FFF368", "#418041", 46, 'g3203')
addGradient("#0085FF", "#1073A2", 46, 'g3204')
var toogle = 1
var hideHandlers = function(){
if(toogle == 1)
d3.selectAll('.circleHandle').style('opacity','0.000000001');
else
d3.selectAll('.circleHandle').style('opacity','1');
toogle *= -1;
}
var button1 = createButton('Hide Handlers', hideHandlers )
.attr('transform','translate('+[32,9]+')')
.attr('id','toogleHandlers')
var removeText = function(elem){
curve = '';
var textValue = tribView.code_editor.getLine(0);
textValue = 'var pathWay = [];'
tribView.code_editor.setLine(0,textValue);
path.attr('d',curve)
d = [];
d3.selectAll('.circleHandle').remove();
//var text = tribView.code_editor.setLine(0,'var pathWay = []; ')
}
var button2 = createButton('Remove path', removeText)
.attr('transform','translate('+[126,9]+')')
// Create Circle Handler
function createCircle(pointD,color){
console.log('Hellloo',pointD,color,handlers)
if(!color){
color = "#000000";
}
var circleHandler = handlers
.append('circle')
.attr('r',5)
.attr('stroke',color)
.attr('stroke-width',2)
.attr('fill','red')
.attr('cx',pointD.x)
.attr('cy',pointD.y)
.attr('class','circleHandle')
console.log(circleHandler)
}
var draw2 = function(point){
if(point != undefined){
var n_point1 = {x:point.x-50 ,y:point.y}
var n_point2 = {x:point.x+50 ,y:point.y}
if(curve == '')
curve += 'M '+point.x+','+point.y;
else{
var q_move = 0
var q_point1 = {x:point.x-q_move ,y:point.y-q_move}
curve += ' Q '+(q_point1.x)+','+(q_point1.y)+', '+point.x+','+point.y;
//createLine(point.x,q_point1.x,point.y,q_point1.y)
var previous_element = d[d.length-2]
//createLine(previous_element.x,q_point1.x,previous_element.y,q_point1.y)
createCircle(q_point1,'green',2)
}
createCircle(point)
}
var text = d3.select('#pathWay')
var textValue = tribView.code_editor.getLine(0);
var search = /var pathWay = \[(.*)\]/;
var result = search.exec(textValue);
if(textValue == 'var pathWay = [];'){
add = '['+point.x+','+point.y+']';
}else{
add = ',['+point.x+','+point.y+']';
}
var modify = result[1]+add;
var finalString = 'var pathWay = ['+(modify)+'];';
//console.log('String',finalString);
var test = text.text(finalString);
test = test.text();
tribView.code_editor.setLine(0,test);
path.attr('d',curve)
}
//---------------------------------
function changePreviewChar(d){
var textValue = tribView.code_editor.getLine(1);
tribView.code_editor.setLine(1,"var currentPreviewChar = '"+d+"';");
return d;
}
// -------- Adding Helper Lines -----------------------
function createLine(x,x1,y,y1){
drawCanvas.append('line')
.attr("x1",x)
.attr("y1",y)
.attr("x2",x1)
.attr("y2",y1)
.style("stroke-width", 3)
.style("stroke", "black")
.attr('class','drawit')
}
//---------------------- Button- and Add-to-editor-logic ----------------
var addText = function(point){
var text = d3.select('#pathWay')
var textValue = tribView.code_editor.getLine(0);
var search = /var pathWay = \[(.*)\]/;
var result = search.exec(textValue);
if(textValue == 'var pathWay = [];'){
add = '[1,2]';
}else{
add = ',[1,2]';
}
var modify = result[1]+add;
var finalString = 'var pathWay = ['+(modify)+'];';
//console.log('String',finalString);
var test = text.text(finalString);
test = test.text();
tribView.code_editor.setLine(0,test);
}
function createButton(name,callback){
var buttonGroup = g.append('g')
.on('click', function(d,i){
callback(this)
})
.on('mousedown',function(){
d3.select(this).select('#buttonBG')
.attr('fill','url(#g3201)')
.attr('stroke-width',3)
.attr('stroke','url(#g3202)')
})
.on('mouseover',function(){
d3.select(this).select('#buttonBG')
.attr('fill','url(#g3203)')
.attr('stroke-width',3)
.attr('stroke','url(#g3204)')
})
.on('mouseout',function(){
d3.select(this).select('#buttonBG')
.attr('fill','url(#g3203)')
.attr('stroke','url(#g3202)')
.attr('stroke-width',3)
})
.on('mouseup',function(){
d3.select(this).select('#buttonBG')
.attr('fill','url(#g3203)')
.attr('stroke','url(#g3202)')
.attr('stroke-width',3)
})
var rect = buttonGroup.append('rect')
.attr('width',122)
.attr('height',45)
.attr('fill',"#922F2F")
.attr('rx',10)
.attr('ry',10)
.attr('id','buttonBG')
.attr('height',45)
.attr('fill','url(#g3203)')
.attr('stroke','url(#g3202)')
.attr('stroke-width',3)
var text = buttonGroup.append('text')
.attr('id','pathWay')
.attr('font-size',10)
.attr('fill',"#FFFFFF")
.style('text-shadow','1px 1px 2px'+"#000000")
.text(name)
.attr('transform','translate('+[10,rect.attr('width')/4.5]+')')
var textLength = text.node().getBBox().width;
rect.attr('width',textLength+20)
return buttonGroup;
}
function addGradient(color1,color2,stopPX,id){
var gradient = defs.append('linearGradient')
.attr('id',id)
.attr('gradientUnits','userSpaceOnUse')
.attr('x1','0%')
.attr('x2','0%')
.attr('y1','0%')
.attr('y2',stopPX)
gradient.append('stop')
.attr('stop-color',color1)
.attr('offset','0')
gradient.append('stop')
.attr('stop-color',color2)
.attr('offset','1')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment