in src/app/views/canvas/handles/gap_ratio.tsx [179:400]
public renderPolar() {
const { handle } = this.props;
const polar = handle.coordinateSystem as Graphics.PolarCoordinates;
const center = Geometry.applyZoom(this.props.zoom, {
x: polar.origin.x,
y: -polar.origin.y,
});
switch (handle.axis) {
case "x": {
// angular axis
const pathValue = Graphics.makePath();
const pathRegion = Graphics.makePath();
const angle = handle.reference + handle.scale * handle.value;
const angleRef = handle.reference;
const r1 = handle.span[0] * this.props.zoom.scale,
r2 = handle.span[1] * this.props.zoom.scale;
pathValue.polarLineTo(
center.x,
-center.y,
-angle + 90,
r1,
-angle + 90,
r2,
true
);
pathRegion.polarLineTo(
center.x,
-center.y,
-angle + 90,
r1,
-angle + 90,
r2,
true
);
pathRegion.polarLineTo(
center.x,
-center.y,
-angle + 90,
r2,
-angleRef + 90,
r2,
false
);
pathRegion.polarLineTo(
center.x,
-center.y,
-angleRef + 90,
r2,
-angleRef + 90,
r1,
false
);
pathRegion.polarLineTo(
center.x,
-center.y,
-angleRef + 90,
r1,
-angle + 90,
r1,
false
);
pathRegion.closePath();
const pathNew = Graphics.makePath();
if (this.state.dragging) {
const angleNew =
handle.reference + handle.scale * this.state.newValue;
pathNew.polarLineTo(
center.x,
-center.y,
-angleNew + 90,
r1,
-angleNew + 90,
r2,
true
);
}
return (
<g
className={classNames(
"handle",
"handle-line-angular",
["active", this.state.dragging],
["visible", handle.visible || this.props.visible]
)}
>
<circle ref="cOrigin" cx={center.x} cy={center.y} r={0} />
<g ref="line">
<path
d={renderSVGPath(pathRegion.path.cmds)}
className="element-region handle-ghost"
/>
<path
d={renderSVGPath(pathValue.path.cmds)}
className="element-line handle-ghost"
/>
<path
d={renderSVGPath(pathRegion.path.cmds)}
className="element-region handle-highlight"
/>
<path
d={renderSVGPath(pathValue.path.cmds)}
className="element-line handle-highlight"
/>
</g>
{this.state.dragging ? (
<path
d={renderSVGPath(pathNew.path.cmds)}
className="element-line handle-hint"
/>
) : null}
</g>
);
}
case "y": {
const pathValue = Graphics.makePath();
const pathRegion = Graphics.makePath();
const radius =
(handle.reference + handle.scale * handle.value) *
this.props.zoom.scale;
const radiusRef = handle.reference * this.props.zoom.scale;
const angle1 = handle.span[0],
angle2 = handle.span[1];
pathValue.polarLineTo(
center.x,
-center.y,
-angle1 + 90,
radius,
-angle2 + 90,
radius,
true
);
pathRegion.polarLineTo(
center.x,
-center.y,
-angle1 + 90,
radius,
-angle2 + 90,
radius,
true
);
pathRegion.polarLineTo(
center.x,
-center.y,
-angle2 + 90,
radius,
-angle2 + 90,
radiusRef,
false
);
pathRegion.polarLineTo(
center.x,
-center.y,
-angle2 + 90,
radiusRef,
-angle1 + 90,
radiusRef,
false
);
pathRegion.polarLineTo(
center.x,
-center.y,
-angle1 + 90,
radiusRef,
-angle1 + 90,
radius,
false
);
pathRegion.closePath();
const pathNew = Graphics.makePath();
if (this.state.dragging) {
const radiusNew =
(handle.reference + handle.scale * this.state.newValue) *
this.props.zoom.scale;
pathNew.polarLineTo(
center.x,
-center.y,
-angle1 + 90,
radiusNew,
-angle2 + 90,
radiusNew,
true
);
}
return (
<g
className={classNames(
"handle",
"handle-line-radial",
["active", this.state.dragging],
["visible", handle.visible || this.props.visible]
)}
>
<circle ref="cOrigin" cx={center.x} cy={center.y} r={0} />
<g ref="line">
<path
d={renderSVGPath(pathRegion.path.cmds)}
className="element-region handle-ghost"
/>
<path
d={renderSVGPath(pathValue.path.cmds)}
className="element-line handle-ghost"
/>
<path
d={renderSVGPath(pathRegion.path.cmds)}
className="element-region handle-highlight"
/>
<path
d={renderSVGPath(pathValue.path.cmds)}
className="element-line handle-highlight"
/>
</g>
{this.state.dragging ? (
<path
d={renderSVGPath(pathNew.path.cmds)}
className="element-line handle-hint"
/>
) : null}
</g>
);
}
}
}