Skip to content

Commit bd38e50

Browse files
committed
Fix ArrowHelper
1 parent 1931ca4 commit bd38e50

File tree

2 files changed

+92
-5
lines changed

2 files changed

+92
-5
lines changed

js/scripts/three-class-config.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -1814,15 +1814,16 @@ module.exports = {
18141814
},
18151815
ArrowHelper: {
18161816
relativePath: './helpers/ArrowHelper',
1817-
superClass: 'Object3D',
1817+
superClass: 'Blackbox',
18181818
properties: {
1819-
dir: new Types.Vector3(1, 0, 0),
1819+
dir: new Types.Vector3(0, 0, 1),
18201820
origin: new Types.Vector3(0, 0, 0),
18211821
length: new Types.Float(1.0),
1822-
hex: new Types.Int(0),
1823-
headLength: new Types.Float(null, {nullable: true}),
1824-
headWidth: new Types.Float(null, {nullable: true}),
1822+
color: new Types.Color('#ffff00'),
1823+
headLength: new Types.Float(undefined, {nullable: true}),
1824+
headWidth: new Types.Float(undefined, {nullable: true}),
18251825
},
1826+
constructorArgs: ['dir', 'origin', 'length', 'color', 'headLength', 'headWidth'],
18261827
},
18271828
AxesHelper: {
18281829
relativePath: './helpers/AxesHelper',

js/src/helpers/ArrowHelper.js

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
var ArrowHelperAutogen = require('./ArrowHelper.autogen').ArrowHelperModel;
2+
3+
var THREE = require('three');
4+
5+
var ArrowHelperModel = ArrowHelperAutogen.extend({
6+
7+
constructThreeObject: function() {
8+
9+
var headLength = this.get('headLength');
10+
var headWidth = this.get('headWidth');
11+
12+
if (headLength === null) {
13+
headLength = undefined;
14+
}
15+
if (headWidth === null) {
16+
headWidth = undefined;
17+
}
18+
19+
var result = new THREE.ArrowHelper(
20+
this.convertVectorModelToThree(this.get('dir'), 'dir'),
21+
this.convertVectorModelToThree(this.get('origin'), 'origin'),
22+
this.convertFloatModelToThree(this.get('length'), 'length'),
23+
this.convertColorModelToThree(this.get('color'), 'color'),
24+
this.convertFloatModelToThree(headLength, 'headLength'),
25+
this.convertFloatModelToThree(headWidth, 'headWidth')
26+
);
27+
return Promise.resolve(result);
28+
29+
},
30+
31+
32+
createPropertiesArrays: function() {
33+
ArrowHelperAutogen.prototype.createPropertiesArrays.call(this);
34+
35+
// Prevent from syncing these to object
36+
delete this.property_converters['origin'];
37+
38+
// Map with setDirection
39+
delete this.property_converters['dir'];
40+
41+
// Map with setColor
42+
delete this.property_converters['color'];
43+
44+
// Map these to setLength instead
45+
delete this.property_converters['length'];
46+
delete this.property_converters['headLength'];
47+
delete this.property_converters['headWidth'];
48+
49+
this.property_mappers['mapArrowHelper'] = 'mapArrowHelper';
50+
},
51+
52+
mapArrowHelperModelToThree: function() {
53+
var headLength = this.get('headLength');
54+
var headWidth = this.get('headWidth');
55+
56+
if (headLength === null) {
57+
headLength = undefined;
58+
}
59+
if (headWidth === null) {
60+
headWidth = undefined;
61+
}
62+
63+
this.obj.setDirection(this.convertVectorModelToThree(this.get('dir'), 'dir'));
64+
this.obj.setColor(this.convertColorModelToThree(this.get('color'), 'color'));
65+
this.obj.position.copy(this.convertVectorModelToThree(this.get('origin'), 'origin'));
66+
67+
this.obj.setLength(
68+
this.convertFloatModelToThree(this.get('length'), 'length'),
69+
this.convertFloatModelToThree(headLength, 'headLength'),
70+
this.convertFloatModelToThree(headWidth, 'headWidth')
71+
);
72+
},
73+
74+
mapArrowHelperThreeToModel: function() {
75+
this.set({
76+
headLength: this.convertFloatThreeToModel(this.obj.cone.scale.y, 'headLength'),
77+
headWidth: this.convertFloatThreeToModel(this.obj.cone.scale.x, 'headWidth'),
78+
origin: this.convertVectorThreeToModel(this.obj.position, 'origin'),
79+
});
80+
}
81+
82+
});
83+
84+
module.exports = {
85+
ArrowHelperModel: ArrowHelperModel,
86+
};

0 commit comments

Comments
 (0)