-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCirculation.js
More file actions
148 lines (136 loc) · 3.29 KB
/
Circulation.js
File metadata and controls
148 lines (136 loc) · 3.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
var figures=(function(){
function createSquare(point,r) {
var path=new Path();
path.add(new Point(point.x-r/2,point.y-r/2));
path.add(new Point(point.x+r/2,point.y-r/2));
path.add(new Point(point.x+r/2,point.y+r/2));
path.add(new Point(point.x-r/2,point.y+r/2));
path.closed=true;
path.fillColor=raster.getAverageColor(path);
return path;
}
function createCircle(point,r) {
var circle=new Path.Circle(point, r);
circle.fillColor=raster.getAverageColor(circle);
return circle;
}
function createRhomb(point,r) {
var path=new Path();
path.add(new Point(point.x,point.y-r)); //Top
path.add(new Point(point.x+r,point.y)); //Right
path.add(new Point(point.x,point.y+r)); //Bottom
path.add(new Point(point.x-r,point.y)); //Left
path.closed=true;
path.fillColor=raster.getAverageColor(path);
return path;
}
var types={
'Circle': 'createCircle'
,'Rhomb': 'createRhomb'
//,'Square': 'createSquare'
};
return {
'types':types,
'createCircle': createCircle
,'createRhomb': createRhomb
//',createSquare': createSquare
};
})();
var figureTypesList=[];
for(var i in figures.types) {
figureTypesList.push(i);
}
var figureType=figureTypesList[0];
var raster;
var groups=[];
var layers=[];
var maxRadius;
var finalizeFlag=false;
function initRaster() {
if(raster==null) {
var rasters=document.getItems({
type:Raster,
selected:true
});
if(rasters.length>0) {
raster=rasters[0];
}
else {
Dialog.alert('Please select raster image!');
return;
}
}
}
function onMouseDown(event) {
var itemBounds;
var itemRadius;
var figureCenter;
var figureRadius;
var figure;
var groupIndex
if(!event.item||!event.item.bounds||!event.item.bounds) return;
if(!raster) {
initRaster();
}
if(!finalizeFlag) {
itemBounds=event.item.bounds;
if(event.item instanceof Raster) {
itemRadius=itemBounds.center.getDistance(itemBounds.bottomRight);
figureRadius=itemRadius;
figureCenter=itemBounds.center;
groupIndex=0;
if(!maxRadius) maxRadius=itemRadius;
}
else if(event.item instanceof Path) {
itemRadius=itemBounds.width/2;
var pointVector=(event.point-itemBounds.center).normalize();
figureRadius=itemRadius/2;
figureCenter=itemBounds.center+pointVector*itemRadius/2;
groupIndex=Math.round(maxRadius/itemRadius);
}
else {return;}
figure=figures[figures.types[figureType]](figureCenter,figureRadius);
if(!layers[groupIndex]) {
layers[groupIndex]=new Layer();
layers[groupIndex].moveAbove(document.layers[0]);
}
layers[groupIndex].appendTop(figure);
}
else {
figure=figures[figures.types[figureType]](event.point,2);
layers[layers.length-1].appendTop(figure);
}
}
function onMouseMove(event) {
onMouseDown(event);
}
//Create UI
function onFigureTypeChange(value) {
figureType=value;
}
function onClearClick() {
for(var i=0;i<layers.length;i++) {
if(layers[i]) layers[i].remove();
}
layers=[];
}
var components={
figureType: {
type: 'list', label: 'Choose figure',
value: figureType,
options: figureTypesList,
onChange: onFigureTypeChange
},
finalizeButton: {
type: 'boolean', label: 'Finalize',
value: false,
onChange: function(value) {
finalizeFlag=value;
}
},
clearButton: {
type: 'button', value: 'Clear',
onClick: onClearClick
}
}
var palette=new Palette('Circulation Settings',components);