@@ -208,6 +208,12 @@ const SELECTED_NODE_OUTLINE_MAX_WIDTH_3D = "7.0";
208208// the min for typical nodes and scales up the ring for larger nodes.
209209const SELECTED_NODE_OUTLINE_DIAMETER_FRACTION = "0.5" ;
210210
211+ const NODE_BORDER_OUTLINE_DIAMETER_FRACTION = "0.15" ;
212+ const NODE_BORDER_OUTLINE_MIN_WIDTH_2D = "1.0" ;
213+ const NODE_BORDER_OUTLINE_MAX_WIDTH_2D = "2.5" ;
214+ const NODE_BORDER_OUTLINE_MIN_WIDTH_3D = "1.0" ;
215+ const NODE_BORDER_OUTLINE_MAX_WIDTH_3D = "2.0" ;
216+
211217interface VertexAttributeRenderInfo extends VertexAttributeInfo {
212218 name : string ;
213219 webglDataType : number ;
@@ -767,6 +773,7 @@ void emitDefault() {
767773 ) ;
768774 builder . addUniform ( "highp float" , "uNodeDiameter" ) ;
769775 let selectedOutlineWidthExpression = "0.0" ;
776+ let borderOutlineWidthExpression = "0.0" ;
770777 if ( this . nodeIdAttributeIndex !== undefined ) {
771778 builder . addUniform ( "highp vec3" , "uSelectedNodeOutlineColor" ) ;
772779 builder . addUniform ( "highp int" , "uSelectedNodeId" ) ;
@@ -781,6 +788,13 @@ void emitDefault() {
781788 ? SELECTED_NODE_OUTLINE_MAX_WIDTH_2D
782789 : SELECTED_NODE_OUTLINE_MAX_WIDTH_3D ;
783790 selectedOutlineWidthExpression = `(max(vSelectedNode, vHighlightedNode) * clamp(${ SELECTED_NODE_OUTLINE_DIAMETER_FRACTION } * uNodeDiameter, ${ selectedOutlineMinWidth } , ${ selectedOutlineMaxWidth } ))` ;
791+ const borderOutlineMinWidth = this . targetIsSliceView
792+ ? NODE_BORDER_OUTLINE_MIN_WIDTH_2D
793+ : NODE_BORDER_OUTLINE_MIN_WIDTH_3D ;
794+ const borderOutlineMaxWidth = this . targetIsSliceView
795+ ? NODE_BORDER_OUTLINE_MAX_WIDTH_2D
796+ : NODE_BORDER_OUTLINE_MAX_WIDTH_3D ;
797+ borderOutlineWidthExpression = `(max(vSelectedNode, vHighlightedNode) * clamp(${ NODE_BORDER_OUTLINE_DIAMETER_FRACTION } * uNodeDiameter, ${ borderOutlineMinWidth } , ${ borderOutlineMaxWidth } ))` ;
784798 }
785799 let vertexMain = `
786800highp uint vertexIndex = uint(gl_InstanceID);
@@ -805,7 +819,8 @@ highp vec3 vertexPosition = readAttribute0(vertexIndex);
805819emitCircle(
806820 uProjection * vec4(vertexPosition, 1.0),
807821 uNodeDiameter,
808- ${ selectedOutlineWidthExpression }
822+ ${ selectedOutlineWidthExpression } ,
823+ ${ borderOutlineWidthExpression }
809824);
810825` ;
811826 const segmentColorExpression = this . getSegmentColorExpression ( ) ;
@@ -823,6 +838,9 @@ emitCircle(
823838 const borderColorExpression = hasNodeIdSelection
824839 ? `mix(mix(renderColor, vec4(uSelectedNodeOutlineColor, renderColor.a), vSelectedNode), vec4(uHighlightedNodeOutlineColor, renderColor.a), vHighlightedNode)`
825840 : "renderColor" ;
841+ const borderOutlineColorExpression = hasNodeIdSelection
842+ ? `mix(mix(renderColor, vec4(1.0, 1.0, 1.0, renderColor.a), vSelectedNode), vec4(0.0, 0.0, 0.0, renderColor.a), vHighlightedNode)`
843+ : "renderColor" ;
826844 builder . addFragmentCode ( `
827845vec4 segmentColor() {
828846 return getSegmentAppearance(${ segmentExpression } );
@@ -833,7 +851,8 @@ void emitRGBA(vec4 color) {
833851 if (alpha <= 0.0) discard;
834852 vec4 renderColor = vec4(color.rgb, alpha);
835853 vec4 borderColor = ${ borderColorExpression } ;
836- vec4 circleColor = getCircleColor(renderColor, borderColor);
854+ vec4 borderOutlineColor = ${ borderOutlineColorExpression } ;
855+ vec4 circleColor = getCircleColor(renderColor, borderColor, borderOutlineColor);
837856 emit(vec4(circleColor.rgb * circleColor.a, circleColor.a), vPickID);
838857}
839858void emitRGB(vec3 color) {
@@ -871,14 +890,18 @@ void emitDefault() {
871890 const borderColorExpression = hasNodeIdSelection
872891 ? `mix(mix(renderColor, vec4(uSelectedNodeOutlineColor, renderColor.a), vSelectedNode), vec4(uHighlightedNodeOutlineColor, renderColor.a), vHighlightedNode)`
873892 : "renderColor" ;
893+ const borderOutlineColorExpression = hasNodeIdSelection
894+ ? `mix(mix(renderColor, vec4(1.0, 1.0, 1.0, renderColor.a), vSelectedNode), vec4(0.0, 0.0, 0.0, renderColor.a), vHighlightedNode)`
895+ : "renderColor" ;
874896 builder . addFragmentCode ( `
875897vec4 segmentColor() {
876898 return ${ segmentColorExpression } ;
877899}
878900void emitRGBA(vec4 color) {
879901 vec4 renderColor = color;
880902 vec4 borderColor = ${ borderColorExpression } ;
881- vec4 circleColor = getCircleColor(renderColor, borderColor);
903+ vec4 borderOutlineColor = ${ borderOutlineColorExpression } ;
904+ vec4 circleColor = getCircleColor(renderColor, borderColor, borderOutlineColor);
882905 emit(vec4(circleColor.rgb * circleColor.a, circleColor.a), vPickID);
883906}
884907void emitRGB(vec3 color) {
0 commit comments