Geometry path for predefined BpmnTaskUser shape in GOJS

I am trying to figure out the geometry path string for BpmnTaskUser gojs shape, I can only see https://gojs.net/latest/extensions/Figures.js

is there any way to get the geometry path for the predefined one?

Yes, it’s defined in extensionsTS/Figures.ts:

go.Shape.defineFigureGenerator('BpmnTaskUser', (shape, w, h) => {
  const geo = new go.Geometry();
  const fig = new go.PathFigure(0, 0, false);
  geo.add(fig);

  const fig2 = new go.PathFigure(.335 * w, (1 - .555) * h, true);
  geo.add(fig2);
  // Shirt
  fig2.add(new go.PathSegment(go.PathSegment.Line, .335 * w, (1 - .405) * h));
  fig2.add(new go.PathSegment(go.PathSegment.Line, (1 - .335) * w, (1 - .405) * h));
  fig2.add(new go.PathSegment(go.PathSegment.Line, (1 - .335) * w, (1 - .555) * h));
  fig2.add(new go.PathSegment(go.PathSegment.Bezier, w, .68 * h, (1 - .12) * w, .46 * h,
    (1 - .02) * w, .54 * h));
  fig2.add(new go.PathSegment(go.PathSegment.Line, w, h));
  fig2.add(new go.PathSegment(go.PathSegment.Line, 0, h));
  fig2.add(new go.PathSegment(go.PathSegment.Line, 0, .68 * h));
  fig2.add(new go.PathSegment(go.PathSegment.Bezier, .335 * w, (1 - .555) * h, .02 * w, .54 * h,
    .12 * w, .46 * h));
  // Start of neck
  fig2.add(new go.PathSegment(go.PathSegment.Line, .365 * w, (1 - .595) * h));
  const radiushead = .5 - .285;
  const centerx = .5;
  const centery = radiushead;
  const alpha2 = Math.PI / 4;
  const KAPPA2 = ((4 * (1 - Math.cos(alpha2))) / (3 * Math.sin(alpha2)));
  const cpOffset = KAPPA2 * .5;
  const radiusw = radiushead;
  const radiush = radiushead;
  const offsetw = KAPPA2 * radiusw;
  const offseth = KAPPA2 * radiush;
  // Circle (head)
  fig2.add(new go.PathSegment(go.PathSegment.Bezier, (centerx - radiusw) * w, centery * h, (centerx - ((offsetw + radiusw) / 2)) * w, (centery + ((radiush + offseth) / 2)) * h,
    (centerx - radiusw) * w, (centery + offseth) * h));
  fig2.add(new go.PathSegment(go.PathSegment.Bezier, centerx * w, (centery - radiush) * h, (centerx - radiusw) * w, (centery - offseth) * h,
    (centerx - offsetw) * w, (centery - radiush) * h));
  fig2.add(new go.PathSegment(go.PathSegment.Bezier, (centerx + radiusw) * w, centery * h, (centerx + offsetw) * w, (centery - radiush) * h,
    (centerx + radiusw) * w, (centery - offseth) * h));
  fig2.add(new go.PathSegment(go.PathSegment.Bezier, (1 - .365) * w, (1 - .595) * h, (centerx + radiusw) * w, (centery + offseth) * h,
    (centerx + ((offsetw + radiusw) / 2)) * w, (centery + ((radiush + offseth) / 2)) * h));
  fig2.add(new go.PathSegment(go.PathSegment.Line, (1 - .365) * w, (1 - .595) * h));
  // Neckline
  fig2.add(new go.PathSegment(go.PathSegment.Line, (1 - .335) * w, (1 - .555) * h));
  fig2.add(new go.PathSegment(go.PathSegment.Line, (1 - .335) * w, (1 - .405) * h));
  fig2.add(new go.PathSegment(go.PathSegment.Line, .335 * w, (1 - .405) * h));
  const fig3 = new go.PathFigure(.2 * w, h, false);
  geo.add(fig3);
  // Arm lines
  fig3.add(new go.PathSegment(go.PathSegment.Line, .2 * w, .8 * h));
  const fig4 = new go.PathFigure(.8 * w, h, false);
  geo.add(fig4);
  fig4.add(new go.PathSegment(go.PathSegment.Line, .8 * w, .8 * h));
  return geo;
});

If you don’t want to load the Figures.* file, you can copy the needed definitions into your code. Or just replace it with your own Geometry.