easyeda 0.0.252 → 0.0.253
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +105 -19
- package/dist/browser/index.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +105 -19
- package/dist/index.js.map +1 -1
- package/dist/main.cjs +107 -21
- package/dist/main.cjs.map +1 -1
- package/package.json +2 -2
package/dist/browser/index.js
CHANGED
|
@@ -9159,7 +9159,13 @@ var getCadPositionZMmFromMetadata = (easyEdaJson) => {
|
|
|
9159
9159
|
const minZ = Math.abs(bounds.min.z) < 1e-6 ? 0 : bounds.min.z;
|
|
9160
9160
|
return minZ - mil10ToMm(svgNodeZ);
|
|
9161
9161
|
};
|
|
9162
|
-
var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
|
|
9162
|
+
var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
|
|
9163
|
+
useModelCdn,
|
|
9164
|
+
shouldRecenter = true,
|
|
9165
|
+
cadPositionXMm,
|
|
9166
|
+
cadPositionYMm,
|
|
9167
|
+
cadPositionZMm
|
|
9168
|
+
} = {}) => {
|
|
9163
9169
|
const resolvedCadPositionZMm = cadPositionZMm ?? getCadPositionZMmFromMetadata(easyEdaJson);
|
|
9164
9170
|
const circuitElements = [];
|
|
9165
9171
|
const source_component = any_source_component.parse({
|
|
@@ -9404,8 +9410,8 @@ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, { useModelCdn, shouldRecente
|
|
|
9404
9410
|
anchor_alignment: "center_of_component_on_board_surface",
|
|
9405
9411
|
model_origin_alignment: "center_of_component_on_board_surface",
|
|
9406
9412
|
model_origin_position: {
|
|
9407
|
-
x: 0,
|
|
9408
|
-
y: 0,
|
|
9413
|
+
x: cadPositionXMm ?? 0,
|
|
9414
|
+
y: cadPositionYMm ?? 0,
|
|
9409
9415
|
z: resolvedCadPositionZMm ?? position2.z
|
|
9410
9416
|
},
|
|
9411
9417
|
position: { x: 0, y: 0, z: 0 },
|
|
@@ -10293,6 +10299,92 @@ function normalizeManufacturerPartNumber(partNumber) {
|
|
|
10293
10299
|
return normalized;
|
|
10294
10300
|
}
|
|
10295
10301
|
|
|
10302
|
+
// lib/websafe/get-easyeda-cad-placement-helpers.ts
|
|
10303
|
+
var milToMm = (mil) => mil * 0.0254;
|
|
10304
|
+
var getBoundsCenter = (bounds) => ({
|
|
10305
|
+
x: (bounds.min.x + bounds.max.x) / 2,
|
|
10306
|
+
y: (bounds.min.y + bounds.max.y) / 2
|
|
10307
|
+
});
|
|
10308
|
+
var getCadSvgNode = (easyEdaJson) => {
|
|
10309
|
+
const svgNode = easyEdaJson.packageDetail.dataStr.shape.find(
|
|
10310
|
+
(shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid
|
|
10311
|
+
);
|
|
10312
|
+
return svgNode?.type === "SVGNODE" ? svgNode : null;
|
|
10313
|
+
};
|
|
10314
|
+
var parseMil10Value = (value) => Number(String(value).replace("mil", "")) / 10;
|
|
10315
|
+
var isZeroishModelCenter = (value) => Math.abs(value) < 1e-6;
|
|
10316
|
+
var isZeroishFootprintDelta = (value) => Math.abs(value) < 1e-3;
|
|
10317
|
+
var getPadCenter = (easyEdaJson) => {
|
|
10318
|
+
const pads = easyEdaJson.packageDetail.dataStr.shape.filter(
|
|
10319
|
+
(shape) => shape.type === "PAD"
|
|
10320
|
+
);
|
|
10321
|
+
if (pads.length === 0) return null;
|
|
10322
|
+
const xs = pads.map((pad) => parseMil10Value(pad.center.x));
|
|
10323
|
+
const ys = pads.map((pad) => parseMil10Value(pad.center.y));
|
|
10324
|
+
return {
|
|
10325
|
+
x: (Math.min(...xs) + Math.max(...xs)) / 2,
|
|
10326
|
+
y: (Math.min(...ys) + Math.max(...ys)) / 2
|
|
10327
|
+
};
|
|
10328
|
+
};
|
|
10329
|
+
var getRotatedOffsetMm = ({
|
|
10330
|
+
bounds,
|
|
10331
|
+
rawOffsetMil,
|
|
10332
|
+
rotationDeg
|
|
10333
|
+
}) => {
|
|
10334
|
+
const center = getBoundsCenter(bounds);
|
|
10335
|
+
const offsetX = milToMm(rawOffsetMil.x);
|
|
10336
|
+
const offsetY = milToMm(rawOffsetMil.y);
|
|
10337
|
+
switch (rotationDeg) {
|
|
10338
|
+
case 0:
|
|
10339
|
+
return { x: center.x + offsetX, y: center.y + offsetY };
|
|
10340
|
+
case 90:
|
|
10341
|
+
return { x: center.x + offsetY, y: center.y + offsetX };
|
|
10342
|
+
case 180:
|
|
10343
|
+
return { x: center.x - offsetX, y: center.y - offsetY };
|
|
10344
|
+
case 270:
|
|
10345
|
+
return { x: center.x - offsetY, y: center.y - offsetX };
|
|
10346
|
+
}
|
|
10347
|
+
};
|
|
10348
|
+
var getCadModelOffsetMm = (easyEdaJson) => {
|
|
10349
|
+
const svgNode = getCadSvgNode(easyEdaJson);
|
|
10350
|
+
const bounds = easyEdaJson._objMetadata?.bounds;
|
|
10351
|
+
if (!svgNode || !bounds) return null;
|
|
10352
|
+
const [originX, originY] = String(svgNode.svgData.attrs?.c_origin ?? "0,0").split(",").map((value) => Number(value.trim()));
|
|
10353
|
+
if (!Number.isFinite(originX) || !Number.isFinite(originY)) return null;
|
|
10354
|
+
const [, , rotationZRaw] = String(
|
|
10355
|
+
svgNode.svgData.attrs?.c_rotation ?? "0,0,0"
|
|
10356
|
+
).split(",").map((value) => Number(value.trim()));
|
|
10357
|
+
const rotationDeg = (rotationZRaw % 360 + 360) % 360;
|
|
10358
|
+
if (![0, 90, 180, 270].includes(rotationDeg)) return null;
|
|
10359
|
+
const modelCenter = getBoundsCenter(bounds);
|
|
10360
|
+
const footprintCenter = easyEdaJson.packageDetail.dataStr.head;
|
|
10361
|
+
const padCenter = getPadCenter(easyEdaJson);
|
|
10362
|
+
const padCenterDelta = padCenter ? {
|
|
10363
|
+
x: padCenter.x - footprintCenter.x,
|
|
10364
|
+
y: padCenter.y - footprintCenter.y
|
|
10365
|
+
} : null;
|
|
10366
|
+
const rawOffsetMil = {
|
|
10367
|
+
x: (originX - footprintCenter.x) * 10,
|
|
10368
|
+
y: (originY - footprintCenter.y) * 10
|
|
10369
|
+
};
|
|
10370
|
+
if (padCenter && padCenterDelta && isZeroishModelCenter(modelCenter.x) && isZeroishModelCenter(modelCenter.y) && isZeroishFootprintDelta(padCenterDelta.x) && isZeroishFootprintDelta(padCenterDelta.y)) {
|
|
10371
|
+
return { x: 0, y: 0 };
|
|
10372
|
+
}
|
|
10373
|
+
return getRotatedOffsetMm({
|
|
10374
|
+
bounds,
|
|
10375
|
+
rawOffsetMil,
|
|
10376
|
+
rotationDeg
|
|
10377
|
+
});
|
|
10378
|
+
};
|
|
10379
|
+
var getCadSvgNodeZOffsetMm = (easyEdaJson) => {
|
|
10380
|
+
const svgNode = getCadSvgNode(easyEdaJson);
|
|
10381
|
+
if (!svgNode) return null;
|
|
10382
|
+
const svgNodeZ = Number(svgNode.svgData.attrs?.z ?? 0);
|
|
10383
|
+
if (!Number.isFinite(svgNodeZ)) return null;
|
|
10384
|
+
return mil10ToMm(svgNodeZ);
|
|
10385
|
+
};
|
|
10386
|
+
var getCadSvgNodeModelUuid = (easyEdaJson) => getCadSvgNode(easyEdaJson)?.svgData.attrs?.uuid ?? null;
|
|
10387
|
+
|
|
10296
10388
|
// lib/websafe/get-model-cdn-url.ts
|
|
10297
10389
|
var getModelObjCdnUrl = ({
|
|
10298
10390
|
easyedaModelUuid,
|
|
@@ -10342,28 +10434,16 @@ var parseObjBounds = (objText) => {
|
|
|
10342
10434
|
max: { x: maxX, y: maxY, z: maxZ }
|
|
10343
10435
|
};
|
|
10344
10436
|
};
|
|
10345
|
-
var getSvgNodeZOffsetMm = (easyEdaJson) => {
|
|
10346
|
-
const svgNode = easyEdaJson.packageDetail.dataStr.shape.find(
|
|
10347
|
-
(shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid
|
|
10348
|
-
);
|
|
10349
|
-
if (!svgNode || svgNode.type !== "SVGNODE") return null;
|
|
10350
|
-
const svgNodeZ = Number(svgNode.svgData.attrs?.z ?? 0);
|
|
10351
|
-
if (!Number.isFinite(svgNodeZ)) return null;
|
|
10352
|
-
return mil10ToMm(svgNodeZ);
|
|
10353
|
-
};
|
|
10354
10437
|
var getPositionZMmFromBounds = (bounds, svgNodeZOffsetMm) => {
|
|
10355
10438
|
const minZ = Math.abs(bounds.min.z) < 1e-6 ? 0 : bounds.min.z;
|
|
10356
10439
|
return minZ - svgNodeZOffsetMm;
|
|
10357
10440
|
};
|
|
10358
10441
|
var getEasyEdaCadModelPlacement = async (easyEdaJson, { fetch: fetch2 = globalThis.fetch } = {}) => {
|
|
10359
|
-
const
|
|
10360
|
-
(shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid
|
|
10361
|
-
);
|
|
10362
|
-
if (!svgNode || svgNode.type !== "SVGNODE") return null;
|
|
10363
|
-
const modelUuid = svgNode.svgData.attrs?.uuid;
|
|
10442
|
+
const modelUuid = getCadSvgNodeModelUuid(easyEdaJson);
|
|
10364
10443
|
const partNumber = easyEdaJson.lcsc.number;
|
|
10365
|
-
const
|
|
10366
|
-
|
|
10444
|
+
const derivedOffsetMm = getCadModelOffsetMm(easyEdaJson);
|
|
10445
|
+
const svgNodeZOffsetMm = getCadSvgNodeZOffsetMm(easyEdaJson);
|
|
10446
|
+
if (!modelUuid || !partNumber || svgNodeZOffsetMm == null || !derivedOffsetMm || !fetch2) {
|
|
10367
10447
|
return null;
|
|
10368
10448
|
}
|
|
10369
10449
|
const modelObjUrl = getModelObjCdnUrl({
|
|
@@ -10378,6 +10458,8 @@ var getEasyEdaCadModelPlacement = async (easyEdaJson, { fetch: fetch2 = globalTh
|
|
|
10378
10458
|
if (metadataBounds) {
|
|
10379
10459
|
return {
|
|
10380
10460
|
modelObjUrl,
|
|
10461
|
+
positionXMm: derivedOffsetMm.x,
|
|
10462
|
+
positionYMm: derivedOffsetMm.y,
|
|
10381
10463
|
modelStepUrl,
|
|
10382
10464
|
bounds: metadataBounds,
|
|
10383
10465
|
positionZMm: getPositionZMmFromBounds(metadataBounds, svgNodeZOffsetMm)
|
|
@@ -10395,6 +10477,8 @@ var getEasyEdaCadModelPlacement = async (easyEdaJson, { fetch: fetch2 = globalTh
|
|
|
10395
10477
|
if (!bounds) return null;
|
|
10396
10478
|
return {
|
|
10397
10479
|
modelObjUrl,
|
|
10480
|
+
positionXMm: derivedOffsetMm.x,
|
|
10481
|
+
positionYMm: derivedOffsetMm.y,
|
|
10398
10482
|
modelStepUrl,
|
|
10399
10483
|
bounds,
|
|
10400
10484
|
// Align the EasyEDA SVG-node Z against the model's minimum Z.
|
|
@@ -10557,6 +10641,8 @@ var convertBetterEasyToTsx = async ({
|
|
|
10557
10641
|
const circuitJson = convertEasyEdaJsonToCircuitJson(betterEasy, {
|
|
10558
10642
|
useModelCdn: true,
|
|
10559
10643
|
shouldRecenter: true,
|
|
10644
|
+
cadPositionXMm: cadPlacement?.positionXMm,
|
|
10645
|
+
cadPositionYMm: cadPlacement?.positionYMm,
|
|
10560
10646
|
cadPositionZMm: cadPlacement?.positionZMm
|
|
10561
10647
|
});
|
|
10562
10648
|
const [cadComponent] = su(circuitJson).cad_component.list();
|