diff options
-rw-r--r-- | images/cursors/penAdd.png | bin | 0 -> 3043 bytes | |||
-rwxr-xr-x | js/components/tools-properties/brush-properties.reel/brush-properties.html | 56 | ||||
-rwxr-xr-x | js/components/tools-properties/brush-properties.reel/brush-properties.js | 26 | ||||
-rwxr-xr-x | js/helper-classes/backup-delete/GLBrushStroke.js | 174 | ||||
-rwxr-xr-x | js/helper-classes/backup-delete/GLSubpath.js | 147 | ||||
-rwxr-xr-x | js/lib/geom/brush-stroke.js | 329 | ||||
-rwxr-xr-x | js/lib/geom/sub-path.js | 84 | ||||
-rw-r--r-- | js/tools/BrushTool.js | 41 | ||||
-rwxr-xr-x | js/tools/PenTool.js | 12 |
9 files changed, 691 insertions, 178 deletions
diff --git a/images/cursors/penAdd.png b/images/cursors/penAdd.png new file mode 100644 index 00000000..c306cc85 --- /dev/null +++ b/images/cursors/penAdd.png | |||
Binary files differ | |||
diff --git a/js/components/tools-properties/brush-properties.reel/brush-properties.html b/js/components/tools-properties/brush-properties.reel/brush-properties.html index 38f7f856..608111bd 100755 --- a/js/components/tools-properties/brush-properties.reel/brush-properties.html +++ b/js/components/tools-properties/brush-properties.reel/brush-properties.html | |||
@@ -11,12 +11,55 @@ | |||
11 | 11 | ||
12 | <script type="text/montage-serialization"> | 12 | <script type="text/montage-serialization"> |
13 | { | 13 | { |
14 | "strokeSizeHT": { | ||
15 | "module": "js/components/hottextunit.reel", | ||
16 | "name": "HotTextUnit", | ||
17 | "properties": { | ||
18 | "element": {"#": "strokeSize"}, | ||
19 | "minValue": 1, | ||
20 | "maxValue": 100, | ||
21 | "value": 1, | ||
22 | "decimalPlace": 10, | ||
23 | "acceptableUnits" : ["px", "pt"] | ||
24 | } | ||
25 | }, | ||
26 | |||
27 | "strokeHardnessHT": { | ||
28 | "module": "js/components/hottextunit.reel", | ||
29 | "name": "HotTextUnit", | ||
30 | "properties": { | ||
31 | "element": {"#": "strokeHardness"}, | ||
32 | "minValue": 0, | ||
33 | "maxValue": 100, | ||
34 | "value": 100, | ||
35 | "decimalPlace": 10, | ||
36 | "acceptableUnits" : ["px", "pt"] | ||
37 | } | ||
38 | }, | ||
39 | |||
40 | "strokeAngleHT": { | ||
41 | "module": "js/components/hottextunit.reel", | ||
42 | "name": "HotTextUnit", | ||
43 | "properties": { | ||
44 | "element": {"#": "strokeAngle"}, | ||
45 | "minValue": -90, | ||
46 | "maxValue": 90, | ||
47 | "value": 0, | ||
48 | "decimalPlace": 10, | ||
49 | "acceptableUnits" : ["px", "pt"] | ||
50 | } | ||
51 | }, | ||
14 | 52 | ||
15 | "owner": { | 53 | "owner": { |
16 | "module": "js/components/tools-properties/brush-properties.reel", | 54 | "module": "js/components/tools-properties/brush-properties.reel", |
17 | "name": "BrushProperties", | 55 | "name": "BrushProperties", |
18 | "properties": { | 56 | "properties": { |
19 | "element": {"#": "brushProperties"} | 57 | "element": {"#": "brushProperties"}, |
58 | "_strokeSize": {"@": "strokeSizeHT"}, | ||
59 | "_strokeHardness": {"@": "strokeHardnessHT"}, | ||
60 | "_doSmoothing": {"#": "doSmoothing"}, | ||
61 | "_useCalligraphic":{"#": "useCalligraphic"}, | ||
62 | "_strokeAngle": {"@": "strokeAngleHT"} | ||
20 | } | 63 | } |
21 | } | 64 | } |
22 | } | 65 | } |
@@ -26,6 +69,17 @@ | |||
26 | 69 | ||
27 | <body> | 70 | <body> |
28 | <div id="brushProperties" class="subToolHolderPanel"> | 71 | <div id="brushProperties" class="subToolHolderPanel"> |
72 | <div id="strokesContainer" class="leftLabel" style="margin-left:25px; padding-top: 3px;"> | ||
73 | <label class="label"> Width:</label> | ||
74 | <div id="strokeSize" class="label"></div> | ||
75 | <label class="label"> Hardness:</label> | ||
76 | <div id="strokeHardness" class="label"></div> | ||
77 | <label class="label"><input id="doSmoothing" type="checkbox" name="doSmoothingControl" class="checkBoxAlign"/>Smoothing</label> | ||
78 | <label class="label"><input id="useCalligraphic" type="checkbox" name="useCalligraphicControl" class="checkBoxAlign"/>Calligraphic</label> | ||
79 | <label class="label"> Angle:</label> | ||
80 | <div id="strokeAngle" class="label"></div> | ||
81 | |||
82 | </div> | ||
29 | </div> | 83 | </div> |
30 | </body> | 84 | </body> |
31 | 85 | ||
diff --git a/js/components/tools-properties/brush-properties.reel/brush-properties.js b/js/components/tools-properties/brush-properties.reel/brush-properties.js index 92da98cc..e6faa0f0 100755 --- a/js/components/tools-properties/brush-properties.reel/brush-properties.js +++ b/js/components/tools-properties/brush-properties.reel/brush-properties.js | |||
@@ -9,17 +9,19 @@ var Component = require("montage/ui/component").Component; | |||
9 | var ToolProperties = require("js/components/tools-properties/tool-properties").ToolProperties; | 9 | var ToolProperties = require("js/components/tools-properties/tool-properties").ToolProperties; |
10 | 10 | ||
11 | exports.BrushProperties = Montage.create(ToolProperties, { | 11 | exports.BrushProperties = Montage.create(ToolProperties, { |
12 | 12 | strokeSize: { | |
13 | 13 | get: function() { return this._strokeSize; } | |
14 | _subPrepare: { | ||
15 | value: function() { | ||
16 | //this.divElement.addEventListener("click", this, false); | ||
17 | } | ||
18 | }, | 14 | }, |
19 | 15 | strokeHardness: { | |
20 | handleClick: { | 16 | get: function() { return this._strokeHardness; } |
21 | value: function(event) { | 17 | }, |
22 | // this.selectedElement = event._event.target.id; | 18 | doSmoothing:{ |
23 | } | 19 | get: function() {return this._doSmoothing.checked; } |
20 | }, | ||
21 | useCalligraphic: { | ||
22 | get: function() {return this._useCalligraphic.checked;} | ||
23 | }, | ||
24 | strokeAngle: { | ||
25 | get: function() {return this._strokeAngle;} | ||
24 | } | 26 | } |
25 | }); \ No newline at end of file | 27 | }); |
diff --git a/js/helper-classes/backup-delete/GLBrushStroke.js b/js/helper-classes/backup-delete/GLBrushStroke.js index 5d773c2d..26c922a3 100755 --- a/js/helper-classes/backup-delete/GLBrushStroke.js +++ b/js/helper-classes/backup-delete/GLBrushStroke.js | |||
@@ -31,6 +31,8 @@ function GLBrushStroke() { | |||
31 | //stroke information | 31 | //stroke information |
32 | this._strokeWidth = 0.0; | 32 | this._strokeWidth = 0.0; |
33 | this._strokeColor = [0.4, 0.4, 0.4, 1.0]; | 33 | this._strokeColor = [0.4, 0.4, 0.4, 1.0]; |
34 | this._secondStrokeColor = this._strokeColor; | ||
35 | this._strokeHardness = 100; | ||
34 | this._strokeMaterial; | 36 | this._strokeMaterial; |
35 | this._strokeStyle = "Solid"; | 37 | this._strokeStyle = "Solid"; |
36 | 38 | ||
@@ -39,7 +41,7 @@ function GLBrushStroke() { | |||
39 | this._WETNESS_FACTOR = 0.25; | 41 | this._WETNESS_FACTOR = 0.25; |
40 | 42 | ||
41 | //prevent extremely long paths that can take a long time to render | 43 | //prevent extremely long paths that can take a long time to render |
42 | this._MAX_ALLOWED_SAMPLES = 500; | 44 | this._MAX_ALLOWED_SAMPLES = 5000; |
43 | 45 | ||
44 | //drawing context | 46 | //drawing context |
45 | this._world = null; | 47 | this._world = null; |
@@ -79,7 +81,7 @@ function GLBrushStroke() { | |||
79 | //add the point only if it is some epsilon away from the previous point | 81 | //add the point only if it is some epsilon away from the previous point |
80 | var numPoints = this._Points.length; | 82 | var numPoints = this._Points.length; |
81 | if (numPoints>0) { | 83 | if (numPoints>0) { |
82 | var threshold = this._WETNESS_FACTOR*this._strokeWidth; | 84 | var threshold = 1;//this._WETNESS_FACTOR*this._strokeWidth; |
83 | var prevPt = this._Points[numPoints-1]; | 85 | var prevPt = this._Points[numPoints-1]; |
84 | var diffPt = [prevPt[0]-pt[0], prevPt[1]-pt[1]]; | 86 | var diffPt = [prevPt[0]-pt[0], prevPt[1]-pt[1]]; |
85 | var diffPtMag = Math.sqrt(diffPt[0]*diffPt[0] + diffPt[1]*diffPt[1]); | 87 | var diffPtMag = Math.sqrt(diffPt[0]*diffPt[0] + diffPt[1]*diffPt[1]); |
@@ -106,6 +108,8 @@ function GLBrushStroke() { | |||
106 | this.setStrokeMaterial = function (m) { this._strokeMaterial = m; } | 108 | this.setStrokeMaterial = function (m) { this._strokeMaterial = m; } |
107 | this.getStrokeColor = function () { return this._strokeColor; } | 109 | this.getStrokeColor = function () { return this._strokeColor; } |
108 | this.setStrokeColor = function (c) { this._strokeColor = c; } | 110 | this.setStrokeColor = function (c) { this._strokeColor = c; } |
111 | this.setSecondStrokeColor = function(c){this._secondStrokeColor=c;} | ||
112 | this.setStrokeHardness = function(h){this._strokeHardness=h;} | ||
109 | this.getStrokeStyle = function () { return this._strokeStyle; } | 113 | this.getStrokeStyle = function () { return this._strokeStyle; } |
110 | this.setStrokeStyle = function (s) { this._strokeStyle = s; } | 114 | this.setStrokeStyle = function (s) { this._strokeStyle = s; } |
111 | 115 | ||
@@ -133,13 +137,14 @@ function GLBrushStroke() { | |||
133 | this._Points[i][2]+=tz; | 137 | this._Points[i][2]+=tz; |
134 | } | 138 | } |
135 | } | 139 | } |
136 | 140 | ||
137 | this.computeMetaGeometry = function(){ | 141 | this.computeMetaGeometry = function(){ |
138 | if (this._dirty){ | 142 | if (this._dirty){ |
139 | var numPoints = this._Points.length; | 143 | var numPoints = this._Points.length; |
140 | 144 | ||
141 | //**** add samples to the path if needed...linear interpolation for now | 145 | //**** add samples to the path if needed...linear interpolation for now |
142 | if (numPoints>1) { | 146 | //if (numPoints>1) { |
147 | if (0){ | ||
143 | var threshold = this._WETNESS_FACTOR*this._strokeWidth; | 148 | var threshold = this._WETNESS_FACTOR*this._strokeWidth; |
144 | var prevPt = this._Points[0]; | 149 | var prevPt = this._Points[0]; |
145 | var prevIndex = 0; | 150 | var prevIndex = 0; |
@@ -171,6 +176,44 @@ function GLBrushStroke() { | |||
171 | } | 176 | } |
172 | } | 177 | } |
173 | 178 | ||
179 | //**** add samples to the long sections of the path --- Catmull-Rom spline interpolation | ||
180 | if (numPoints>1) { | ||
181 | var numInsertedPoints = 0; | ||
182 | var threshold = 5;//0.25*this._strokeWidth; //this determines whether a segment between two sample is too long | ||