diff --git a/designs/lumina/src/leg.mjs b/designs/lumina/src/leg.mjs index 69d98f20852..63e46df9bd0 100644 --- a/designs/lumina/src/leg.mjs +++ b/designs/lumina/src/leg.mjs @@ -22,6 +22,7 @@ export const leg = { .join(paths.frontWaistband) .join(paths.frontSplit) .close() + .addClass('fabric') if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa') diff --git a/designs/lumina/src/panel.mjs b/designs/lumina/src/panel.mjs index 684322006e0..f6436c79ab2 100644 --- a/designs/lumina/src/panel.mjs +++ b/designs/lumina/src/panel.mjs @@ -25,6 +25,7 @@ export const panel = { .join(paths.panelHem.reverse()) .reverse() .close() + .addClass('fabric') if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa') diff --git a/designs/lumina/src/pocket.mjs b/designs/lumina/src/pocket.mjs index a8a4ebf44f8..1bcba40cea1 100644 --- a/designs/lumina/src/pocket.mjs +++ b/designs/lumina/src/pocket.mjs @@ -80,6 +80,7 @@ export const pocket = { .join(paths.frontPocket.reverse()) .close() .reverse() + .addClass('fabric') if (sa) paths.sa = paths.seam.offset(sa).attr('class', 'fabric sa') diff --git a/designs/lumina/src/waistband.mjs b/designs/lumina/src/waistband.mjs index 319d9cf2e24..551f0aedf09 100644 --- a/designs/lumina/src/waistband.mjs +++ b/designs/lumina/src/waistband.mjs @@ -109,6 +109,8 @@ export const waistband = { .join(paths.waistband.reverse()) } + points.anchor = points.waistFront + paths.front = new Path() .move(points.waistbandFront) .line(points.waistFront) @@ -152,7 +154,11 @@ export const waistband = { .join(paths.waistband) .hide() - paths.seam = new Path().move(points.waistbandFront).line(points.waistFront).join(paths.seamSA) + paths.seam = new Path() + .move(points.waistbandFront) + .line(points.waistFront) + .join(paths.seamSA) + .addClass('fabric') if (sa) { const seamSA = paths.seamSA.offset(sa) diff --git a/packages/core/src/part.mjs b/packages/core/src/part.mjs index 7f404d77afe..6bbc6c81d34 100644 --- a/packages/core/src/part.mjs +++ b/packages/core/src/part.mjs @@ -62,6 +62,7 @@ Part.prototype.asRenderProps = function () { paths, points, snippets, + anchor: points.anchor ?? new Point(0, 0), attributes: this.attributes.asRenderProps(), height: this.height, width: this.width, diff --git a/packages/core/src/stack.mjs b/packages/core/src/stack.mjs index b3e5a2e1838..27346437c72 100644 --- a/packages/core/src/stack.mjs +++ b/packages/core/src/stack.mjs @@ -58,8 +58,19 @@ Stack.prototype.home = function () { for (const part of this.getPartList()) { part.__boundary() + let partAnchor = part.points.anchor + + let bounds = part + + if (partAnchor) { + bounds = { + topLeft: part.topLeft.translate(-partAnchor.x, -partAnchor.y), + bottomRight: part.bottomRight.translate(-partAnchor.x, -partAnchor.y), + } + } + const { topLeft, bottomRight } = utils.getTransformedBounds( - part, + bounds, part.attributes.getAsArray('transform') ) diff --git a/packages/core/src/svg.mjs b/packages/core/src/svg.mjs index 3b5493afc22..cc7377e0175 100644 --- a/packages/core/src/svg.mjs +++ b/packages/core/src/svg.mjs @@ -301,9 +301,15 @@ Svg.prototype.__renderPathText = function (path) { * @return {string} svg - The SVG markup for the Part object */ Svg.prototype.__renderPart = function (part) { + const attributes = part.attributes.clone() + attributes.add( + 'transform', + `translate(${-part.asRenderProps().anchor.x}, ${-part.asRenderProps().anchor.y})` + ) + let svg = this.__openGroup( `${this.idPrefix}stack-${this.activeStack}-part-${part.name}`, - part.attributes + attributes ) for (let key in part.paths) { let path = part.paths[key] diff --git a/packages/react/components/Pattern/part.mjs b/packages/react/components/Pattern/part.mjs index 1d86bbd13ab..c044671e703 100644 --- a/packages/react/components/Pattern/part.mjs +++ b/packages/react/components/Pattern/part.mjs @@ -54,7 +54,11 @@ export const Part = ({ stackName, partName, part, settings, components, strings, const { Group } = components return ( - + )